commit 55ced64e37063a3a6fc33e0fd062d3eefca263eb Author: Frank Date: Thu Dec 30 13:32:32 2021 +0100 Create Bedlampje.ino diff --git a/Bedlampje.ino b/Bedlampje.ino new file mode 100644 index 0000000..26f5b39 --- /dev/null +++ b/Bedlampje.ino @@ -0,0 +1,250 @@ +//Bedlampje Maud + +// Enable debug prints to serial monitor +//#define MY_DEBUG + +// Enable and select radio type attached +#define MY_RADIO_NRF24 +//#define MY_RADIO_RFM69 + +// Enable repeater functionality for this node +//#define MY_REPEATER_FEATURE + +// Define a static node address, remove if you want auto address assignment +#define MY_NODE_ID 19 + +// Set channel to 13 +//#define MY_RF24_CHANNEL 13 + +#include +#include +#include +#include + +#define SLEEP_MODE false // Watt-value can only be reported when sleep mode is false. + +//DHT22 +#define CHILD_ID_HUM 0 +#define CHILD_ID_TEMP 1 +#define HUMIDITY_SENSOR_DIGITAL_PIN 8 + +//Drukknoppen +#define s1_PIN 4 // I/O pin switch 1 + +//Uitgangen +#define l1_PIN 6 // I/O pin lamp Bedlampje + +#define l1_CHILD_ID 11 // Id Bedlampje +#define l1_timed_CHILD_ID 19 // ID timed Bedlampje + + +DHT dht; +float lastTemp; +float lastHum; +boolean metric = true; + +unsigned long currentTime; +unsigned long SEND_FREQUENCY = 300000; +//unsigned long SEND_FREQUENCY = 30000; +unsigned long lastSend; + +//unsigned long l1_timed_ON = 120000; +unsigned long l1_timed_ON = 2700000; //45 minuten ON +//unsigned long l1_timed_ON = 180000; //3 minuten ON +unsigned long l1_start_ON; + +//Declare switch +Bounce s1_debouncer = Bounce(); +int s1_oldValue=HIGH; +int s1_value; + +MyMessage msgHum(CHILD_ID_HUM, V_HUM); +MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); +MyMessage l1_msg(l1_CHILD_ID,V_LIGHT); +MyMessage timed_l1_msg(l1_timed_CHILD_ID, V_LIGHT); +//MyMessage bed_msg(kast_CHILD_ID,V_LIGHT); + +bool lamp1 = false; +bool l1_timed = true; + +unsigned long s_delta; + +bool val_init = false; + +void setup() +{ + + dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); + + // Setup switch 1 + pinMode(s1_PIN,INPUT); + // Activate internal pull-up + digitalWrite(s1_PIN,HIGH); + + // After setting up the button, setup debouncer + s1_debouncer.attach(s1_PIN); + s1_debouncer.interval(30); + + // Setup lamp 1 + pinMode(l1_PIN,OUTPUT); + digitalWrite(l1_PIN,LOW); + + metric = getControllerConfig().isMetric; +// metric = getConfig().isMetric; + lastSend = 0; +} + +void presentation() +{ + // Send the sketch version information to the gateway and Controller + sendSketchInfo("Bedlampje Maud", "1.1"); + + present(CHILD_ID_HUM, S_HUM); + present(CHILD_ID_TEMP, S_TEMP); + + present(l1_CHILD_ID, S_LIGHT); + present(l1_timed_CHILD_ID, S_LIGHT); +} + + +void loop() +{ + unsigned long now = millis(); + //unsigned long currentTime = millis(); + + currentTime = millis(); + + if(!val_init) + { + wait(1000); + request(l1_CHILD_ID, V_LIGHT); + wait(1000); + request(l1_timed_CHILD_ID, V_LIGHT); + val_init = true; + } + + //Send data only every 5 minuts + bool sendTime = (currentTime - lastSend) > SEND_FREQUENCY; + if ((currentTime - lastSend) > SEND_FREQUENCY) + { + lastSend=currentTime; + float temperature = dht.getTemperature(); + if (isnan(temperature)) + { + Serial.println("Failed reading temperature from DHT"); + } + else if (temperature != lastTemp) + { + lastTemp = temperature; + if (!metric) + { + temperature = dht.toFahrenheit(temperature); + } + send(msgTemp.set(temperature, 1)); + Serial.print("T: "); + Serial.println(temperature); + } + + float humidity = dht.getHumidity(); + if (isnan(humidity)) + { + Serial.println("Failed reading humidity from DHT"); + } + else if (humidity != lastHum) + { + lastHum = humidity; + send(msgHum.set(humidity, 1)); + Serial.print("H: "); + Serial.println(humidity); + } + } + + //Switch 1 + s1_debouncer.update(); + s1_value = s1_debouncer.read(); + //If switch status changed + if (s1_value != s1_oldValue) + { + if (lamp1==false) + { + //Switch lamp on + digitalWrite(l1_PIN,1); + lamp1 = true; + l1_start_ON = millis(); + send(l1_msg.set(1)); + Serial.println("Switch --> Bedlampje AAN !!"); + } + else + { + //Switch lamp off + digitalWrite(l1_PIN,0); + lamp1 = false; + send(l1_msg.set(0)); + Serial.println("Switch --> Bedlampje UIT !!"); + } + s1_oldValue = s1_value; + } + + //When clock has made a complete round ;-) + if (l1_start_ON > currentTime) + { + l1_start_ON = currentTime; + } + + //If lamp1 = timed + if ((lamp1==true) && (l1_timed==true)) + { + if ((currentTime - l1_start_ON) > l1_timed_ON) + { + //Switch lamp off + digitalWrite(l1_PIN,0); + lamp1 = false; + send(l1_msg.set(0)); + Serial.println("Timer --> Bedlampje UIT Timer !!"); + } + } + } + +//Incomming message from Domoticz +//void incomingMessage(const MyMessage &message) +void receive(const MyMessage &message) +{ + //Message of type V_LIGHT ? + if (message.type==V_LIGHT) + { + //Bedlampje + if (message.sensor==l1_CHILD_ID) + { + + if(message.getBool()==1) + { + Serial.println("Domoticz --> Bedlampje AAN !!"); + digitalWrite(l1_PIN,HIGH); + lamp1 = true; + l1_start_ON = millis(); + } + else + { + Serial.println("Domoticz --> Bedlampje UIT !!"); + digitalWrite(l1_PIN,LOW); + lamp1 = false; + } + } + + if (message.sensor==l1_timed_CHILD_ID) + { + if(message.getBool()==1) + { + Serial.println("Domoticz --> Timer enabled !!"); + l1_timed = true; + } + else + { + Serial.println("Domoticz --> Timer disabled !!"); + l1_timed = false; + } + } + } +} + +