390 lines
8.2 KiB
C++
390 lines
8.2 KiB
C++
//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 <SPI.h>
|
|
#include <MySensors.h>
|
|
#include <Bounce2.h>
|
|
#include <DHT.h>
|
|
|
|
#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));
|
|
}
|
|
|
|
}
|
|
|
|
|