Smart-Home am Beispiel der Präsenzerkennung im Raum Projektarbeit Lennart Heimbs, Johannes Krug, Sebastian Dohle und Kevin Holzschuh bei Prof. Oliver Hofmann SS2019
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MockMySensors.ino 32KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515
  1. /*
  2. * The MySensors Arduino library handles the wireless radio link and protocol
  3. * between your home built sensors/actuators and HA controller of choice.
  4. * The sensors forms a self healing radio network with optional repeaters. Each
  5. * repeater and gateway builds a routing tables in EEPROM which keeps track of the
  6. * network topology allowing messages to be routed to nodes.
  7. *
  8. * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
  9. * Copyright (C) 2013-2018 Sensnology AB
  10. * Full contributor list: https://github.com/mysensors/MySensors/graphs/contributors
  11. *
  12. * Documentation: http://www.mysensors.org
  13. * Support Forum: http://forum.mysensors.org
  14. *
  15. * This program is free software; you can redistribute it and/or
  16. * modify it under the terms of the GNU General Public License
  17. * version 2 as published by the Free Software Foundation.
  18. *
  19. *******************************
  20. *
  21. * REVISION HISTORY
  22. * Version 1.0 - Barduino 2015, GizMoCuz 2015
  23. *
  24. * DESCRIPTION
  25. * This sketch is intended to create fake sensors which register and respond to the controller
  26. *
  27. */
  28. // Enable debug prints to serial monitor
  29. #define MY_DEBUG
  30. // Enable and select radio type attached
  31. #define MY_RADIO_RF24
  32. //#define MY_RADIO_NRF5_ESB
  33. //#define MY_RADIO_RFM69
  34. //#define MY_RADIO_RFM95
  35. #define MY_NODE_ID 254
  36. #include <MySensors.h>
  37. #define RADIO_ERROR_LED_PIN 4 // Error led pin
  38. #define RADIO_RX_LED_PIN 6 // Receive led pin
  39. #define RADIO_TX_LED_PIN 5 // the PCB, on board LED
  40. // Wait times
  41. #define LONG_WAIT 500
  42. #define SHORT_WAIT 50
  43. #define SKETCH_NAME "MockMySensors "
  44. #define SKETCH_VERSION "v0.5"
  45. // Define Sensors ids
  46. /* S_DOOR, S_MOTION, S_SMOKE, S_LIGHT, S_DIMMER, S_COVER, S_TEMP, S_HUM, S_BARO, S_WIND,
  47. S_RAIN, S_UV, S_WEIGHT, S_POWER, S_HEATER, S_DISTANCE, S_LIGHT_LEVEL, S_ARDUINO_NODE,
  48. S_ARDUINO_REPEATER_NODE, S_LOCK, S_IR, S_WATER, S_AIR_QUALITY, S_CUSTOM, S_DUST,
  49. S_SCENE_CONTROLLER
  50. */
  51. ////#define ID_S_ARDUINO_NODE //auto defined in initialization
  52. ////#define ID_S_ARDUINO_REPEATER_NODE //auto defined in initialization
  53. // Some of these ID's have not been updated for v1.5. Uncommenting too many of them
  54. // will make the sketch too large for a pro mini's memory so it's probably best to try
  55. // one at a time.
  56. #define ID_S_ARMED 0 // dummy to control armed stated for several sensors
  57. #define ID_S_DOOR 1
  58. //#define ID_S_MOTION 2
  59. //#define ID_S_SMOKE 3
  60. //#define ID_S_LIGHT 4
  61. //#define ID_S_DIMMER 5
  62. //#define ID_S_COVER 6
  63. //#define ID_S_TEMP 7
  64. //#define ID_S_HUM 8
  65. //#define ID_S_BARO 9
  66. //#define ID_S_WIND 10
  67. //#define ID_S_RAIN 11
  68. //#define ID_S_UV 12
  69. //#define ID_S_WEIGHT 13
  70. //#define ID_S_POWER 14
  71. //#define ID_S_HEATER 15
  72. //#define ID_S_DISTANCE 16
  73. //#define ID_S_LIGHT_LEVEL 17
  74. //#define ID_S_LOCK 18
  75. //#define ID_S_IR 19
  76. //#define ID_S_WATER 20
  77. //#define ID_S_AIR_QUALITY 21
  78. //#define ID_S_DUST 22
  79. //#define ID_S_SCENE_CONTROLLER 23
  80. //// Lib 1.5 sensors
  81. //#define ID_S_RGB_LIGHT 24
  82. //#define ID_S_RGBW_LIGHT 25
  83. //#define ID_S_COLOR_SENSOR 26
  84. //#define ID_S_HVAC 27
  85. //#define ID_S_MULTIMETER 28
  86. //#define ID_S_SPRINKLER 29
  87. //#define ID_S_WATER_LEAK 30
  88. //#define ID_S_SOUND 31
  89. //#define ID_S_VIBRATION 32
  90. //#define ID_S_MOISTURE 33
  91. //
  92. //#define ID_S_CUSTOM 99
  93. // Global Vars
  94. uint32_t SLEEP_TIME = 900000; // Sleep time between reads (in milliseconds)
  95. bool metric = true;
  96. long randNumber;
  97. //Instantiate Messages objects
  98. #ifdef ID_S_ARMED
  99. bool isArmed;
  100. #endif
  101. #ifdef ID_S_DOOR // V_TRIPPED, V_ARMED
  102. MyMessage msg_S_DOOR_T(ID_S_DOOR,V_TRIPPED);
  103. MyMessage msg_S_DOOR_A(ID_S_DOOR,V_ARMED);
  104. #endif
  105. #ifdef ID_S_MOTION // V_TRIPPED, V_ARMED
  106. MyMessage msg_S_MOTION_A(ID_S_MOTION,V_ARMED);
  107. MyMessage msg_S_MOTION_T(ID_S_MOTION,V_TRIPPED);
  108. #endif
  109. #ifdef ID_S_SMOKE // V_TRIPPED, V_ARMED
  110. MyMessage msg_S_SMOKE_T(ID_S_SMOKE,V_TRIPPED);
  111. MyMessage msg_S_SMOKE_A(ID_S_SMOKE,V_ARMED);
  112. #endif
  113. #ifdef ID_S_LIGHT
  114. MyMessage msg_S_LIGHT(ID_S_LIGHT,V_LIGHT);
  115. bool isLightOn=0;
  116. #endif
  117. #ifdef ID_S_DIMMER
  118. MyMessage msg_S_DIMMER(ID_S_DIMMER,V_DIMMER);
  119. int dimmerVal=100;
  120. #endif
  121. #ifdef ID_S_COVER
  122. MyMessage msg_S_COVER_U(ID_S_COVER,V_UP);
  123. MyMessage msg_S_COVER_D(ID_S_COVER,V_DOWN);
  124. MyMessage msg_S_COVER_S(ID_S_COVER,V_STOP);
  125. MyMessage msg_S_COVER_V(ID_S_COVER,V_VAR1);
  126. int coverState=0; //0=Stop; 1=up; -1=down
  127. #endif
  128. #ifdef ID_S_TEMP
  129. MyMessage msg_S_TEMP(ID_S_TEMP,V_TEMP);
  130. #endif
  131. #ifdef ID_S_HUM
  132. MyMessage msg_S_HUM(ID_S_HUM,V_HUM);
  133. #endif
  134. #ifdef ID_S_BARO
  135. MyMessage msg_S_BARO_P(ID_S_BARO,V_PRESSURE);
  136. MyMessage msg_S_BARO_F(ID_S_BARO,V_FORECAST);
  137. #endif
  138. #ifdef ID_S_WIND
  139. MyMessage msg_S_WIND_S(ID_S_WIND,V_WIND);
  140. MyMessage msg_S_WIND_G(ID_S_WIND,V_GUST);
  141. MyMessage msg_S_WIND_D(ID_S_WIND,V_DIRECTION);
  142. #endif
  143. #ifdef ID_S_RAIN
  144. MyMessage msg_S_RAIN_A(ID_S_RAIN,V_RAIN);
  145. MyMessage msg_S_RAIN_R(ID_S_RAIN,V_RAINRATE);
  146. #endif
  147. #ifdef ID_S_UV
  148. MyMessage msg_S_UV(ID_S_UV,V_UV);
  149. #endif
  150. #ifdef ID_S_WEIGHT
  151. MyMessage msg_S_WEIGHT(ID_S_WEIGHT,V_WEIGHT);
  152. #endif
  153. #ifdef ID_S_POWER
  154. MyMessage msg_S_POWER_W(ID_S_POWER,V_WATT);
  155. MyMessage msg_S_POWER_K(ID_S_POWER,V_KWH);
  156. #endif
  157. #ifdef ID_S_HEATER
  158. //////// REVIEW IMPLEMENTATION ////////////
  159. MyMessage msg_S_HEATER_SET_POINT(ID_S_HEATER,
  160. V_HVAC_SETPOINT_HEAT); // HVAC/Heater setpoint (Integer between 0-100). S_HEATER, S_HVAC
  161. MyMessage msg_S_HEATER_FLOW_STATE(ID_S_HEATER,
  162. V_HVAC_FLOW_STATE); // Mode of header. One of "Off", "HeatOn", "CoolOn", or "AutoChangeOver" // S_HVAC, S_HEATER
  163. //MyMessage msg_S_HEATER_STATUS(ID_S_HEATER,V_STATUS);
  164. //MyMessage msg_S_HEATER_TEMP(ID_S_HEATER,V_TEMP);
  165. float heater_setpoint=21.5;
  166. String heater_flow_state="Off";
  167. // float heater_temp=23.5;
  168. // bool heater_status=false;
  169. // V_TEMP // Temperature
  170. // V_STATUS // Binary status. 0=off 1=on
  171. // V_HVAC_FLOW_STATE // Mode of header. One of "Off", "HeatOn", "CoolOn", or "AutoChangeOver"
  172. // V_HVAC_SPEED // HVAC/Heater fan speed ("Min", "Normal", "Max", "Auto")
  173. // V_HVAC_SETPOINT_HEAT // HVAC/Heater setpoint
  174. #endif
  175. #ifdef ID_S_DISTANCE
  176. MyMessage msg_S_DISTANCE(ID_S_DISTANCE,V_DISTANCE);
  177. #endif
  178. #ifdef ID_S_LIGHT_LEVEL
  179. MyMessage msg_S_LIGHT_LEVEL(ID_S_LIGHT_LEVEL,V_LIGHT_LEVEL);
  180. #endif
  181. #ifdef ID_S_LOCK
  182. MyMessage msg_S_LOCK(ID_S_LOCK,V_LOCK_STATUS);
  183. bool isLocked = 0;
  184. #endif
  185. #ifdef ID_S_IR
  186. MyMessage msg_S_IR_S(ID_S_IR,V_IR_SEND);
  187. MyMessage msg_S_IR_R(ID_S_IR,V_IR_RECEIVE);
  188. long irVal = 0;
  189. #endif
  190. #ifdef ID_S_WATER
  191. MyMessage msg_S_WATER_F(ID_S_WATER,V_FLOW);
  192. MyMessage msg_S_WATER_V(ID_S_WATER,V_VOLUME);
  193. #endif
  194. #ifdef ID_S_AIR_QUALITY
  195. MyMessage msg_S_AIR_QUALITY(ID_S_AIR_QUALITY,V_LEVEL);
  196. #endif
  197. #ifdef ID_S_DUST
  198. MyMessage msg_S_DUST(ID_S_DUST,V_LEVEL);
  199. #endif
  200. #ifdef ID_S_SCENE_CONTROLLER
  201. MyMessage msg_S_SCENE_CONTROLLER_ON(ID_S_SCENE_CONTROLLER,V_SCENE_ON);
  202. MyMessage msg_S_SCENE_CONTROLLER_OF(ID_S_SCENE_CONTROLLER,V_SCENE_OFF);
  203. // not sure if scene controller sends int or chars
  204. // betting on ints as Touch Display Scen by Hek // compiler warnings
  205. char *scenes[] = {
  206. (char *)"Good Morning",
  207. (char *)"Clean Up!",
  208. (char *)"All Lights Off",
  209. (char *)"Music On/Off"
  210. };
  211. int sceneVal=0;
  212. int sceneValPrevious=0;
  213. #endif
  214. #ifdef ID_S_RGB_LIGHT
  215. MyMessage msg_S_RGB_LIGHT_V_RGB(ID_S_RGB_LIGHT,V_RGB);
  216. MyMessage msg_S_RGB_LIGHT_V_WATT(ID_S_RGB_LIGHT,V_WATT);
  217. String rgbState="000000";
  218. //RGB light V_RGB, V_WATT
  219. //RGB value transmitted as ASCII hex string (I.e "ff0000" for red)
  220. #endif
  221. #ifdef ID_S_RGBW_LIGHT
  222. MyMessage msg_S_RGBW_LIGHT_V_RGBW(ID_S_RGBW_LIGHT,V_RGBW);
  223. MyMessage msg_S_RGBW_LIGHT_V_WATT(ID_S_RGBW_LIGHT,V_WATT);
  224. String rgbwState="00000000";
  225. //RGBW light (with separate white component) V_RGBW, V_WATT
  226. //RGBW value transmitted as ASCII hex string (I.e "ff0000ff" for red + full white) S_RGBW_LIGHT
  227. #endif
  228. #ifdef ID_S_COLOR_SENSOR
  229. MyMessage msg_S_COLOR_SENSOR_V_RGB(ID_S_COLOR_SENSOR,V_RGB);
  230. //Color sensor V_RGB
  231. //RGB value transmitted as ASCII hex string (I.e "ff0000" for red) S_RGB_LIGHT, S_COLOR_SENSOR
  232. #endif
  233. #ifdef ID_S_HVAC
  234. MyMessage msg_S_HVAC_V_HVAC_SETPOINT_HEAT(ID_S_HVAC,V_HVAC_SETPOINT_HEAT);
  235. MyMessage msg_S_HVAC_V_HVAC_SETPOINT_COOL(ID_S_HVAC,V_HVAC_SETPOINT_COOL);
  236. MyMessage msg_S_HVAC_V_HVAC_FLOW_STATET(ID_S_HVAC,V_HVAC_FLOW_STATE);
  237. MyMessage msg_S_HVAC_V_HVAC_FLOW_MODE(ID_S_HVAC,V_HVAC_FLOW_MODE);
  238. MyMessage msg_S_HVAC_V_HVAC_SPEED(ID_S_HVAC,V_HVAC_SPEED);
  239. float hvac_SetPointHeat = 16.5;
  240. float hvac_SetPointCool = 25.5;
  241. String hvac_FlowState = "AutoChangeOver";
  242. String hvac_FlowMode = "Auto";
  243. String hvac_Speed = "Normal";
  244. //Thermostat/HVAC device
  245. //V_HVAC_SETPOINT_HEAT, // HVAC/Heater setpoint
  246. //V_HVAC_SETPOINT_COOL, // HVAC cold setpoint
  247. //V_HVAC_FLOW_STATE, // Mode of header. One of "Off", "HeatOn", "CoolOn", or "AutoChangeOver"
  248. //V_HVAC_FLOW_MODE, // Flow mode for HVAC ("Auto", "ContinuousOn", "PeriodicOn")
  249. //V_HVAC_SPEED // HVAC/Heater fan speed ("Min", "Normal", "Max", "Auto")
  250. // NOT IMPLEMENTED YET
  251. //V_TEMP // Temperature
  252. //V_STATUS // Binary status. 0=off 1=on
  253. #endif
  254. #ifdef ID_S_MULTIMETER
  255. MyMessage msg_S_MULTIMETER_V_IMPEDANCE(ID_S_MULTIMETER,V_IMPEDANCE);
  256. MyMessage msg_S_MULTIMETER_V_VOLTAGE(ID_S_MULTIMETER,V_VOLTAGE);
  257. MyMessage msg_S_MULTIMETER_V_CURRENT(ID_S_MULTIMETER,V_CURRENT);
  258. // Multimeter device V_VOLTAGE, V_CURRENT, V_IMPEDANCE
  259. // V_IMPEDANCE 14 Impedance value
  260. // V_VOLTAGE 38 Voltage level
  261. // V_CURRENT 39 Current level
  262. #endif
  263. #ifdef ID_S_SPRINKLER
  264. // S_SPRINKLER 31 Sprinkler device V_STATUS (turn on/off), V_TRIPPED (if fire detecting device)
  265. // V_STATUS 2 Binary status. 0=off 1=on
  266. // V_ARMED 15 Armed status of a security sensor. 1=Armed, 0=Bypassed
  267. // V_TRIPPED 16 Tripped status of a security sensor. 1=Tripped, 0=Untripped
  268. #endif
  269. #ifdef ID_S_WATER_LEAK
  270. #endif
  271. #ifdef ID_S_SOUND
  272. #endif
  273. #ifdef ID_S_VIBRATION
  274. #endif
  275. #ifdef ID_S_MOISTURE
  276. #endif
  277. #ifdef ID_S_MOISTURE
  278. MyMessage msg_S_MOISTURE(ID_S_MOISTURE,V_LEVEL);
  279. #endif
  280. #ifdef ID_S_CUSTOM
  281. MyMessage msg_S_CUSTOM_1(ID_S_CUSTOM,V_VAR1);
  282. MyMessage msg_S_CUSTOM_2(ID_S_CUSTOM,V_VAR2);
  283. MyMessage msg_S_CUSTOM_3(ID_S_CUSTOM,V_VAR3);
  284. MyMessage msg_S_CUSTOM_4(ID_S_CUSTOM,V_VAR4);
  285. MyMessage msg_S_CUSTOM_5(ID_S_CUSTOM,V_VAR5);
  286. #endif
  287. void setup()
  288. {
  289. // Random SEED
  290. randomSeed(analogRead(0));
  291. wait(LONG_WAIT);
  292. Serial.println("GW Started");
  293. }
  294. void presentation()
  295. {
  296. // Send the Sketch Version Information to the Gateway
  297. Serial.print("Send Sketch Info: ");
  298. sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
  299. Serial.print(SKETCH_NAME);
  300. Serial.println(SKETCH_VERSION);
  301. wait(LONG_WAIT);
  302. // Get controller configuration
  303. Serial.print("Get Config: ");
  304. metric = getControllerConfig().isMetric;
  305. Serial.println(metric ? "Metric":"Imperial");
  306. wait(LONG_WAIT);
  307. // Init Armed
  308. #ifdef ID_S_ARMED
  309. isArmed = true;
  310. #endif
  311. // Register all sensors to gw (they will be created as child devices)
  312. Serial.println("Presenting Nodes");
  313. Serial.println("________________");
  314. #ifdef ID_S_DOOR
  315. Serial.println(" S_DOOR");
  316. present(ID_S_DOOR,S_DOOR,"Outside Door");
  317. wait(SHORT_WAIT);
  318. #endif
  319. #ifdef ID_S_MOTION
  320. Serial.println(" S_MOTION");
  321. present(ID_S_MOTION,S_MOTION,"Outside Motion");
  322. wait(SHORT_WAIT);
  323. #endif
  324. #ifdef ID_S_SMOKE
  325. Serial.println(" S_SMOKE");
  326. present(ID_S_SMOKE,S_SMOKE,"Kitchen Smoke");
  327. wait(SHORT_WAIT);
  328. #endif
  329. #ifdef ID_S_LIGHT
  330. Serial.println(" S_LIGHT");
  331. present(ID_S_LIGHT,S_LIGHT,"Hall Light");
  332. wait(SHORT_WAIT);
  333. #endif
  334. #ifdef ID_S_DIMMER
  335. Serial.println(" S_DIMMER");
  336. present(ID_S_DIMMER,S_DIMMER,"Living room dimmer");
  337. wait(SHORT_WAIT);
  338. #endif
  339. #ifdef ID_S_COVER
  340. Serial.println(" S_COVER");
  341. present(ID_S_COVER,S_COVER,"Window cover");
  342. wait(SHORT_WAIT);
  343. #endif
  344. #ifdef ID_S_TEMP
  345. Serial.println(" S_TEMP");
  346. present(ID_S_TEMP,S_TEMP,"House Temperarue");
  347. wait(SHORT_WAIT);
  348. #endif
  349. #ifdef ID_S_HUM
  350. Serial.println(" S_HUM");
  351. present(ID_S_HUM,S_HUM,"Current Humidity");
  352. wait(SHORT_WAIT);
  353. #endif
  354. #ifdef ID_S_BARO
  355. Serial.println(" S_BARO");
  356. present(ID_S_BARO,S_BARO," Air pressure");
  357. wait(SHORT_WAIT);
  358. #endif
  359. #ifdef ID_S_WIND
  360. Serial.println(" S_WIND");
  361. present(ID_S_WIND,S_WIND,"Wind Station");
  362. wait(SHORT_WAIT);
  363. #endif
  364. #ifdef ID_S_RAIN
  365. Serial.println(" S_RAIN");
  366. present(ID_S_RAIN,S_RAIN,"Rain Station");
  367. wait(SHORT_WAIT);
  368. #endif
  369. #ifdef ID_S_UV
  370. Serial.println(" S_UV");
  371. present(ID_S_UV,S_UV,"Ultra Violet");
  372. wait(SHORT_WAIT);
  373. #endif
  374. #ifdef ID_S_WEIGHT
  375. Serial.println(" S_WEIGHT");
  376. present(ID_S_WEIGHT,S_WEIGHT,"Outdoor Scale");
  377. wait(SHORT_WAIT);
  378. #endif
  379. #ifdef ID_S_POWER
  380. Serial.println(" S_POWER");
  381. present(ID_S_POWER,S_POWER,"Power Metric");
  382. wait(SHORT_WAIT);
  383. #endif
  384. #ifdef ID_S_HEATER
  385. Serial.println(" S_HEATER");
  386. present(ID_S_HEATER,S_HEATER,"Garage Heater");
  387. wait(SHORT_WAIT);
  388. #endif
  389. #ifdef ID_S_DISTANCE
  390. Serial.println(" S_DISTANCE");
  391. present(ID_S_DISTANCE,S_DISTANCE,"Distance Measure");
  392. wait(SHORT_WAIT);
  393. #endif
  394. #ifdef ID_S_LIGHT_LEVEL
  395. Serial.println(" S_LIGHT_LEVEL");
  396. present(ID_S_LIGHT_LEVEL,S_LIGHT_LEVEL,"Outside Light Level");
  397. wait(SHORT_WAIT);
  398. #endif
  399. #ifdef ID_S_LOCK
  400. Serial.println(" S_LOCK");
  401. present(ID_S_LOCK,S_LOCK,"Front Door Lock");
  402. wait(SHORT_WAIT);
  403. #endif
  404. #ifdef ID_S_IR
  405. Serial.println(" S_IR");
  406. present(ID_S_IR,S_IR,"Univeral Command");
  407. wait(SHORT_WAIT);
  408. #endif
  409. #ifdef ID_S_WATER
  410. Serial.println(" S_WATER");
  411. present(ID_S_WATER,S_WATER,"Water Level");
  412. wait(SHORT_WAIT);
  413. #endif
  414. #ifdef ID_S_AIR_QUALITY
  415. Serial.println(" S_AIR_QUALITY");
  416. present(ID_S_AIR_QUALITY,S_AIR_QUALITY,"Air Station");
  417. wait(SHORT_WAIT);
  418. #endif
  419. #ifdef ID_S_DUST
  420. Serial.println(" S_DUST");
  421. present(ID_S_DUST,S_DUST,"Dust Level");
  422. wait(SHORT_WAIT);
  423. #endif
  424. #ifdef ID_S_SCENE_CONTROLLER
  425. Serial.println(" S_SCENE_CONTROLLER");
  426. present(ID_S_SCENE_CONTROLLER,S_SCENE_CONTROLLER,"Scene Controller");
  427. wait(SHORT_WAIT);
  428. #endif
  429. #ifdef ID_S_RGB_LIGHT
  430. Serial.println(" RGB_LIGHT");
  431. present(ID_S_RGB_LIGHT,S_RGB_LIGHT,"Mood Light");
  432. wait(SHORT_WAIT);
  433. #endif
  434. #ifdef ID_S_RGBW_LIGHT
  435. Serial.println(" RGBW_LIGHT");
  436. present(ID_S_RGBW_LIGHT,S_RGBW_LIGHT,"Mood Light 2");
  437. wait(SHORT_WAIT);
  438. #endif
  439. #ifdef ID_S_COLOR_SENSOR
  440. Serial.println(" COLOR_SENSOR");
  441. present(ID_S_COLOR_SENSOR,S_COLOR_SENSOR,"Hall Painting");
  442. wait(SHORT_WAIT);
  443. #endif
  444. #ifdef ID_S_HVAC
  445. Serial.println(" HVAC");
  446. present(ID_S_HVAC,S_HVAC,"HVAC");
  447. wait(SHORT_WAIT);
  448. #endif
  449. #ifdef ID_S_MULTIMETER
  450. Serial.println(" MULTIMETER");
  451. present(ID_S_MULTIMETER,S_MULTIMETER,"Electric Staion");
  452. wait(SHORT_WAIT);
  453. #endif
  454. #ifdef ID_S_SPRINKLER
  455. #endif
  456. #ifdef ID_S_WATER_LEAK
  457. #endif
  458. #ifdef ID_S_SOUND
  459. #endif
  460. #ifdef ID_S_VIBRATION
  461. #endif
  462. #ifdef ID_S_MOISTURE
  463. #endif
  464. #ifdef ID_S_MOISTURE
  465. Serial.println(" S_MOISTURE");
  466. present(ID_S_MOISTURE,S_MOISTURE,"Basement Sensor");
  467. wait(SHORT_WAIT);
  468. #endif
  469. #ifdef ID_S_CUSTOM
  470. Serial.println(" S_CUSTOM");
  471. present(ID_S_CUSTOM,S_CUSTOM,"Other Stuff");
  472. wait(SHORT_WAIT);
  473. #endif
  474. Serial.println("________________");
  475. }
  476. void loop()
  477. {
  478. Serial.println("");
  479. Serial.println("");
  480. Serial.println("");
  481. Serial.println("#########################");
  482. randNumber=random(0,101);
  483. Serial.print("RandomNumber:");
  484. Serial.println(randNumber);
  485. // Send fake battery level
  486. Serial.println("Send Battery Level");
  487. sendBatteryLevel(randNumber);
  488. wait(LONG_WAIT);
  489. // Request time
  490. Serial.println("Request Time");
  491. requestTime();
  492. wait(LONG_WAIT);
  493. //Read Sensors
  494. #ifdef ID_S_DOOR
  495. door();
  496. #endif
  497. #ifdef ID_S_MOTION
  498. motion();
  499. #endif
  500. #ifdef ID_S_SMOKE
  501. smoke();
  502. #endif
  503. #ifdef ID_S_LIGHT
  504. light();
  505. #endif
  506. #ifdef ID_S_DIMMER
  507. dimmer();
  508. #endif
  509. #ifdef ID_S_COVER
  510. cover();
  511. #endif
  512. #ifdef ID_S_TEMP
  513. temp();
  514. #endif
  515. #ifdef ID_S_HUM
  516. hum();
  517. #endif
  518. #ifdef ID_S_BARO
  519. baro();
  520. #endif
  521. #ifdef ID_S_WIND
  522. wind();
  523. #endif
  524. #ifdef ID_S_RAIN
  525. rain();
  526. #endif
  527. #ifdef ID_S_UV
  528. uv();
  529. #endif
  530. #ifdef ID_S_WEIGHT
  531. weight();
  532. #endif
  533. #ifdef ID_S_POWER
  534. power();
  535. #endif
  536. #ifdef ID_S_HEATER
  537. heater();
  538. #endif
  539. #ifdef ID_S_DISTANCE
  540. distance();
  541. #endif
  542. #ifdef ID_S_LIGHT_LEVEL
  543. light_level();
  544. #endif
  545. #ifdef ID_S_LOCK
  546. lock();
  547. #endif
  548. #ifdef ID_S_IR
  549. ir();
  550. #endif
  551. #ifdef ID_S_WATER
  552. water();
  553. #endif
  554. #ifdef ID_S_AIR_QUALITY
  555. air();
  556. #endif
  557. #ifdef ID_S_DUST
  558. dust();
  559. #endif
  560. #ifdef ID_S_SCENE_CONTROLLER
  561. scene();
  562. #endif
  563. #ifdef ID_S_RGB_LIGHT
  564. rgbLight();
  565. #endif
  566. #ifdef ID_S_RGBW_LIGHT
  567. rgbwLight();
  568. #endif
  569. #ifdef ID_S_COLOR_SENSOR
  570. color();
  571. #endif
  572. #ifdef ID_S_HVAC
  573. hvac();
  574. #endif
  575. #ifdef ID_S_MULTIMETER
  576. multimeter();
  577. #endif
  578. #ifdef ID_S_SPRINKLER
  579. #endif
  580. #ifdef ID_S_WATER_LEAK
  581. #endif
  582. #ifdef ID_S_SOUND
  583. #endif
  584. #ifdef ID_S_VIBRATION
  585. #endif
  586. #ifdef ID_S_MOISTURE
  587. #endif
  588. #ifdef ID_S_MOISTURE
  589. moisture();
  590. #endif
  591. #ifdef ID_S_CUSTOM
  592. custom();
  593. #endif
  594. sendBatteryLevel(randNumber);
  595. wait(SHORT_WAIT);
  596. Serial.println("#########################");
  597. wait(SLEEP_TIME); //sleep a bit
  598. }
  599. // This is called when a new time value was received
  600. void receiveTime(uint32_t controllerTime)
  601. {
  602. Serial.print("Time value received: ");
  603. Serial.println(controllerTime);
  604. }
  605. //void door(){}
  606. #ifdef ID_S_DOOR
  607. void door()
  608. {
  609. Serial.print("Door is: " );
  610. if (randNumber <= 50) {
  611. Serial.println("Open");
  612. send(msg_S_DOOR_T.set((int16_t)1));
  613. } else {
  614. Serial.println("Closed");
  615. send(msg_S_DOOR_T.set((int16_t)0));
  616. }
  617. #ifdef ID_S_ARMED
  618. Serial.print("System is: " );
  619. Serial.println((isArmed ? "Armed":"Disarmed"));
  620. send(msg_S_DOOR_A.set(isArmed));
  621. #endif
  622. }
  623. #endif
  624. #ifdef ID_S_MOTION
  625. void motion()
  626. {
  627. Serial.print("Motion is: " );
  628. if (randNumber <= 50) {
  629. Serial.println("Active");
  630. send(msg_S_MOTION_T.set(1));
  631. } else {
  632. Serial.println("Quiet");
  633. send(msg_S_MOTION_T.set(0));
  634. }
  635. #ifdef ID_S_ARMED
  636. Serial.print("System is: " );
  637. Serial.println((isArmed ? "Armed":"Disarmed"));
  638. send(msg_S_MOTION_A.set(isArmed));
  639. #endif
  640. }
  641. #endif
  642. #ifdef ID_S_SMOKE
  643. void smoke()
  644. {
  645. Serial.print("Smoke is: " );
  646. if (randNumber <= 50) {
  647. Serial.println("Active");
  648. send(msg_S_SMOKE_T.set(1));
  649. } else {
  650. Serial.println("Quiet");
  651. send(msg_S_SMOKE_T.set(0));
  652. }
  653. #ifdef ID_S_ARMED
  654. Serial.print("System is: " );
  655. Serial.println((isArmed ? "Armed":"Disarmed"));
  656. send(msg_S_SMOKE_A.set(isArmed));
  657. #endif
  658. }
  659. #endif
  660. #ifdef ID_S_LIGHT
  661. void light()
  662. {
  663. Serial.print("Light is: " );
  664. Serial.println((isLightOn ? "On":"Off"));
  665. send(msg_S_LIGHT.set(isLightOn));
  666. }
  667. #endif
  668. #ifdef ID_S_DIMMER
  669. void dimmer()
  670. {
  671. Serial.print("Dimmer is set to: " );
  672. Serial.println(dimmerVal);
  673. send(msg_S_DIMMER.set(dimmerVal));
  674. }
  675. #endif
  676. #ifdef ID_S_COVER
  677. void cover()
  678. {
  679. Serial.print("Cover is : " );
  680. if (coverState == 1) {
  681. Serial.println("Opening");
  682. send(msg_S_COVER_U.set(1));
  683. } else if (coverState == -1) {
  684. Serial.println("Closing");
  685. send(msg_S_COVER_D.set(0));
  686. } else {
  687. Serial.println("Idle");
  688. send(msg_S_COVER_S.set(-1));
  689. }
  690. send(msg_S_COVER_V.set(coverState));
  691. }
  692. #endif
  693. #ifdef ID_S_TEMP
  694. void temp()
  695. {
  696. Serial.print("Temperature is: " );
  697. Serial.println(map(randNumber,1,100,0,45));
  698. send(msg_S_TEMP.set(map(randNumber,1,100,0,45)));
  699. }
  700. #endif
  701. #ifdef ID_S_HUM
  702. void hum()
  703. {
  704. Serial.print("Humidity is: " );
  705. Serial.println(randNumber);
  706. send(msg_S_HUM.set(randNumber));
  707. }
  708. #endif
  709. #ifdef ID_S_BARO
  710. void baro()
  711. {
  712. const char *weather[] = {"stable","sunny","cloudy","unstable","thunderstorm","unknown"};
  713. long pressure = map(randNumber,1,100,870,1086);// hPa?
  714. int forecast = map(randNumber,1,100,0,5);
  715. Serial.print("Atmospheric Pressure is: " );
  716. Serial.println(pressure);
  717. send(msg_S_BARO_P.set(pressure));
  718. Serial.print("Weather forecast: " );
  719. Serial.println(weather[forecast]);
  720. send(msg_S_BARO_F.set(weather[forecast]));
  721. }
  722. #endif
  723. #ifdef ID_S_WIND
  724. void wind()
  725. {
  726. Serial.print("Wind Speed is: " );
  727. Serial.println(randNumber);
  728. send(msg_S_WIND_S.set(randNumber));
  729. Serial.print("Wind Gust is: " );
  730. Serial.println(randNumber+10);
  731. send(msg_S_WIND_G.set(randNumber+10));
  732. Serial.print("Wind Direction is: " );
  733. Serial.println(map(randNumber,1,100,0,360));
  734. send(msg_S_WIND_D.set(map(randNumber,1,100,0,360)));
  735. }
  736. #endif
  737. #ifdef ID_S_RAIN
  738. void rain()
  739. {
  740. Serial.print("Rain amount is: " );
  741. Serial.println(randNumber);
  742. send(msg_S_RAIN_A.set(randNumber));
  743. Serial.print("Rain rate is: " );
  744. Serial.println(randNumber/60);
  745. send(msg_S_RAIN_R.set(randNumber/60,1));
  746. }
  747. #endif
  748. #ifdef ID_S_UV
  749. void uv()
  750. {
  751. Serial.print("Ultra Violet level is: " );
  752. Serial.println(map(randNumber,1,100,0,15));
  753. send(msg_S_UV.set(map(randNumber,1,100,0,15)));
  754. }
  755. #endif
  756. #ifdef ID_S_WEIGHT
  757. void weight()
  758. {
  759. Serial.print("Weight is: " );
  760. Serial.println(map(randNumber,1,100,0,150));
  761. send(msg_S_WEIGHT.set(map(randNumber,1,100,0,150)));
  762. }
  763. #endif
  764. #ifdef ID_S_POWER
  765. void power()
  766. {
  767. Serial.print("Watt is: " );
  768. Serial.println(map(randNumber,1,100,0,150));
  769. send(msg_S_POWER_W.set(map(randNumber,1,100,0,150)));
  770. Serial.print("KWH is: " );
  771. Serial.println(map(randNumber,1,100,0,150));
  772. send(msg_S_POWER_K.set(map(randNumber,1,100,0,150)));
  773. }
  774. #endif
  775. #ifdef ID_S_HEATER
  776. void heater()
  777. {
  778. // float heater_setpoint=21.5;
  779. // float heater_temp=23.5;
  780. // bool heater_status=false;
  781. // String heatState="Off";
  782. Serial.print("Heater flow state is: " );
  783. Serial.println(heater_flow_state);
  784. send(msg_S_HEATER_FLOW_STATE.set(heater_flow_state.c_str()));
  785. // Serial.print("Heater on/off is: " );
  786. // Serial.println((heater_status==true)?"On":"Off");
  787. // send(msg_S_HEATER_STATUS.set(heater_status));
  788. // Serial.print("Heater Temperature is: " );
  789. // Serial.println(heater_temp,1);
  790. // send(msg_S_HEATER_TEMP.set(heater_temp,1));
  791. Serial.print("Heater Setpoint: " );
  792. Serial.println(heater_setpoint,1);
  793. send(msg_S_HEATER_SET_POINT.set(heater_setpoint,1));
  794. }
  795. #endif
  796. #ifdef ID_S_DISTANCE
  797. void distance()
  798. {
  799. Serial.print("Distance is: " );
  800. Serial.println(map(randNumber,1,100,0,150));
  801. send(msg_S_DISTANCE.set(map(randNumber,1,100,0,150)));
  802. }
  803. #endif
  804. #ifdef ID_S_LIGHT_LEVEL
  805. void light_level()
  806. {
  807. Serial.print("Light is: " );
  808. Serial.println(map(randNumber,1,100,0,150));
  809. send(msg_S_LIGHT_LEVEL.set(map(randNumber,1,100,0,150)));
  810. }
  811. #endif
  812. #ifdef ID_S_LOCK
  813. void lock()
  814. {
  815. Serial.print("Lock is: " );
  816. Serial.println((isLocked ? "Locked":"Unlocked"));
  817. send(msg_S_LOCK.set(isLocked));
  818. }
  819. #endif
  820. #ifdef ID_S_IR
  821. void ir()
  822. {
  823. Serial.print("Infrared is: " );
  824. Serial.println(irVal);
  825. send(msg_S_IR_S.set(irVal));
  826. send(msg_S_IR_R.set(irVal));
  827. }
  828. #endif
  829. #ifdef ID_S_WATER
  830. void water()
  831. {
  832. Serial.print("Water flow is: " );
  833. Serial.println(map(randNumber,1,100,0,150));
  834. send(msg_S_WATER_F.set(map(randNumber,1,100,0,150)));
  835. Serial.print("Water volume is: " );
  836. Serial.println(map(randNumber,1,100,0,150));
  837. send(msg_S_WATER_V.set(map(randNumber,1,100,0,150)));
  838. }
  839. #endif
  840. #ifdef ID_S_AIR_QUALITY
  841. void air()
  842. {
  843. Serial.print("Air Quality is: " );
  844. Serial.println(randNumber);
  845. send(msg_S_AIR_QUALITY.set(randNumber));
  846. }
  847. #endif
  848. #ifdef ID_S_DUST
  849. void dust()
  850. {
  851. Serial.print("Dust level is: " );
  852. Serial.println(randNumber);
  853. send(msg_S_DUST.set(randNumber));
  854. }
  855. #endif
  856. #ifdef ID_S_SCENE_CONTROLLER
  857. void scene()
  858. {
  859. Serial.print("Scene is: " );
  860. Serial.println(scenes[sceneVal]);
  861. if(sceneValPrevious != sceneVal) {
  862. send(msg_S_SCENE_CONTROLLER_OF.set(sceneValPrevious));
  863. send(msg_S_SCENE_CONTROLLER_ON.set(sceneVal));
  864. sceneValPrevious=sceneVal;
  865. }
  866. }
  867. #endif
  868. #ifdef ID_S_RGB_LIGHT
  869. void rgbLight()
  870. {
  871. Serial.print("RGB Light state is: " );
  872. Serial.println(rgbState);
  873. send(msg_S_RGB_LIGHT_V_RGB.set(rgbState.c_str()));
  874. Serial.print("RGB Light Watt is: " );
  875. Serial.println(map(randNumber,1,100,0,150));
  876. send(msg_S_RGB_LIGHT_V_WATT.set(map(randNumber,1,100,0,150)));
  877. }
  878. #endif
  879. #ifdef ID_S_RGBW_LIGHT
  880. void rgbwLight()
  881. {
  882. Serial.print("RGBW Light state is: " );
  883. Serial.println(rgbwState);
  884. send(msg_S_RGBW_LIGHT_V_RGBW.set(rgbwState.c_str()));
  885. Serial.print("RGBW Light Watt is: " );
  886. Serial.println(map(randNumber,1,100,0,150));
  887. send(msg_S_RGBW_LIGHT_V_WATT.set(map(randNumber,1,100,0,150)));
  888. }
  889. #endif
  890. #ifdef ID_S_COLOR_SENSOR
  891. void color()
  892. {
  893. String colorState;
  894. String red = String(random(0,256),HEX);
  895. String green = String(random(0,256),HEX);
  896. String blue = String(random(0,256),HEX);
  897. colorState=String(red + green + blue);
  898. Serial.print("Color state is: " );
  899. Serial.println(colorState);
  900. send(msg_S_COLOR_SENSOR_V_RGB.set(colorState.c_str()));
  901. }
  902. #endif
  903. #ifdef ID_S_HVAC
  904. void hvac()
  905. {
  906. // float hvac_SetPointHeat = 16.5;
  907. // float hvac_SetPointCool = 25.5;
  908. // String hvac_FlowState = "AutoChangeOver";
  909. // String hvac_FlowMode = "Auto";
  910. // String hvac_Speed = "Normal";
  911. Serial.print("HVAC Set Point Heat is: " );
  912. Serial.println(hvac_SetPointHeat);
  913. send(msg_S_HVAC_V_HVAC_SETPOINT_HEAT.set(hvac_SetPointHeat,1));
  914. Serial.print("HVAC Set Point Cool is: " );
  915. Serial.println(hvac_SetPointCool);
  916. send(msg_S_HVAC_V_HVAC_SETPOINT_COOL.set(hvac_SetPointCool,1));
  917. Serial.print("HVAC Flow State is: " );
  918. Serial.println(hvac_FlowState);
  919. send(msg_S_HVAC_V_HVAC_FLOW_STATET.set(hvac_FlowState.c_str()));
  920. Serial.print("HVAC Flow Mode is: " );
  921. Serial.println(hvac_FlowMode);
  922. send(msg_S_HVAC_V_HVAC_FLOW_MODE.set(hvac_FlowMode.c_str()));
  923. Serial.print("HVAC Speed is: " );
  924. Serial.println(hvac_Speed);
  925. send(msg_S_HVAC_V_HVAC_SPEED.set(hvac_Speed.c_str()));
  926. }
  927. #endif
  928. #ifdef ID_S_MULTIMETER
  929. void multimeter()
  930. {
  931. int impedance=map(randNumber,1,100,0,15000);
  932. int volt=map(randNumber,1,100,0,380);
  933. int amps=map(randNumber,1,100,0,16);
  934. Serial.print("Impedance is: " );
  935. Serial.println(impedance);
  936. send(msg_S_MULTIMETER_V_IMPEDANCE.set(impedance));
  937. Serial.print("Voltage is: " );
  938. Serial.println(volt);
  939. send(msg_S_MULTIMETER_V_VOLTAGE.set(volt));
  940. Serial.print("Current is: " );
  941. Serial.println(amps);
  942. send(msg_S_MULTIMETER_V_CURRENT.set(amps));
  943. }
  944. #endif
  945. #ifdef ID_S_SPRINKLER
  946. #endif
  947. #ifdef ID_S_WATER_LEAK
  948. #endif
  949. #ifdef ID_S_SOUND
  950. #endif
  951. #ifdef ID_S_VIBRATION
  952. #endif
  953. #ifdef ID_S_MOISTURE
  954. #endif
  955. #ifdef ID_S_MOISTURE
  956. void moisture()
  957. {
  958. Serial.print("Moisture level is: " );
  959. Serial.println(randNumber);
  960. send(msg_S_MOISTURE.set(randNumber));
  961. }
  962. #endif
  963. #ifdef ID_S_CUSTOM
  964. void custom()
  965. {
  966. Serial.print("Custom value is: " );
  967. Serial.println(randNumber);
  968. send(msg_S_CUSTOM_1.set(randNumber));
  969. send(msg_S_CUSTOM_2.set(randNumber));
  970. send(msg_S_CUSTOM_3.set(randNumber));
  971. send(msg_S_CUSTOM_4.set(randNumber));
  972. send(msg_S_CUSTOM_5.set(randNumber));
  973. }
  974. #endif
  975. void receive(const MyMessage &message)
  976. {
  977. switch (message.type) {
  978. #ifdef ID_S_ARMED
  979. case V_ARMED:
  980. isArmed = message.getBool();
  981. Serial.print("Incoming change for ID_S_ARMED:");
  982. Serial.print(message.sensor);
  983. Serial.print(", New status: ");
  984. Serial.println((isArmed ? "Armed":"Disarmed" ));
  985. #ifdef ID_S_DOOR
  986. door();//temp ack for door
  987. #endif
  988. #ifdef ID_S_MOTION
  989. motion();//temp ack
  990. #endif
  991. #ifdef ID_S_SMOKE
  992. smoke();//temp ack
  993. #endif
  994. break;
  995. #endif
  996. case V_STATUS: // V_LIGHT:
  997. #ifdef ID_S_LIGHT
  998. if(message.sensor==ID_S_LIGHT) {
  999. isLightOn = message.getBool();
  1000. Serial.print("Incoming change for ID_S_LIGHT:");
  1001. Serial.print(message.sensor);
  1002. Serial.print(", New status: ");
  1003. Serial.println((isLightOn ? "On":"Off"));
  1004. light(); // temp ack
  1005. }
  1006. #endif
  1007. // #ifdef ID_S_HEATER
  1008. // if(message.sensor == ID_S_HEATER){
  1009. // heater_status = message.getBool();
  1010. // Serial.print("Incoming change for ID_S_HEATER:");
  1011. // Serial.print(message.sensor);
  1012. // Serial.print(", New status: ");
  1013. // Serial.println(heater_status);
  1014. // heater();//temp ack
  1015. // }
  1016. // #endif
  1017. break;
  1018. #ifdef ID_S_DIMMER
  1019. case V_DIMMER:
  1020. if ((message.getInt()<0)||(message.getInt()>100)) {
  1021. Serial.println( "V_DIMMER data invalid (should be 0..100)" );
  1022. break;
  1023. }
  1024. dimmerVal= message.getInt();
  1025. Serial.print("Incoming change for ID_S_DIMMER:");
  1026. Serial.print(message.sensor);
  1027. Serial.print(", New status: ");
  1028. Serial.println(message.getInt());
  1029. dimmer();// temp ack
  1030. break;
  1031. #endif
  1032. #ifdef ID_S_COVER
  1033. case V_UP:
  1034. coverState=1;
  1035. Serial.print("Incoming change for ID_S_COVER:");
  1036. Serial.print(message.sensor);
  1037. Serial.print(", New status: ");
  1038. Serial.println("V_UP");
  1039. cover(); // temp ack
  1040. break;
  1041. case V_DOWN:
  1042. coverState=-1;
  1043. Serial.print("Incoming change for ID_S_COVER:");
  1044. Serial.print(message.sensor);
  1045. Serial.print(", New status: ");
  1046. Serial.println("V_DOWN");
  1047. cover(); //temp ack
  1048. break;
  1049. case V_STOP:
  1050. coverState=0;
  1051. Serial.print("Incoming change for ID_S_COVER:");
  1052. Serial.print(message.sensor);
  1053. Serial.print(", New status: ");
  1054. Serial.println("V_STOP");
  1055. cover(); //temp ack
  1056. break;
  1057. #endif
  1058. case V_HVAC_SETPOINT_HEAT:
  1059. #ifdef ID_S_HEATER
  1060. if(message.sensor == ID_S_HEATER) {
  1061. heater_setpoint=message.getFloat();
  1062. Serial.print("Incoming set point for ID_S_HEATER:");
  1063. Serial.print(message.sensor);
  1064. Serial.print(", New status: ");
  1065. Serial.println(heater_setpoint,1);
  1066. heater();//temp ack
  1067. }
  1068. #endif
  1069. #ifdef ID_S_HVAC
  1070. if(message.sensor == ID_S_HVAC) {
  1071. hvac_SetPointHeat=message.getFloat();
  1072. Serial.print("Incoming set point for ID_S_HVAC:");
  1073. Serial.print(message.sensor);
  1074. Serial.print(", New status: ");
  1075. Serial.println(hvac_SetPointHeat,1);
  1076. hvac();//temp ack
  1077. }
  1078. #endif
  1079. break;
  1080. case V_HVAC_FLOW_STATE:
  1081. #ifdef ID_S_HEATER
  1082. if(message.sensor == ID_S_HEATER) {
  1083. heater_flow_state=message.getString();
  1084. Serial.print("Incoming flow state change for ID_S_HEATER:");
  1085. Serial.print(message.sensor);
  1086. Serial.print(", New status: ");
  1087. Serial.println(heater_flow_state);
  1088. heater();//temp ack
  1089. }
  1090. #endif
  1091. #ifdef ID_S_HVAC
  1092. if(message.sensor == ID_S_HVAC) {
  1093. hvac_FlowState=message.getString();
  1094. Serial.print("Incoming set point for ID_S_HVAC:");
  1095. Serial.print(message.sensor);
  1096. Serial.print(", New status: ");
  1097. Serial.println(hvac_FlowState);
  1098. hvac();//temp ack
  1099. }
  1100. #endif
  1101. break;
  1102. #ifdef ID_S_LOCK
  1103. case V_LOCK_STATUS:
  1104. isLocked = message.getBool();
  1105. Serial.print("Incoming change for ID_S_LOCK:");
  1106. Serial.print(message.sensor);
  1107. Serial.print(", New status: ");
  1108. Serial.println(message.getBool()?"Locked":"Unlocked");
  1109. lock(); //temp ack
  1110. break;
  1111. #endif
  1112. #ifdef ID_S_IR
  1113. case V_IR_SEND:
  1114. irVal = message.getLong();
  1115. Serial.print("Incoming change for ID_S_IR:");
  1116. Serial.print(message.sensor);
  1117. Serial.print(", New status: ");
  1118. Serial.println(irVal);
  1119. ir(); // temp ack
  1120. break;
  1121. case V_IR_RECEIVE:
  1122. irVal = message.getLong();
  1123. Serial.print("Incoming change for ID_S_IR:");
  1124. Serial.print(message.sensor);
  1125. Serial.print(", New status: ");
  1126. Serial.println(irVal);
  1127. ir(); // temp ack
  1128. break;
  1129. #endif
  1130. #ifdef ID_S_SCENE_CONTROLLER
  1131. case V_SCENE_ON:
  1132. sceneVal = message.getInt();
  1133. Serial.print("Incoming change for ID_S_SCENE_CONTROLLER:");
  1134. Serial.print(message.sensor);
  1135. Serial.print(", New status: ");
  1136. Serial.print(scenes[sceneVal]);
  1137. Serial.println(" On");
  1138. scene();// temp ack
  1139. break;
  1140. case V_SCENE_OFF:
  1141. sceneVal = message.getInt();
  1142. Serial.print("Incoming change for ID_S_SCENE_CONTROLLER:");
  1143. Serial.print(message.sensor);
  1144. Serial.print(", New status: ");
  1145. Serial.print(scenes[sceneVal]);
  1146. Serial.println(" Off");
  1147. scene();// temp ack
  1148. break;
  1149. #endif
  1150. #ifdef ID_S_RGB_LIGHT
  1151. case V_RGB:
  1152. rgbState=message.getString();
  1153. Serial.print("Incoming flow state change for ID_S_RGB_LIGHT:");
  1154. Serial.print(message.sensor);
  1155. Serial.print(", New status: ");
  1156. Serial.println(rgbState);
  1157. rgbLight(); // temp ack
  1158. break;
  1159. #endif
  1160. #ifdef ID_S_RGBW_LIGHT
  1161. case V_RGBW:
  1162. rgbwState=message.getString();
  1163. Serial.print("Incoming flow state change for ID_S_RGBW_LIGHT:");
  1164. Serial.print(message.sensor);
  1165. Serial.print(", New status: ");
  1166. Serial.println(rgbwState);
  1167. rgbwLight();
  1168. break;
  1169. #endif
  1170. #ifdef ID_S_HVAC
  1171. // hvac_SetPointHeat
  1172. // hvac_SetPointCool
  1173. // hvac_FlowState
  1174. // hvac_FlowMode
  1175. // hvac_Speed
  1176. case V_HVAC_SETPOINT_COOL:
  1177. hvac_SetPointCool=message.getFloat();
  1178. Serial.print("Incoming set point for ID_S_HVAC:");
  1179. Serial.print(message.sensor);
  1180. Serial.print(", New status: ");
  1181. Serial.println(hvac_SetPointCool,1);
  1182. hvac();//temp ack
  1183. break;
  1184. case V_HVAC_FLOW_MODE:
  1185. hvac_Speed=message.getString();
  1186. Serial.print("Incoming set point for ID_S_HVAC:");
  1187. Serial.print(message.sensor);
  1188. Serial.print(", New status: ");
  1189. Serial.println(hvac_Speed);
  1190. hvac();//temp ack
  1191. break;
  1192. case V_HVAC_SPEED:
  1193. hvac_FlowMode=message.getString();
  1194. Serial.print("Incoming set point for ID_S_HVAC:");
  1195. Serial.print(message.sensor);
  1196. Serial.print(", New status: ");
  1197. Serial.println(hvac_FlowMode);
  1198. hvac();//temp ack
  1199. break;
  1200. #endif
  1201. default:
  1202. Serial.print("Unknown/Unimplemented message type: ");
  1203. Serial.println(message.type);
  1204. }
  1205. }