Allows to run this sketch on an AVR 328 with all sensors enabled. Changes: - use F() macro - use msg_generic instead of individual variables
1612 lines
37 KiB
Arduino
1612 lines
37 KiB
Arduino
/*
|
|
MockMySensors
|
|
|
|
This skecth is intended to crate fake sensors which register and respond to the controller
|
|
* ***
|
|
Barduino 2015, GizMoCuz 2015
|
|
*/
|
|
|
|
// Enable debug prints to serial monitor
|
|
#define MY_DEBUG
|
|
|
|
// Enable and select radio type attached
|
|
#define MY_RADIO_NRF24
|
|
//#define MY_RADIO_RFM69
|
|
|
|
#define MY_NODE_ID 254
|
|
|
|
#include <MySensors.h>
|
|
|
|
#define RADIO_ERROR_LED_PIN 4 // Error led pin
|
|
#define RADIO_RX_LED_PIN 6 // Receive led pin
|
|
#define RADIO_TX_LED_PIN 5 // the PCB, on board LED
|
|
|
|
// Wait times
|
|
#define LONG_WAIT 500
|
|
#define SHORT_WAIT 50
|
|
|
|
#define SKETCH_NAME "MockMySensors "
|
|
#define SKETCH_VERSION "v0.6"
|
|
|
|
// Define Sensors ids
|
|
/* S_DOOR, S_MOTION, S_SMOKE, S_LIGHT, S_DIMMER, S_COVER, S_TEMP, S_HUM, S_BARO, S_WIND,
|
|
S_RAIN, S_UV, S_WEIGHT, S_POWER, S_HEATER, S_DISTANCE, S_LIGHT_LEVEL, S_ARDUINO_NODE,
|
|
S_ARDUINO_REPEATER_NODE, S_LOCK, S_IR, S_WATER, S_AIR_QUALITY, S_CUSTOM, S_DUST,
|
|
S_SCENE_CONTROLLER
|
|
*/
|
|
|
|
////#define ID_S_ARDUINO_NODE //auto defined in initialization
|
|
////#define ID_S_ARDUINO_REPEATER_NODE //auto defined in initialization
|
|
|
|
|
|
// Some of these ID's have not been updated for v1.5. Uncommenting too many of them
|
|
// will make the sketch too large for a pro mini's memory so it's probably best to try
|
|
// one at a time.
|
|
|
|
#define ID_S_ARMED 0 // dummy to controll armed stated for several sensors
|
|
#define ID_S_DOOR 1
|
|
#define ID_S_MOTION 2
|
|
#define ID_S_SMOKE 3
|
|
#define ID_S_LIGHT 4
|
|
#define ID_S_DIMMER 5
|
|
#define ID_S_COVER 6
|
|
#define ID_S_TEMP 7
|
|
#define ID_S_HUM 8
|
|
#define ID_S_BARO 9
|
|
#define ID_S_WIND 10
|
|
#define ID_S_RAIN 11
|
|
#define ID_S_UV 12
|
|
#define ID_S_WEIGHT 13
|
|
#define ID_S_POWER 14
|
|
#define ID_S_HEATER 15
|
|
#define ID_S_DISTANCE 16
|
|
#define ID_S_LIGHT_LEVEL 17
|
|
#define ID_S_LOCK 18
|
|
#define ID_S_IR 19
|
|
#define ID_S_WATER 20
|
|
#define ID_S_AIR_QUALITY 21
|
|
#define ID_S_DUST 22
|
|
#define ID_S_SCENE_CONTROLLER 23
|
|
//// Lib 1.5 sensors
|
|
#define ID_S_RGB_LIGHT 24
|
|
#define ID_S_RGBW_LIGHT 25
|
|
#define ID_S_COLOR_SENSOR 26
|
|
#define ID_S_HVAC 27
|
|
#define ID_S_MULTIMETER 28
|
|
#define ID_S_SPRINKLER 29
|
|
#define ID_S_WATER_LEAK 30
|
|
#define ID_S_SOUND 31
|
|
#define ID_S_VIBRATION 32
|
|
#define ID_S_MOISTURE 33
|
|
//
|
|
#define ID_S_CUSTOM 99
|
|
|
|
|
|
|
|
// Global Vars
|
|
unsigned long SLEEP_TIME = 900000; // Sleep time between reads (in milliseconds)
|
|
bool metric = true;
|
|
long randNumber;
|
|
|
|
|
|
//Instanciate Messages objects
|
|
|
|
#ifdef ID_S_ARMED
|
|
bool isArmed;
|
|
#endif
|
|
|
|
MyMessage msg_generic(0, V_LIGHT);
|
|
|
|
#ifdef ID_S_DOOR // V_TRIPPED, V_ARMED
|
|
//MyMessage msg_S_DOOR_T(ID_S_DOOR,V_TRIPPED);
|
|
//MyMessage msg_S_DOOR_A(ID_S_DOOR,V_ARMED);
|
|
#endif
|
|
|
|
#ifdef ID_S_MOTION // V_TRIPPED, V_ARMED
|
|
//MyMessage msg_S_MOTION_A(ID_S_MOTION,V_ARMED);
|
|
//MyMessage msg_S_MOTION_T(ID_S_MOTION,V_TRIPPED);
|
|
#endif
|
|
|
|
#ifdef ID_S_SMOKE // V_TRIPPED, V_ARMED
|
|
//MyMessage msg_S_SMOKE_T(ID_S_SMOKE,V_TRIPPED);
|
|
//MyMessage msg_S_SMOKE_A(ID_S_SMOKE,V_ARMED);
|
|
#endif
|
|
|
|
#ifdef ID_S_LIGHT
|
|
//MyMessage msg_S_LIGHT(ID_S_LIGHT, V_LIGHT);
|
|
bool isLightOn = 0;
|
|
#endif
|
|
|
|
#ifdef ID_S_DIMMER
|
|
//MyMessage msg_S_DIMMER(ID_S_DIMMER, V_DIMMER);
|
|
int dimmerVal = 100;
|
|
#endif
|
|
|
|
#ifdef ID_S_COVER
|
|
//MyMessage msg_S_COVER_U(ID_S_COVER, V_UP);
|
|
//MyMessage msg_S_COVER_D(ID_S_COVER, V_DOWN);
|
|
//MyMessage msg_S_COVER_S(ID_S_COVER, V_STOP);
|
|
//MyMessage msg_S_COVER_V(ID_S_COVER, V_VAR1);
|
|
int coverState = 0; //0=Stop; 1=up; -1=down
|
|
#endif
|
|
|
|
#ifdef ID_S_TEMP
|
|
//MyMessage msg_S_TEMP(ID_S_TEMP, V_TEMP);
|
|
#endif
|
|
|
|
#ifdef ID_S_HUM
|
|
//MyMessage msg_S_HUM(ID_S_HUM, V_HUM);
|
|
#endif
|
|
|
|
#ifdef ID_S_BARO
|
|
//MyMessage msg_S_BARO_P(ID_S_BARO, V_PRESSURE);
|
|
//MyMessage msg_S_BARO_F(ID_S_BARO, V_FORECAST);
|
|
#endif
|
|
|
|
#ifdef ID_S_WIND
|
|
//MyMessage msg_S_WIND_S(ID_S_WIND, V_WIND);
|
|
//MyMessage msg_S_WIND_G(ID_S_WIND, V_GUST);
|
|
//MyMessage msg_S_WIND_D(ID_S_WIND, V_DIRECTION);
|
|
#endif
|
|
|
|
#ifdef ID_S_RAIN
|
|
//MyMessage msg_S_RAIN_A(ID_S_RAIN, V_RAIN);
|
|
//MyMessage msg_S_RAIN_R(ID_S_RAIN, V_RAINRATE);
|
|
#endif
|
|
|
|
#ifdef ID_S_UV
|
|
//MyMessage msg_S_UV(ID_S_UV, V_UV);
|
|
#endif
|
|
|
|
#ifdef ID_S_WEIGHT
|
|
//MyMessage msg_S_WEIGHT(ID_S_WEIGHT, V_WEIGHT);
|
|
#endif
|
|
|
|
#ifdef ID_S_POWER
|
|
//MyMessage msg_S_POWER_W(ID_S_POWER, V_WATT);
|
|
//MyMessage msg_S_POWER_K(ID_S_POWER, V_KWH);
|
|
#endif
|
|
|
|
|
|
#ifdef ID_S_HEATER
|
|
|
|
//////// REVIEW IMPLEMENTATION ////////////
|
|
/*
|
|
MyMessage msg_S_HEATER_SET_POINT(ID_S_HEATER,
|
|
V_HVAC_SETPOINT_HEAT); // HVAC/Heater setpoint (Integer between 0-100). S_HEATER, S_HVAC
|
|
MyMessage msg_S_HEATER_FLOW_STATE(ID_S_HEATER,
|
|
V_HVAC_FLOW_STATE); // Mode of header. One of "Off", "HeatOn", "CoolOn", or "AutoChangeOver" // S_HVAC, S_HEATER
|
|
*/
|
|
|
|
//MyMessage msg_S_HEATER_STATUS(ID_S_HEATER,V_STATUS);
|
|
//MyMessage msg_S_HEATER_TEMP(ID_S_HEATER,V_TEMP);
|
|
|
|
float heater_setpoint = 21.5;
|
|
String heater_flow_state = "Off";
|
|
|
|
// float heater_temp=23.5;
|
|
// bool heater_status=false;
|
|
|
|
|
|
// V_TEMP // Temperature
|
|
// V_STATUS // Binary status. 0=off 1=on
|
|
// V_HVAC_FLOW_STATE // Mode of header. One of "Off", "HeatOn", "CoolOn", or "AutoChangeOver"
|
|
// V_HVAC_SPEED // HVAC/Heater fan speed ("Min", "Normal", "Max", "Auto")
|
|
// V_HVAC_SETPOINT_HEAT // HVAC/Heater setpoint
|
|
#endif
|
|
|
|
#ifdef ID_S_DISTANCE
|
|
//MyMessage msg_S_DISTANCE(ID_S_DISTANCE, V_DISTANCE);
|
|
#endif
|
|
|
|
#ifdef ID_S_LIGHT_LEVEL
|
|
//MyMessage msg_S_LIGHT_LEVEL(ID_S_LIGHT_LEVEL, V_LIGHT_LEVEL);
|
|
#endif
|
|
|
|
#ifdef ID_S_LOCK
|
|
//MyMessage msg_S_LOCK(ID_S_LOCK, V_LOCK_STATUS);
|
|
bool isLocked = 0;
|
|
#endif
|
|
|
|
#ifdef ID_S_IR
|
|
//MyMessage msg_S_IR_S(ID_S_IR, V_IR_SEND);
|
|
//MyMessage msg_S_IR_R(ID_S_IR, V_IR_RECEIVE);
|
|
long irVal = 0;
|
|
#endif
|
|
|
|
#ifdef ID_S_WATER
|
|
//MyMessage msg_S_WATER_F(ID_S_WATER, V_FLOW);
|
|
//MyMessage msg_S_WATER_V(ID_S_WATER, V_VOLUME);
|
|
#endif
|
|
|
|
#ifdef ID_S_AIR_QUALITY
|
|
//MyMessage msg_S_AIR_QUALITY(ID_S_AIR_QUALITY, V_LEVEL);
|
|
#endif
|
|
|
|
#ifdef ID_S_DUST
|
|
//MyMessage msg_S_DUST(ID_S_DUST, V_LEVEL);
|
|
#endif
|
|
|
|
#ifdef ID_S_SCENE_CONTROLLER
|
|
//MyMessage msg_S_SCENE_CONTROLLER_ON(ID_S_SCENE_CONTROLLER, V_SCENE_ON);
|
|
//MyMessage msg_S_SCENE_CONTROLLER_OF(ID_S_SCENE_CONTROLLER, V_SCENE_OFF);
|
|
// not sure if scene controller sends int or chars
|
|
// betting on ints as Touch Display Scen by Hek // compiler warnings
|
|
char *scenes[] = {
|
|
(char *)"Good Morning",
|
|
(char *)"Clean Up!",
|
|
(char *)"All Lights Off",
|
|
(char *)"Music On/Off"
|
|
};
|
|
|
|
int sceneVal = 0;
|
|
int sceneValPrevious = 0;
|
|
|
|
#endif
|
|
|
|
#ifdef ID_S_RGB_LIGHT
|
|
//MyMessage msg_S_RGB_LIGHT_V_RGB(ID_S_RGB_LIGHT, V_RGB);
|
|
//MyMessage msg_S_RGB_LIGHT_V_WATT(ID_S_RGB_LIGHT, V_WATT);
|
|
String rgbState = "000000";
|
|
//RGB light V_RGB, V_WATT
|
|
//RGB value transmitted as ASCII hex string (I.e "ff0000" for red)
|
|
#endif
|
|
|
|
#ifdef ID_S_RGBW_LIGHT
|
|
//MyMessage msg_S_RGBW_LIGHT_V_RGBW(ID_S_RGBW_LIGHT, V_RGBW);
|
|
//MyMessage msg_S_RGBW_LIGHT_V_WATT(ID_S_RGBW_LIGHT, V_WATT);
|
|
String rgbwState = "00000000";
|
|
//RGBW light (with separate white component) V_RGBW, V_WATT
|
|
//RGBW value transmitted as ASCII hex string (I.e "ff0000ff" for red + full white) S_RGBW_LIGHT
|
|
#endif
|
|
|
|
#ifdef ID_S_COLOR_SENSOR
|
|
//MyMessage msg_S_COLOR_SENSOR_V_RGB(ID_S_COLOR_SENSOR, V_RGB);
|
|
//Color sensor V_RGB
|
|
//RGB value transmitted as ASCII hex string (I.e "ff0000" for red) S_RGB_LIGHT, S_COLOR_SENSOR
|
|
#endif
|
|
|
|
#ifdef ID_S_HVAC
|
|
//MyMessage msg_S_HVAC_V_HVAC_SETPOINT_HEAT(ID_S_HVAC, V_HVAC_SETPOINT_HEAT);
|
|
//MyMessage msg_S_HVAC_V_HVAC_SETPOINT_COOL(ID_S_HVAC, V_HVAC_SETPOINT_COOL);
|
|
//MyMessage msg_S_HVAC_V_HVAC_FLOW_STATET(ID_S_HVAC, V_HVAC_FLOW_STATE);
|
|
//MyMessage msg_S_HVAC_V_HVAC_FLOW_MODE(ID_S_HVAC, V_HVAC_FLOW_MODE);
|
|
//MyMessage msg_S_HVAC_V_HVAC_SPEED(ID_S_HVAC, V_HVAC_SPEED);
|
|
|
|
float hvac_SetPointHeat = 16.5;
|
|
float hvac_SetPointCool = 25.5;
|
|
String hvac_FlowState = "AutoChangeOver";
|
|
String hvac_FlowMode = "Auto";
|
|
String hvac_Speed = "Normal";
|
|
|
|
//Thermostat/HVAC device
|
|
//V_HVAC_SETPOINT_HEAT, // HVAC/Heater setpoint
|
|
//V_HVAC_SETPOINT_COOL, // HVAC cold setpoint
|
|
//V_HVAC_FLOW_STATE, // Mode of header. One of "Off", "HeatOn", "CoolOn", or "AutoChangeOver"
|
|
//V_HVAC_FLOW_MODE, // Flow mode for HVAC ("Auto", "ContinuousOn", "PeriodicOn")
|
|
//V_HVAC_SPEED // HVAC/Heater fan speed ("Min", "Normal", "Max", "Auto")
|
|
|
|
// NOT IMPLEMENTED YET
|
|
//V_TEMP // Temperature
|
|
//V_STATUS // Binary status. 0=off 1=on
|
|
#endif
|
|
|
|
#ifdef ID_S_MULTIMETER
|
|
//MyMessage msg_S_MULTIMETER_V_IMPEDANCE(ID_S_MULTIMETER, V_IMPEDANCE);
|
|
//MyMessage msg_S_MULTIMETER_V_VOLTAGE(ID_S_MULTIMETER, V_VOLTAGE);
|
|
//MyMessage msg_S_MULTIMETER_V_CURRENT(ID_S_MULTIMETER, V_CURRENT);
|
|
|
|
// Multimeter device V_VOLTAGE, V_CURRENT, V_IMPEDANCE
|
|
// V_IMPEDANCE 14 Impedance value
|
|
// V_VOLTAGE 38 Voltage level
|
|
// V_CURRENT 39 Current level
|
|
#endif
|
|
|
|
#ifdef ID_S_SPRINKLER
|
|
// S_SPRINKLER 31 Sprinkler device V_STATUS (turn on/off), V_TRIPPED (if fire detecting device)
|
|
// V_STATUS 2 Binary status. 0=off 1=on
|
|
// V_ARMED 15 Armed status of a security sensor. 1=Armed, 0=Bypassed
|
|
// V_TRIPPED 16 Tripped status of a security sensor. 1=Tripped, 0=Untripped
|
|
#endif
|
|
|
|
#ifdef ID_S_WATER_LEAK
|
|
#endif
|
|
#ifdef ID_S_SOUND
|
|
#endif
|
|
#ifdef ID_S_VIBRATION
|
|
#endif
|
|
#ifdef ID_S_MOISTURE
|
|
#endif
|
|
|
|
#ifdef ID_S_MOISTURE
|
|
//MyMessage msg_S_MOISTURE(ID_S_MOISTURE, V_LEVEL);
|
|
#endif
|
|
|
|
#ifdef ID_S_CUSTOM
|
|
//MyMessage msg_S_CUSTOM_1(ID_S_CUSTOM, V_VAR1);
|
|
//MyMessage msg_S_CUSTOM_2(ID_S_CUSTOM, V_VAR2);
|
|
//MyMessage msg_S_CUSTOM_3(ID_S_CUSTOM, V_VAR3);
|
|
//MyMessage msg_S_CUSTOM_4(ID_S_CUSTOM, V_VAR4);
|
|
//MyMessage msg_S_CUSTOM_5(ID_S_CUSTOM, V_VAR5);
|
|
#endif
|
|
|
|
|
|
|
|
|
|
void setup()
|
|
{
|
|
// Random SEED
|
|
randomSeed(analogRead(0));
|
|
|
|
wait(LONG_WAIT);
|
|
Serial.println(F("GW Started"));
|
|
}
|
|
|
|
void presentation()
|
|
{
|
|
// Send the Sketch Version Information to the Gateway
|
|
Serial.print("Send Sketch Info: ");
|
|
sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
|
|
Serial.print(SKETCH_NAME);
|
|
Serial.println(SKETCH_VERSION);
|
|
wait(LONG_WAIT);
|
|
|
|
// Get controller configuration
|
|
Serial.print(F("Get Config: "));
|
|
metric = getControllerConfig().isMetric;
|
|
Serial.println(metric ? F("Metric") : F("Imperial"));
|
|
wait(LONG_WAIT);
|
|
|
|
// Init Armed
|
|
#ifdef ID_S_ARMED
|
|
isArmed = true;
|
|
#endif
|
|
|
|
// Register all sensors to gw (they will be created as child devices)
|
|
Serial.println(F("Presenting Nodes"));
|
|
Serial.println(F("________________"));
|
|
|
|
#ifdef ID_S_DOOR
|
|
Serial.println(F(" S_DOOR"));
|
|
present(ID_S_DOOR, S_DOOR, "Outside Door");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_MOTION
|
|
Serial.println(F(" S_MOTION"));
|
|
present(ID_S_MOTION, S_MOTION, "Outside Motion");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_SMOKE
|
|
Serial.println(F(" S_SMOKE"));
|
|
present(ID_S_SMOKE, S_SMOKE, "Kitchen Smoke");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_LIGHT
|
|
Serial.println(F(" S_LIGHT"));
|
|
present(ID_S_LIGHT, S_LIGHT, "Hall Light");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_DIMMER
|
|
Serial.println(F(" S_DIMMER"));
|
|
present(ID_S_DIMMER, S_DIMMER, "Living room dimmer");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_COVER
|
|
Serial.println(F(" S_COVER"));
|
|
present(ID_S_COVER, S_COVER, "Window cover");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_TEMP
|
|
Serial.println(F(" S_TEMP"));
|
|
present(ID_S_TEMP, S_TEMP, "House Temperarue");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_HUM
|
|
Serial.println(F(" S_HUM"));
|
|
present(ID_S_HUM, S_HUM, "Current Humidity");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_BARO
|
|
Serial.println(F(" S_BARO"));
|
|
present(ID_S_BARO, S_BARO, " Air pressure");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_WIND
|
|
Serial.println(F(" S_WIND"));
|
|
present(ID_S_WIND, S_WIND, "Wind Station");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_RAIN
|
|
Serial.println(F(" S_RAIN"));
|
|
present(ID_S_RAIN, S_RAIN, "Rain Station");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_UV
|
|
Serial.println(F(" S_UV"));
|
|
present(ID_S_UV, S_UV, "Ultra Violet");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_WEIGHT
|
|
Serial.println(F(" S_WEIGHT"));
|
|
present(ID_S_WEIGHT, S_WEIGHT, "Outdoor Scale");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_POWER
|
|
Serial.println(F(" S_POWER"));
|
|
present(ID_S_POWER, S_POWER, "Power Metric");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_HEATER
|
|
Serial.println(F(" S_HEATER"));
|
|
present(ID_S_HEATER, S_HEATER, "Garage Heater");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_DISTANCE
|
|
Serial.println(F(" S_DISTANCE"));
|
|
present(ID_S_DISTANCE, S_DISTANCE, "Distance Measure");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_LIGHT_LEVEL
|
|
Serial.println(F(" S_LIGHT_LEVEL"));
|
|
present(ID_S_LIGHT_LEVEL, S_LIGHT_LEVEL, "Outside Light Level");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_LOCK
|
|
Serial.println(F(" S_LOCK"));
|
|
present(ID_S_LOCK, S_LOCK, "Front Door Lock");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_IR
|
|
Serial.println(F(" S_IR"));
|
|
present(ID_S_IR, S_IR, "Univeral Command");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_WATER
|
|
Serial.println(F(" S_WATER"));
|
|
present(ID_S_WATER, S_WATER, "Water Level");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_AIR_QUALITY
|
|
Serial.println(F(" S_AIR_QUALITY"));
|
|
present(ID_S_AIR_QUALITY, S_AIR_QUALITY, "Air Station");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_DUST
|
|
Serial.println(F(" S_DUST"));
|
|
present(ID_S_DUST, S_DUST, "Dust Level");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_SCENE_CONTROLLER
|
|
Serial.println(F(" S_SCENE_CONTROLLER"));
|
|
present(ID_S_SCENE_CONTROLLER, S_SCENE_CONTROLLER, "Scene Controller");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_RGB_LIGHT
|
|
Serial.println(F(" RGB_LIGHT"));
|
|
present(ID_S_RGB_LIGHT, S_RGB_LIGHT, "Mood Light");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_RGBW_LIGHT
|
|
Serial.println(F(" RGBW_LIGHT"));
|
|
present(ID_S_RGBW_LIGHT, S_RGBW_LIGHT, "Mood Light 2");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_COLOR_SENSOR
|
|
Serial.println(F(" COLOR_SENSOR"));
|
|
present(ID_S_COLOR_SENSOR, S_COLOR_SENSOR, "Hall Painting");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_HVAC
|
|
Serial.println(F(" HVAC"));
|
|
present(ID_S_HVAC, S_HVAC, "HVAC");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_MULTIMETER
|
|
Serial.println(F(" MULTIMETER"));
|
|
present(ID_S_MULTIMETER, S_MULTIMETER, "Electric Staion");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_SPRINKLER
|
|
#endif
|
|
#ifdef ID_S_WATER_LEAK
|
|
#endif
|
|
#ifdef ID_S_SOUND
|
|
#endif
|
|
#ifdef ID_S_VIBRATION
|
|
#endif
|
|
#ifdef ID_S_MOISTURE
|
|
#endif
|
|
|
|
#ifdef ID_S_MOISTURE
|
|
Serial.println(F(" S_MOISTURE"));
|
|
present(ID_S_MOISTURE, S_MOISTURE, "Basement Sensor");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
#ifdef ID_S_CUSTOM
|
|
Serial.println(F(" S_CUSTOM"));
|
|
present(ID_S_CUSTOM, S_CUSTOM, "Other Stuff");
|
|
wait(SHORT_WAIT);
|
|
#endif
|
|
|
|
|
|
|
|
Serial.println(F("________________"));
|
|
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
Serial.println();
|
|
Serial.println();
|
|
Serial.println();
|
|
Serial.println(F("#########################"));
|
|
randNumber = random(0, 101);
|
|
|
|
Serial.print(F("RandomNumber:"));
|
|
Serial.println(randNumber);
|
|
// Send fake battery level
|
|
Serial.println(F("Send Battery Level"));
|
|
sendBatteryLevel(randNumber);
|
|
wait(LONG_WAIT);
|
|
|
|
// Request time
|
|
Serial.println(F("Request Time"));
|
|
requestTime();
|
|
wait(LONG_WAIT);
|
|
|
|
//Read Sensors
|
|
#ifdef ID_S_DOOR
|
|
door();
|
|
#endif
|
|
|
|
#ifdef ID_S_MOTION
|
|
motion();
|
|
#endif
|
|
|
|
#ifdef ID_S_SMOKE
|
|
smoke();
|
|
#endif
|
|
|
|
#ifdef ID_S_LIGHT
|
|
light();
|
|
#endif
|
|
|
|
#ifdef ID_S_DIMMER
|
|
dimmer();
|
|
#endif
|
|
|
|
#ifdef ID_S_COVER
|
|
cover();
|
|
#endif
|
|
|
|
#ifdef ID_S_TEMP
|
|
temp();
|
|
#endif
|
|
|
|
#ifdef ID_S_HUM
|
|
hum();
|
|
#endif
|
|
|
|
#ifdef ID_S_BARO
|
|
baro();
|
|
#endif
|
|
|
|
#ifdef ID_S_WIND
|
|
wind();
|
|
#endif
|
|
|
|
#ifdef ID_S_RAIN
|
|
rain();
|
|
#endif
|
|
|
|
#ifdef ID_S_UV
|
|
uv();
|
|
#endif
|
|
|
|
#ifdef ID_S_WEIGHT
|
|
weight();
|
|
#endif
|
|
|
|
#ifdef ID_S_POWER
|
|
power();
|
|
#endif
|
|
|
|
#ifdef ID_S_HEATER
|
|
heater();
|
|
#endif
|
|
|
|
#ifdef ID_S_DISTANCE
|
|
distance();
|
|
#endif
|
|
|
|
#ifdef ID_S_LIGHT_LEVEL
|
|
light_level();
|
|
#endif
|
|
|
|
#ifdef ID_S_LOCK
|
|
lock();
|
|
#endif
|
|
|
|
#ifdef ID_S_IR
|
|
ir();
|
|
#endif
|
|
|
|
#ifdef ID_S_WATER
|
|
water();
|
|
#endif
|
|
|
|
#ifdef ID_S_AIR_QUALITY
|
|
air();
|
|
#endif
|
|
|
|
#ifdef ID_S_DUST
|
|
dust();
|
|
#endif
|
|
|
|
#ifdef ID_S_SCENE_CONTROLLER
|
|
scene();
|
|
#endif
|
|
|
|
#ifdef ID_S_RGB_LIGHT
|
|
rgbLight();
|
|
#endif
|
|
|
|
#ifdef ID_S_RGBW_LIGHT
|
|
rgbwLight();
|
|
#endif
|
|
|
|
#ifdef ID_S_COLOR_SENSOR
|
|
color();
|
|
#endif
|
|
|
|
#ifdef ID_S_HVAC
|
|
hvac();
|
|
#endif
|
|
|
|
#ifdef ID_S_MULTIMETER
|
|
multimeter();
|
|
#endif
|
|
|
|
#ifdef ID_S_SPRINKLER
|
|
#endif
|
|
#ifdef ID_S_WATER_LEAK
|
|
#endif
|
|
#ifdef ID_S_SOUND
|
|
#endif
|
|
#ifdef ID_S_VIBRATION
|
|
#endif
|
|
#ifdef ID_S_MOISTURE
|
|
#endif
|
|
|
|
#ifdef ID_S_MOISTURE
|
|
moisture();
|
|
#endif
|
|
|
|
#ifdef ID_S_CUSTOM
|
|
custom();
|
|
#endif
|
|
|
|
sendBatteryLevel(randNumber);
|
|
wait(SHORT_WAIT);
|
|
Serial.println(F("#########################"));
|
|
wait(SLEEP_TIME); //sleep a bit
|
|
}
|
|
|
|
// This is called when a new time value was received
|
|
void receiveTime(unsigned long controllerTime)
|
|
{
|
|
|
|
Serial.print(F("Time value received: "));
|
|
Serial.println(controllerTime);
|
|
|
|
}
|
|
|
|
//void door(){}
|
|
|
|
#ifdef ID_S_DOOR
|
|
void door()
|
|
{
|
|
|
|
Serial.print("Door is: " );
|
|
|
|
if (randNumber <= 50) {
|
|
Serial.println(F("Open"));
|
|
//ID_S_DOOR,V_TRIPPED
|
|
msg_generic.setSensor(ID_S_DOOR);
|
|
msg_generic.setType(V_TRIPPED);
|
|
send(msg_generic.set((int16_t)1));
|
|
} else {
|
|
Serial.println(F("Closed"));
|
|
//ID_S_DOOR,V_TRIPPED
|
|
msg_generic.setSensor(ID_S_DOOR);
|
|
msg_generic.setType(V_TRIPPED);
|
|
send(msg_generic.set((int16_t)0));
|
|
}
|
|
#ifdef ID_S_ARMED
|
|
Serial.print(F("System is: ") );
|
|
Serial.println((isArmed ? F("Armed") : F("Disarmed")));
|
|
//ID_S_DOOR,V_ARMED
|
|
msg_generic.setSensor(ID_S_DOOR);
|
|
msg_generic.setType(V_ARMED);
|
|
send(msg_generic.set(isArmed));
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_MOTION
|
|
void motion()
|
|
{
|
|
|
|
Serial.print(F("Motion is: "));
|
|
|
|
if (randNumber <= 50) {
|
|
Serial.println(F("Active"));
|
|
msg_generic.setSensor(ID_S_MOTION);
|
|
msg_generic.setType(V_TRIPPED);
|
|
send(msg_generic.set(1));
|
|
} else {
|
|
Serial.println(F("Quiet"));
|
|
//MyMessage msg_S_MOTION_T(ID_S_MOTION,V_TRIPPED);
|
|
msg_generic.setSensor(ID_S_MOTION);
|
|
msg_generic.setType(V_TRIPPED);
|
|
send(msg_generic.set(0));
|
|
}
|
|
|
|
#ifdef ID_S_ARMED
|
|
Serial.print(F("System is: "));
|
|
Serial.println((isArmed ? F("Armed") : F("Disarmed")));
|
|
msg_generic.setSensor(ID_S_MOTION);
|
|
msg_generic.setType(V_ARMED);
|
|
send(msg_generic.set(isArmed));
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_SMOKE
|
|
void smoke()
|
|
{
|
|
|
|
Serial.print(F("Smoke is: "));
|
|
|
|
if (randNumber <= 50) {
|
|
Serial.println(F("Active"));
|
|
msg_generic.setSensor(ID_S_SMOKE);
|
|
msg_generic.setType(V_TRIPPED);
|
|
send(msg_generic.set(1));
|
|
} else {
|
|
Serial.println(F("Quiet"));
|
|
msg_generic.setSensor(ID_S_SMOKE);
|
|
msg_generic.setType(V_TRIPPED);
|
|
send(msg_generic.set(0));
|
|
}
|
|
|
|
#ifdef ID_S_ARMED
|
|
Serial.print(F("System is: "));
|
|
Serial.println((isArmed ? F("Armed") : F("Disarmed")));
|
|
msg_generic.setSensor(ID_S_SMOKE);
|
|
msg_generic.setType(V_ARMED);
|
|
send(msg_generic.set(isArmed));
|
|
#endif
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_LIGHT
|
|
void light()
|
|
{
|
|
|
|
Serial.print(F("Light is: "));
|
|
Serial.println((isLightOn ? F("On") : F("Off")));
|
|
msg_generic.setSensor(ID_S_LIGHT);
|
|
msg_generic.setType(V_LIGHT);
|
|
send(msg_generic.set(isLightOn));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_DIMMER
|
|
void dimmer()
|
|
{
|
|
|
|
Serial.print(F("Dimmer is set to: "));
|
|
Serial.println(dimmerVal);
|
|
msg_generic.setSensor(ID_S_DIMMER);
|
|
msg_generic.setType(V_DIMMER);
|
|
send(msg_generic.set(dimmerVal));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_COVER
|
|
void cover()
|
|
{
|
|
|
|
Serial.print(F("Cover is : "));
|
|
|
|
if (coverState == 1) {
|
|
Serial.println(F("Opening"));
|
|
msg_generic.setSensor(ID_S_COVER);
|
|
msg_generic.setType(V_UP);
|
|
send(msg_generic.set(1));
|
|
} else if (coverState == -1) {
|
|
Serial.println(F("Closing"));
|
|
msg_generic.setSensor(ID_S_COVER);
|
|
msg_generic.setType(V_DOWN);
|
|
send(msg_generic.set(0));
|
|
} else {
|
|
Serial.println(F("Idle"));
|
|
msg_generic.setSensor(ID_S_COVER);
|
|
msg_generic.setType(V_STOP);
|
|
send(msg_generic.set(-1));
|
|
}
|
|
msg_generic.setSensor(ID_S_COVER);
|
|
msg_generic.setType(V_VAR1);
|
|
send(msg_generic.set(coverState));
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_TEMP
|
|
void temp()
|
|
{
|
|
|
|
Serial.print(F("Temperature is: "));
|
|
Serial.println(map(randNumber, 1, 100, 0, 45));
|
|
msg_generic.setSensor(ID_S_TEMP);
|
|
msg_generic.setType(V_TEMP);
|
|
send(msg_generic.set(map(randNumber, 1, 100, 0, 45)));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_HUM
|
|
void hum()
|
|
{
|
|
|
|
Serial.print(F("Humitidty is: "));
|
|
Serial.println(randNumber);
|
|
msg_generic.setSensor(ID_S_HUM);
|
|
msg_generic.setType(V_HUM);
|
|
send(msg_generic.set(randNumber));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_BARO
|
|
void baro()
|
|
{
|
|
|
|
const char *weather[] = {"stable", "sunny", "cloudy", "unstable", "thunderstorm", "unknown"};
|
|
long pressure = map(randNumber, 1, 100, 870, 1086); // hPa?
|
|
int forecast = map(randNumber, 1, 100, 0, 5);
|
|
|
|
Serial.print("Atmosferic Pressure is: " );
|
|
Serial.println(pressure);
|
|
msg_generic.setSensor(ID_S_BARO);
|
|
msg_generic.setType(V_PRESSURE);
|
|
send(msg_generic.set(pressure));
|
|
|
|
Serial.print("Weather forecast: " );
|
|
Serial.println(weather[forecast]);
|
|
msg_generic.setSensor(ID_S_BARO);
|
|
msg_generic.setType(V_FORECAST);
|
|
send(msg_generic.set(weather[forecast]));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_WIND
|
|
void wind()
|
|
{
|
|
|
|
Serial.print(F("Wind Speed is: "));
|
|
Serial.println(randNumber);
|
|
msg_generic.setSensor(ID_S_WIND);
|
|
msg_generic.setType(V_WIND);
|
|
send(msg_generic.set(randNumber));
|
|
|
|
Serial.print(F("Wind Gust is: "));
|
|
Serial.println(randNumber + 10);
|
|
msg_generic.setSensor(ID_S_WIND);
|
|
msg_generic.setType(V_GUST);
|
|
send(msg_generic.set(randNumber + 10));
|
|
|
|
Serial.print(F("Wind Direction is: "));
|
|
Serial.println(map(randNumber, 1, 100, 0, 360));
|
|
msg_generic.setSensor(ID_S_WIND);
|
|
msg_generic.setType(V_DIRECTION);
|
|
send(msg_generic.set(map(randNumber, 1, 100, 0, 360)));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_RAIN
|
|
void rain()
|
|
{
|
|
|
|
Serial.print(F("Rain ammount is: "));
|
|
Serial.println(randNumber);
|
|
msg_generic.setSensor(ID_S_RAIN);
|
|
msg_generic.setType(V_RAIN);
|
|
send(msg_generic.set(randNumber));
|
|
|
|
Serial.print(F("Rain rate is: "));
|
|
Serial.println(randNumber / 60);
|
|
msg_generic.setSensor(ID_S_RAIN);
|
|
msg_generic.setType(V_RAINRATE);
|
|
send(msg_generic.set(randNumber / 60, 1));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_UV
|
|
void uv()
|
|
{
|
|
|
|
Serial.print(F("Ultra Violet level is: "));
|
|
Serial.println(map(randNumber, 1, 100, 0, 15));
|
|
msg_generic.setSensor(ID_S_UV);
|
|
msg_generic.setType(V_UV);
|
|
send(msg_generic.set(map(randNumber, 1, 100, 0, 15)));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_WEIGHT
|
|
void weight()
|
|
{
|
|
|
|
Serial.print(F("Weight is: "));
|
|
Serial.println(map(randNumber, 1, 100, 0, 150));
|
|
msg_generic.setSensor(ID_S_WEIGHT);
|
|
msg_generic.setType(V_WEIGHT);
|
|
send(msg_generic.set(map(randNumber, 1, 100, 0, 150)));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_POWER
|
|
void power()
|
|
{
|
|
|
|
Serial.print(F("Watt is: "));
|
|
Serial.println(map(randNumber, 1, 100, 0, 150));
|
|
msg_generic.setSensor(ID_S_POWER);
|
|
msg_generic.setType(V_WATT);
|
|
send(msg_generic.set(map(randNumber, 1, 100, 0, 150)));
|
|
|
|
msg_generic.setSensor(ID_S_POWER);
|
|
msg_generic.setType(V_KWH);
|
|
Serial.print(F("KWH is: "));
|
|
Serial.println(map(randNumber, 1, 100, 0, 150));
|
|
send(msg_generic.set(map(randNumber, 1, 100, 0, 150)));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_HEATER
|
|
void heater()
|
|
{
|
|
// float heater_setpoint=21.5;
|
|
// float heater_temp=23.5;
|
|
// bool heater_status=false;
|
|
// String heatState="Off";
|
|
|
|
Serial.print(F("Heater flow state is: "));
|
|
Serial.println(heater_flow_state);
|
|
msg_generic.setSensor(ID_S_HEATER);
|
|
msg_generic.setType(V_HVAC_FLOW_STATE);
|
|
send(msg_generic.set(heater_flow_state.c_str()));
|
|
|
|
// Serial.print("Heater on/off is: " );
|
|
// Serial.println((heater_status==true)?"On":"Off");
|
|
// send(msg_S_HEATER_STATUS.set(heater_status));
|
|
|
|
// Serial.print("Heater Temperature is: " );
|
|
// Serial.println(heater_temp,1);
|
|
// send(msg_S_HEATER_TEMP.set(heater_temp,1));
|
|
|
|
Serial.print(F("Heater Setpoint: "));
|
|
Serial.println(heater_setpoint, 1);
|
|
msg_generic.setSensor(ID_S_HEATER);
|
|
msg_generic.setType(V_HVAC_SETPOINT_HEAT);
|
|
send(msg_generic.set(heater_setpoint, 1));
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_DISTANCE
|
|
void distance()
|
|
{
|
|
|
|
Serial.print(F("Distance is: "));
|
|
Serial.println(map(randNumber, 1, 100, 0, 150));
|
|
msg_generic.setSensor(ID_S_DISTANCE);
|
|
msg_generic.setType(V_DISTANCE);
|
|
send(msg_generic.set(map(randNumber, 1, 100, 0, 150)));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_LIGHT_LEVEL
|
|
void light_level()
|
|
{
|
|
|
|
Serial.print(F("Light is: "));
|
|
Serial.println(map(randNumber, 1, 100, 0, 150));
|
|
msg_generic.setSensor(ID_S_LIGHT_LEVEL);
|
|
msg_generic.setType(V_LIGHT_LEVEL);
|
|
send(msg_generic.set(map(randNumber, 1, 100, 0, 150)));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_LOCK
|
|
void lock()
|
|
{
|
|
|
|
Serial.print(F("Lock is: "));
|
|
Serial.println((isLocked ? F("Locked") : F("Unlocked")));
|
|
msg_generic.setSensor(ID_S_LOCK);
|
|
msg_generic.setType(V_LOCK_STATUS);
|
|
send(msg_generic.set(isLocked));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_IR
|
|
void ir()
|
|
{
|
|
|
|
Serial.print(F("Infrared is: "));
|
|
Serial.println(irVal);
|
|
msg_generic.setSensor(ID_S_IR);
|
|
msg_generic.setType(V_IR_SEND);
|
|
send(msg_generic.set(irVal));
|
|
msg_generic.setSensor(ID_S_IR);
|
|
msg_generic.setType(V_IR_RECEIVE);
|
|
send(msg_generic.set(irVal));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_WATER
|
|
void water()
|
|
{
|
|
|
|
Serial.print(F("Water flow is: "));
|
|
Serial.println(map(randNumber, 1, 100, 0, 150));
|
|
msg_generic.setSensor(ID_S_WATER);
|
|
msg_generic.setType(V_FLOW);
|
|
send(msg_generic.set(map(randNumber, 1, 100, 0, 150)));
|
|
|
|
Serial.print(F("Water volume is: "));
|
|
Serial.println(map(randNumber, 1, 100, 0, 150));
|
|
msg_generic.setSensor(ID_S_WATER);
|
|
msg_generic.setType(V_VOLUME);
|
|
send(msg_generic.set(map(randNumber, 1, 100, 0, 150)));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_AIR_QUALITY
|
|
void air()
|
|
{
|
|
|
|
Serial.print(F("Air Quality is: "));
|
|
Serial.println(randNumber);
|
|
msg_generic.setSensor(ID_S_AIR_QUALITY);
|
|
msg_generic.setType(V_LEVEL);
|
|
send(msg_generic.set(randNumber));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_DUST
|
|
void dust()
|
|
{
|
|
|
|
Serial.print(F("Dust level is: "));
|
|
Serial.println(randNumber);
|
|
msg_generic.setSensor(ID_S_DUST);
|
|
msg_generic.setType(V_LEVEL);
|
|
send(msg_generic.set(randNumber));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_SCENE_CONTROLLER
|
|
void scene()
|
|
{
|
|
|
|
Serial.print(F("Scene is: "));
|
|
Serial.println(scenes[sceneVal]);
|
|
|
|
if (sceneValPrevious != sceneVal) {
|
|
msg_generic.setSensor(ID_S_SCENE_CONTROLLER);
|
|
msg_generic.setType(V_SCENE_OFF);
|
|
send(msg_generic.set(sceneValPrevious));
|
|
|
|
msg_generic.setSensor(ID_S_SCENE_CONTROLLER);
|
|
msg_generic.setType(V_SCENE_ON);
|
|
send(msg_generic.set(sceneVal));
|
|
sceneValPrevious = sceneVal;
|
|
}
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_RGB_LIGHT
|
|
void rgbLight()
|
|
{
|
|
|
|
Serial.print(F("RGB Light state is: "));
|
|
Serial.println(rgbState);
|
|
msg_generic.setSensor(ID_S_RGB_LIGHT);
|
|
msg_generic.setType(V_RGB);
|
|
send(msg_generic.set(rgbState.c_str()));
|
|
|
|
Serial.print(F("RGB Light Watt is: "));
|
|
Serial.println(map(randNumber, 1, 100, 0, 150));
|
|
msg_generic.setSensor(ID_S_RGB_LIGHT);
|
|
msg_generic.setType(V_WATT);
|
|
send(msg_generic.set(map(randNumber, 1, 100, 0, 150)));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_RGBW_LIGHT
|
|
void rgbwLight()
|
|
{
|
|
|
|
Serial.print(F("RGBW Light state is: "));
|
|
Serial.println(rgbwState);
|
|
msg_generic.setSensor(ID_S_RGBW_LIGHT);
|
|
msg_generic.setType(V_RGBW);
|
|
send(msg_generic.set(rgbwState.c_str()));
|
|
|
|
Serial.print(F("RGBW Light Watt is: "));
|
|
Serial.println(map(randNumber, 1, 100, 0, 150));
|
|
msg_generic.setSensor(ID_S_RGBW_LIGHT);
|
|
msg_generic.setType(V_WATT);
|
|
send(msg_generic.set(map(randNumber, 1, 100, 0, 150)));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_COLOR_SENSOR
|
|
void color()
|
|
{
|
|
String colorState;
|
|
|
|
String red = String(random(0, 256), HEX);
|
|
String green = String(random(0, 256), HEX);
|
|
String blue = String(random(0, 256), HEX);
|
|
|
|
colorState = String(red + green + blue);
|
|
|
|
Serial.print(F("Color state is: "));
|
|
Serial.println(colorState);
|
|
msg_generic.setSensor(ID_S_COLOR_SENSOR);
|
|
msg_generic.setType(V_RGB);
|
|
send(msg_generic.set(colorState.c_str()));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_HVAC
|
|
void hvac()
|
|
{
|
|
|
|
// float hvac_SetPointHeat = 16.5;
|
|
// float hvac_SetPointCool = 25.5;
|
|
// String hvac_FlowState = "AutoChangeOver";
|
|
// String hvac_FlowMode = "Auto";
|
|
// String hvac_Speed = "Normal";
|
|
|
|
Serial.print(F("HVAC Set Point Heat is: "));
|
|
Serial.println(hvac_SetPointHeat);
|
|
msg_generic.setSensor(ID_S_HVAC);
|
|
msg_generic.setType(V_HVAC_SETPOINT_HEAT);
|
|
send(msg_generic.set(hvac_SetPointHeat, 1));
|
|
|
|
Serial.print(F("HVAC Set Point Cool is: "));
|
|
Serial.println(hvac_SetPointCool);
|
|
msg_generic.setSensor(ID_S_HVAC);
|
|
msg_generic.setType(V_HVAC_SETPOINT_COOL);
|
|
send(msg_generic.set(hvac_SetPointCool, 1));
|
|
|
|
Serial.print(F("HVAC Flow State is: "));
|
|
Serial.println(hvac_FlowState);
|
|
msg_generic.setSensor(ID_S_HVAC);
|
|
msg_generic.setType(V_HVAC_FLOW_STATE);
|
|
send(msg_generic.set(hvac_FlowState.c_str()));
|
|
|
|
Serial.print(F("HVAC Flow Mode is: "));
|
|
Serial.println(hvac_FlowMode);
|
|
msg_generic.setSensor(ID_S_HVAC);
|
|
msg_generic.setType(V_HVAC_FLOW_MODE);
|
|
send(msg_generic.set(hvac_FlowMode.c_str()));
|
|
|
|
Serial.print(F("HVAC Speed is: "));
|
|
Serial.println(hvac_Speed);
|
|
msg_generic.setSensor(ID_S_HVAC);
|
|
msg_generic.setType(V_HVAC_SPEED);
|
|
send(msg_generic.set(hvac_Speed.c_str()));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_MULTIMETER
|
|
void multimeter()
|
|
{
|
|
int impedance = map(randNumber, 1, 100, 0, 15000);
|
|
int volt = map(randNumber, 1, 100, 0, 380);
|
|
int amps = map(randNumber, 1, 100, 0, 16);
|
|
|
|
Serial.print(F("Impedance is: "));
|
|
Serial.println(impedance);
|
|
msg_generic.setSensor(ID_S_MULTIMETER);
|
|
msg_generic.setType(V_IMPEDANCE);
|
|
send(msg_generic.set(impedance));
|
|
|
|
Serial.print(F("Voltage is: "));
|
|
Serial.println(volt);
|
|
msg_generic.setSensor(ID_S_MULTIMETER);
|
|
msg_generic.setType(V_VOLTAGE);
|
|
send(msg_generic.set(volt));
|
|
|
|
Serial.print(F("Current is: "));
|
|
Serial.println(amps);
|
|
msg_generic.setSensor(ID_S_MULTIMETER);
|
|
msg_generic.setType(V_CURRENT);
|
|
|
|
send(msg_generic.set(amps));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_SPRINKLER
|
|
#endif
|
|
#ifdef ID_S_WATER_LEAK
|
|
#endif
|
|
#ifdef ID_S_SOUND
|
|
#endif
|
|
#ifdef ID_S_VIBRATION
|
|
#endif
|
|
#ifdef ID_S_MOISTURE
|
|
#endif
|
|
|
|
#ifdef ID_S_MOISTURE
|
|
void moisture()
|
|
{
|
|
|
|
Serial.print(F("Moisture level is: "));
|
|
Serial.println(randNumber);
|
|
msg_generic.setSensor(ID_S_MOISTURE);
|
|
msg_generic.setType(V_LEVEL);
|
|
send(msg_generic.set(randNumber));
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_CUSTOM
|
|
void custom()
|
|
{
|
|
|
|
Serial.print(F("Custom value is: "));
|
|
Serial.println(randNumber);
|
|
|
|
msg_generic.setSensor(ID_S_CUSTOM);
|
|
msg_generic.setType(V_VAR1);
|
|
send(msg_generic.set(randNumber));
|
|
|
|
msg_generic.setSensor(ID_S_CUSTOM);
|
|
msg_generic.setType(V_VAR2);
|
|
send(msg_generic.set(randNumber));
|
|
|
|
msg_generic.setSensor(ID_S_CUSTOM);
|
|
msg_generic.setType(V_VAR3);
|
|
send(msg_generic.set(randNumber));
|
|
|
|
msg_generic.setSensor(ID_S_CUSTOM);
|
|
msg_generic.setType(V_VAR4);
|
|
send(msg_generic.set(randNumber));
|
|
|
|
msg_generic.setSensor(ID_S_CUSTOM);
|
|
msg_generic.setType(V_VAR5);
|
|
send(msg_generic.set(randNumber));
|
|
|
|
}
|
|
#endif
|
|
|
|
|
|
void receive(const MyMessage &message)
|
|
{
|
|
switch (message.type) {
|
|
#ifdef ID_S_ARMED
|
|
case V_ARMED:
|
|
isArmed = message.getBool();
|
|
Serial.print(F("Incoming change for ID_S_ARMED:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println((isArmed ? F("Armed") : F("Disarmed") ));
|
|
#ifdef ID_S_DOOR
|
|
door();//temp ack for door
|
|
#endif
|
|
#ifdef ID_S_MOTION
|
|
motion();//temp ack
|
|
#endif
|
|
#ifdef ID_S_SMOKE
|
|
smoke();//temp ack
|
|
#endif
|
|
break;
|
|
#endif
|
|
|
|
|
|
case V_STATUS: // V_LIGHT:
|
|
#ifdef ID_S_LIGHT
|
|
if (message.sensor == ID_S_LIGHT) {
|
|
isLightOn = message.getBool();
|
|
Serial.print(F("Incoming change for ID_S_LIGHT:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println((isLightOn ? F("On") : F("Off")));
|
|
light(); // temp ack
|
|
}
|
|
#endif
|
|
// #ifdef ID_S_HEATER
|
|
// if(message.sensor == ID_S_HEATER){
|
|
// heater_status = message.getBool();
|
|
// Serial.print("Incoming change for ID_S_HEATER:");
|
|
// Serial.print(message.sensor);
|
|
// Serial.print(", New status: ");
|
|
// Serial.println(heater_status);
|
|
// heater();//temp ack
|
|
// }
|
|
// #endif
|
|
break;
|
|
|
|
|
|
#ifdef ID_S_DIMMER
|
|
case V_DIMMER:
|
|
if ((message.getInt() < 0) || (message.getInt() > 100)) {
|
|
Serial.println( "V_DIMMER data invalid (should be 0..100)" );
|
|
break;
|
|
}
|
|
dimmerVal = message.getInt();
|
|
Serial.print(F("Incoming change for ID_S_DIMMER:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(message.getInt());
|
|
dimmer();// temp ack
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ID_S_COVER
|
|
case V_UP:
|
|
coverState = 1;
|
|
Serial.print(F("Incoming change for ID_S_COVER:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println("V_UP");
|
|
cover(); // temp ack
|
|
break;
|
|
|
|
case V_DOWN:
|
|
coverState = -1;
|
|
Serial.print(F("Incoming change for ID_S_COVER:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(F("V_DOWN"));
|
|
cover(); //temp ack
|
|
break;
|
|
|
|
case V_STOP:
|
|
coverState = 0;
|
|
Serial.print(F("Incoming change for ID_S_COVER:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println("V_STOP");
|
|
cover(); //temp ack
|
|
break;
|
|
#endif
|
|
|
|
|
|
case V_HVAC_SETPOINT_HEAT:
|
|
|
|
#ifdef ID_S_HEATER
|
|
if (message.sensor == ID_S_HEATER) {
|
|
heater_setpoint = message.getFloat();
|
|
|
|
Serial.print(F("Incoming set point for ID_S_HEATER:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(heater_setpoint, 1);
|
|
heater();//temp ack
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_HVAC
|
|
if (message.sensor == ID_S_HVAC) {
|
|
hvac_SetPointHeat = message.getFloat();
|
|
Serial.print(F("Incoming set point for ID_S_HVAC:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(hvac_SetPointHeat, 1);
|
|
hvac();//temp ack
|
|
}
|
|
#endif
|
|
break;
|
|
|
|
case V_HVAC_FLOW_STATE:
|
|
#ifdef ID_S_HEATER
|
|
if (message.sensor == ID_S_HEATER) {
|
|
heater_flow_state = message.getString();
|
|
Serial.print(F("Incoming flow state change for ID_S_HEATER:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(heater_flow_state);
|
|
heater();//temp ack
|
|
}
|
|
#endif
|
|
|
|
#ifdef ID_S_HVAC
|
|
if (message.sensor == ID_S_HVAC) {
|
|
hvac_FlowState = message.getString();
|
|
|
|
Serial.print(F("Incoming set point for ID_S_HVAC:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(hvac_FlowState);
|
|
hvac();//temp ack
|
|
}
|
|
#endif
|
|
break;
|
|
|
|
#ifdef ID_S_LOCK
|
|
case V_LOCK_STATUS:
|
|
isLocked = message.getBool();
|
|
Serial.print(F("Incoming change for ID_S_LOCK:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(message.getBool() ? F("Locked") : F("Unlocked"));
|
|
lock(); //temp ack
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ID_S_IR
|
|
case V_IR_SEND:
|
|
irVal = message.getLong();
|
|
Serial.print(F("Incoming change for ID_S_IR:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(irVal);
|
|
ir(); // temp ack
|
|
break;
|
|
case V_IR_RECEIVE:
|
|
irVal = message.getLong();
|
|
Serial.print(F("Incoming change for ID_S_IR:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(irVal);
|
|
ir(); // temp ack
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ID_S_SCENE_CONTROLLER
|
|
case V_SCENE_ON:
|
|
sceneVal = message.getInt();
|
|
Serial.print(F("Incoming change for ID_S_SCENE_CONTROLLER:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.print(scenes[sceneVal]);
|
|
Serial.println(F(" On"));
|
|
scene();// temp ack
|
|
break;
|
|
case V_SCENE_OFF:
|
|
sceneVal = message.getInt();
|
|
Serial.print(F("Incoming change for ID_S_SCENE_CONTROLLER:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.print(scenes[sceneVal]);
|
|
Serial.println(F(" Off"));
|
|
scene();// temp ack
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ID_S_RGB_LIGHT
|
|
case V_RGB:
|
|
rgbState = message.getString();
|
|
Serial.print(F("Incoming flow state change for ID_S_RGB_LIGHT:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(rgbState);
|
|
rgbLight(); // temp ack
|
|
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ID_S_RGBW_LIGHT
|
|
case V_RGBW:
|
|
rgbwState = message.getString();
|
|
Serial.print(F("Incoming flow state change for ID_S_RGBW_LIGHT:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(rgbwState);
|
|
rgbwLight();
|
|
break;
|
|
#endif
|
|
|
|
#ifdef ID_S_HVAC
|
|
// hvac_SetPointHeat
|
|
// hvac_SetPointCool
|
|
// hvac_FlowState
|
|
// hvac_FlowMode
|
|
// hvac_Speed
|
|
|
|
case V_HVAC_SETPOINT_COOL:
|
|
hvac_SetPointCool = message.getFloat();
|
|
|
|
Serial.print(F("Incoming set point for ID_S_HVAC:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(hvac_SetPointCool, 1);
|
|
hvac();//temp ack
|
|
break;
|
|
|
|
case V_HVAC_FLOW_MODE:
|
|
hvac_Speed = message.getString();
|
|
|
|
Serial.print(F("Incoming set point for ID_S_HVAC:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(hvac_Speed);
|
|
hvac();//temp ack
|
|
break;
|
|
|
|
case V_HVAC_SPEED:
|
|
hvac_FlowMode = message.getString();
|
|
|
|
Serial.print(F("Incoming set point for ID_S_HVAC:"));
|
|
Serial.print(message.sensor);
|
|
Serial.print(F(", New status: "));
|
|
Serial.println(hvac_FlowMode);
|
|
hvac();//temp ack
|
|
break;
|
|
#endif
|
|
|
|
default:
|
|
Serial.print(F("Unknown/UnImplemented message type: "));
|
|
Serial.println(message.type);
|
|
}
|
|
|
|
}
|