//Bedverlichting // 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 50 #define BED_NODE_ID 51 // 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 #define t1_PIN A0 // output pin to toggle switch #define s2_PIN 5 // I/O pin switch 2 #define t2_PIN A1 // Output pin to toggle switch //Uitgangen #define l1_PIN 6 // I/O pin lamp kastverlichting #define l2_PIN 7 // I/O pin lamp schemerlamp #define l1_CHILD_ID 11 // Id lamp kastverlichting #define l2_CHILD_ID 12 // Id lamp schemerlamp #define kast_CHILD_ID 13 // ID kast verlichting #define l2_timed_CHILD_ID 19 // ID timed lamp schemerlamp 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 l2_timed_ON = 120000; unsigned long l2_start_ON; //Declare switch //Bounce s1_debouncer = Bounce(); //int s1_oldValue=HIGH; //Bounce s2_debouncer = Bounce(); //int s2_oldValue=HIGH; //Bounce s3_debouncer = Bounce(); //int s3_oldValue=HIGH; int s1_value; int s2_value; int s3_value; MyMessage msgHum(CHILD_ID_HUM, V_HUM); MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); MyMessage l1_msg(l1_CHILD_ID,V_LIGHT); MyMessage l2_msg(l2_CHILD_ID,V_LIGHT); MyMessage kast_msg(kast_CHILD_ID,V_LIGHT); MyMessage timed_l2_msg(l2_timed_CHILD_ID, V_LIGHT); MyMessage bed_msg(kast_CHILD_ID,V_LIGHT); //MyMessage BUZZER_msg(BUZZER_CHILD_ID, V_LIGHT); bool lamp1 = false; bool lamp2 = false; bool kast = false; bool l2_timed = false; unsigned long s1_up; unsigned long s1_down; unsigned long s1_delta; //unsigned long s2_up; //unsigned long s2_down; //unsigned long s2_delta; //unsigned long s3_up; //unsigned long s3_down; //unsigned long s3_delta; unsigned long s_delta; unsigned long s_all = 1000; unsigned long s_kast = 3000; 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); digitalWrite(t1_PIN, 0); pinMode(t1_PIN, OUTPUT); // Setup switch 2 pinMode(s2_PIN,INPUT); // Activate internal pull-up digitalWrite(s2_PIN,HIGH); digitalWrite(t2_PIN, 0); pinMode(t2_PIN, OUTPUT); // After setting up the button, setup debouncer // s1_debouncer.attach(s1_PIN); // s1_debouncer.interval(5); // Setup lamp 1 pinMode(l1_PIN,OUTPUT); digitalWrite(l1_PIN,LOW); // Setup lamp 2 pinMode(l2_PIN,OUTPUT); digitalWrite(l2_PIN,LOW); // Setup the buzzer //pinMode(BUZZER_PIN,OUTPUT); metric = getControllerConfig().isMetric; lastSend = 0; } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Slaapkamer_kastverlichting", "2.0"); present(CHILD_ID_HUM, S_HUM); present(CHILD_ID_TEMP, S_TEMP); present(l1_CHILD_ID, S_LIGHT); present(l2_CHILD_ID, S_LIGHT); present(kast_CHILD_ID, S_LIGHT); present(l2_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(l2_CHILD_ID, V_LIGHT); wait(1000); request(kast_CHILD_ID, V_LIGHT); wait(1000); request(l2_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); } } int val_s1 =digitalRead(s1_PIN); if (val_s1==1) { if (lamp1==false) { lamp(1,true); } } else { if (lamp1==true) { lamp(1,false); } } int val_s2 =digitalRead(s2_PIN); if (val_s2==1) { if (lamp2==false) { lamp(2,true); l2_start_ON = millis(); } } else { if (lamp2==true) { lamp(2,false); } } //If lamp2 = timed if ((lamp2==true) && (l2_timed==true)) { if ((currentTime - l2_start_ON) > l2_timed_ON) { digitalWrite(t2_PIN, 1); wait(30); digitalWrite(t2_PIN, 0); wait(30); } } } //Incomming message from Domoticz //void incomingMessage(const MyMessage &message) void receive(const MyMessage &message) { //Message of type V_LIGHT ? if (message.type==V_LIGHT) { //Kastverlichting if (message.sensor==l1_CHILD_ID) { digitalWrite(t1_PIN, 1); wait(30); digitalWrite(t1_PIN, 0); wait(30); if(message.getBool()==1) { Serial.println("Domoticz --> Kastverlichting AAN !!"); // digitalWrite(l1_PIN,HIGH); // lamp1 = true; //Send status to bedverlichting ivm drukknop } else { Serial.println("Domoticz --> Kastverlichting UIT !!"); // digitalWrite(l1_PIN,LOW); // lamp1 = false; //Send status to bedverlichting ivm drukknop } } //Schemerlamp if (message.sensor==l2_CHILD_ID) { digitalWrite(t2_PIN, 1); wait(30); digitalWrite(t2_PIN, 0); wait(30); if(message.getBool()==1) { Serial.println("Domoticz --> Schemerlamp AAN !!"); // digitalWrite(l2_PIN,HIGH); // lamp2 = true; } else { Serial.println("Domoticz --> Schemerlamp UIT !!"); // digitalWrite(l2_PIN,LOW); // lamp2 = false; } } if (message.sensor==l2_timed_CHILD_ID) { if(message.getBool()==1) { l2_timed = true; } else { l2_timed = false; } } //Kast verlichting if (message.sensor==kast_CHILD_ID) { digitalWrite(t1_PIN, 1); wait(60); digitalWrite(t1_PIN, 0); wait(60); if(message.getInt()==1) { Serial.println("Node bed --> Kast verlichting AAN !!"); // lamp(1,true); } else { Serial.println("Node bed --> Kast verlichting UIT !!"); // lamp(1,false); } } } } //Switch lampen void lamp(int lamp_id, bool stat) { Serial.print("Lamp : "); Serial.print(lamp_id); Serial.print(" --> "); Serial.println(stat==false ? "UIT" : "AAN"); //Kast verlichting if(lamp_id == 1) { kast = stat; digitalWrite(l1_PIN,stat==HIGH ? 1 : 0); send(kast_msg.set(stat==HIGH ? 1 : 0)); send(bed_msg.setDestination(BED_NODE_ID).set(stat==HIGH ? 1 : 0)); lamp1 = stat; } //Schemerlamp if(lamp_id == 2) { digitalWrite(l2_PIN,stat==HIGH ? 1 : 0); lamp2 = stat; send(l2_msg.set(stat==HIGH ? 1 : 0)); } }