Files
MySensors/examples/MockMySensors/MockMySensors.ino
T
FotoFieber 09de6d8075 Reduce memory footprint (#762)
Allows to run this sketch on an AVR 328 with
all sensors enabled.

Changes:
- use F() macro
- use msg_generic instead of individual variables
2017-01-30 16:48:47 +01:00

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);
}
}