From 3b531e77e2964753907a3a6c0d326c84facbd8c6 Mon Sep 17 00:00:00 2001 From: gizmocuz Date: Fri, 14 Aug 2015 08:31:32 +0200 Subject: [PATCH] MyMessage.h: Added some comments and presentation types from the web site, fixed a small typo MockMySensors sketch: Fixed some small issues to conform to the 1.5 API (S_HEATER still needs to done) --- libraries/MySensors/MyMessage.h | 83 ++++++++--------- .../examples/MockMySensors/MockMySensors.ino | 91 +++++++------------ .../examples/MockMySensors/README.md | 4 +- 3 files changed, 75 insertions(+), 103 deletions(-) diff --git a/libraries/MySensors/MyMessage.h b/libraries/MySensors/MyMessage.h index 129801f..6c7c471 100644 --- a/libraries/MySensors/MyMessage.h +++ b/libraries/MySensors/MyMessage.h @@ -58,7 +58,7 @@ typedef enum { S_UV, // Uv sensor, V_UV S_WEIGHT, // Personal scale sensor, V_WEIGHT, V_IMPEDANCE S_POWER, // Power meter, V_WATT, V_KWH - S_HEATER, // Header device, V_HVAC_SETPOINT_HEAT, V_HVAC_FLOW_STATE + S_HEATER, // Header device, V_HVAC_SETPOINT_HEAT, V_HVAC_FLOW_STATE, V_TEMP S_DISTANCE, // Distance sensor, V_DISTANCE S_LIGHT_LEVEL, // Light level sensor, V_LIGHT_LEVEL (uncalibrated in percentage), V_LEVEL (light level in lux) S_ARDUINO_NODE, // Used (internally) for presenting a non-repeating Arduino node @@ -73,7 +73,7 @@ typedef enum { S_RGB_LIGHT, // RGB light. Send color component data using V_RGB. Also supports V_WATT S_RGBW_LIGHT, // RGB light with an additional White component. Send data using V_RGBW. Also supports V_WATT S_COLOR_SENSOR, // Color sensor, send color information using V_RGB - S_HVAC, // Thermostat/HVAC device. V_HVAC_SETPOINT_HEAT, V_HVAC_SETPOINT_COLD, V_HVAC_FLOW_STATE, V_HVAC_FLOW_MODE + S_HVAC, // Thermostat/HVAC device. V_HVAC_SETPOINT_HEAT, V_HVAC_SETPOINT_COLD, V_HVAC_FLOW_STATE, V_HVAC_FLOW_MODE, V_TEMP S_MULTIMETER, // Multimeter device, V_VOLTAGE, V_CURRENT, V_IMPEDANCE S_SPRINKLER, // Sprinkler, V_STATUS (turn on/off), V_TRIPPED (if fire detecting device) S_WATER_LEAK, // Water leak sensor, V_TRIPPED, V_ARMED @@ -84,42 +84,42 @@ typedef enum { // Type of sensor data (for set/req/ack messages) typedef enum { - V_TEMP, // S_TEMP - V_HUM, // S_HUM - V_STATUS, // S_LIGHT, S_DIMMER, S_SPRINKLER, S_HVAC, S_HEATER. Used for setting binary (on/off) status. 1=on, 0=off + V_TEMP, // S_TEMP. Temperature S_TEMP, S_HEATER, S_HVAC + V_HUM, // S_HUM. Humidity + V_STATUS, // S_LIGHT, S_DIMMER, S_SPRINKLER, S_HVAC, S_HEATER. Used for setting/reporting binary (on/off) status. 1=on, 0=off V_LIGHT=2, // Same as V_STATUS - V_PERCENTAGE, // S_DIMMER. Used for sending a percentage value (0-100). + V_PERCENTAGE, // S_DIMMER. Used for sending a percentage value 0-100 (%). V_DIMMER=3, // S_DIMMER. Same as V_PERCENTAGE. - V_PRESSURE, // S_BARO - V_FORECAST, // S_BARO - V_RAIN, // S_RAIN - V_RAINRATE, // S_RAIN - V_WIND, // S_WIND - V_GUST, // S_WIND - V_DIRECTION, // S_WIND - V_UV, // S_UV - V_WEIGHT, // S_WEIGHT - V_DISTANCE, // S_DISTANCE - V_IMPEDANCE, // S_MULTIMETER, S_WEIGHT - V_ARMED, // S_DOOR, S_MOTION, S_SMOKE, S_SPRINKLER - V_TRIPPED, // S_DOOR, S_MOTION, S_SMOKE, S_SPRINKLER (for sprinklers with fire detection) - V_WATT, // S_POWER, S_LIGHT, S_DIMMER - V_KWH, // S_POWER - V_SCENE_ON, // S_SCENE_CONTROLLER - V_SCENE_OFF, // S_SCENE_CONTROLLER + V_PRESSURE, // S_BARO. Atmospheric Pressure + V_FORECAST, // S_BARO. Whether forecast. string of "stable", "sunny", "cloudy", "unstable", "thunderstorm" or "unknown" + V_RAIN, // S_RAIN. Amount of rain + V_RAINRATE, // S_RAIN. Rate of rain + V_WIND, // S_WIND. Wind speed + V_GUST, // S_WIND. Gust + V_DIRECTION, // S_WIND. Wind direction 0-360 (degrees) + V_UV, // S_UV. UV light level + V_WEIGHT, // S_WEIGHT. Weight(for scales etc) + V_DISTANCE, // S_DISTANCE. Distance + V_IMPEDANCE, // S_MULTIMETER, S_WEIGHT. Impedance value + V_ARMED, // S_DOOR, S_MOTION, S_SMOKE, S_SPRINKLER. Armed status of a security sensor. 1 = Armed, 0 = Bypassed + V_TRIPPED, // S_DOOR, S_MOTION, S_SMOKE, S_SPRINKLER, S_WATER_LEAK, S_SOUND, S_VIBRATION, S_MOISTURE. Tripped status of a security sensor. 1 = Tripped, 0 + V_WATT, // S_POWER, S_LIGHT, S_DIMMER, S_RGB, S_RGBW. Watt value for power meters + V_KWH, // S_POWER. Accumulated number of KWH for a power meter + V_SCENE_ON, // S_SCENE_CONTROLLER. Turn on a scene + V_SCENE_OFF, // S_SCENE_CONTROLLER. Turn of a scene V_HEATER, // Deprecated. Use V_HVAC_FLOW_STATE instead. - V_HVAC_FLOW_STATE=21, // HVAC flow state ("Off", "HeatOn", "CoolOn", or "AutoChangeOver"). S_HEATER, S_HVAC - V_HVAC_SPEED, // HVAC/Heater fan speed ("Min", "Normal", "Max", "Auto") - V_LIGHT_LEVEL, // Used for sending light level in uncalibrated percentage. See also V_LEVEL (light level in lux). S_LIGHT_LEVEL + V_HVAC_FLOW_STATE=21, // S_HEATER, S_HVAC. HVAC flow state ("Off", "HeatOn", "CoolOn", or "AutoChangeOver") + V_HVAC_SPEED, // S_HVAC, S_HEATER. HVAC/Heater fan speed ("Min", "Normal", "Max", "Auto") + V_LIGHT_LEVEL, // S_LIGHT_LEVEL. Uncalibrated light level. 0-100%. Use V_LEVEL for light level in lux V_VAR1, V_VAR2, V_VAR3, V_VAR4, V_VAR5, - V_UP, // S_COVER - V_DOWN, // S_COVER - V_STOP, // S_COVER - V_IR_SEND, // S_IR - V_IR_RECEIVE, // S_IR - V_FLOW, // S_WATER - V_VOLUME, // S_WATER - V_LOCK_STATUS, // S_LOCK + V_UP, // S_COVER. Window covering. Up + V_DOWN, // S_COVER. Window covering. Down + V_STOP, // S_COVER. Window covering. Stop + V_IR_SEND, // S_IR. Send out an IR-command + V_IR_RECEIVE, // S_IR. This message contains a received IR-command + V_FLOW, // S_WATER. Flow of water (in meter) + V_VOLUME, // S_WATER. Water volume + V_LOCK_STATUS, // S_LOCK. Set or get lock status. 1=Locked, 0=Unlocked V_LEVEL, // S_DUST, S_AIR_QUALITY, S_SOUND (dB), S_VIBRATION (hz), S_LIGHT_LEVEL (lux) V_VOLTAGE, // S_MULTIMETER V_CURRENT, // S_MULTIMETER @@ -128,15 +128,16 @@ typedef enum { // Sent as ASCII hex: RRGGBB (RR=red, GG=green, BB=blue component) V_RGBW, // S_RGBW_LIGHT // Used for sending color information to multi color LED lighting. - // Sent as ASCII hex: RRGGBBWW (WW=while component) + // Sent as ASCII hex: RRGGBBWW (WW=white component) V_ID, // S_TEMP // Used for sending in sensors hardware ids (i.e. OneWire DS1820b). - V_UNIT_PREFIX, // Allows sensors to send in a string representing the - // unit prefix to be displayed in GUI, not parsed by controller! E.g. cm, m, km, inch. - // Can be used for S_DISTANCE or gas concentration (S_DUST, S_AIR_QUALITY) - V_HVAC_SETPOINT_COOL, // HVAC cool setpoint (Integer between 0-100). S_HVAC - V_HVAC_SETPOINT_HEAT, // HVAC/Heater setpoint (Integer between 0-100). S_HEATER, S_HVAC - V_HVAC_FLOW_MODE, // Flow mode for HVAC ("Auto", "ContinuousOn", "PeriodicOn"). S_HVAC + V_UNIT_PREFIX, // S_DUST, S_AIR_QUALITY + // Allows sensors to send in a string representing the + // unit prefix to be displayed in GUI, not parsed by controller! E.g. cm, m, km, inch. + // Can be used for S_DISTANCE or gas concentration + V_HVAC_SETPOINT_COOL, // S_HVAC. HVAC cool setpoint (Integer between 0-100) + V_HVAC_SETPOINT_HEAT, // S_HEATER, S_HVAC. HVAC/Heater setpoint (Integer between 0-100) + V_HVAC_FLOW_MODE, // S_HVAC. Flow mode for HVAC ("Auto", "ContinuousOn", "PeriodicOn") } mysensor_data; diff --git a/libraries/MySensors/examples/MockMySensors/MockMySensors.ino b/libraries/MySensors/examples/MockMySensors/MockMySensors.ino index 37411ff..9ccf0a9 100644 --- a/libraries/MySensors/examples/MockMySensors/MockMySensors.ino +++ b/libraries/MySensors/examples/MockMySensors/MockMySensors.ino @@ -1,47 +1,29 @@ /* -* MockMySensors +* FakeMySensors * * This skecth is intended to crate fake sensors which register and respond to the controller * -* Barduino 2015 +* Barduino, GizMoCuz 2015 */ -#include -#include -#include -#include -#include -#include - -#include #include -#include +#include -#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 +// SPI Pins +#define CE_PIN 9 +#define CS_PIN 10 // Wait times #define LONG_WAIT 500 #define SHORT_WAIT 50 #define SKETCH_NAME "FakeMySensors " -#define SKETCH_VERSION "v0.2" - -// 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 SKETCH_VERSION "v0.3" ////#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_DOOR 1 +//#define ID_S_DOOR 1 //#define ID_S_MOTION 2 //#define ID_S_SMOKE 3 //#define ID_S_LIGHT 4 @@ -51,11 +33,11 @@ //#define ID_S_HUM 8 //#define ID_S_BARO 9 //#define ID_S_WIND 10 -//#define ID_S_RAIN 11 +//#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_HEATER 15 <<-- not correctly implemented (1.5 API) //#define ID_S_DISTANCE 16 //#define ID_S_LIGHT_LEVEL 17 //#define ID_S_LOCK 18 @@ -67,29 +49,12 @@ //#define ID_S_CUSTOM 24 // Global Vars -unsigned long SLEEP_TIME = 60000; // Sleep time between reads (in milliseconds) +unsigned long SLEEP_TIME = 12000; // Sleep time between reads (in milliseconds) boolean metric = true; long randNumber; // Instanciate MySersors Gateway -MyTransportNRF24 transport(RF24_CE_PIN, RF24_CS_PIN, RF24_PA_LEVEL_GW); -//MyTransportRFM69 transport; - -// Message signing driver (signer needed if MY_SIGNING_FEATURE is turned on in MyConfig.h) -//MySigningNone signer; -//MySigningAtsha204Soft signer; -//MySigningAtsha204 signer; - -// Hardware profile -MyHwATMega328 hw; - -// Construct MySensors library (signer needed if MY_SIGNING_FEATURE is turned on in MyConfig.h) -// To use LEDs blinking, uncomment WITH_LEDS_BLINKING in MyConfig.h -#ifdef WITH_LEDS_BLINKING -MySensor gw(transport, hw /*, signer*/, RADIO_RX_LED_PIN, RADIO_TX_LED_PIN, RADIO_ERROR_LED_PIN); -#else -MySensor gw(transport, hw /*, signer*/); -#endif +MySensor gw; //Instanciate Messages objects @@ -161,8 +126,10 @@ MySensor gw(transport, hw /*, signer*/); #endif #ifdef ID_S_HEATER - MyMessage msg_S_HEATER_M(ID_S_HEATER,V_HEATER); - MyMessage msg_S_HEATER_S(ID_S_HEATER,V_HEATER_SW); + float current_set_point=21.5; + MyMessage msg_S_HEATER_SP(ID_S_HEATER,V_HVAC_SETPOINT_HEAT); + MyMessage msg_S_HEATER_F(ID_S_HEATER,V_HVAC_SETPOINT_HEAT); + MyMessage msg_S_HEATER_T(ID_S_HEATER,V_TEMP); #endif #ifdef ID_S_DISTANCE @@ -188,11 +155,11 @@ MySensor gw(transport, hw /*, signer*/); #endif #ifdef ID_S_AIR_QUALITY - MyMessage msg_S_AIR_QUALITY(ID_S_AIR_QUALITY,V_VAR1); + MyMessage msg_S_AIR_QUALITY(ID_S_AIR_QUALITY,V_LEVEL); #endif #ifdef ID_S_DUST - MyMessage msg_S_DUST(ID_S_DUST,V_DUST_LEVEL); + MyMessage msg_S_DUST(ID_S_DUST,V_LEVEL); #endif #ifdef ID_S_SCENE_CONTROLLER @@ -268,13 +235,13 @@ void setup() #endif #ifdef ID_S_COVER - Serial.println(" S_COVER"; + Serial.println(" S_COVER"); gw.present(ID_S_COVER,S_COVER); gw.wait(SHORT_WAIT); #endif #ifdef ID_S_TEMP - Serial.println(" S_TMEP"); + Serial.println(" S_TEMP"); gw.present(ID_S_TEMP,S_TEMP); gw.wait(SHORT_WAIT); #endif @@ -408,7 +375,7 @@ void loop() gw.wait(LONG_WAIT); //Read Sensors - #ifdef S_ID_DOOR + #ifdef ID_S_DOOR door(); #endif @@ -519,9 +486,7 @@ void receiveTime(unsigned long controllerTime) { } -//void door(){} - -#ifdef S_ID_DOOR +#ifdef ID_S_DOOR void door(){ Serial.print("Door is: " ); @@ -650,7 +615,7 @@ void hum(){ void baro(){ const char *weather[] = {"stable","sunny","cloudy","unstable","thunderstorm","unknown"}; - long pressure = map(randNumber,1,100,87000,108600); + long pressure = map(randNumber,1,100,900,1200); int forecast = map(randNumber,1,100,0,5); Serial.print("Atmosferic Pressure is: " ); @@ -753,8 +718,9 @@ void power(){ #ifdef ID_S_HEATER void heater(){ - int heater_mode = gw.loadState(ID_S_HEATER); - bool heater_switch = gw.loadState(ID_S_HEATER+1); + int heater_set_point = gw.loadState(ID_S_HEATER); + int heater_flow_state = gw.loadState(ID_S_HEATER+1); + int heater_temp = gw.loadState(ID_S_HEATER+2); Serial.print("Heater mode is: " ); @@ -781,6 +747,11 @@ void heater(){ Serial.println(heater_switch?"On":"Off"); gw.send(msg_S_HEATER_S.set(heater_switch)); + + Serial.print("Heater Temperature is: " ); + Serial.println(map(randNumber,1,100,0,45)); + + gw.send(msg_S_HEATER_T.set(map(randNumber,1,100,0,45))); } #endif diff --git a/libraries/MySensors/examples/MockMySensors/README.md b/libraries/MySensors/examples/MockMySensors/README.md index 24e2ce9..ccb11eb 100644 --- a/libraries/MySensors/examples/MockMySensors/README.md +++ b/libraries/MySensors/examples/MockMySensors/README.md @@ -3,7 +3,7 @@ Arduino sketch to fake sensor for the MySensors Library This skecth is intended to crate fake sensors which register and respond to the controller -Barduino 2015 +Barduino, GizMoCuz 2015 ----------------- Comment/Uncomment the sensors you would like to test @@ -12,4 +12,4 @@ Arduino Uno R3 can support about 12 sensors before it runs out of memory. You probably need to turn of the MySensor Lib debug to save some memory Nest step will be to remove the read/write to the eprom -and extend to support the v1.5 sensors +and extend 'ID_S_HEATER' to support the v1.5 API