2021-08-27 14:42:00 +00:00

1 line
72 KiB
JSON

[{"id":"161f9872.1bc6e8","type":"tab","label":"Temperature Measurement","disabled":false,"info":""},{"id":"cc5f4bb3.067d7","type":"tab","label":"Power Measurement","disabled":false,"info":""},{"id":"a80a9d37.68d378","type":"tab","label":"ShellyPlug Power Measurement","disabled":false,"info":""},{"id":"e4659a9f.3f8658","type":"tab","label":"ClimateMeasurement","disabled":false,"info":""},{"id":"17f27a3f.d2a296","type":"tab","label":"RainMeasurement","disabled":false,"info":""},{"id":"c2d99cfc.d05b9","type":"tab","label":"DatabaseConnection","disabled":false,"info":""},{"id":"15cbc07c.cf074","type":"tab","label":"Temperature Publishing","disabled":false,"info":""},{"id":"63d1c956.3ee9c8","type":"tab","label":"Location","disabled":false,"info":""},{"id":"5f3b2200.77571","type":"tab","label":"Pushover","disabled":false,"info":""},{"id":"bc38d6a.83ca528","type":"tab","label":"MqttAuditing","disabled":true,"info":""},{"id":"f7f94748.f88348","type":"tab","label":"Telegram Alarming","disabled":true,"info":""},{"id":"f9bcf.31a70c32","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"c47f0f35.fd7ee","type":"tab","label":"Flow 2","disabled":false,"info":""},{"id":"796cb70.681af48","type":"subflow","name":"ModbusTemperatureMeasurement","info":"","category":"","in":[],"out":[{"x":800,"y":260,"wires":[{"id":"1dcfd53c.f4f6e3","port":0}]}],"env":[{"name":"MQTT_Input_Topic","type":"str","value":""},{"name":"Location","type":"str","value":""},{"name":"HardLow","type":"num","value":"-273"},{"name":"SoftLow","type":"num","value":"-50"},{"name":"SoftHigh","type":"num","value":"20"},{"name":"HardHigh","type":"str","value":"100"},{"name":"Category","type":"str","value":""}],"status":{"x":800,"y":180,"wires":[{"id":"38df7d6.3e0c482","port":0}]}},{"id":"67a411dd.efd79","type":"subflow","name":"DeconzClimate","info":"","category":"","in":[],"out":[{"x":680,"y":160,"wires":[{"id":"56e9e066.1bf4","port":0}]}],"env":[{"name":"MQTT_Input_Topic","type":"str","value":"undefined"}]},{"id":"a7163696.6f4318","type":"mqtt-broker","z":"","name":"","broker":"mosquitto","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"64f763bb.19937c","type":"influxdb","z":"","hostname":"influxdb","port":"8086","protocol":"http","database":"smarthome2","name":"","usetls":false,"tls":""},{"id":"9ade7197.41fd7","type":"twitter-credentials","z":"","screen_name":"wollud1969"},{"id":"949da0ae.eef54","type":"telegram bot","z":"","botname":"de.hottis.nodered.telegrambot","usernames":"","chatids":"","baseapiurl":"","updatemode":"polling","pollinterval":"300","usesocks":false,"sockshost":"","socksport":"6667","socksusername":"anonymous","sockspassword":"","bothost":"","localbotport":"8443","publicbotport":"8443","privatekey":"","certificate":"","useselfsignedcertificate":false,"verboselogging":false},{"id":"df185e35.29245","type":"mongo-client","z":"","uri":"mongodb://172.16.3.15:27017/HomeAutomationAudit","name":"","options":""},{"id":"130337d4.ea361","type":"MySQLdatabase","z":"","name":"mqttauditing","host":"172.16.10.18","port":"3306","db":"mqttauditing","tz":"Europe/Berlin"},{"id":"d9d536e3.9c771","type":"mqtt-broker","z":"","name":"broker.nb-iot.krohne.com","broker":"broker.nb-iot.hottis.de","port":"8883","tls":"6fc1da39.d066f4","clientid":"","usetls":true,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"6fc1da39.d066f4","type":"tls-config","z":"","name":"broker.nb-iot.krohne.com","cert":"","key":"","ca":"","certname":"","keyname":"","caname":"dev-internal-ca.krohne.com.crt","servername":"broker.nb-iot.krohne.com","verifyservercert":true},{"id":"8a7061d0.229298","type":"postgresdb","z":"","hostname":"172.16.10.27","port":"5432","db":"presence","ssl":true},{"id":"2fd416bb.c289b2","type":"postgresdb","z":"","hostname":"172.16.10.27","port":"5432","db":"power","ssl":true},{"id":"e89610fd.77041","type":"change","z":"161f9872.1bc6e8","name":"IndoorCategorizer","rules":[{"t":"set","p":"payload.category","pt":"msg","to":"Indoor","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":790,"y":700,"wires":[["24408300.280ebe"]]},{"id":"aa911dc7.bfdaf","type":"change","z":"161f9872.1bc6e8","name":"OutdoorCategorizer","rules":[{"t":"set","p":"payload.category","pt":"msg","to":"Outdoor","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":800,"y":660,"wires":[["24408300.280ebe"]]},{"id":"b543dc5c.f78ee","type":"switch","z":"161f9872.1bc6e8","name":"TemperatureDeviceSelector","property":"payload.name","propertyType":"msg","rules":[{"t":"eq","v":"HedgeDisabled","vt":"str"},{"t":"eq","v":"House","vt":"str"},{"t":"eq","v":"Bedroom","vt":"str"},{"t":"eq","v":"DiningRoom","vt":"str"},{"t":"eq","v":"Kitchen","vt":"str"},{"t":"eq","v":"Attic","vt":"str"},{"t":"eq","v":"Matthias","vt":"str"},{"t":"eq","v":"Anna","vt":"str"},{"t":"eq","v":"Studierzimmer","vt":"str"},{"t":"eq","v":"Basement","vt":"str"},{"t":"eq","v":"Laundry","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":12,"x":520,"y":700,"wires":[[],["aa911dc7.bfdaf","4b1db719.c975e8"],["e89610fd.77041","52c8f65b.50e438"],["e89610fd.77041","7ea720a.3c121e"],["e89610fd.77041","b93f273e.e701d8"],["e89610fd.77041","e6e0540a.68ca78"],["e89610fd.77041","a37970cb.f4ab88"],["e89610fd.77041","d3116784.bc8df8"],["e89610fd.77041","877eafee.ccebb"],["e89610fd.77041","59e99a87.83f45c"],["e89610fd.77041","257cd34c.e21fac"],["6022a80d.129b78"]]},{"id":"24408300.280ebe","type":"template","z":"161f9872.1bc6e8","name":"InfluxTemperaturePreparator","field":"payload","fieldType":"msg","format":"json","syntax":"mustache","template":"[\n { \n \"pv\":{{payload.values.temperature}},\n \"sv\":{{payload.values.battery}}\n },\n {\n \"deviceid\":\"{{payload.name}}\",\n \"kind\":\"{{payload.kind}}\",\n \"category\":\"{{payload.category}}\",\n \"status\":\"good\",\n \"statusText\":\"not evaluated\"\n }\n]","output":"json","x":1100,"y":660,"wires":[["a3c2b617.b695e8"]]},{"id":"57f6d1fc.266a6","type":"mqtt in","z":"161f9872.1bc6e8","name":"","topic":"IoT/espThermometer2/measurement","qos":"2","broker":"a7163696.6f4318","x":180,"y":460,"wires":[["c61a7524.40f7f8"]]},{"id":"19fe1878.552c28","type":"debug","z":"161f9872.1bc6e8","name":"EspTherm","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":250,"y":580,"wires":[]},{"id":"c61a7524.40f7f8","type":"json","z":"161f9872.1bc6e8","name":"","property":"payload","action":"","pretty":false,"x":270,"y":500,"wires":[["8f0ce40b.a890c8"]]},{"id":"8f0ce40b.a890c8","type":"template","z":"161f9872.1bc6e8","name":"EspThermAdjuster","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\n \"name\":\"{{payload.location}}\",\n \"kind\":\"Temperature\",\n \"values\": {\n \"battery\":{{payload.battery}},\n \"temperature\":{{payload.temperature}}\n }\n}","output":"json","x":230,"y":540,"wires":[["19fe1878.552c28","b543dc5c.f78ee"]]},{"id":"6022a80d.129b78","type":"change","z":"161f9872.1bc6e8","name":"UnknownCategorizer","rules":[{"t":"set","p":"payload.category","pt":"msg","to":"Unknown","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":800,"y":740,"wires":[["24408300.280ebe"]]},{"id":"52c8f65b.50e438","type":"trigger","z":"161f9872.1bc6e8","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":770,"y":600,"wires":[["a54d311e.3d336"]]},{"id":"a54d311e.3d336","type":"change","z":"161f9872.1bc6e8","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"ESP_Bedroom","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":600,"wires":[["de5e1488.905cf8"]]},{"id":"7ea720a.3c121e","type":"trigger","z":"161f9872.1bc6e8","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":770,"y":560,"wires":[["d69c9d18.3f2d1"]]},{"id":"d69c9d18.3f2d1","type":"change","z":"161f9872.1bc6e8","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"ESP_Diningroom","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":560,"wires":[["de5e1488.905cf8"]]},{"id":"4c2cff9d.77dca","type":"catch","z":"161f9872.1bc6e8","name":"","scope":null,"x":200,"y":1700,"wires":[["6ef3c0ff.cf872"]]},{"id":"bdbb7cc1.47758","type":"e-mail","z":"161f9872.1bc6e8","server":"mailer","port":"25","secure":false,"name":"wolfgang.hottgenroth@icloud.com","dname":"Error message","x":620,"y":1700,"wires":[]},{"id":"26e39dac.99f412","type":"inject","z":"15cbc07c.cf074","name":"Daily at noon","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"00 12 * * *","once":false,"onceDelay":0.1,"x":180,"y":160,"wires":[["d0524503.6384a8","7d3d1673.57e388","e1524efe.856ff","5009f71a.1f24d8"]]},{"id":"d0524503.6384a8","type":"influxdb in","z":"15cbc07c.cf074","influxdb":"64f763bb.19937c","name":"avg_temp_hedge_last_15min","query":"select mean(pv) from measured where deviceid = 'Hedge' and kind = 'Temperature' and time > now() - 15m","rawOutput":false,"precision":"","retentionPolicy":"","x":430,"y":100,"wires":[["c4e40448.5247a8"]]},{"id":"7d3d1673.57e388","type":"influxdb in","z":"15cbc07c.cf074","influxdb":"64f763bb.19937c","name":"min_temp_hedge_last_24h","query":"select min(pv) from measured where deviceid = 'Hedge' and kind = 'Temperature' and time > now() - 24h","rawOutput":false,"precision":"","retentionPolicy":"","x":420,"y":180,"wires":[["d7e3c7a6.698798"]]},{"id":"5009f71a.1f24d8","type":"influxdb in","z":"15cbc07c.cf074","influxdb":"64f763bb.19937c","name":"max_temp_hedge_last_24h","query":"select max(pv) from measured where deviceid = 'Hedge' and kind = 'Temperature' and time > now() - 24h","rawOutput":false,"precision":"","retentionPolicy":"","x":420,"y":220,"wires":[["ebebc5f9.8565c8"]]},{"id":"e1524efe.856ff","type":"influxdb in","z":"15cbc07c.cf074","influxdb":"64f763bb.19937c","name":"avg_temp_hedge_last_24h","query":"select mean(pv) from measured where deviceid = 'Hedge' and kind = 'Temperature' and time > now() - 24h","rawOutput":false,"precision":"","retentionPolicy":"","x":420,"y":140,"wires":[["3298c777.4e34f8"]]},{"id":"c4e40448.5247a8","type":"change","z":"15cbc07c.cf074","name":"set topic: avg15min","rules":[{"t":"set","p":"topic","pt":"msg","to":"avg15min","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":690,"y":100,"wires":[["4ad2acda.2099c4"]]},{"id":"3298c777.4e34f8","type":"change","z":"15cbc07c.cf074","name":"set topic: avg24h","rules":[{"t":"set","p":"topic","pt":"msg","to":"avg24h","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":690,"y":140,"wires":[["4ad2acda.2099c4"]]},{"id":"d7e3c7a6.698798","type":"change","z":"15cbc07c.cf074","name":"set topic: min24h","rules":[{"t":"set","p":"topic","pt":"msg","to":"min","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":690,"y":180,"wires":[["4ad2acda.2099c4"]]},{"id":"ebebc5f9.8565c8","type":"change","z":"15cbc07c.cf074","name":"set topic: max24h","rules":[{"t":"set","p":"topic","pt":"msg","to":"max","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":690,"y":220,"wires":[["4ad2acda.2099c4"]]},{"id":"4ad2acda.2099c4","type":"join","z":"15cbc07c.cf074","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"4","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":890,"y":160,"wires":[["eaefee46.b7e6"]]},{"id":"eaefee46.b7e6","type":"function","z":"15cbc07c.cf074","name":"TextPreparator","func":"let output = \"\"\noutput += `Die aktuelle Temperatur zuhause ist ${msg.payload.avg15min[0].mean.toFixed(1)}°C.\\n`\noutput += `Die Durchschnittstemperatur der letzten 24 Stunden war ${msg.payload.avg24h[0].mean.toFixed(1)}°C, `\noutput += `die Tiefsttemperatur war ${msg.payload.min[0].min.toFixed(1)}°C um ${msg.payload.min[0].time.getHours()}:${msg.payload.min[0].time.getMinutes()} Uhr und `\noutput += `die Höchsttemperatur war ${msg.payload.max[0].max.toFixed(1)}°C um ${msg.payload.max[0].time.getHours()}:${msg.payload.max[0].time.getMinutes()} Uhr.\\n`\noutput += \"Powered by @NodeRED and @InfluxDB.\"\nmsg.payload = output\nreturn msg;\n","outputs":1,"noerr":0,"x":1060,"y":160,"wires":[["57a41df1.8e7bb4"]]},{"id":"b93f273e.e701d8","type":"trigger","z":"161f9872.1bc6e8","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":770,"y":520,"wires":[["180233c3.f4c66c"]]},{"id":"180233c3.f4c66c","type":"change","z":"161f9872.1bc6e8","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"ESP_Kitchen","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":520,"wires":[["de5e1488.905cf8"]]},{"id":"e6e0540a.68ca78","type":"trigger","z":"161f9872.1bc6e8","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":770,"y":480,"wires":[["ee19751d.1403c8"]]},{"id":"ee19751d.1403c8","type":"change","z":"161f9872.1bc6e8","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"ESP_Attic","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":480,"wires":[["de5e1488.905cf8"]]},{"id":"57a41df1.8e7bb4","type":"twitter out","z":"15cbc07c.cf074","twitter":"9ade7197.41fd7","name":"Tweet","x":1250,"y":160,"wires":[]},{"id":"c3a2e3e9.17cf5","type":"telegram sender","z":"f7f94748.f88348","name":"hottis_bot","bot":"949da0ae.eef54","x":680,"y":420,"wires":[["10d261e9.381fae"]]},{"id":"12eb3d0f.69a043","type":"telegram receiver","z":"f7f94748.f88348","name":"Receiver","bot":"949da0ae.eef54","saveDataDir":"","x":120,"y":260,"wires":[["31d9cb49.1b5c54","5d8c8fab.ad857"],["6febab95.98e214"]]},{"id":"6febab95.98e214","type":"debug","z":"f7f94748.f88348","name":"UnauthorizedAccess","active":true,"tosidebar":true,"console":true,"tostatus":true,"complete":"payload","targetType":"msg","x":180,"y":340,"wires":[]},{"id":"10d261e9.381fae","type":"debug","z":"f7f94748.f88348","name":"TelegramOutput","active":true,"tosidebar":true,"console":true,"tostatus":false,"complete":"payload","targetType":"msg","x":710,"y":360,"wires":[]},{"id":"e3217c9a.a357b","type":"debug","z":"161f9872.1bc6e8","name":"ErrorMessage","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":620,"y":1760,"wires":[]},{"id":"6ef3c0ff.cf872","type":"function","z":"161f9872.1bc6e8","name":"ErrorMessage","func":"// let res = JSON.stringify(msg)\n// msg.payload = res\nreturn msg","outputs":1,"noerr":0,"x":400,"y":1700,"wires":[["bdbb7cc1.47758","e3217c9a.a357b","59301994.0b70e8"]]},{"id":"31d9cb49.1b5c54","type":"function","z":"f7f94748.f88348","name":"TelegramInboundController","func":"if (msg.payload.content.startsWith(\"/\")) {\n msg.tokens = msg.payload.content.split(\" \")\n msg.cmd = msg.tokens.shift().substr(1)\n return [null, msg]\n} else {\n msg.payload.content = \"Start commands with a /, maybe you want to try /help.\"\n return [msg, null]\n}\n\n","outputs":2,"noerr":0,"x":180,"y":420,"wires":[["c3a2e3e9.17cf5"],["192e92a8.2075bd"]]},{"id":"de5e1488.905cf8","type":"link out","z":"161f9872.1bc6e8","name":"alarmESP","links":["331ae160.3b9ace","994c7bcc.36e3a8"],"x":1175,"y":500,"wires":[]},{"id":"59301994.0b70e8","type":"delay","z":"161f9872.1bc6e8","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"minute","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":610,"y":1640,"wires":[["3efe4607.e0a6ea"]]},{"id":"3efe4607.e0a6ea","type":"link out","z":"161f9872.1bc6e8","name":"errors","links":["d147891c.b43828","26719762.125ec8"],"x":840,"y":1640,"wires":[]},{"id":"8b8eddd8.8145b","type":"function","z":"f7f94748.f88348","name":"ClearChatDict","func":"const CHAT_DICT_KEY = 'chatKey'\nflow.set(CHAT_DICT_KEY, {})\nnode.warn(\"chatDict cleared\")\nreturn msg;","outputs":1,"noerr":0,"x":400,"y":40,"wires":[[]]},{"id":"8aa25d79.c189c","type":"inject","z":"f7f94748.f88348","name":"Trigger","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":40,"wires":[["8b8eddd8.8145b"]]},{"id":"192e92a8.2075bd","type":"switch","z":"f7f94748.f88348","name":"","property":"cmd","propertyType":"msg","rules":[{"t":"eq","v":"start","vt":"str"},{"t":"eq","v":"stop","vt":"str"},{"t":"eq","v":"help","vt":"str"},{"t":"eq","v":"register","vt":"str"},{"t":"eq","v":"clear","vt":"str"},{"t":"eq","v":"list","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":7,"x":170,"y":520,"wires":[["a283b2cd.cbdf3"],["272e70d9.b49de"],["8aa39a51.1480d8"],["94c6d2ef.aa1e2"],["791bf1ba.0ee4b"],["4e11b20a.53142c"],["82f07dd3.9f2f7"]],"inputLabels":["In"],"outputLabels":["Start","Stop","Help","Register","",null,"Default"]},{"id":"82f07dd3.9f2f7","type":"template","z":"f7f94748.f88348","name":"UnknownCmd","field":"payload.content","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Sorry, the command \"{{cmd}}\" is unknown here.","output":"str","x":420,"y":760,"wires":[["c3a2e3e9.17cf5"]]},{"id":"a283b2cd.cbdf3","type":"function","z":"f7f94748.f88348","name":"StartCmd","func":"const CHAT_DICT_KEY = 'chatKey'\nlet chatDict = flow.get(CHAT_DICT_KEY) || {}\n//node.warn(JSON.stringify(chatDict))\nlet msgs = []\nif (msg.payload.chatId in chatDict) {\n msg.payload.content = \"You are already known here\"\n} else {\n chatDict[msg.payload.chatId.toString()] = {\n \"errors\": false,\n \"alarms\": false,\n \"geofency\": false,\n \"locative\": false,\n \"time\": false\n }\n msg.payload.content = \"Now you are known here\"\n flow.set(CHAT_DICT_KEY, chatDict)\n}\nreturn msg\n","outputs":1,"noerr":0,"x":400,"y":500,"wires":[["c3a2e3e9.17cf5"]]},{"id":"272e70d9.b49de","type":"function","z":"f7f94748.f88348","name":"StopCmd","func":"const CHAT_DICT_KEY = 'chatKey'\nlet chatDict = flow.get(CHAT_DICT_KEY) || {}\n//node.warn(JSON.stringify(chatDict))\nlet msgs = []\nif (msg.payload.chatId in chatDict) {\n delete chatDict[msg.payload.chatId.toString()]\n msg.payload.content = \"You are known here, but now I forgot you\"\n flow.set(CHAT_DICT_KEY, chatDict)\n} else {\n msg.payload.content = \"You are unknown here\"\n}\nreturn msg\n","outputs":1,"noerr":0,"x":400,"y":540,"wires":[["c3a2e3e9.17cf5"]]},{"id":"8aa39a51.1480d8","type":"template","z":"f7f94748.f88348","name":"HelpCmd","field":"payload.content","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Help for the HottisBot.\n\n/start\n Start your conversation with the bot. ChatId will be stored.\n \n/stop\n End your conversation, chatId will be forgotten.\n\n/help\n This help.\n\n/register token\n Register for information to be send for the particular token.\n\n/clear\n Clear all registrations\n \n/list \n List your registrations\n ","output":"str","x":400,"y":580,"wires":[["c3a2e3e9.17cf5"]]},{"id":"94c6d2ef.aa1e2","type":"function","z":"f7f94748.f88348","name":"RegisterCmd","func":"const CHAT_DICT_KEY = 'chatKey'\nlet chatDict = flow.get(CHAT_DICT_KEY) || {}\n//node.warn(JSON.stringify(chatDict))\nlet msgs = []\nif (msg.payload.chatId in chatDict) {\n if (msg.tokens[0] == \"help\") {\n let tmpMsg = \"Possible options are \"\n for (let o in chatDict[msg.payload.chatId]) {\n tmpMsg += o + \" \"\n }\n msg.payload.content = tmpMsg\n } else {\n if (msg.tokens[0] in chatDict[msg.payload.chatId]) {\n chatDict[msg.payload.chatId][msg.tokens[0]] = true\n msg.payload.content = `You have been registered for the option ${msg.tokens[0]}`\n flow.set(CHAT_DICT_KEY, chatDict)\n } else {\n msg.payload.content = \"Unknown option\"\n }\n }\n} else {\n msg.payload.content = \"You are unknown here, start with /start\"\n}\nreturn msg\n","outputs":1,"noerr":0,"x":410,"y":620,"wires":[["c3a2e3e9.17cf5"]]},{"id":"c4aed737.6b87d8","type":"function","z":"f7f94748.f88348","name":"PrintChatDict","func":"const CHAT_DICT_KEY = 'chatKey'\nlet chatDict = flow.get(CHAT_DICT_KEY) || {}\nnode.warn(JSON.stringify(chatDict))\nreturn msg;","outputs":1,"noerr":0,"x":390,"y":100,"wires":[[]]},{"id":"e3ab7e28.09718","type":"inject","z":"f7f94748.f88348","name":"Trigger","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":100,"wires":[["c4aed737.6b87d8"]]},{"id":"791bf1ba.0ee4b","type":"function","z":"f7f94748.f88348","name":"ClearCmd","func":"const CHAT_DICT_KEY = 'chatKey'\nlet chatDict = flow.get(CHAT_DICT_KEY) || {}\n//node.warn(JSON.stringify(chatDict))\nlet msgs = []\nif (msg.payload.chatId in chatDict) {\n for (let o in chatDict[msg.payload.chatId]) {\n chatDict[msg.payload.chatId][o] = false\n }\n msg.payload.content = \"All your registrations have been cleared\"\n flow.set(CHAT_DICT_KEY, chatDict)\n} else {\n msg.payload.content = \"You are unknown here, start with /start\"\n}\nreturn msg\n","outputs":1,"noerr":0,"x":400,"y":660,"wires":[["c3a2e3e9.17cf5"]]},{"id":"4e11b20a.53142c","type":"function","z":"f7f94748.f88348","name":"ListCmd","func":"const CHAT_DICT_KEY = 'chatKey'\nlet chatDict = flow.get(CHAT_DICT_KEY) || {}\n//node.warn(JSON.stringify(chatDict))\nlet msgs = []\nif (msg.payload.chatId in chatDict) {\n let tmpMsg = \"You are registered for\\n\"\n for (let o in chatDict[msg.payload.chatId]) {\n tmpMsg += o + \": \" + chatDict[msg.payload.chatId][o] + \"\\n\"\n }\n msg.payload.content = tmpMsg\n} else {\n msg.payload.content = \"You are unknown here, start with /start\"\n}\nreturn msg\n","outputs":1,"noerr":0,"x":400,"y":700,"wires":[["c3a2e3e9.17cf5"]]},{"id":"e9de7ec7.cbf71","type":"function","z":"f7f94748.f88348","name":"TelegramMessagePreparator","func":"const CHAT_DICT_KEY = 'chatKey'\nlet chatDict = flow.get(CHAT_DICT_KEY) || {}\nlet msgs = []\nfor (let chatId in chatDict) {\n node.warn(\"Id: \" + chatId + \", option: \" + msg.option)\n if ((msg.option in chatDict[chatId]) && (chatDict[chatId][msg.option])) {\n node.warn(\"Mark 1\")\n let m = { \"payload\": {\n \"chatId\": chatId,\n \"type\": \"message\",\n \"content\": JSON.stringify(msg, null, 2)\n }\n }\n msgs.push(m)\n }\n}\nnode.warn(JSON.stringify(msgs))\nreturn [msgs];","outputs":1,"noerr":0,"x":460,"y":840,"wires":[["c3a2e3e9.17cf5"]]},{"id":"6aa6322b.0aff5c","type":"mqtt in","z":"f7f94748.f88348","name":"","topic":"IoT/Presence/Geofency","qos":"2","datatype":"auto","broker":"a7163696.6f4318","x":140,"y":1060,"wires":[["369d676c.ff2e68"]]},{"id":"4ace0f7a.c48a9","type":"change","z":"f7f94748.f88348","name":"errors","rules":[{"t":"set","p":"option","pt":"msg","to":"errors","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":210,"y":840,"wires":[["e9de7ec7.cbf71"]]},{"id":"d147891c.b43828","type":"link in","z":"f7f94748.f88348","name":"","links":["3efe4607.e0a6ea","cb5cfac1.9c0d88"],"x":115,"y":840,"wires":[["4ace0f7a.c48a9"]]},{"id":"983aafdf.fd28c","type":"change","z":"f7f94748.f88348","name":"time","rules":[{"t":"set","p":"option","pt":"msg","to":"time","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":210,"y":880,"wires":[["e9de7ec7.cbf71"]]},{"id":"efd11e7b.d7a08","type":"inject","z":"f7f94748.f88348","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":120,"y":940,"wires":[["983aafdf.fd28c"]]},{"id":"a5c806e0.2be3e8","type":"inject","z":"161f9872.1bc6e8","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":200,"y":1640,"wires":[["6ef3c0ff.cf872"]]},{"id":"369d676c.ff2e68","type":"change","z":"f7f94748.f88348","name":"geofency","rules":[{"t":"set","p":"option","pt":"msg","to":"geofency","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":200,"y":1000,"wires":[["e9de7ec7.cbf71"]]},{"id":"96d8fa5c.a13318","type":"mqtt in","z":"f7f94748.f88348","name":"","topic":"IoT/Presence/Locative","qos":"2","datatype":"auto","broker":"a7163696.6f4318","x":140,"y":1200,"wires":[["1896fa82.a809f5"]]},{"id":"1896fa82.a809f5","type":"change","z":"f7f94748.f88348","name":"locative","rules":[{"t":"set","p":"option","pt":"msg","to":"locative","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":200,"y":1140,"wires":[["e9de7ec7.cbf71"]]},{"id":"2d7d82a6.d7759e","type":"change","z":"f7f94748.f88348","name":"alarms","rules":[{"t":"set","p":"option","pt":"msg","to":"alarms","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":210,"y":1260,"wires":[["e9de7ec7.cbf71"]]},{"id":"994c7bcc.36e3a8","type":"link in","z":"f7f94748.f88348","name":"","links":["7c566964.6012d8","9786e66c.08f3e8","b080376b.1e2678","de5e1488.905cf8","e44a2b47.10b378","7990f40d.cfc6dc","9be3b04e.3e7b8","619de5cc.60b4fc","80f1ac34.2df46","4a85527.ad86bac","9c093ca3.0e02","2cefca60.4a7316","3a49ee1e.1daa7a","dfddb6cf.e4a588","9fc6e500.062908"],"x":115,"y":1260,"wires":[["2d7d82a6.d7759e"]]},{"id":"5d8c8fab.ad857","type":"debug","z":"f7f94748.f88348","name":"ReceivedMsg","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":450,"y":240,"wires":[]},{"id":"e51249cb.ca80a8","type":"pushover","z":"5f3b2200.77571","name":"","device":"","title":"HomeControlAlarm","priority":0,"sound":"pushover","url":"","url_title":"","html":true,"x":890,"y":260,"wires":[]},{"id":"259061c9.8caf6e","type":"inject","z":"5f3b2200.77571","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":360,"y":260,"wires":[["e51249cb.ca80a8"]]},{"id":"26719762.125ec8","type":"link in","z":"5f3b2200.77571","name":"Push Error","links":["3efe4607.e0a6ea","cb5cfac1.9c0d88"],"x":335,"y":360,"wires":[["7bec6469.a3c17c"]]},{"id":"7bec6469.a3c17c","type":"change","z":"5f3b2200.77571","name":"Topic NodeRed Exception","rules":[{"t":"set","p":"topic","pt":"msg","to":"Node-RED Exception","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":530,"y":360,"wires":[["e51249cb.ca80a8"]]},{"id":"a96ab0e9.c738e","type":"link in","z":"5f3b2200.77571","name":"Push Alarm","links":["9786e66c.08f3e8","e44a2b47.10b378","7990f40d.cfc6dc"],"x":335,"y":520,"wires":[["ab610711.56b898"]]},{"id":"ab610711.56b898","type":"change","z":"5f3b2200.77571","name":"Topic Device Alarm","rules":[{"t":"set","p":"topic","pt":"msg","to":"Device Alarm","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":510,"y":520,"wires":[["e51249cb.ca80a8"]]},{"id":"bf0f1a1a.bd15d8","type":"http in","z":"63d1c956.3ee9c8","name":"Location","url":"/location","method":"post","upload":false,"swaggerDoc":"","x":200,"y":180,"wires":[["dea26ac6.83a288","ba0ccdca.996cf"]]},{"id":"dea26ac6.83a288","type":"template","z":"63d1c956.3ee9c8","name":"Prepare Response","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Ok, location service, thank you very much.","output":"str","x":430,"y":180,"wires":[["731db480.aadd9c"]]},{"id":"731db480.aadd9c","type":"http response","z":"63d1c956.3ee9c8","name":"","statusCode":"200","headers":{},"x":660,"y":180,"wires":[]},{"id":"31957024.76a17","type":"function","z":"63d1c956.3ee9c8","name":"Stringify","func":"let m = JSON.stringify(msg.payload, null, 2)\nmsg.payload = m\nreturn msg;","outputs":1,"noerr":0,"x":740,"y":300,"wires":[["fc4be7c8.26bd28"]]},{"id":"16fa8e82.4283a1","type":"change","z":"5f3b2200.77571","name":"Topic Notification","rules":[{"t":"set","p":"topic","pt":"msg","to":"Notification","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":510,"y":580,"wires":[["e51249cb.ca80a8"]]},{"id":"c931c70.3beb138","type":"link in","z":"5f3b2200.77571","name":"Push Notification","links":["bf534da5.e7ae2"],"x":335,"y":580,"wires":[["16fa8e82.4283a1"]]},{"id":"445f490f.ae7268","type":"debug","z":"63d1c956.3ee9c8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":750,"y":380,"wires":[]},{"id":"ba0ccdca.996cf","type":"function","z":"63d1c956.3ee9c8","name":"Prepare","func":"let content = {\n \"location\": msg.payload.id,\n \"direction\": msg.payload.trigger,\n \"device\": msg.payload.device\n}\nmsg.payload = content\nreturn msg;","outputs":1,"noerr":0,"x":400,"y":300,"wires":[["c528ca13.42f448"]]},{"id":"c528ca13.42f448","type":"function","z":"63d1c956.3ee9c8","name":"SelectPerson","func":"let device = msg.payload.device\nlet persons = {\n \"A26FF17D-CC09-464E-9E71-A994EEC1C883\": \"Wolfgang\",\n \"01A2B612-060B-47B0-82FA-A8F41328C6D4\": \"Patty\",\n \"9C4D290A-D0DC-42AB-97F0-9075041512E2\": \"Anna\",\n \"E1693F9B-37DE-449C-BF47-AE0227EDD782\": \"Matthias\"\n}\nlet person = \"Unknown\"\nif (device in persons) {\n person = persons[device]\n}\nlet location = msg.payload.location\nmsg.topic = `IoT/Presence/Location/${person}/${location}`\nmsg.payload.person = person\nreturn msg;","outputs":1,"noerr":0,"x":570,"y":300,"wires":[["445f490f.ae7268","31957024.76a17","ee40dee3.a2715","e04c3689.f5ad98"]]},{"id":"ee40dee3.a2715","type":"mqtt out","z":"63d1c956.3ee9c8","name":"","topic":"","qos":"","retain":"true","broker":"a7163696.6f4318","x":910,"y":180,"wires":[]},{"id":"46b22e68.24113","type":"function","z":"c2d99cfc.d05b9","name":"EventCounter","func":"let cnt = context.get('EventCounter') || 0\ncnt += 1\ncontext.set('EventCounter', cnt)\nnode.status({fill:\"blue\",shape:\"dot\",text:`${cnt}`})\nreturn msg;","outputs":1,"noerr":0,"x":440,"y":380,"wires":[["8c7fcb5a.cfdf38","4489e91d.4448d8"]]},{"id":"8c7fcb5a.cfdf38","type":"debug","z":"c2d99cfc.d05b9","name":"InfluxReadyMain","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":660,"y":360,"wires":[]},{"id":"4489e91d.4448d8","type":"influxdb out","z":"c2d99cfc.d05b9","influxdb":"64f763bb.19937c","name":"","measurement":"measured","precision":"","retentionPolicy":"","x":730,"y":400,"wires":[]},{"id":"e774ea0a.8c9498","type":"link in","z":"c2d99cfc.d05b9","name":"DatabaseInput","links":["7f786eca.756de","a3c2b617.b695e8","ba567f4a.7189b","edba769.7203188","c9f761e.47c18a","7f24c8d4.78b378","626a4ff4.2659a","e35e483a.8ee6a8","d8654fea.c36b3","b1f5ba29.5080d8","89295b26.bf9a78","522bf444.8db39c","85df4595.b6a24","e217b061.aa0ef","dfa7220a.6b28e","82ed515f.9447d"],"x":255,"y":380,"wires":[["46b22e68.24113"]]},{"id":"a3c2b617.b695e8","type":"link out","z":"161f9872.1bc6e8","name":"","links":["e774ea0a.8c9498"],"x":1275,"y":660,"wires":[]},{"id":"ac57e5d9.c707e8","type":"catch","z":"e4659a9f.3f8658","name":"","scope":null,"x":140,"y":160,"wires":[["bf5ed3c7.d7ff7"]]},{"id":"2ff06ca5.070bc4","type":"e-mail","z":"e4659a9f.3f8658","server":"mailer","port":"25","secure":false,"name":"wolfgang.hottgenroth@icloud.com","dname":"Error message","x":560,"y":160,"wires":[]},{"id":"73653e14.45b7c","type":"debug","z":"e4659a9f.3f8658","name":"ErrorMessage","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":560,"y":220,"wires":[]},{"id":"bf5ed3c7.d7ff7","type":"function","z":"e4659a9f.3f8658","name":"ErrorMessage","func":"// let res = JSON.stringify(msg)\n// msg.payload = res\nreturn msg","outputs":1,"noerr":0,"x":340,"y":160,"wires":[["2ff06ca5.070bc4","73653e14.45b7c","14b1c9b1.ffd2d6"]]},{"id":"14b1c9b1.ffd2d6","type":"delay","z":"e4659a9f.3f8658","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"minute","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":550,"y":100,"wires":[["cb5cfac1.9c0d88"]]},{"id":"cb5cfac1.9c0d88","type":"link out","z":"e4659a9f.3f8658","name":"errors","links":["d147891c.b43828","26719762.125ec8"],"x":780,"y":100,"wires":[]},{"id":"218cd9fd.a17db6","type":"inject","z":"e4659a9f.3f8658","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":140,"y":100,"wires":[["bf5ed3c7.d7ff7"]]},{"id":"fc4be7c8.26bd28","type":"pushover","z":"63d1c956.3ee9c8","name":"","device":"","title":"PresenceNotification","priority":0,"sound":"pushover","url":"","url_title":"","html":true,"x":960,"y":300,"wires":[]},{"id":"f18313c3.4aa548","type":"function","z":"5f3b2200.77571","name":"PrepareMessage","func":"let statusText = (msg.payload == '1' ? 'okay' : 'failed')\nmsg.payload = {\n 'device': msg.deviceName,\n 'status': msg.payload,\n 'statusText': statusText,\n 'message': msg.deviceName + \" \" + statusText\n}\nmsg.topic = 'IoT/SensorStatus/' + msg.deviceName\nreturn msg;","outputs":1,"noerr":0,"x":510,"y":440,"wires":[["2d57cf67.04159","674df4cb.2a1f04","103dfef.8557901"]]},{"id":"331ae160.3b9ace","type":"link in","z":"5f3b2200.77571","name":"Push Alarm Raw","links":["7c566964.6012d8","de5e1488.905cf8","b080376b.1e2678","9be3b04e.3e7b8","619de5cc.60b4fc","80f1ac34.2df46","4a85527.ad86bac","9c093ca3.0e02","2cefca60.4a7316","3a49ee1e.1daa7a","dfddb6cf.e4a588","9fc6e500.062908"],"x":335,"y":440,"wires":[["f18313c3.4aa548"]]},{"id":"2d57cf67.04159","type":"change","z":"5f3b2200.77571","name":"for Pushover","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.message","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":480,"wires":[["ab610711.56b898"]]},{"id":"674df4cb.2a1f04","type":"mqtt out","z":"5f3b2200.77571","name":"SensorStatus","topic":"","qos":"","retain":"true","broker":"a7163696.6f4318","x":880,"y":440,"wires":[]},{"id":"4b1db719.c975e8","type":"trigger","z":"161f9872.1bc6e8","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":770,"y":440,"wires":[["da9d638e.9f2cb"]]},{"id":"da9d638e.9f2cb","type":"change","z":"161f9872.1bc6e8","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Outdoor_House","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":440,"wires":[["de5e1488.905cf8"]]},{"id":"1c6e730a.e6188d","type":"mqtt in","z":"bc38d6a.83ca528","name":"Subscribe Everything","topic":"#","qos":"2","datatype":"utf8","broker":"a7163696.6f4318","x":140,"y":140,"wires":[["8cc2908c.1a654"]]},{"id":"cc667c8d.627068","type":"debug","z":"bc38d6a.83ca528","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":130,"y":320,"wires":[]},{"id":"a6bfe95f.5d5b8","type":"mysql","z":"bc38d6a.83ca528","mydb":"130337d4.ea361","name":"MqttAuditing","x":150,"y":260,"wires":[["cc667c8d.627068"]]},{"id":"8cc2908c.1a654","type":"function","z":"bc38d6a.83ca528","name":"MqttAuditingStatement","func":"let outMsg = {\n \"topic\": \"INSERT INTO audittrail (topic, payload) VALUES (:auditTopic, :auditPayload)\",\n \"payload\": {\n \"auditTopic\" : msg.topic,\n \"auditPayload\" : msg.payload\n }\n}\n\nmsg = outMsg\n\nreturn msg;\n","outputs":1,"noerr":0,"x":180,"y":200,"wires":[["a6bfe95f.5d5b8"]]},{"id":"103dfef.8557901","type":"debug","z":"5f3b2200.77571","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":880,"y":560,"wires":[]},{"id":"243c1f2.b0e0ae","type":"mqtt out","z":"e4659a9f.3f8658","name":"","topic":"test/temperature","qos":"","retain":"","broker":"d9d536e3.9c771","x":640,"y":480,"wires":[]},{"id":"e4ae0374.8fcbc8","type":"json","z":"e4659a9f.3f8658","name":"","property":"payload","action":"","pretty":false,"x":430,"y":480,"wires":[["243c1f2.b0e0ae"]]},{"id":"32c9498c.ab01a6","type":"mqtt in","z":"17f27a3f.d2a296","name":"","topic":"IoT/RainSensor2/Values","qos":"2","datatype":"auto","broker":"a7163696.6f4318","x":190,"y":240,"wires":[["8fd129c0.776088","78216937.9e7f78"]]},{"id":"8fd129c0.776088","type":"json","z":"17f27a3f.d2a296","name":"","property":"payload","action":"","pretty":false,"x":470,"y":240,"wires":[["bfba0ea3.f87358"]]},{"id":"bfba0ea3.f87358","type":"template","z":"17f27a3f.d2a296","name":"InfluxRainPreparator","field":"payload","fieldType":"msg","format":"json","syntax":"mustache","template":"[\n { \n \"pv\":{{payload.raincnt}},\n \"sv\":{{payload.totalCnt}},\n \"tv\":{{payload.uptime}}\n },\n {\n \"deviceid\":\"RainSensor2\",\n \"kind\":\"Rain\",\n \"category\":\"Outdoor\",\n \"status\":\"good\",\n \"statusText\":\"not evaluated\"\n }\n]","output":"json","x":700,"y":240,"wires":[["85df4595.b6a24","22c6e43d.2c4684"]]},{"id":"85df4595.b6a24","type":"link out","z":"17f27a3f.d2a296","name":"","links":["e774ea0a.8c9498"],"x":895,"y":240,"wires":[]},{"id":"22c6e43d.2c4684","type":"debug","z":"17f27a3f.d2a296","name":"Prepared","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":910,"y":180,"wires":[]},{"id":"78216937.9e7f78","type":"debug","z":"17f27a3f.d2a296","name":"Raw","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":450,"y":180,"wires":[]},{"id":"83120bc7.70589","type":"function","z":"c2d99cfc.d05b9","name":"EventCounter","func":"let cnt = context.get('EventCounter') || 0\ncnt += 1\ncontext.set('EventCounter', cnt)\nnode.status({fill:\"blue\",shape:\"dot\",text:`${cnt}`})\nreturn msg;","outputs":1,"noerr":0,"x":440,"y":540,"wires":[["4cebe084.d7f18","d0acf431.f708e"]]},{"id":"4cebe084.d7f18","type":"debug","z":"c2d99cfc.d05b9","name":"InfluxReadyStatistics","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":680,"y":520,"wires":[]},{"id":"d0acf431.f708e","type":"influxdb out","z":"c2d99cfc.d05b9","influxdb":"64f763bb.19937c","name":"","measurement":"statistics","precision":"","retentionPolicy":"","x":730,"y":560,"wires":[]},{"id":"9257f59d.7f82c8","type":"link in","z":"c2d99cfc.d05b9","name":"DatabaseStatisticsInput","links":["476d066c.3d8448"],"x":255,"y":540,"wires":[["83120bc7.70589"]]},{"id":"58d43e40.8a909","type":"mqtt in","z":"161f9872.1bc6e8","name":"","topic":"NR/Multisensor/+/Temperatur","qos":"2","datatype":"auto","broker":"a7163696.6f4318","x":200,"y":780,"wires":[["5eaa8efa.69fde8"]]},{"id":"5eaa8efa.69fde8","type":"json","z":"161f9872.1bc6e8","name":"","property":"payload","action":"obj","pretty":false,"x":270,"y":820,"wires":[["a1b70488.084d98"]]},{"id":"a1b70488.084d98","type":"template","z":"161f9872.1bc6e8","name":"ZigbeeThermAdjuster","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\n \"name\":\"{{payload.location}}\",\n \"kind\":\"Temperature\",\n \"values\": {\n \"battery\":0,\n \"temperature\":{{payload.CurrentTemperature}}\n }\n}","output":"json","x":220,"y":860,"wires":[["5d7d643b.a38cd4","b543dc5c.f78ee"]]},{"id":"5d7d643b.a38cd4","type":"debug","z":"161f9872.1bc6e8","name":"ZigbeeTherm","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":240,"y":900,"wires":[]},{"id":"877eafee.ccebb","type":"trigger","z":"161f9872.1bc6e8","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"60","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":770,"y":400,"wires":[["31fb974f.fa234"]]},{"id":"31fb974f.fa234","type":"change","z":"161f9872.1bc6e8","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Indoor_Studierzimmer","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":400,"wires":[["de5e1488.905cf8"]]},{"id":"a37970cb.f4ab88","type":"trigger","z":"161f9872.1bc6e8","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"60","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":770,"y":360,"wires":[["dea322d6.612158"]]},{"id":"dea322d6.612158","type":"change","z":"161f9872.1bc6e8","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Indoor_Matthias","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":360,"wires":[["de5e1488.905cf8"]]},{"id":"d3116784.bc8df8","type":"trigger","z":"161f9872.1bc6e8","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"60","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":770,"y":320,"wires":[["61109a73.29f72c"]]},{"id":"61109a73.29f72c","type":"change","z":"161f9872.1bc6e8","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Indoor_Anna","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":320,"wires":[["de5e1488.905cf8"]]},{"id":"d279226.e32c86","type":"change","z":"cc5f4bb3.067d7","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Meterbus","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1120,"y":1040,"wires":[["3a49ee1e.1daa7a"]]},{"id":"8b19f299.0334","type":"trigger","z":"cc5f4bb3.067d7","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":910,"y":1040,"wires":[["d279226.e32c86"]]},{"id":"88525a40.3432f","type":"mqtt in","z":"cc5f4bb3.067d7","name":"","topic":"IoT/MBGW3/Measurement","qos":"2","datatype":"json","broker":"a7163696.6f4318","x":170,"y":640,"wires":[["9c5f791c.baff9","7e76dbe2.4409cc","8b19f299.0334"]]},{"id":"9c5f791c.baff9","type":"debug","z":"cc5f4bb3.067d7","name":"Meterbus","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":220,"y":700,"wires":[]},{"id":"6652cb7b.af7f0c","type":"switch","z":"cc5f4bb3.067d7","name":"PowerDeviceSelector","property":"payload.name","propertyType":"msg","rules":[{"t":"eq","v":"Light","vt":"str"},{"t":"eq","v":"Computer","vt":"str"},{"t":"eq","v":"Fridge","vt":"str"},{"t":"eq","v":"Freezer","vt":"str"},{"t":"eq","v":"Laundry","vt":"str"},{"t":"eq","v":"Dryer","vt":"str"},{"t":"eq","v":"Dishwasher","vt":"str"},{"t":"eq","v":"Total","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":9,"x":660,"y":520,"wires":[["176d3af8.5e25cd","6a4a7fe.d7ee98"],["176d3af8.5e25cd","d335439a.5ab19"],["176d3af8.5e25cd","cde2812f.bb14d"],["176d3af8.5e25cd","d01b2004.2116b"],["70c8a3a7.f14c4c","2969a1a4.bca7e6"],["70c8a3a7.f14c4c","464effec.349a4"],["70c8a3a7.f14c4c","c258b8d0.6fbe"],["d7852f08.011c48","833adb94.f81d7"],["3f17e37d.6095a4"]]},{"id":"176d3af8.5e25cd","type":"change","z":"cc5f4bb3.067d7","name":"LowPowerCategorizer","rules":[{"t":"set","p":"payload.category","pt":"msg","to":"LowPower","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":960,"y":340,"wires":[["e23623e0.d3efd","f06c3d0a.7b27"]]},{"id":"70c8a3a7.f14c4c","type":"change","z":"cc5f4bb3.067d7","name":"HighPowerCategorizer","rules":[{"t":"set","p":"payload.category","pt":"msg","to":"HighPower","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":960,"y":380,"wires":[["e23623e0.d3efd","f06c3d0a.7b27"]]},{"id":"d7852f08.011c48","type":"change","z":"cc5f4bb3.067d7","name":"TotalPowerCategorizer","rules":[{"t":"set","p":"payload.category","pt":"msg","to":"TotalPower","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":960,"y":420,"wires":[["e23623e0.d3efd","f06c3d0a.7b27"]]},{"id":"3f17e37d.6095a4","type":"change","z":"cc5f4bb3.067d7","name":"UnknownCategorizer","rules":[{"t":"set","p":"payload.category","pt":"msg","to":"Unknown","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":960,"y":460,"wires":[["e23623e0.d3efd","f06c3d0a.7b27"]]},{"id":"e23623e0.d3efd","type":"template","z":"cc5f4bb3.067d7","name":"InfluxPowerPreparator","field":"payload","fieldType":"msg","format":"json","syntax":"mustache","template":"[\n { \n \"pv\":{{payload.values.power}},\n \"sv\":{{payload.values.energy}},\n \"tv\":{{payload.values.errorRatio}}\n },\n {\n \"deviceid\":\"{{payload.name}}\",\n \"kind\":\"{{payload.kind}}\",\n \"category\":\"{{payload.category}}\",\n \"status\":\"{{payload.status}}\",\n \"statusText\":\"{{payload.statusText}}\"\n }\n]","output":"json","x":1240,"y":260,"wires":[[]]},{"id":"dfa7220a.6b28e","type":"link out","z":"cc5f4bb3.067d7","name":"","links":["e774ea0a.8c9498"],"x":1395,"y":260,"wires":[]},{"id":"6a4a7fe.d7ee98","type":"trigger","z":"cc5f4bb3.067d7","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":910,"y":720,"wires":[["1a698b0f.b85565"]]},{"id":"d335439a.5ab19","type":"trigger","z":"cc5f4bb3.067d7","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":910,"y":760,"wires":[["4345f346.3e8f84"]]},{"id":"cde2812f.bb14d","type":"trigger","z":"cc5f4bb3.067d7","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":910,"y":800,"wires":[["d8a3a69f.3bd708"]]},{"id":"d01b2004.2116b","type":"trigger","z":"cc5f4bb3.067d7","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":910,"y":840,"wires":[["2ba118f1.7a2e48"]]},{"id":"2969a1a4.bca7e6","type":"trigger","z":"cc5f4bb3.067d7","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":910,"y":880,"wires":[["c5b1fce7.28a35"]]},{"id":"464effec.349a4","type":"trigger","z":"cc5f4bb3.067d7","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":910,"y":920,"wires":[["8943c11c.efdb98"]]},{"id":"c258b8d0.6fbe","type":"trigger","z":"cc5f4bb3.067d7","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":910,"y":960,"wires":[["a0626832.c510e8"]]},{"id":"833adb94.f81d7","type":"trigger","z":"cc5f4bb3.067d7","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":910,"y":1000,"wires":[["4b887b8e.077394"]]},{"id":"4b887b8e.077394","type":"change","z":"cc5f4bb3.067d7","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Power_Total","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1120,"y":1000,"wires":[["3a49ee1e.1daa7a"]]},{"id":"a0626832.c510e8","type":"change","z":"cc5f4bb3.067d7","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Power_Dishwasher","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1120,"y":960,"wires":[["3a49ee1e.1daa7a"]]},{"id":"8943c11c.efdb98","type":"change","z":"cc5f4bb3.067d7","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Power_Dryer","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1120,"y":920,"wires":[["3a49ee1e.1daa7a"]]},{"id":"c5b1fce7.28a35","type":"change","z":"cc5f4bb3.067d7","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Power_Laundry","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1120,"y":880,"wires":[["3a49ee1e.1daa7a"]]},{"id":"2ba118f1.7a2e48","type":"change","z":"cc5f4bb3.067d7","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Power_Freezer","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1120,"y":840,"wires":[["3a49ee1e.1daa7a"]]},{"id":"d8a3a69f.3bd708","type":"change","z":"cc5f4bb3.067d7","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Power_Fridge","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1120,"y":800,"wires":[["3a49ee1e.1daa7a"]]},{"id":"4345f346.3e8f84","type":"change","z":"cc5f4bb3.067d7","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Power_Computer","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1120,"y":760,"wires":[["3a49ee1e.1daa7a"]]},{"id":"1a698b0f.b85565","type":"change","z":"cc5f4bb3.067d7","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Power_Light","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1120,"y":720,"wires":[["3a49ee1e.1daa7a"]]},{"id":"3a49ee1e.1daa7a","type":"link out","z":"cc5f4bb3.067d7","name":"alarmX","links":["331ae160.3b9ace","994c7bcc.36e3a8"],"x":1315,"y":840,"wires":[]},{"id":"87fe7f9c.50ad","type":"template","z":"cc5f4bb3.067d7","name":"MBusPowerAdjuster","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\n \"name\":\"{{payload.Device}}\",\n \"kind\":\"Power\",\n \"status\":\"{{payload.Status}}\",\n \"statusText\":\"-\",\n \"values\": {\n \"battery\":0,\n \"energy\":{{payload.Values.Energy}},\n \"power\":{{payload.Values.Power}},\n \"errorRatio\":{{payload.ErrorRatio}}\n }\n}","output":"json","x":400,"y":500,"wires":[["6652cb7b.af7f0c"]]},{"id":"7e76dbe2.4409cc","type":"switch","z":"cc5f4bb3.067d7","name":"Status","property":"payload.Status","propertyType":"msg","rules":[{"t":"eq","v":"Ok","vt":"str"},{"t":"eq","v":"Error","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":190,"y":520,"wires":[["87fe7f9c.50ad"],["82fea274.edce68"]]},{"id":"82fea274.edce68","type":"template","z":"cc5f4bb3.067d7","name":"MBusPowerErrorAdjuster","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\n \"name\":\"{{payload.Device}}\",\n \"kind\":\"Power\",\n \"status\":\"{{payload.Status}}\",\n \"statusText\":\"-\",\n \"values\": {\n \"battery\":0,\n \"energy\":0,\n \"power\":0,\n \"errorRatio\":{{payload.ErrorRatio}}\n }\n}","output":"json","x":410,"y":540,"wires":[["6652cb7b.af7f0c"]]},{"id":"ef9ee1bf.a81bd8","type":"postgres","z":"c2d99cfc.d05b9","postgresdb":"8a7061d0.229298","name":"Test1","output":true,"perrow":false,"rowspermsg":"1","outputs":1,"x":590,"y":160,"wires":[["377dda6d.bfe91e"]]},{"id":"377dda6d.bfe91e","type":"debug","z":"c2d99cfc.d05b9","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":740,"y":160,"wires":[]},{"id":"928fa175.148258","type":"inject","z":"c2d99cfc.d05b9","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":140,"y":160,"wires":[["eb8a26c1.fbbe"]]},{"id":"eb8a26c1.fbbe","type":"function","z":"c2d99cfc.d05b9","name":"","func":"msg.queryParameters = {}\nmsg.queryParameters.testtxt = msg.payload\nmsg.payload = \"insert into test_t (txt) values ($testtxt)\"\nreturn msg;","outputs":1,"noerr":0,"x":370,"y":160,"wires":[["ef9ee1bf.a81bd8"]]},{"id":"f06c3d0a.7b27","type":"function","z":"cc5f4bb3.067d7","name":"PreparePowerTimescaleDB","func":"msg.queryParameters = { \n \"power\": msg.payload.values.power,\n \"energy\": msg.payload.values.energy,\n \"category\": msg.payload.category,\n \"errorRatio\": msg.payload.values.errorRatio,\n \"deviceid\": msg.payload.name,\n \"status\": msg.payload.status\n}\nmsg.payload = `\n INSERT INTO power_measurement_t\n (\n time,\n power, energy, errorratio,\n category, deviceid, status\n )\n VALUES(\n now(),\n $power, $energy, $errorRatio,\n $category, $deviceid, $status\n )\n`\nreturn msg\n","outputs":1,"noerr":0,"x":1260,"y":200,"wires":[["67b5923e.9b5a3c"]]},{"id":"b619ba93.b4e48","type":"debug","z":"161f9872.1bc6e8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":1150,"y":960,"wires":[]},{"id":"132f7736.bf1341","type":"function","z":"161f9872.1bc6e8","name":"PrepareTemperatureTimescaleDB","func":"msg.queryParameters = { \n \"temperature\": msg.payload.values.temperature,\n \"battery\": msg.payload.values.battery,\n \"deviceid\": msg.payload.name,\n \"kind\": msg.payload.kind,\n \"category\": msg.payload.category,\n \"status\": \"Ok\",\n \"statusText\": \"-\"\n}\nmsg.payload = `\n INSERT INTO temperature_measurement_t\n (\n temperature, battery,\n deviceid, kind, category,\n status, statustext\n )\n VALUES(\n $temperature, $battery,\n $deviceid, $kind, $category,\n $status, $statusText\n )\n`\nreturn msg\n","outputs":1,"noerr":0,"x":1120,"y":840,"wires":[["18c5fdfa.48d4ca"]]},{"id":"18c5fdfa.48d4ca","type":"postgres","z":"161f9872.1bc6e8","postgresdb":"8a7061d0.229298","name":"Test1","output":true,"perrow":false,"rowspermsg":"1","outputs":1,"x":1170,"y":900,"wires":[["b619ba93.b4e48"]]},{"id":"1dcfd53c.f4f6e3","type":"function","z":"796cb70.681af48","name":"Modbus2ThermAdjuster","func":"let location = env.get(\"Location\")\nlet hardLow = parseFloat(env.get(\"HardLow\"))\nlet softLow = parseFloat(env.get(\"SoftLow\"))\nlet softHigh = parseFloat(env.get(\"SoftHigh\"))\nlet hardHigh = parseFloat(env.get(\"HardHigh\"))\n\nlet temperature = parseInt(msg.payload)\nif (temperature & 0x8000) {\n temperature = ((temperature - 1) ^ 0xffff) * -1\n}\ntemperature = temperature / 10\n\nlet status = \"\"\nif (temperature < softLow || temperature > softHigh) {\n status = \"out of spec\"\n} else if (temperature < hardLow || temperature > hardHigh) {\n status = \"Error\"\n} else {\n status = \"Ok\"\n}\n\nlet tmpPayload = {\n \"name\":location,\n \"kind\":\"Temperature\",\n \"values\": {\n \"battery\":0,\n \"temperature\": temperature\n },\n \"status\": status\n}\n\nmsg.payload = tmpPayload;\nreturn msg\n","outputs":1,"noerr":0,"x":590,"y":260,"wires":[["38df7d6.3e0c482","8fb440fe.f904e","7720625e.dbeb7c"]]},{"id":"59e99a87.83f45c","type":"trigger","z":"161f9872.1bc6e8","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":770,"y":280,"wires":[["44d1441f.291f4c"]]},{"id":"44d1441f.291f4c","type":"change","z":"161f9872.1bc6e8","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Basement","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":280,"wires":[["de5e1488.905cf8"]]},{"id":"257cd34c.e21fac","type":"trigger","z":"161f9872.1bc6e8","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"15","extend":true,"units":"min","reset":"","bytopic":"all","name":"","x":770,"y":240,"wires":[["2d49319d.ae02c6"]]},{"id":"2d49319d.ae02c6","type":"change","z":"161f9872.1bc6e8","name":"","rules":[{"t":"set","p":"deviceName","pt":"msg","to":"Laundry","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":240,"wires":[["de5e1488.905cf8"]]},{"id":"8e54ba57.5c9dd","type":"http request","z":"f9bcf.31a70c32","name":"OpenWeather Temperature","method":"GET","ret":"obj","paytoqs":false,"url":"http://api.openweathermap.org/data/2.5/weather?q={{city}},{{country}}&appid=3dbd3edb5288c757d6cdb059c1b27a54","tls":"","proxy":"","authType":"","x":880,"y":400,"wires":[["c0816f07.4f927"]]},{"id":"9301910e.c9e658","type":"inject","z":"f9bcf.31a70c32","name":"1 Minute Period","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":400,"wires":[["3d5703f7.deda64","828b295a.8039f8","dd560bcc.ca2518","43ad3475.e1632c","d3451749.67bfe8","6fc4070.8f674f8","4394419c.f6caf","304656e2.01d5fa","377cc053.bb945","2f4169a2.8dec1e"]]},{"id":"43ad3475.e1632c","type":"function","z":"f9bcf.31a70c32","name":"Bochum, DE","func":"msg.city = \"Bochum\"\nmsg.country = \"de\"\nreturn msg","outputs":1,"noerr":0,"x":410,"y":400,"wires":[["8e54ba57.5c9dd"]]},{"id":"6743c37f.3ad354","type":"mqtt out","z":"f9bcf.31a70c32","name":"","topic":"test/temperature","qos":"","retain":"","broker":"d9d536e3.9c771","x":850,"y":520,"wires":[]},{"id":"1e095087.4aa7e7","type":"template","z":"f9bcf.31a70c32","name":"PrepareTemperature","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"[\n { \n \"pv\":{{payload.temperature_celsius}}\n },\n {\n \"deviceid\":\"OpenWeatherMap\",\n \"kind\":\"Temperature\",\n \"category\":\"Outdoor\",\n \"location\":\"{{payload.name}},{{payload.sys.country}}\",\n \"longitude\":\"{{payload.coord.lon}}\",\n \"latitude\":\"{{payload.coord.lat}}\",\n \"status\":\"good\",\n \"statusText\":\"not evaluated\"\n }\n]","output":"json","x":860,"y":480,"wires":[["6743c37f.3ad354"]]},{"id":"c0816f07.4f927","type":"function","z":"f9bcf.31a70c32","name":"Kelvin2Celsius","func":"msg.payload.temperature_celsius = msg.payload.main.temp - 273\nreturn msg;","outputs":1,"noerr":0,"x":840,"y":440,"wires":[["1e095087.4aa7e7"]]},{"id":"d3451749.67bfe8","type":"function","z":"f9bcf.31a70c32","name":"Dueren, DE","func":"msg.city = \"Dueren\"\nmsg.country = \"de\"\nreturn msg","outputs":1,"noerr":0,"x":410,"y":360,"wires":[["8e54ba57.5c9dd"]]},{"id":"6fc4070.8f674f8","type":"function","z":"f9bcf.31a70c32","name":"Duisburg, DE","func":"msg.city = \"Duisburg\"\nmsg.country = \"de\"\nreturn msg","outputs":1,"noerr":0,"x":420,"y":320,"wires":[["8e54ba57.5c9dd"]]},{"id":"4394419c.f6caf","type":"function","z":"f9bcf.31a70c32","name":"Dordrecht, NL","func":"msg.city = \"Dordrecht\"\nmsg.country = \"nl\"\nreturn msg","outputs":1,"noerr":0,"x":420,"y":280,"wires":[["8e54ba57.5c9dd"]]},{"id":"dd560bcc.ca2518","type":"function","z":"f9bcf.31a70c32","name":"Essen, DE","func":"msg.city = \"Essen\"\nmsg.country = \"de\"\nreturn msg","outputs":1,"noerr":0,"x":410,"y":440,"wires":[["8e54ba57.5c9dd"]]},{"id":"3d5703f7.deda64","type":"function","z":"f9bcf.31a70c32","name":"Egmond aan Zee, NL","func":"msg.city = \"Egmond aan Zee\"\nmsg.country = \"nl\"\nreturn msg","outputs":1,"noerr":0,"x":440,"y":480,"wires":[["8e54ba57.5c9dd"]]},{"id":"828b295a.8039f8","type":"function","z":"f9bcf.31a70c32","name":"Zingst, DE","func":"msg.city = \"Zingst\"\nmsg.country = \"de\"\nreturn msg","outputs":1,"noerr":0,"x":410,"y":520,"wires":[["8e54ba57.5c9dd"]]},{"id":"304656e2.01d5fa","type":"function","z":"f9bcf.31a70c32","name":"Kevelaer, DE","func":"msg.city = \"Kevelaer\"\nmsg.country = \"de\"\nreturn msg","outputs":1,"noerr":0,"x":410,"y":560,"wires":[["8e54ba57.5c9dd"]]},{"id":"377cc053.bb945","type":"function","z":"f9bcf.31a70c32","name":"Samara, RU","func":"msg.city = \"Samara\"\nmsg.country = \"ru\"\nreturn msg","outputs":1,"noerr":0,"x":410,"y":600,"wires":[[]]},{"id":"2f4169a2.8dec1e","type":"function","z":"f9bcf.31a70c32","name":"Chennai, IN","func":"msg.city = \"Chennai\"\nmsg.country = \"in\"\nreturn msg","outputs":1,"noerr":0,"x":410,"y":640,"wires":[[]]},{"id":"fe95f5fb.ed4498","type":"postgres","z":"63d1c956.3ee9c8","postgresdb":"8a7061d0.229298","name":"Postgres Presence","output":false,"perrow":false,"rowspermsg":"1","outputs":0,"x":770,"y":500,"wires":[]},{"id":"e04c3689.f5ad98","type":"function","z":"63d1c956.3ee9c8","name":"PrepareForPostgres","func":"msg.queryParameters = {\n \"location\": msg.payload.location,\n \"person\": msg.payload.person,\n \"direction\": msg.payload.direction,\n \"device\": msg.payload.device,\n \"msgid\": msg._msgid\n}\nmsg.payload = `\n INSERT INTO presence2 \n (\n time, \n location, \n person, \n direction, \n messageid, \n device\n ) \n VALUES (\n now(), \n $location, \n $person, \n $direction, \n $msgid, \n $device\n )\n`\nreturn msg;","outputs":1,"noerr":0,"x":780,"y":460,"wires":[["fe95f5fb.ed4498","3e009538.b2b612"]]},{"id":"3e009538.b2b612","type":"debug","z":"63d1c956.3ee9c8","name":"PostgresStatement","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":1050,"y":460,"wires":[]},{"id":"67b5923e.9b5a3c","type":"postgres","z":"cc5f4bb3.067d7","postgresdb":"2fd416bb.c289b2","name":"Postgres Power","output":false,"perrow":false,"rowspermsg":"1","outputs":0,"x":1580,"y":200,"wires":[]},{"id":"cac2bef3.92562","type":"function","z":"a80a9d37.68d378","name":"PreparePowerTimescaleDB","func":"msg.queryParameters = { \n \"power\": msg.payload.power,\n \"energy\": msg.payload.energy,\n \"category\": \"TemporalPower\",\n \"errorRatio\": 0,\n \"deviceid\": msg.deviceId,\n \"status\": msg.valid\n}\nmsg.payload = `\n INSERT INTO power_measurement_t\n (\n time,\n power, energy, errorratio,\n category, deviceid, status\n )\n VALUES(\n now(),\n $power, $energy, $errorRatio,\n $category, $deviceid, $status\n )\n`\nreturn msg\n","outputs":1,"noerr":0,"x":920,"y":340,"wires":[["ab095e59.f3fc"]]},{"id":"ab095e59.f3fc","type":"postgres","z":"a80a9d37.68d378","postgresdb":"2fd416bb.c289b2","name":"Postgres Power","output":false,"perrow":false,"rowspermsg":"1","outputs":0,"x":880,"y":380,"wires":[]},{"id":"38608160.8d6a9e","type":"mqtt in","z":"a80a9d37.68d378","name":"","topic":"shellies/shellyplug-s-216EBB/relay/0/power","qos":"2","datatype":"utf8","broker":"a7163696.6f4318","x":220,"y":120,"wires":[["f5e2699f.9dc748"]]},{"id":"87c107d5.27a2d","type":"join","z":"a80a9d37.68d378","name":"JoinMQTTFromShelly","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"3","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":600,"y":180,"wires":[["d52ed5bb.ae6c78"]]},{"id":"f5e2699f.9dc748","type":"function","z":"a80a9d37.68d378","name":"ShortenTopic","func":"let topicParts = msg.topic.split('/')\nmsg.deviceId = topicParts[1]\nmsg.topic = topicParts[4] || \"on\"\nreturn msg;","outputs":1,"noerr":0,"x":570,"y":140,"wires":[["87c107d5.27a2d"]]},{"id":"d52ed5bb.ae6c78","type":"function","z":"a80a9d37.68d378","name":"Preprocess","func":"msg.valid = \"Ok\"\n\nif (! (\"power\" in msg.payload)) {\n msg.payload.power = Number.NaN\n msg.valid = \"Incomplete\"\n} else {\n msg.payload.power = parseFloat(msg.payload.power).toFixed(2)\n}\n\nif (! (\"energy\" in msg.payload)) {\n msg.payload.energy = Number.NaN\n msg.valid = \"Incomplete\"\n} else {\n // convert from Wmin to Wh\n msg.payload.energy = (parseFloat(msg.payload.energy) / 60.0).toFixed(2)\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":870,"y":300,"wires":[["cac2bef3.92562","55abbb47.3d8a24"]]},{"id":"9858a4eb.901e48","type":"mqtt in","z":"a80a9d37.68d378","name":"","topic":"shellies/shellyplug-s-216EBB/relay/0/energy","qos":"2","datatype":"utf8","broker":"a7163696.6f4318","x":230,"y":160,"wires":[["f5e2699f.9dc748"]]},{"id":"55abbb47.3d8a24","type":"debug","z":"a80a9d37.68d378","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":1200,"y":220,"wires":[]},{"id":"d3e255f9.85f458","type":"mqtt in","z":"796cb70.681af48","name":"","topic":"${MQTT_Input_Topic}","qos":"2","datatype":"auto","broker":"a7163696.6f4318","x":310,"y":260,"wires":[["1dcfd53c.f4f6e3","71750fe2.bcccb"]]},{"id":"d46919f5.b0fc88","type":"subflow:796cb70.681af48","z":"e4659a9f.3f8658","name":"Freezer","env":[{"name":"MQTT_Input_Topic","type":"str","value":"dt1/ai/periodic/1"},{"name":"Location","type":"str","value":"Freezer"},{"name":"HardLow","type":"str","value":"-273"},{"name":"SoftLow","type":"str","value":"-50"},{"name":"SoftHigh","type":"str","value":"20"},{"name":"Category","type":"str","value":"Device"}],"x":150,"y":400,"wires":[[]]},{"id":"f4dcc109.20aae","type":"subflow:796cb70.681af48","z":"e4659a9f.3f8658","name":"Outdoor","env":[{"name":"MQTT_Input_Topic","type":"str","value":"dt1/ai/periodic/3"},{"name":"Location","type":"str","value":"Outdoor"},{"name":"HardLow","type":"str","value":"-273"},{"name":"SoftLow","type":"str","value":"-60"},{"name":"SoftHigh","type":"str","value":"60"},{"name":"Category","type":"str","value":"Outdoor"}],"x":160,"y":480,"wires":[["e4ae0374.8fcbc8"]]},{"id":"38df7d6.3e0c482","type":"function","z":"796cb70.681af48","name":"Status","func":"let ts = new Date()\nmsg.payload = `Last: ${ts}: ${msg.payload.values.temperature}°C`\nreturn msg;","outputs":1,"noerr":0,"x":650,"y":180,"wires":[[]]},{"id":"b74d2417.eef158","type":"mqtt in","z":"161f9872.1bc6e8","name":"","topic":"NR/Multisensor/+/Temperatur","qos":"2","datatype":"auto","broker":"a7163696.6f4318","x":200,"y":980,"wires":[["56879df3.89a094"]]},{"id":"56879df3.89a094","type":"json","z":"161f9872.1bc6e8","name":"","property":"payload","action":"obj","pretty":false,"x":270,"y":1020,"wires":[["aadf3496.811bc8"]]},{"id":"aadf3496.811bc8","type":"template","z":"161f9872.1bc6e8","name":"ZigbeeThermAdjuster","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\n \"name\":\"{{payload.location}}\",\n \"kind\":\"Temperature\",\n \"values\": {\n \"battery\":0,\n \"temperature\":{{payload.CurrentTemperature}}\n }\n}","output":"json","x":220,"y":1060,"wires":[["8b7bc0ee.bab35"]]},{"id":"8b7bc0ee.bab35","type":"debug","z":"161f9872.1bc6e8","name":"ZigbeeTherm","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":240,"y":1100,"wires":[]},{"id":"8fb440fe.f904e","type":"function","z":"796cb70.681af48","name":"PrepareTemperatureTimescaleDB","func":"let category = env.get(\"Category\")\n\nmsg.queryParameters = { \n \"temperature\": msg.payload.values.temperature,\n \"battery\": msg.payload.values.battery,\n \"category\": category,\n \"location\": msg.payload.name,\n \"status\": msg.payload.status\n}\nmsg.payload = `\n INSERT INTO room_climate_measurement_t\n (\n time,\n temperature, battery, \n category, location, status\n )\n VALUES(\n now(),\n $temperature, $battery,\n $category, $location, $status\n )\n`\nreturn msg\n\n","outputs":1,"noerr":0,"x":900,"y":320,"wires":[["7a70452a.3b351c"]]},{"id":"7a70452a.3b351c","type":"postgres","z":"796cb70.681af48","postgresdb":"2fd416bb.c289b2","name":"","output":false,"perrow":false,"rowspermsg":"1","outputs":0,"x":1140,"y":320,"wires":[]},{"id":"56e9e066.1bf4","type":"function","z":"67a411dd.efd79","name":"DeconzClimateAdjuster","func":"let tmpPayload = {\n \"name\":msg.payload.location,\n \"kind\":\"Temperature/Humidity\",\n \"values\": {\n \"battery\": 0,\n \"temperature\": msg.payload.temperature,\n \"humidity\": msg.payload.humidity\n },\n \"status\": msg.payload.status\n}\n\nmsg.payload = tmpPayload;\nreturn msg\n","outputs":1,"noerr":0,"x":490,"y":240,"wires":[["49ca7af6.0a3c24","51496a9d.f54574","53f3a196.5414d"]]},{"id":"4d2444f9.86379c","type":"mqtt in","z":"67a411dd.efd79","name":"","topic":"${MQTT_Input_Topic}","qos":"2","datatype":"json","broker":"a7163696.6f4318","x":210,"y":240,"wires":[["56e9e066.1bf4","b398cc44.1ea78"]]},{"id":"654038fd.b5e2e8","type":"trigger","z":"67a411dd.efd79","op1":"true","op2":"false","op1type":"bool","op2type":"bool","duration":"5","extend":true,"units":"min","reset":"","bytopic":"topic","name":"","x":500,"y":380,"wires":[["efdeab92.98a8c8"]]},{"id":"49ca7af6.0a3c24","type":"function","z":"67a411dd.efd79","name":"Status","func":"let ts = new Date()\nmsg.payload = `Last: ${ts}: ${msg.payload.values.temperature}°C, ${msg.payload.values.humidity}%`\nreturn msg;","outputs":1,"noerr":0,"x":550,"y":160,"wires":[[]]},{"id":"51496a9d.f54574","type":"function","z":"67a411dd.efd79","name":"PrepareClimateTimescaleDB","func":"msg.queryParameters = { \n \"temperature\": msg.payload.values.temperature,\n \"humidity\": msg.payload.values.humidity,\n \"battery\": msg.payload.values.battery,\n \"category\": \"Indoor\",\n \"location\": msg.payload.name,\n \"status\": msg.payload.status\n}\nmsg.payload = `\n INSERT INTO room_climate_measurement_t\n (\n time,\n temperature, humidity, battery, \n category, location, status\n )\n VALUES(\n now(),\n $temperature, $humidity, $battery,\n $category, $location, $status\n )\n`\nreturn msg\n\n","outputs":1,"noerr":0,"x":800,"y":240,"wires":[["72f3a40.511cc5c"]]},{"id":"72f3a40.511cc5c","type":"postgres","z":"67a411dd.efd79","postgresdb":"2fd416bb.c289b2","name":"","output":false,"perrow":false,"rowspermsg":"1","outputs":0,"x":1040,"y":240,"wires":[]},{"id":"984b199c.c278f8","type":"pushover","z":"67a411dd.efd79","name":"","device":"","title":"ClimateAlarm","priority":0,"sound":"pushover","url":"","url_title":"","html":true,"x":500,"y":460,"wires":[]},{"id":"50e06abf.bb5574","type":"subflow:67a411dd.efd79","z":"e4659a9f.3f8658","name":"DeconzClimate","env":[{"name":"MQTT_Input_Topic","type":"str","value":"nr/climate"}],"x":180,"y":580,"wires":[["2c4bca90.ebe7c6"]]},{"id":"2c4bca90.ebe7c6","type":"debug","z":"e4659a9f.3f8658","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":410,"y":580,"wires":[]},{"id":"b398cc44.1ea78","type":"function","z":"67a411dd.efd79","name":"Prepare","func":"msg.lastPayload = msg.payload\nmsg.topic = `${msg.topic}/sensorStatus/${msg.lastPayload.location}`\nreturn msg;","outputs":1,"noerr":0,"x":480,"y":340,"wires":[["654038fd.b5e2e8"]]},{"id":"efdeab92.98a8c8","type":"function","z":"67a411dd.efd79","name":"PreparePushoverMessage","func":"msg.payload = {\n \"sensorStatus\": msg.payload,\n \"location\": msg.lastPayload.location,\n \"lastPayload\": msg.lastPayload\n}\nreturn msg;","outputs":1,"noerr":0,"x":540,"y":420,"wires":[["984b199c.c278f8","d8b32456.1e3d48"]]},{"id":"aa2ffa3d.457058","type":"inject","z":"c47f0f35.fd7ee","name":"","topic":"bla","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":370,"y":320,"wires":[["ab004d77.0ec03"]]},{"id":"d8ad516e.22797","type":"debug","z":"c47f0f35.fd7ee","name":"Debug2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":960,"y":320,"wires":[]},{"id":"1c9632dd.0cabbd","type":"trigger","z":"c47f0f35.fd7ee","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"1","extend":false,"units":"s","reset":"","bytopic":"all","name":"","x":770,"y":320,"wires":[["d8ad516e.22797"]]},{"id":"a1f46d8d.d79a9","type":"debug","z":"c47f0f35.fd7ee","name":"Debug1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":760,"y":260,"wires":[]},{"id":"ab004d77.0ec03","type":"function","z":"c47f0f35.fd7ee","name":"SetSomething","func":"msg.something = 3.141\nreturn msg;","outputs":1,"noerr":0,"x":560,"y":320,"wires":[["1c9632dd.0cabbd","a1f46d8d.d79a9"]]},{"id":"d8b32456.1e3d48","type":"mqtt out","z":"67a411dd.efd79","name":"","topic":"","qos":"","retain":"","broker":"a7163696.6f4318","x":830,"y":420,"wires":[]},{"id":"53f3a196.5414d","type":"function","z":"67a411dd.efd79","name":"PrepareClimateDataPublish","func":"msg.topic = `IoT/ClimateData/${msg.payload.name}`\nreturn msg;","outputs":1,"noerr":0,"x":800,"y":280,"wires":[["ceba6151.35ba3"]]},{"id":"ceba6151.35ba3","type":"mqtt out","z":"67a411dd.efd79","name":"","topic":"","qos":"","retain":"","broker":"a7163696.6f4318","x":1030,"y":280,"wires":[]},{"id":"7720625e.dbeb7c","type":"function","z":"796cb70.681af48","name":"PrepareClimateDataPublish","func":"msg.topic = `IoT/ClimateData/${msg.payload.name}`\nreturn msg;","outputs":1,"noerr":0,"x":880,"y":360,"wires":[["a60ecded.aa9e9"]]},{"id":"a60ecded.aa9e9","type":"mqtt out","z":"796cb70.681af48","name":"","topic":"","qos":"","retain":"","broker":"a7163696.6f4318","x":1130,"y":360,"wires":[]},{"id":"cbf923d5.50b85","type":"trigger","z":"796cb70.681af48","op1":"true","op2":"false","op1type":"bool","op2type":"bool","duration":"5","extend":true,"units":"min","reset":"","bytopic":"topic","name":"","x":620,"y":600,"wires":[["633d84d3.08a97c"]]},{"id":"632e97aa.cf10f8","type":"pushover","z":"796cb70.681af48","name":"","device":"","title":"ClimateAlarm","priority":0,"sound":"pushover","url":"","url_title":"","html":true,"x":620,"y":680,"wires":[]},{"id":"71750fe2.bcccb","type":"function","z":"796cb70.681af48","name":"Prepare","func":"let location = env.get('Location')\nmsg.lastPayload = msg.payload\nmsg.topic = `${msg.topic}/sensorStatus/${msg.location}`\nreturn msg;","outputs":1,"noerr":0,"x":600,"y":560,"wires":[["cbf923d5.50b85"]]},{"id":"633d84d3.08a97c","type":"function","z":"796cb70.681af48","name":"PreparePushoverMessage","func":"msg.payload = {\n \"sensorStatus\": msg.payload,\n \"location\": msg.lastPayload.location,\n \"lastPayload\": msg.lastPayload\n}\nreturn msg;","outputs":1,"noerr":0,"x":660,"y":640,"wires":[["632e97aa.cf10f8","72dae2c1.b1e6ac"]]},{"id":"72dae2c1.b1e6ac","type":"mqtt out","z":"796cb70.681af48","name":"","topic":"","qos":"","retain":"","broker":"a7163696.6f4318","x":950,"y":640,"wires":[]}]