SergiuToporjinschi/node-red-contrib-heater-controller

View on GitHub
TestingFlows.md

Summary

Maintainability
Test Coverage
# General scenarios
```
[{"id":"869218bd.a018c8","type":"tab","label":"General","disabled":false,"info":""},{"id":"33407911.262a16","type":"group","z":"869218bd.a018c8","name":"Setting user configuration","style":{"label":true,"fill":"#c8e7a7","fill-opacity":"0.76","stroke":"#000000","color":"#000000"},"nodes":["a8f90387.218b6","49a66ad2.41a244","da764876.782ce8","6752c9e9.9df258","b218701e.c745a","74e30f43.ded56","42d8186.a90dee8","efedef3e.56c54","b8ee3aa6.a35548","31110ccc.f4d4e4","a7b7265c.e8f258"],"x":34,"y":599,"w":852,"h":242},{"id":"b8daacb2.d8838","type":"group","z":"869218bd.a018c8","name":"Exceptions","style":{"label":true,"fill":"#d1d1d1","fill-opacity":"0.76","stroke":"#ff0000","color":"#ff0000"},"nodes":["54229985.b5ce38","f3997800.25e288","a4d4c207.3a0c","a6bd25e4.3aaba8","2804b855.b2b898","22dfdf59.a92b9","630058d4.537518","7e340c80.5921f4","2a834070.43b14","e54e6f64.0cc3d","8f46e281.880dc","35ac36c0.1370ba","a834ba26.143208"],"x":34,"y":19,"w":852,"h":322},{"id":"d2d20a7c.2b2bc8","type":"group","z":"869218bd.a018c8","name":"Setting current temperature","style":{"label":true,"fill":"#c8e7a7","fill-opacity":"0.76","stroke":"#000000","color":"#000000"},"nodes":["7ca54fef.031a","d255d573.05ece8","cf35eb5f.d228c8","37252855.530cc8","fc4aae08.b7d75","a4378adf.0c9a88","a2ccf1f5.c1257","e206a9ca.199cb8","899add93.17b1"],"x":34,"y":359,"w":852,"h":222},{"id":"7ca54fef.031a","type":"debug","z":"869218bd.a018c8","g":"d2d20a7c.2b2bc8","name":"Heater Status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":760,"y":460,"wires":[]},{"id":"d255d573.05ece8","type":"inject","z":"869218bd.a018c8","g":"d2d20a7c.2b2bc8","name":"curentTemp -10 C","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"currentTemp","payload":"-10","payloadType":"num","x":170,"y":440,"wires":[["cf35eb5f.d228c8"]]},{"id":"cf35eb5f.d228c8","type":"ui_heater_controller","z":"869218bd.a018c8","d":true,"g":"d2d20a7c.2b2bc8","name":"Heater setting currentTemp","group":"add64240.8d8c9","unit":"C","displayMode":"buttons","order":3,"width":"8","height":"5","topic":"heaterStatus","title":"Heater","logLength":0,"sliderMinValue":10,"sliderMaxValue":35,"sliderStep":0.5,"threshold":0.5,"calendar":"{\n    \"Monday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Tuesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Wednesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Thursday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Friday\": {\n        \"00:00\": 19,\n        \"06:20\": 23,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Saturday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    },\n    \"Sunday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    }\n}","x":520,"y":480,"wires":[["7ca54fef.031a"],["37252855.530cc8"]],"inputLabels":["currentTemp | userConfig | setCalendar | config | status"],"outputLabels":["Heater status","Info"],"info":"Description"},{"id":"37252855.530cc8","type":"debug","z":"869218bd.a018c8","g":"d2d20a7c.2b2bc8","name":"Node Status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":770,"y":500,"wires":[]},{"id":"fc4aae08.b7d75","type":"catch","z":"869218bd.a018c8","g":"d2d20a7c.2b2bc8","name":"","scope":["cf35eb5f.d228c8"],"uncaught":false,"x":450,"y":540,"wires":[["a4378adf.0c9a88"]]},{"id":"a4378adf.0c9a88","type":"debug","z":"869218bd.a018c8","g":"d2d20a7c.2b2bc8","name":"Error messages","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":760,"y":540,"wires":[]},{"id":"a2ccf1f5.c1257","type":"comment","z":"869218bd.a018c8","g":"d2d20a7c.2b2bc8","name":"Doc","info":"**Shows how the current temperature is set.**\n    \n    This \"msg\" should come, from time to time, from some temperature sensor;\n    \n**Actions**:\n * recompute the heater status and output's the value on the first output link;\n    *   _topic_:  the value set as topic in heater properties;\n    *   _payload_: [\\<on>,\\<off>] **on** if heater should be on, **off** if the heater should be off\n  \n \n ","x":750,"y":400,"wires":[]},{"id":"e206a9ca.199cb8","type":"inject","z":"869218bd.a018c8","g":"d2d20a7c.2b2bc8","name":"curentTemp 0 C","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"currentTemp","payload":"0","payloadType":"num","x":160,"y":480,"wires":[["cf35eb5f.d228c8"]]},{"id":"899add93.17b1","type":"inject","z":"869218bd.a018c8","g":"d2d20a7c.2b2bc8","name":"curentTemp +10 C","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"currentTemp","payload":"25","payloadType":"num","x":170,"y":520,"wires":[["cf35eb5f.d228c8"]]},{"id":"a8f90387.218b6","type":"debug","z":"869218bd.a018c8","g":"33407911.262a16","name":"Heater Status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":760,"y":700,"wires":[]},{"id":"49a66ad2.41a244","type":"inject","z":"869218bd.a018c8","g":"33407911.262a16","name":"userConfig isLocked:true","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":true}","payloadType":"json","x":190,"y":680,"wires":[["da764876.782ce8"]]},{"id":"da764876.782ce8","type":"ui_heater_controller","z":"869218bd.a018c8","d":true,"g":"33407911.262a16","name":"Heater setting userConfig","group":"add64240.8d8c9","unit":"C","displayMode":"slider","order":1,"width":"8","height":"5","topic":"heaterStatus","title":"Heater up","logLength":0,"sliderMinValue":10,"sliderMaxValue":35,"sliderStep":0.5,"threshold":0.5,"calendar":"{\n    \"Monday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Tuesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Wednesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Thursday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Friday\": {\n        \"00:00\": 19,\n        \"06:20\": 23,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Saturday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    },\n    \"Sunday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    }\n}","x":510,"y":720,"wires":[["a8f90387.218b6"],["6752c9e9.9df258"]],"inputLabels":["currentTemp | userConfig | setCalendar | config | status"],"outputLabels":["Heater status","Info"],"info":"Description"},{"id":"6752c9e9.9df258","type":"debug","z":"869218bd.a018c8","g":"33407911.262a16","name":"NodeStatus","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":770,"y":740,"wires":[]},{"id":"b218701e.c745a","type":"catch","z":"869218bd.a018c8","g":"33407911.262a16","name":"","scope":["da764876.782ce8"],"uncaught":false,"x":450,"y":780,"wires":[["74e30f43.ded56"]]},{"id":"74e30f43.ded56","type":"debug","z":"869218bd.a018c8","g":"33407911.262a16","name":"Error messages","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":760,"y":780,"wires":[]},{"id":"42d8186.a90dee8","type":"comment","z":"869218bd.a018c8","g":"33407911.262a16","name":"Doc","info":"**Shows how user settings can be changed via messages**\n    \n    All interface actions can be done via message with topic \"userConfig\"\n    \n**Actions**:\n * Sets the user specific value;\n * Triggers recomputation of heater status and output the new calculated value **if there was at least one previously `currentTemp` message received**;\n * `userConfig` message following format:\n````\n{\n    topic: 'userConfig', \n    payload: {\n        [isLocked: <<true> | <false>>],\n        [isUserCustom: <<true> | <false>>],\n        [userTargetValue: <number>]\n    }\n}\n````\n    * `isLocked` - similar with pressing padlock icon in interface. If it's true, blocks the current target temperature (`status.currentTargetValue`) to a specific value and it can be changed only by user.\n        *  `true` - locks a target value;\n        *  `false` - unlocks a target value;\n    * `isUserCustom` - is set automatically on `true` if the user has changed the target value; even if is not specified in the incoming message;\n        *  `true` - is setting current target value as a user target value and locks this value until the next schedule changes the value;\n        *  `false` - resets the user target value with te current scheduled value;\n    * `userTargetValue` - user desired target value;\n    ","x":770,"y":640,"wires":[]},{"id":"efedef3e.56c54","type":"inject","z":"869218bd.a018c8","g":"33407911.262a16","name":"curentTemp +10 C","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"currentTemp","payload":"10","payloadType":"num","x":170,"y":640,"wires":[["da764876.782ce8"]]},{"id":"b8ee3aa6.a35548","type":"inject","z":"869218bd.a018c8","g":"33407911.262a16","name":"userConfig userTargetValue: 22","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"userTargetValue\":22}","payloadType":"json","x":210,"y":720,"wires":[["da764876.782ce8"]]},{"id":"31110ccc.f4d4e4","type":"inject","z":"869218bd.a018c8","g":"33407911.262a16","name":"userConfig isUserCustom:false","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false}","payloadType":"json","x":210,"y":800,"wires":[["da764876.782ce8"]]},{"id":"a7b7265c.e8f258","type":"inject","z":"869218bd.a018c8","g":"33407911.262a16","name":"curentTemp +25 C","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"currentTemp","payload":"25","payloadType":"num","x":170,"y":760,"wires":[["da764876.782ce8"]]},{"id":"54229985.b5ce38","type":"debug","z":"869218bd.a018c8","g":"b8daacb2.d8838","name":"Heater Status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":760,"y":160,"wires":[]},{"id":"f3997800.25e288","type":"inject","z":"869218bd.a018c8","g":"b8daacb2.d8838","name":"curentTemp String","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"currentTemp","payload":"str","payloadType":"str","x":170,"y":60,"wires":[["a4d4c207.3a0c"]]},{"id":"a4d4c207.3a0c","type":"ui_heater_controller","z":"869218bd.a018c8","d":true,"g":"b8daacb2.d8838","name":"Heater throws exceptions","group":"add64240.8d8c9","unit":"C","displayMode":"buttons","order":4,"width":"7","height":"5","topic":"heaterStatus","title":"Heater","logLength":0,"sliderMinValue":10,"sliderMaxValue":35,"sliderStep":0.5,"threshold":0.5,"calendar":"{\n    \"Monday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Tuesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Wednesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Thursday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Friday\": {\n        \"00:00\": 19,\n        \"06:20\": 23,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Saturday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    },\n    \"Sunday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    }\n}","x":510,"y":180,"wires":[["54229985.b5ce38"],["a6bd25e4.3aaba8"]],"inputLabels":["currentTemp | userConfig | setCalendar | config | status"],"outputLabels":["Heater status","Info"],"info":"Description"},{"id":"a6bd25e4.3aaba8","type":"debug","z":"869218bd.a018c8","g":"b8daacb2.d8838","name":"Node Status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":770,"y":200,"wires":[]},{"id":"2804b855.b2b898","type":"catch","z":"869218bd.a018c8","g":"b8daacb2.d8838","name":"","scope":["a4d4c207.3a0c"],"uncaught":false,"x":450,"y":240,"wires":[["22dfdf59.a92b9"]]},{"id":"22dfdf59.a92b9","type":"debug","z":"869218bd.a018c8","g":"b8daacb2.d8838","name":"Error messages","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":760,"y":240,"wires":[]},{"id":"630058d4.537518","type":"comment","z":"869218bd.a018c8","g":"b8daacb2.d8838","name":"Doc","info":"# This should group is testing exception handling:\n  \n    - Every injected message from this group has to return an exception;\n    - All exceptions should be caught by the catch node","x":750,"y":60,"wires":[]},{"id":"7e340c80.5921f4","type":"inject","z":"869218bd.a018c8","g":"b8daacb2.d8838","name":"curentTemp Boolean","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"currentTemp","payload":"true","payloadType":"bool","x":170,"y":100,"wires":[["a4d4c207.3a0c"]]},{"id":"2a834070.43b14","type":"inject","z":"869218bd.a018c8","g":"b8daacb2.d8838","name":"curentTemp Object","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"currentTemp","payload":"{\"test\":\"ss\"}","payloadType":"json","x":170,"y":140,"wires":[["a4d4c207.3a0c"]]},{"id":"e54e6f64.0cc3d","type":"inject","z":"869218bd.a018c8","g":"b8daacb2.d8838","name":"userConfig String","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"s","payloadType":"str","x":160,"y":180,"wires":[["a4d4c207.3a0c"]]},{"id":"8f46e281.880dc","type":"inject","z":"869218bd.a018c8","g":"b8daacb2.d8838","name":"userConfig Number","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"3","payloadType":"num","x":170,"y":220,"wires":[["a4d4c207.3a0c"]]},{"id":"35ac36c0.1370ba","type":"inject","z":"869218bd.a018c8","g":"b8daacb2.d8838","name":"userConfig Boolean","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"true","payloadType":"bool","x":170,"y":260,"wires":[["a4d4c207.3a0c"]]},{"id":"a834ba26.143208","type":"inject","z":"869218bd.a018c8","g":"b8daacb2.d8838","name":"userConfig Empty Obj","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{}","payloadType":"json","x":180,"y":300,"wires":[["a4d4c207.3a0c"]]},{"id":"1e54f708.7a15f9","type":"debug","z":"869218bd.a018c8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1470,"y":200,"wires":[]},{"id":"269c8f0e.d240c","type":"ui_heater_controller","z":"869218bd.a018c8","name":"heater","group":"add64240.8d8c9","unit":"C","displayMode":"buttons","order":2,"width":"8","height":"5","topic":"testTopic","title":"Heater","logLength":1,"sliderMinValue":10,"sliderMaxValue":35,"sliderStep":0.5,"threshold":0.5,"calendar":"{\n    \"Monday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Tuesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Wednesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Thursday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Friday\": {\n        \"00:00\": 19,\n        \"06:20\": 23,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Saturday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    },\n    \"Sunday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    }\n}","x":610,"y":1240,"wires":[["419093fb.c84c4c"],["12f7c4fa.fb70bb"]],"inputLabels":["currentTemp | userConfig | setCalendar | config | status"],"outputLabels":["Heater status","Info"],"info":"Description"},{"id":"2d2bbc27.f133e4","type":"inject","z":"869218bd.a018c8","name":"userConfig isLocked:false","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":false}","payloadType":"json","x":190,"y":880,"wires":[["da764876.782ce8"]]},{"id":"a3b46d50.1ff19","type":"inject","z":"869218bd.a018c8","name":"00:00 - 19C","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"calChange","payload":"{\"calChange\":-1}","payloadType":"json","x":510,"y":1020,"wires":[["269c8f0e.d240c"]]},{"id":"49b873cd.7f5c0c","type":"inject","z":"869218bd.a018c8","name":"curentTemp +10 C","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"currentTemp","payload":"10","payloadType":"num","x":170,"y":1060,"wires":[["269c8f0e.d240c"]]},{"id":"38a994be.5b93fc","type":"inject","z":"869218bd.a018c8","name":"userConfig isLocked:true","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":true}","payloadType":"json","x":190,"y":1200,"wires":[["269c8f0e.d240c"]]},{"id":"76e2c410.6f552c","type":"inject","z":"869218bd.a018c8","name":"userConfig userTargetValue: 22","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"userTargetValue\":22}","payloadType":"json","x":210,"y":1300,"wires":[["269c8f0e.d240c"]]},{"id":"1fa5c8a4.bdd887","type":"inject","z":"869218bd.a018c8","name":"curentTemp +25 C","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"currentTemp","payload":"25.5","payloadType":"num","x":170,"y":1100,"wires":[["269c8f0e.d240c"]]},{"id":"867367de.e24c38","type":"inject","z":"869218bd.a018c8","name":"userConfig isUserCustom:true","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":true}","payloadType":"json","x":200,"y":1420,"wires":[["269c8f0e.d240c"]]},{"id":"797de97d.2e81e8","type":"inject","z":"869218bd.a018c8","name":"08:00 - 20C","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"calChange","payload":"{\"calChange\":0}","payloadType":"json","x":510,"y":1080,"wires":[["269c8f0e.d240c"]]},{"id":"d8adbaef.9ff2a8","type":"inject","z":"869218bd.a018c8","name":"20:00 - 22C","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"calChange","payload":"{\"calChange\":1}","payloadType":"json","x":510,"y":1120,"wires":[["269c8f0e.d240c"]]},{"id":"e131ef44.fb43b","type":"inject","z":"869218bd.a018c8","name":"userConfig isLocked:false","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":false}","payloadType":"json","x":190,"y":1240,"wires":[["269c8f0e.d240c"]]},{"id":"1f8fb373.d4bb2d","type":"inject","z":"869218bd.a018c8","name":"userConfig userTargetValue: 10","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"userTargetValue\":10}","payloadType":"json","x":210,"y":1340,"wires":[["269c8f0e.d240c"]]},{"id":"a33e3bfe.f07398","type":"inject","z":"869218bd.a018c8","name":"userConfig isUserCustom:false","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false}","payloadType":"json","x":210,"y":1460,"wires":[["269c8f0e.d240c"]]},{"id":"12f7c4fa.fb70bb","type":"debug","z":"869218bd.a018c8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":770,"y":1300,"wires":[]},{"id":"419093fb.c84c4c","type":"debug","z":"869218bd.a018c8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":770,"y":1220,"wires":[]},{"id":"1b522570.25e44b","type":"inject","z":"869218bd.a018c8","name":"userConfig userTargetValue: 30","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"userTargetValue\":30}","payloadType":"json","x":210,"y":1380,"wires":[["269c8f0e.d240c"]]},{"id":"d6130da5.c83f8","type":"inject","z":"869218bd.a018c8","name":"logs","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"logs","x":170,"y":980,"wires":[["269c8f0e.d240c","2bd6ea04.a82186"]]},{"id":"440bfe80.3c4b4","type":"inject","z":"869218bd.a018c8","name":"config","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"config","x":170,"y":1020,"wires":[["269c8f0e.d240c","2bd6ea04.a82186"]]},{"id":"e9344be4.bc2438","type":"inject","z":"869218bd.a018c8","name":"status","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"status","payloadType":"str","x":170,"y":940,"wires":[["269c8f0e.d240c","2bd6ea04.a82186"]]},{"id":"2bd6ea04.a82186","type":"debug","z":"869218bd.a018c8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":410,"y":920,"wires":[]},{"id":"add64240.8d8c9","type":"ui_group","name":"Devices","tab":"b94da3c8.213ed","order":1,"disp":true,"width":"8","collapse":false},{"id":"b94da3c8.213ed","type":"ui_tab","name":"Tab 1","icon":"dashboard","order":1,"disabled":false,"hidden":false}]
```
# Usage of userConfig
```
[{"id":"e0810397.de3a2","type":"tab","label":"User config","disabled":true,"info":""},{"id":"68f790dc.fab39","type":"group","z":"e0810397.de3a2","name":"userConfig userTargetValue Exceptions","style":{"label":true,"fill":"#d1d1d1","fill-opacity":"0.76","stroke":"#ff0000","color":"#ff0000"},"nodes":["9a31b690.b39a28","1f899bdb.800004","40de998b.8d0d98","2808b6ef.972d4a","a46ee199.cd865","540637b1.6c4778","b379b686.6eb758","4cbb5358.3c888c","1c0c01c8.812bbe"],"x":74,"y":519,"w":832,"h":202},{"id":"7ddb078a.7bbec8","type":"group","z":"e0810397.de3a2","name":"userConfig isLocked Exceptions","style":{"label":true,"fill":"#d1d1d1","fill-opacity":"0.76","stroke":"#ff0000","color":"#ff0000"},"nodes":["8f6d1024.df48","add8e84d.a84b88","1476c77c.4d3159","a9ad5420.5ca228","476733f6.32959c","624c4719.aa6328","111823c5.35234c","c67a2b8.f2292d8","badde2cf.d9f1e"],"x":74,"y":59,"w":832,"h":202},{"id":"8f959bc3.3ebf78","type":"group","z":"e0810397.de3a2","name":"userConfig isUserCustom Exceptions","style":{"label":true,"fill":"#d1d1d1","fill-opacity":"0.76","stroke":"#ff0000","color":"#ff0000"},"nodes":["a79c37bc.2dd0e8","f13477b2.8a6b48","1e2c0491.eab3db","e6758e12.f49fe","21ed07b4.47f538","f61e2863.1765d8","4269372b.f27d38","8b950a80.390928","bcfb26ea.520398"],"x":74,"y":279,"w":832,"h":202},{"id":"8f6d1024.df48","type":"debug","z":"e0810397.de3a2","g":"7ddb078a.7bbec8","name":"Heater Status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":780,"y":140,"wires":[]},{"id":"add8e84d.a84b88","type":"ui_heater_controller","z":"e0810397.de3a2","g":"7ddb078a.7bbec8","name":"Heater throws exceptions","group":"add64240.8d8c9","unit":"C","displayMode":"buttons","order":4,"width":"8","height":"5","topic":"heaterStatus","title":"Heater","logLength":0,"sliderMinValue":10,"sliderMaxValue":35,"sliderStep":0.5,"threshold":0.5,"calendar":"{\n    \"Monday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Tuesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Wednesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Thursday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Friday\": {\n        \"00:00\": 19,\n        \"06:20\": 23,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Saturday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    },\n    \"Sunday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    }\n}","x":530,"y":160,"wires":[["8f6d1024.df48"],["1476c77c.4d3159"]],"inputLabels":["currentTemp | userConfig | setCalendar | config | status"],"outputLabels":["Heater status","Info"],"info":"Description"},{"id":"1476c77c.4d3159","type":"debug","z":"e0810397.de3a2","g":"7ddb078a.7bbec8","name":"Node Status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":790,"y":180,"wires":[]},{"id":"a9ad5420.5ca228","type":"catch","z":"e0810397.de3a2","g":"7ddb078a.7bbec8","name":"","scope":["add8e84d.a84b88"],"uncaught":false,"x":470,"y":220,"wires":[["476733f6.32959c"]]},{"id":"476733f6.32959c","type":"debug","z":"e0810397.de3a2","g":"7ddb078a.7bbec8","name":"Error messages","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":780,"y":220,"wires":[]},{"id":"624c4719.aa6328","type":"comment","z":"e0810397.de3a2","g":"7ddb078a.7bbec8","name":"Doc","info":"# This should group is testing exception handling:\n  \n    - Every injected message from this group has to return an exception;\n    - All exceptions should be caught by the catch node","x":770,"y":100,"wires":[]},{"id":"111823c5.35234c","type":"inject","z":"e0810397.de3a2","g":"7ddb078a.7bbec8","name":"userConfig isLocked string","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\": \"\"}","payloadType":"json","x":230,"y":120,"wires":[["add8e84d.a84b88"]]},{"id":"c67a2b8.f2292d8","type":"inject","z":"e0810397.de3a2","g":"7ddb078a.7bbec8","name":"userConfig isLocked number","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\": 2}","payloadType":"json","x":240,"y":160,"wires":[["add8e84d.a84b88"]]},{"id":"badde2cf.d9f1e","type":"inject","z":"e0810397.de3a2","g":"7ddb078a.7bbec8","name":"userConfig isLocked obj","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\": {}}","payloadType":"json","x":220,"y":200,"wires":[["add8e84d.a84b88"]]},{"id":"a79c37bc.2dd0e8","type":"debug","z":"e0810397.de3a2","g":"8f959bc3.3ebf78","name":"Heater Status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":780,"y":360,"wires":[]},{"id":"f13477b2.8a6b48","type":"ui_heater_controller","z":"e0810397.de3a2","g":"8f959bc3.3ebf78","name":"Heater throws exceptions","group":"add64240.8d8c9","unit":"C","displayMode":"buttons","order":4,"width":"8","height":"5","topic":"heaterStatus","title":"Heater","logLength":0,"sliderMinValue":10,"sliderMaxValue":35,"sliderStep":0.5,"threshold":0.5,"calendar":"{\n    \"Monday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Tuesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Wednesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Thursday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Friday\": {\n        \"00:00\": 19,\n        \"06:20\": 23,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Saturday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    },\n    \"Sunday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    }\n}","x":530,"y":380,"wires":[["a79c37bc.2dd0e8"],["1e2c0491.eab3db"]],"inputLabels":["currentTemp | userConfig | setCalendar | config | status"],"outputLabels":["Heater status","Info"],"info":"Description"},{"id":"1e2c0491.eab3db","type":"debug","z":"e0810397.de3a2","g":"8f959bc3.3ebf78","name":"Node Status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":790,"y":400,"wires":[]},{"id":"e6758e12.f49fe","type":"catch","z":"e0810397.de3a2","g":"8f959bc3.3ebf78","name":"","scope":["f13477b2.8a6b48"],"uncaught":false,"x":470,"y":440,"wires":[["21ed07b4.47f538"]]},{"id":"21ed07b4.47f538","type":"debug","z":"e0810397.de3a2","g":"8f959bc3.3ebf78","name":"Error messages","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":780,"y":440,"wires":[]},{"id":"f61e2863.1765d8","type":"comment","z":"e0810397.de3a2","g":"8f959bc3.3ebf78","name":"Doc","info":"# This should group is testing exception handling:\n  \n    - Every injected message from this group has to return an exception;\n    - All exceptions should be caught by the catch node","x":770,"y":320,"wires":[]},{"id":"4269372b.f27d38","type":"inject","z":"e0810397.de3a2","g":"8f959bc3.3ebf78","name":"userConfig isUerCustom string","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUerCustom\": \"\"}","payloadType":"json","x":250,"y":340,"wires":[["f13477b2.8a6b48"]]},{"id":"8b950a80.390928","type":"inject","z":"e0810397.de3a2","g":"8f959bc3.3ebf78","name":"userConfig isUerCustom number","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUerCustom\": 2}","payloadType":"json","x":250,"y":380,"wires":[["f13477b2.8a6b48"]]},{"id":"bcfb26ea.520398","type":"inject","z":"e0810397.de3a2","g":"8f959bc3.3ebf78","name":"userConfig isUerCustom obj","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUerCustom\": {}}","payloadType":"json","x":240,"y":420,"wires":[["f13477b2.8a6b48"]]},{"id":"9a31b690.b39a28","type":"debug","z":"e0810397.de3a2","g":"68f790dc.fab39","name":"Heater Status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":780,"y":600,"wires":[]},{"id":"1f899bdb.800004","type":"ui_heater_controller","z":"e0810397.de3a2","g":"68f790dc.fab39","name":"Heater throws exceptions","group":"add64240.8d8c9","unit":"C","displayMode":"buttons","order":4,"width":"8","height":"5","topic":"heaterStatus","title":"Heater","logLength":0,"sliderMinValue":10,"sliderMaxValue":35,"sliderStep":0.5,"threshold":0.5,"calendar":"{\n    \"Monday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Tuesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Wednesday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Thursday\": {\n        \"00:00\": 19,\n        \"06:20\": 22,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Friday\": {\n        \"00:00\": 19,\n        \"06:20\": 23,\n        \"08:00\": 19,\n        \"16:40\": 22,\n        \"23:59\": 19\n    },\n    \"Saturday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    },\n    \"Sunday\": {\n        \"00:00\": 19,\n        \"08:00\": 20,\n        \"20:00\": 22,\n        \"23:59\": 19\n    }\n}","x":530,"y":620,"wires":[["9a31b690.b39a28"],["40de998b.8d0d98"]],"inputLabels":["currentTemp | userConfig | setCalendar | config | status"],"outputLabels":["Heater status","Info"],"info":"Description"},{"id":"40de998b.8d0d98","type":"debug","z":"e0810397.de3a2","g":"68f790dc.fab39","name":"Node Status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":790,"y":640,"wires":[]},{"id":"2808b6ef.972d4a","type":"catch","z":"e0810397.de3a2","g":"68f790dc.fab39","name":"","scope":["1f899bdb.800004"],"uncaught":false,"x":470,"y":680,"wires":[["a46ee199.cd865"]]},{"id":"a46ee199.cd865","type":"debug","z":"e0810397.de3a2","g":"68f790dc.fab39","name":"Error messages","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":780,"y":680,"wires":[]},{"id":"540637b1.6c4778","type":"comment","z":"e0810397.de3a2","g":"68f790dc.fab39","name":"Doc","info":"# This should group is testing exception handling:\n  \n    - Every injected message from this group has to return an exception;\n    - All exceptions should be caught by the catch node","x":770,"y":560,"wires":[]},{"id":"b379b686.6eb758","type":"inject","z":"e0810397.de3a2","g":"68f790dc.fab39","name":"userConfig userTargetValue string","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"userTargetValue\": \"\"}","payloadType":"json","x":260,"y":580,"wires":[["1f899bdb.800004"]]},{"id":"4cbb5358.3c888c","type":"inject","z":"e0810397.de3a2","g":"68f790dc.fab39","name":"userConfig isUerCustom bool","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUerCustom\": true}","payloadType":"json","x":240,"y":620,"wires":[["1f899bdb.800004"]]},{"id":"1c0c01c8.812bbe","type":"inject","z":"e0810397.de3a2","g":"68f790dc.fab39","name":"userConfig userTargetValue obj","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"userTargetValue\": {}}","payloadType":"json","x":250,"y":660,"wires":[["1f899bdb.800004"]]},{"id":"add64240.8d8c9","type":"ui_group","name":"Devices","tab":"b94da3c8.213ed","order":1,"disp":true,"width":"8","collapse":false},{"id":"b94da3c8.213ed","type":"ui_tab","name":"Tab 1","icon":"dashboard","order":1,"disabled":false,"hidden":false}]
```
# StatusChange test flow
```
[{"id":"bf939016.55312","type":"tab","label":"StatusChange test flow","disabled":true,"info":""},{"id":"c6e90923.2918a8","type":"ui_heater_controller","z":"bf939016.55312","name":"Heater scenarios","group":"add64240.8d8c9","unit":"C","displayMode":"slider","order":2,"width":"8","height":"5","topic":"testTopic","title":"Heater","logLength":0,"sliderMinValue":10,"sliderMaxValue":35,"sliderStep":0.5,"threshold":0.5,"calendar":"{\n    \"Monday\": {\n        \"00:00\": 7,\n        \"06:20\": 7,\n        \"08:00\": 7,\n        \"16:40\": 7,\n        \"23:59\": 7\n    },\n    \"Tuesday\": {\n        \"00:00\": 7,\n        \"06:20\": 7,\n        \"08:00\": 7,\n        \"16:40\": 7,\n        \"23:59\": 7\n    },\n    \"Wednesday\": {\n        \"00:00\": 7,\n        \"06:20\": 7,\n        \"08:00\": 7,\n        \"16:40\": 7,\n        \"23:59\": 7\n    },\n    \"Thursday\": {\n        \"00:00\": 7,\n        \"06:20\": 7,\n        \"08:00\": 7,\n        \"16:40\": 7,\n        \"23:59\": 7\n    },\n    \"Friday\": {\n        \"00:00\": 7,\n        \"06:20\": 7,\n        \"08:00\": 7,\n        \"16:40\": 7,\n        \"23:59\": 7\n    },\n    \"Saturday\": {\n        \"00:00\": 7,\n        \"08:00\": 7,\n        \"20:00\": 7,\n        \"23:59\": 7\n    },\n    \"Sunday\": {\n        \"00:00\": 7,\n        \"08:00\": 7,\n        \"20:00\": 7,\n        \"23:59\": 7\n    }\n}","x":1009,"y":940,"wires":[[],[]],"inputLabels":["currentTemp | userConfig | setCalendar | config | status"],"outputLabels":["Heater status","Info"],"info":"Description"},{"id":"d34708c8.035c58","type":"inject","z":"bf939016.55312","name":"curentTemp +10 C","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"currentTemp","payload":"10","payloadType":"num","x":150,"y":120,"wires":[["c6e90923.2918a8"]]},{"id":"9e3d9476.e14e98","type":"inject","z":"bf939016.55312","name":"case 1","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":true,\"isLocked\":true,\"userTargetValue\":15}","payloadType":"json","x":110,"y":260,"wires":[["c6e90923.2918a8"]]},{"id":"5f222eca.04c2e","type":"inject","z":"bf939016.55312","name":"curentTemp +25 C","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"currentTemp","payload":"25","payloadType":"num","x":150,"y":160,"wires":[["c6e90923.2918a8"]]},{"id":"ac7ebf1a.ed05c","type":"inject","z":"bf939016.55312","name":"case 2","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":true,\"userTargetValue\":15}","payloadType":"json","x":110,"y":300,"wires":[["c6e90923.2918a8"]]},{"id":"11e4eab3.dd8a75","type":"inject","z":"bf939016.55312","name":"case 3","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":true,\"userTargetValue\":15}","payloadType":"json","x":110,"y":340,"wires":[["c6e90923.2918a8"]]},{"id":"7e28bb87.e73904","type":"inject","z":"bf939016.55312","name":"case 4","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"userTargetValue\":15}","payloadType":"json","x":110,"y":380,"wires":[["c6e90923.2918a8"]]},{"id":"c1964ff2.d7a88","type":"inject","z":"bf939016.55312","name":"case 5","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":true,\"isLocked\":true}","payloadType":"json","x":110,"y":420,"wires":[["c6e90923.2918a8"]]},{"id":"746d520a.a7a8ec","type":"inject","z":"bf939016.55312","name":"case 6","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":true}","payloadType":"json","x":110,"y":460,"wires":[["c6e90923.2918a8"]]},{"id":"3b187f1e.8b578","type":"inject","z":"bf939016.55312","name":"case 7","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":true}","payloadType":"json","x":110,"y":500,"wires":[["c6e90923.2918a8"]]},{"id":"d981e86.cc90218","type":"inject","z":"bf939016.55312","name":"case 8","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":true,\"isLocked\":true}","payloadType":"json","x":110,"y":540,"wires":[["c6e90923.2918a8"]]},{"id":"ca4463f9.bdede","type":"inject","z":"bf939016.55312","name":"case 9","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":true}","payloadType":"json","x":110,"y":580,"wires":[["c6e90923.2918a8"]]},{"id":"33eef7e9.31e398","type":"inject","z":"bf939016.55312","name":"case 10","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":true}","payloadType":"json","x":110,"y":620,"wires":[["c6e90923.2918a8"]]},{"id":"da69f447.abcf18","type":"inject","z":"bf939016.55312","name":"case 11","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":true,\"isLocked\":false,\"userTargetValue\":15}","payloadType":"json","x":110,"y":660,"wires":[["c6e90923.2918a8"]]},{"id":"bb7faaa6.363c48","type":"inject","z":"bf939016.55312","name":"case 12","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":false,\"userTargetValue\":15}","payloadType":"json","x":110,"y":700,"wires":[["c6e90923.2918a8"]]},{"id":"a3044b84.814738","type":"inject","z":"bf939016.55312","name":"case 13","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":true,\"userTargetValue\":15}","payloadType":"json","x":110,"y":740,"wires":[["c6e90923.2918a8"]]},{"id":"b843d140.b8351","type":"inject","z":"bf939016.55312","name":"case 14","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":true,\"isLocked\":false}","payloadType":"json","x":110,"y":780,"wires":[["c6e90923.2918a8"]]},{"id":"41ffe6b6.2ee408","type":"inject","z":"bf939016.55312","name":"case 15","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":false}","payloadType":"json","x":110,"y":820,"wires":[["c6e90923.2918a8"]]},{"id":"a02f34b3.86cfd8","type":"inject","z":"bf939016.55312","name":"case 16","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":true}","payloadType":"json","x":110,"y":860,"wires":[["c6e90923.2918a8"]]},{"id":"32333ba8.94ff84","type":"inject","z":"bf939016.55312","name":"case 17","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":true,\"isLocked\":false}","payloadType":"json","x":110,"y":900,"wires":[["c6e90923.2918a8"]]},{"id":"9e5dc218.e4aa5","type":"inject","z":"bf939016.55312","name":"case 18","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":false}","payloadType":"json","x":110,"y":940,"wires":[["c6e90923.2918a8"]]},{"id":"1d342163.97e96f","type":"inject","z":"bf939016.55312","name":"case 19","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":true}","payloadType":"json","x":110,"y":980,"wires":[["c6e90923.2918a8"]]},{"id":"a5269e4c.f9526","type":"inject","z":"bf939016.55312","name":"case 20","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false,\"isLocked\":true,\"userTargetValue\":15}","payloadType":"json","x":110,"y":1020,"wires":[["c6e90923.2918a8"]]},{"id":"4c6e9ffe.9daa7","type":"inject","z":"bf939016.55312","name":"reset","props":[{"p":"topic","vt":"str"},{"p":"action","v":"reset","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"debug","x":110,"y":220,"wires":[["c6e90923.2918a8"]]},{"id":"2bb515de.e02a9a","type":"inject","z":"bf939016.55312","name":"case 21","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":true,\"userTargetValue\":15}","payloadType":"json","x":110,"y":1060,"wires":[["c6e90923.2918a8"]]},{"id":"408e4bfc.d4d184","type":"inject","z":"bf939016.55312","name":"case 22","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false,\"userTargetValue\":15}","payloadType":"json","x":110,"y":1100,"wires":[["c6e90923.2918a8"]]},{"id":"f9cfbe58.e693c","type":"inject","z":"bf939016.55312","name":"case 23","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false,\"isLocked\":true}","payloadType":"json","x":110,"y":1140,"wires":[["c6e90923.2918a8"]]},{"id":"4296004.98ad6","type":"inject","z":"bf939016.55312","name":"case 24","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":true}","payloadType":"json","x":110,"y":1180,"wires":[["c6e90923.2918a8"]]},{"id":"f6edfad7.31b928","type":"inject","z":"bf939016.55312","name":"case 25","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false}","payloadType":"json","x":110,"y":1220,"wires":[["c6e90923.2918a8"]]},{"id":"8fb586fb.531558","type":"inject","z":"bf939016.55312","name":"case 26","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false,\"isLocked\":true}","payloadType":"json","x":110,"y":1260,"wires":[["c6e90923.2918a8"]]},{"id":"774dae1c.b48fc","type":"inject","z":"bf939016.55312","name":"case 27","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":true}","payloadType":"json","x":110,"y":1300,"wires":[["c6e90923.2918a8"]]},{"id":"5b7d4b47.aec234","type":"inject","z":"bf939016.55312","name":"case 28","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false}","payloadType":"json","x":110,"y":1340,"wires":[["c6e90923.2918a8"]]},{"id":"3d6bfe23.78aee2","type":"inject","z":"bf939016.55312","name":"case 29","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false,\"isLocked\":false,\"userTargetValue\":15}","payloadType":"json","x":110,"y":1380,"wires":[["c6e90923.2918a8"]]},{"id":"dbd7f37b.a7124","type":"inject","z":"bf939016.55312","name":"case 30","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":false,\"userTargetValue\":15}","payloadType":"json","x":110,"y":1420,"wires":[["c6e90923.2918a8"]]},{"id":"2bdd5304.c0c7dc","type":"inject","z":"bf939016.55312","name":"case 31","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false,\"userTargetValue\":15}","payloadType":"json","x":110,"y":1460,"wires":[["c6e90923.2918a8"]]},{"id":"caced38f.6bb05","type":"inject","z":"bf939016.55312","name":"case 32","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false,\"isLocked\":false}","payloadType":"json","x":110,"y":1500,"wires":[["c6e90923.2918a8"]]},{"id":"c591f70c.72dea8","type":"inject","z":"bf939016.55312","name":"case 33","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":false}","payloadType":"json","x":110,"y":1540,"wires":[["c6e90923.2918a8"]]},{"id":"acdc9d47.5aa01","type":"inject","z":"bf939016.55312","name":"case 34","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false}","payloadType":"json","x":110,"y":1579,"wires":[["c6e90923.2918a8"]]},{"id":"c50facb.2ef715","type":"inject","z":"bf939016.55312","name":"case 35","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false,\"isLocked\":false}","payloadType":"json","x":110,"y":1619,"wires":[["c6e90923.2918a8"]]},{"id":"c57bc0cc.2a724","type":"inject","z":"bf939016.55312","name":"case 36","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isLocked\":false}","payloadType":"json","x":110,"y":1659,"wires":[["c6e90923.2918a8"]]},{"id":"b4079cfa.a57d1","type":"inject","z":"bf939016.55312","name":"case 37","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"userConfig","payload":"{\"isUserCustom\":false}","payloadType":"json","x":110,"y":1699,"wires":[["c6e90923.2918a8"]]},{"id":"d2cf478.7581fb8","type":"inject","z":"bf939016.55312","name":"curentTemp -10 C","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"currentTemp","payload":"-10","payloadType":"num","x":150,"y":80,"wires":[["c6e90923.2918a8"]]},{"id":"add64240.8d8c9","type":"ui_group","name":"Devices","tab":"b94da3c8.213ed","order":1,"disp":true,"width":"8","collapse":false},{"id":"b94da3c8.213ed","type":"ui_tab","name":"Tab 1","icon":"dashboard","order":1,"disabled":false,"hidden":false}]
```