{"id":1309,"date":"2020-05-27T16:26:19","date_gmt":"2020-05-27T14:26:19","guid":{"rendered":"https:\/\/www.rustimation.eu\/?p=1309"},"modified":"2024-11-14T13:30:50","modified_gmt":"2024-11-14T12:30:50","slug":"keller-entfeuchten-mit-node-red","status":"publish","type":"post","link":"https:\/\/www.rustimation.eu\/index.php\/keller-entfeuchten-mit-node-red\/","title":{"rendered":"Keller entfeuchten mit MQTT und Node-Red"},"content":{"rendered":"<p>Damit keine Missverst\u00e4ndnisse aufkommen: Node-Red ist nat\u00fcrlich kein Entfeuchtungsger\u00e4t sondern eine\u00a0 grafische Entwicklungsumgebung f\u00fcr Internet Of Things Anwendungen. Node-Red hat Schnittstellen zu Raspberry Pi bereits integriert, so dass das Ansteuern oder Auslesen der GPIO Pins ein Klacks ist. Die Node-Red Umgebung l\u00e4uft problemlos auf dem Raspberry Pi, gerne auch zusammen mit einem MQTT Broker wie z.B. Mosquitto.<\/p>\n<p><!--more--><\/p>\n<p>Da Node-Red auch eine MQTT Schnittstelle hat, k\u00f6nnen wir unsere Sensoren und andere Komponenten ganz locker integrieren, ohne dass wir zus\u00e4tzliche Kabel oder Anderes verl\u00f6ten m\u00fcssten.<\/p>\n<p>Ebenso gibt es eine Vielzahl von Schnittstellen zu Webservices um beispielsweise den Deutsche Wetterdienst abzufragen und vielleicht mit einer von dort gezogenen Sturmwarnung ein Rollo hochzufahren oder \u00c4hnliches.<\/p>\n<p>So lassen sich auch komplexe Anwendungen relativ leicht entwickeln und produktiv nutzen, ohne dass man sich die Finger wund programmiert um eine sch\u00f6ne Benutzeroberfl\u00e4che zu bauen. Die Grafische Darstellung von Messwerten etc. ist ebenfalls ganz einfach.<\/p>\n<p>Ich werde hier allerdings nicht das x-te Node-Red Tutorial schreiben. Bei Youtube gibt es eine Reihe gut gemachter Tutorials, au\u00dferdem m\u00f6chte ich wieder auf <a href=\"https:\/\/shop.haus-automatisierung.com\/nodered-grundlagen-kurs.html\" target=\"_blank\" rel=\"noopener noreferrer\">haus-automatisierung.com<\/a> verweisen, wo sich ein hervorragendes aber kostenpflichtiges Node-Red Video Tutorial befindet.<\/p>\n<h2>Keller entfeuchten<\/h2>\n<p>Wie oben erw\u00e4hnt, dient Node-Red bei mir dazu, eine effektive und kosteng\u00fcnstige Kellerentfeuchtung sicherzustellen. Ansonsten w\u00fcrden mein gesamtes Werkzeug und andere Dinge verrosten bzw. verschimmeln. Mein Keller ist wirklich sehr feucht &#8211; trotz Sanierung und Sperrputz.<\/p>\n<ol>\n<li>Ich m\u00f6chte den Keller trocken halten, indem ich mit einem Fensterventilator bei Bedarf und wenn sinnvoll, die feuchte Kellerluft mit trockener Au\u00dfenluft austausche.<\/li>\n<li>Daf\u00fcr messe ich mit Hilfe von zwei Temperatur-\/Luftfeuchtigkeitssensoren die Werte im Keller selbst und au\u00dferhalb des Kellers.<\/li>\n<li>Die gemessene, relative Luftfeuchtigkeit wird in absolute Luftfeuchtigkeit umgerechnet und die Werte von Innen und Au\u00dfen miteinander verglichen. (Siehe Kapitel \"Physik\" weiter unten).<\/li>\n<li>Ist die absolute Luftfeuchtgkeit au\u00dfen signifikant (~15%) niedriger\u00a0 als innen, wird der Ventilator eingeschaltet sofern das erforderlich ist; d.h. wenn die relative Luftfeuchtigkeit im Keller \u00fcber 65% liegt.<\/li>\n<li>Die Luft wird ausgetauscht, die relative Feuchte sinkt unter 60%, der Ventilator stoppt. Die Feuchte steigt \u00fcber ein paar Stunden hinweg wieder an und sobald 65% \u00fcberschritten sind, startet der Ventilator neu &#8211; vorausgesetzt die Luft drau\u00dfen ist trockener als drinnen.<\/li>\n<li>Ist der Unterschied zu gering oder ist es drau\u00dfen absolut feuchter als drinnen, soll ein im Keller stehender Luftentfeuchter eingeschaltet werden um die Luftfeuchtigkeit zu regulieren (optional).<\/li>\n<\/ol>\n<p>Warum zwei verschiedene Ger\u00e4te zum Trocknen? Ein Ventilator hat eine Leistungsaufnahme von 30W, ein Trocknungsaggregat meist um die 250W. Je nach den Umst\u00e4nden l\u00e4uft die Anlage 6-12 Stunden am Tag, der Stromverbrauch l\u00e4ppert sich mit der Zeit. Ein Ventilator ist also deutlich g\u00fcnstiger. Allerdings kann es bei schw\u00fcl-hei\u00dfem Wetter durchaus sein, dass der Ventilator nie zum Zuge kommt. Deshalb der Trockner als \"Aushilfe\".<\/p>\n<h3>Was brauche ich dazu?<\/h3>\n<p>Ben\u00f6tigt werden:<\/p>\n<ul>\n<li>zwei Luftfeuchtigkeits-\/Temperatur Sensoren mit MQTT Eigenschaft. Das k\u00f6nnen welche aus meinem Artikel\u00a0<a href=\"https:\/\/www.rustimation.eu\/index.php\/esp8266-d1-mini-sensor-mit-mqtt\/\">Wemos ESP8266 (D1 MINI) Sensor mit MQTT<\/a> sein oder <a href=\"https:\/\/shelly.cloud\/shelly-humidity-and-temperature\/\" target=\"_blank\" rel=\"noopener noreferrer\">Shelly H &amp; T Sensoren<\/a> oder andere. WLANf\u00e4higkeit und MQTT Protokoll sind ein Muss f\u00fcr die hier beschriebene L\u00f6sung<\/li>\n<li>Ein Raspberry Pi &#8211; egal welcher &#8211; ein Pi Zero reicht aus. Darauf muss ein MQTT Broker (ich empfehle Mosquitto) und Node-Red installiert sein (Anleitung z.B. bei <a href=\"https:\/\/nodered.org\/docs\/getting-started\/raspberrypi\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/nodered.org\/docs\/getting-started\/raspberrypi<\/a>)<\/li>\n<li>zwei WLAN Steckdosen z.B. <a href=\"https:\/\/shelly.cloud\/shelly-plug\/\" target=\"_blank\" rel=\"noopener noreferrer\">Shelly Plug S<\/a> oder die etwas g\u00fcnstigeren <a href=\"https:\/\/www.reichelt.de\/wlan-steckdosen-schalter-delock-11826-p258857.html\" target=\"_blank\" rel=\"noopener noreferrer\">Delock WLAN Steckdosen Schalter <\/a>zum Einschalten des Ventilators und des Trockners.<\/li>\n<li>einen Fensterventilator, oder Rohrventilator oder was auch immer. In jedem Fall muss der Ventilator die Luft <strong>von au\u00dfen nach innen<\/strong> blasen. Damit die feuchte Luft auch abziehen kann, empfiehlt es sich, am anderen Ende des Kellers eine Einweg-Abluftklappe oder einen Ventilator mit Blasrichtung nach au\u00dfen\u00a0 &#8211; gesteuert durch dieselbe Schaltung &#8211; einzubauen.<\/li>\n<li>Optional einen Luftentfeuchter und zwar einen, der nach dem Unterbrechen des Stroms automatisch wieder anl\u00e4uft. Viele Luftentfeuchter wollen, dass man nach dem Einschalten irgendwelche Tasten dr\u00fcckt &#8211; bei vollautmatischem Betrieb eher hinderlich. Ich habe mich deshalb f\u00fcr den <a href=\"https:\/\/www.idealo.de\/preisvergleich\/OffersOfProduct\/3789454_-wdh-610ha-aktobis.html\">Aktobis WDH-610HA Luftentfeuchter<\/a> entschieden, ausreichend f\u00fcr meinen 12m\u00b2 gro\u00dfen Keller, 180W Leistungsaufnahme, ohne \u00fcberfl\u00fcssiges Chi-Chi und mit ca. 130\u20ac recht g\u00fcnstig.<\/li>\n<li><span style=\"color: #808080;\">Der oben erw\u00e4hnte Luftentfeuchter ist inzwischen nicht mehr verf\u00fcgbar. Eine Alternative w\u00e4re z.B. das Modell <a style=\"color: #808080;\" href=\"https:\/\/www.aktobis.de\/Luftentfeuchter-WDH-310EKW.html\" target=\"_blank\" rel=\"noopener\"><span style=\"color: #ffcc00;\">WDH-310EKW<\/span><\/a> das sogar WiFi tauglich ist und \u00fcber das Tuya Home Automation System gesteuert werden kann. Auch f\u00fcr Node-Red gibt es ensprechende Tuya Nodes. Leider ist die Integration nicht ohne, da man sich dann erst einen Tuya Developer Account zulegen und anschlie\u00dfend durch eine vermurxte Website hangeln muss, nur um die sogenannte Device ID des Ger\u00e4ts herauszufinden. Die Dokumentation daf\u00fcr ist schrottig-grottig &#8211; so wie die meiste Software, die uns aus dem Reich der Mitte erreicht. Schlampig \u00fcbersetzt, bzw. in BSE (badly spoken English), durchsetzt mit chinesischen Schriftzeichen, komplett verschwurbelte Logik etc. Ich hab's erst einmal sein lassen und verwende weiter meine Shelly Steckdosenadapter.<\/span><\/li>\n<\/ul>\n<h3>Achtung: Physik<\/h3>\n<p>Warum verwende ich die absolute Luftfeuchtigkeit und nicht die relative Luftfeuchtigkeit zum Vergleich zwischen au\u00dfen und innen?<\/p>\n<p>Physikalisch gilt: je w\u00e4rmer die Luft ist, desto mehr mehr Feuchtigkeit kann sie aufnehmen.\u00a0 Luft mit einer relativen Feuchte (= S\u00e4ttigungsgrad) von 80% enth\u00e4lt bei 10\u00b0C ca. 7,5 Gramm Wasser pro m\u00b3 (= absolute Luftfeuchtigkeit).<br \/>\nBei 25\u00b0C enh\u00e4lt sie 18.4 g\/m\u00b3, also mehr als das Doppelte. Oder anders ausgedr\u00fcckt kann es durchaus sein, dass warme Luft mit einer niedrigeren relativen Feuchtigkeit de facto \"nasser\" ist als kalte Luft mit einer hohen relativen Feuchtigkeit.<\/p>\n<p>Ziel ist also, kalte, m\u00f6glichst trockene Luft gegen warme, feuchte Luft auszutauschen. Es macht deshalb oft keinen Sinn, den Ventilator tags\u00fcber laufen zu lassen, da die absoute Luftfeuchtigkeit drau\u00dfen h\u00f6her ist als drinnen &#8211; so w\u00fcrde die Feuchtigkeit in den Keller hineintransportiert werden anstatt hinaus.<\/p>\n<p>Zum Berechnen gibt es eine N\u00e4herungsformel , die ich bei <a href=\"https:\/\/www.wetterochs.de\/wetter\/feuchte.html\" target=\"_blank\" rel=\"noopener noreferrer\">Wetterochs.de<\/a> gefunden habe. Optimalerweise w\u00fcrde man auch noch den Luftdruck ben\u00f6tigen, aber die N\u00e4herung basierend auf Temperatur und relativer Feuchte reicht uns. Siehe Formel im n\u00e4chsten Kapitel <em>Flow<\/em>.<\/p>\n<p>Diese Formel habe ich in einen Function Node von Node-Red \u00fcbertragen.<\/p>\n<h3>Flow<\/h3>\n<p>Hier zuerst einmal der zugegebenerma\u00dfen recht aufwendige Flow (anklicken f\u00fcr verg\u00f6\u00dferte Darstellung):<\/p>\n<p><a href=\"\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/2020-05-28-16_52_58-Node-RED.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1330\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/2020-05-28-16_52_58-Node-RED.png\" alt=\"\" width=\"584\" height=\"238\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/2020-05-28-16_52_58-Node-RED.png 2006w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/2020-05-28-16_52_58-Node-RED-300x122.png 300w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/2020-05-28-16_52_58-Node-RED-1024x417.png 1024w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/2020-05-28-16_52_58-Node-RED-768x313.png 768w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/2020-05-28-16_52_58-Node-RED-1536x626.png 1536w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a>Die JSON Datei zum Herunterladen <a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/keller.json\" target=\"_blank\" rel=\"noopener noreferrer\">findet ihr hier<\/a>. Ich lerne hier jeden Tag etwas Neues hinzu, es ist also sehr wahrscheinlich, dass mein Flow noch einiges Optimierungspotenzial aufweist.<\/p>\n<p>Der Flow ist in kreuzf\u00f6rmig in vier bzw. f\u00fcnf Teile aufgeteilt.<br \/>\nLinks oben die Messung der Au\u00dfentemperatur und Luftfeuchtigkeit (MQTT) mit Konversion.<br \/>\nLinks unten dasselbe nur f\u00fcr innen.<br \/>\nIn der Mitte die Entscheidung ob <em>Trocknung n\u00f6tig<\/em>, also ob die Luft getrocknet werden muss bzw. ob sie ausreichend trocken ist.<br \/>\nRechts davon die Berechnung der Methode (drau\u00dfen absolut trockener als innen) &#8211;&gt; Ventilator, sonst Trockner.<br \/>\nRechts oben dann die Steuerung des Ventilators und<br \/>\nrechts unten dann die Steuerung des elektrischen Luftentfeuchters.<\/p>\n<p>Zus\u00e4tzlich sind noch diverse Nodes f\u00fcr das Dashboard angeschlossen.<\/p>\n<p>Die Function Nodes <em>rel2abs<\/em> wandelt die relative Luftfeuchtigkeit in absolute Werte um.<\/p>\n<p>Die Formel l\u00e4uft sinngem\u00e4\u00df wie folgt:<\/p>\n<pre class=\"lang:js decode:true\" title=\"rel2abs\">var T = parseFloat(flow.get('aussentemp'));\r\nvar r = parseFloat(flow.get('aussenhum'));\r\nvar aussenAF = null;\r\nvar AF = 99;\r\nvar a = 7.5;\r\nvar b = 237.3;\r\nvar RG = 8314.3;\r\nvar mw = 18.016;\r\nvar TK = T + 273.15;\r\nlet SDD = 0;\r\nlet DDrT;\r\n\r\nif (T &lt;= 0){\r\n    a = 7.6;\r\n    b = 240.7;}\r\n\r\nSDDt = 6.1078 * Math.pow(10 , ((a*T)\/(b+T)));\r\nDDrT = r\/100 * SDDt;\r\nAF = (Math.pow(10,5)*mw\/RG * DDrT\/TK).toFixed(1)\r\nmsg.payload = AF;\r\nflow.set('aussenAF', msg.payload);\r\n\r\nreturn msg;<\/pre>\n<p>F\u00fcr den Innensensor muss das entsprechend angepasst werden. Die Variablen T und r verwende\u00a0 ich als Flow Variablen, da sie im weiteren Verlauf des \u00f6fteren gebraucht werden.<\/p>\n<h3>Dashboard<\/h3>\n<p>Ich habe zwei Dashboards, eines f\u00fcr die Messwerte:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1337 aligncenter\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/2020-05-28-17_31_28-Node-RED-_-192.168.178.42.png\" alt=\"\" width=\"441\" height=\"507\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/2020-05-28-17_31_28-Node-RED-_-192.168.178.42.png 622w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/2020-05-28-17_31_28-Node-RED-_-192.168.178.42-261x300.png 261w\" sizes=\"auto, (max-width: 441px) 100vw, 441px\" \/><\/p>\n<p>Und eines f\u00fcr die Effizienz der Methode in <a href=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/dashboard2.json\" target=\"_blank\" rel=\"noopener noreferrer\">einem eigenen Flow<\/a>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1340 aligncenter\" src=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/2020-05-28-17_32_10-Node-RED-_-192.168.178.42.png\" alt=\"\" width=\"480\" height=\"384\" srcset=\"https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/2020-05-28-17_32_10-Node-RED-_-192.168.178.42.png 746w, https:\/\/www.rustimation.eu\/wordpress\/wp-content\/uploads\/2020\/05\/2020-05-28-17_32_10-Node-RED-_-192.168.178.42-300x240.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/p>\n<p>Gr\u00fcn ist hierbei der Ventilatorbetrieb, gelb der Trocknerbetrieb.<\/p>\n<p>Der JSON Flow dazu sieht wie folgt aus:<\/p>\n<pre class=\"height-set:true lang:js decode:true \" title=\"Dashboard2.json\">[\r\n    {\r\n        \"id\": \"807b3e4c7befe2d7\",\r\n        \"type\": \"tab\",\r\n        \"label\": \"Keller\",\r\n        \"disabled\": false,\r\n        \"info\": \"\"\r\n    },\r\n    {\r\n        \"id\": \"2b91401f3d6fd0d6\",\r\n        \"type\": \"ui_switch\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Ventilator Switch\",\r\n        \"label\": \"Ventilator\",\r\n        \"tooltip\": \"\",\r\n        \"group\": \"49039f65.e3216\",\r\n        \"order\": 1,\r\n        \"width\": 2,\r\n        \"height\": 1,\r\n        \"passthru\": true,\r\n        \"decouple\": \"false\",\r\n        \"topic\": \"\/Keller\/Switch\/fan\/cmnd\/POWER\",\r\n        \"topicType\": \"str\",\r\n        \"style\": \"\",\r\n        \"onvalue\": \"ON\",\r\n        \"onvalueType\": \"str\",\r\n        \"onicon\": \"\",\r\n        \"oncolor\": \"\",\r\n        \"offvalue\": \"OFF\",\r\n        \"offvalueType\": \"str\",\r\n        \"officon\": \"\",\r\n        \"offcolor\": \"\",\r\n        \"animate\": true,\r\n        \"className\": \"\",\r\n        \"x\": 1560,\r\n        \"y\": 300,\r\n        \"wires\": [\r\n            [\r\n                \"2538a6b1c88e8cfd\",\r\n                \"c2a66c724575466d\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"8a19e271a1c729a4\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"rel2abs\",\r\n        \"func\": \"var T = parseFloat(flow.get('aussentemp'));\\nvar r = parseFloat(flow.get('aussenhum'));\\n\\nvar AF = 99;\\nvar a = 7.5;\\nvar b = 237.3;\\nvar RG = 8314.3;\\nvar mw = 18.016;\\nvar TK = T + 273.15;\\n\\nif (T &lt;= 0){\\n    a = 7.6;\\n    b = 240.7;}\\n\\nlet SDDt = 6.1078 * Math.pow(10 , ((a*T)\/(b+T)));\\nlet DDrT = r\/100 * SDDt;\\nAF = (Math.pow(10,5)*mw\/RG * DDrT\/TK).toFixed(1)\\nmsg.payload = AF;\\nflow.set('aussenAF', msg.payload);\\nmsg.topic = 'aussen';\\n\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 780,\r\n        \"y\": 320,\r\n        \"wires\": [\r\n            [\r\n                \"68e83b22d29744b3\",\r\n                \"317654108e3b6afa\",\r\n                \"d9f99cd97371f381\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"d82df17cd2d36242\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"rel2abs\",\r\n        \"func\": \"var T = parseFloat(flow.get('innentemp'));\\nvar r = parseFloat(flow.get('innenhum'));\\n\\nvar AF = 99;\\nvar a = 7.5;\\nvar b = 237.3;\\nvar RG = 8314.3;\\nvar mw = 18.016;\\nvar TK = T + 273.15;\\n\\nif (T &lt;= 0){\\n    a = 7.6;\\n    b = 240.7;}\\n\\nlet SDDt = 6.1078 * Math.pow(10 , ((a*T)\/(b+T)));\\nlet DDrT = r\/100 * SDDt;\\nAF = (Math.pow(10,5)*mw\/RG * DDrT\/TK).toFixed(1)\\nflow.set('innenAF', AF);\\nmsg.payload = AF;\\nmsg.topic = 'innen';\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 780,\r\n        \"y\": 680,\r\n        \"wires\": [\r\n            [\r\n                \"1fab86d7bc810ac8\",\r\n                \"317654108e3b6afa\",\r\n                \"d9f99cd97371f381\",\r\n                \"0a47ddca3e84e7e1\",\r\n                \"3d6cbce945760a99\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"68e83b22d29744b3\",\r\n        \"type\": \"ui_text\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 8,\r\n        \"width\": 4,\r\n        \"height\": 1,\r\n        \"name\": \"\",\r\n        \"label\": \"AF au\u00dfen\",\r\n        \"format\": \"{{msg.payload}}\",\r\n        \"layout\": \"row-center\",\r\n        \"x\": 1020,\r\n        \"y\": 320,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"42e3be407bd6a5e8\",\r\n        \"type\": \"join\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"make array\",\r\n        \"mode\": \"custom\",\r\n        \"build\": \"array\",\r\n        \"property\": \"payload\",\r\n        \"propertyType\": \"msg\",\r\n        \"key\": \"topic\",\r\n        \"joiner\": \"\\\\n\",\r\n        \"joinerType\": \"str\",\r\n        \"accumulate\": false,\r\n        \"timeout\": \"\",\r\n        \"count\": \"2\",\r\n        \"reduceRight\": false,\r\n        \"reduceExp\": \"\",\r\n        \"reduceInit\": \"\",\r\n        \"reduceInitType\": \"\",\r\n        \"reduceFixup\": \"\",\r\n        \"x\": 530,\r\n        \"y\": 300,\r\n        \"wires\": [\r\n            [\r\n                \"8a19e271a1c729a4\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"df65301e9a398c0f\",\r\n        \"type\": \"join\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"make array\",\r\n        \"mode\": \"custom\",\r\n        \"build\": \"array\",\r\n        \"property\": \"payload\",\r\n        \"propertyType\": \"msg\",\r\n        \"key\": \"topic\",\r\n        \"joiner\": \"\\\\n\",\r\n        \"joinerType\": \"str\",\r\n        \"accumulate\": false,\r\n        \"timeout\": \"\",\r\n        \"count\": \"2\",\r\n        \"reduceRight\": false,\r\n        \"reduceExp\": \"\",\r\n        \"reduceInit\": \"\",\r\n        \"reduceInitType\": \"\",\r\n        \"reduceFixup\": \"\",\r\n        \"x\": 530,\r\n        \"y\": 680,\r\n        \"wires\": [\r\n            [\r\n                \"d82df17cd2d36242\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"1fab86d7bc810ac8\",\r\n        \"type\": \"ui_text\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 7,\r\n        \"width\": 4,\r\n        \"height\": 1,\r\n        \"name\": \"\",\r\n        \"label\": \"AF innen\",\r\n        \"format\": \"{{msg.payload}}\",\r\n        \"layout\": \"row-center\",\r\n        \"x\": 960,\r\n        \"y\": 680,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"f9ffd97b43cefbc0\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"store aTemp\",\r\n        \"func\": \"flow.set('aussentemp', msg.payload);\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 370,\r\n        \"y\": 260,\r\n        \"wires\": [\r\n            [\r\n                \"42e3be407bd6a5e8\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"7fa5c39aa1726cee\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"store aHum\",\r\n        \"func\": \"flow.set('aussenhum', msg.payload);\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 370,\r\n        \"y\": 340,\r\n        \"wires\": [\r\n            [\r\n                \"42e3be407bd6a5e8\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"01504255d16a6f51\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"store iTemp\",\r\n        \"func\": \"flow.set('innentemp', msg.payload);\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 350,\r\n        \"y\": 640,\r\n        \"wires\": [\r\n            [\r\n                \"df65301e9a398c0f\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"777daf7c1f5a0a5c\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"store iHum\",\r\n        \"func\": \"flow.set('innenhum', msg.payload);\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 350,\r\n        \"y\": 720,\r\n        \"wires\": [\r\n            [\r\n                \"df65301e9a398c0f\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"e0b6cbdb4aafd86b\",\r\n        \"type\": \"mqtt in\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Keller au\u00dfen Temp C\u00b0\",\r\n        \"topic\": \"\/Keller\/aussen\/temp\",\r\n        \"qos\": \"1\",\r\n        \"datatype\": \"auto-detect\",\r\n        \"broker\": \"e3a7d99a.19f948\",\r\n        \"nl\": false,\r\n        \"rap\": false,\r\n        \"inputs\": 0,\r\n        \"x\": 160,\r\n        \"y\": 200,\r\n        \"wires\": [\r\n            [\r\n                \"f9ffd97b43cefbc0\",\r\n                \"a4d991e47b1971de\",\r\n                \"17b6db3060c06abb\",\r\n                \"4ed4d120d0b4db30\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"4ed4d120d0b4db30\",\r\n        \"type\": \"debug\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"ATemperatur\",\r\n        \"active\": false,\r\n        \"tosidebar\": true,\r\n        \"console\": false,\r\n        \"tostatus\": false,\r\n        \"complete\": \"payload\",\r\n        \"targetType\": \"msg\",\r\n        \"statusVal\": \"\",\r\n        \"statusType\": \"auto\",\r\n        \"x\": 630,\r\n        \"y\": 240,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"9e8d260550cb23c9\",\r\n        \"type\": \"mqtt in\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Keller au\u00dfen rel. Feuchte %\",\r\n        \"topic\": \"\/Keller\/aussen\/humidity\",\r\n        \"qos\": \"1\",\r\n        \"datatype\": \"auto-detect\",\r\n        \"broker\": \"e3a7d99a.19f948\",\r\n        \"nl\": false,\r\n        \"rap\": false,\r\n        \"inputs\": 0,\r\n        \"x\": 180,\r\n        \"y\": 400,\r\n        \"wires\": [\r\n            [\r\n                \"7fa5c39aa1726cee\",\r\n                \"15e0d7517479e3e7\",\r\n                \"f26ed563e505db4b\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"648ef687884ce2ad\",\r\n        \"type\": \"mqtt in\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Keller innen Temp C\u00b0\",\r\n        \"topic\": \"\/Keller\/innen\/temp\",\r\n        \"qos\": \"1\",\r\n        \"datatype\": \"auto-detect\",\r\n        \"broker\": \"e3a7d99a.19f948\",\r\n        \"nl\": false,\r\n        \"rap\": false,\r\n        \"inputs\": 0,\r\n        \"x\": 160,\r\n        \"y\": 600,\r\n        \"wires\": [\r\n            [\r\n                \"01504255d16a6f51\",\r\n                \"b9901ddfac3c358d\",\r\n                \"1ca3de83ce358969\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"88f885a542f0e3d6\",\r\n        \"type\": \"mqtt in\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Keller innen rel. Feuchte %\",\r\n        \"topic\": \"\/Keller\/innen\/humdity\",\r\n        \"qos\": \"1\",\r\n        \"datatype\": \"auto-detect\",\r\n        \"broker\": \"e3a7d99a.19f948\",\r\n        \"nl\": false,\r\n        \"rap\": false,\r\n        \"inputs\": 0,\r\n        \"x\": 170,\r\n        \"y\": 800,\r\n        \"wires\": [\r\n            [\r\n                \"777daf7c1f5a0a5c\",\r\n                \"4219183c76425b55\",\r\n                \"d3db6834687c27ea\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"a4d991e47b1971de\",\r\n        \"type\": \"ui_gauge\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Temperatur au\u00dfen\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 4,\r\n        \"width\": 4,\r\n        \"height\": 3,\r\n        \"gtype\": \"gage\",\r\n        \"title\": \"Temperatur au\u00dfen\",\r\n        \"label\": \"\u00b0C\",\r\n        \"format\": \"{{value}}\",\r\n        \"min\": \"-15\",\r\n        \"max\": \"40\",\r\n        \"colors\": [\r\n            \"#0000ff\",\r\n            \"#e6e600\",\r\n            \"#ca3838\"\r\n        ],\r\n        \"seg1\": \"15\",\r\n        \"seg2\": \"23\",\r\n        \"x\": 640,\r\n        \"y\": 200,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"15e0d7517479e3e7\",\r\n        \"type\": \"debug\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"AHumidity\",\r\n        \"active\": false,\r\n        \"tosidebar\": true,\r\n        \"console\": false,\r\n        \"tostatus\": false,\r\n        \"complete\": \"payload\",\r\n        \"targetType\": \"msg\",\r\n        \"statusVal\": \"\",\r\n        \"statusType\": \"auto\",\r\n        \"x\": 630,\r\n        \"y\": 400,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"f26ed563e505db4b\",\r\n        \"type\": \"ui_gauge\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Rel. Feuchte au\u00dfen\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 6,\r\n        \"width\": 4,\r\n        \"height\": 3,\r\n        \"gtype\": \"gage\",\r\n        \"title\": \"Rel. Feuchte au\u00dfen\",\r\n        \"label\": \"% \",\r\n        \"format\": \"{{value}}\",\r\n        \"min\": 0,\r\n        \"max\": \"100\",\r\n        \"colors\": [\r\n            \"#ffff00\",\r\n            \"#80ff00\",\r\n            \"#0000ff\"\r\n        ],\r\n        \"seg1\": \"40\",\r\n        \"seg2\": \"65\",\r\n        \"className\": \"\",\r\n        \"x\": 660,\r\n        \"y\": 480,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"b9901ddfac3c358d\",\r\n        \"type\": \"ui_gauge\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Temperatur innen\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 3,\r\n        \"width\": 4,\r\n        \"height\": 3,\r\n        \"gtype\": \"gage\",\r\n        \"title\": \"Temperatur innen\",\r\n        \"label\": \"\u00b0C\",\r\n        \"format\": \"{{value}}\",\r\n        \"min\": 0,\r\n        \"max\": \"35\",\r\n        \"colors\": [\r\n            \"#0000ff\",\r\n            \"#e6e600\",\r\n            \"#ca3838\"\r\n        ],\r\n        \"seg1\": \"19\",\r\n        \"seg2\": \"23\",\r\n        \"x\": 640,\r\n        \"y\": 600,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"1ca3de83ce358969\",\r\n        \"type\": \"simpletime\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"mydate\": false,\r\n        \"myymd\": false,\r\n        \"myyear\": false,\r\n        \"mymonth\": false,\r\n        \"mymonthn\": false,\r\n        \"mydom\": false,\r\n        \"mydoy\": false,\r\n        \"myday\": false,\r\n        \"myhourpm\": false,\r\n        \"myhour\": false,\r\n        \"mytime\": true,\r\n        \"mytimes\": false,\r\n        \"myminute\": false,\r\n        \"myminutes\": false,\r\n        \"mysecond\": false,\r\n        \"mymillis\": false,\r\n        \"myepoch\": false,\r\n        \"myrawdate\": false,\r\n        \"mypm\": false,\r\n        \"x\": 630,\r\n        \"y\": 540,\r\n        \"wires\": [\r\n            [\r\n                \"d068abcc5dfefd48\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"4219183c76425b55\",\r\n        \"type\": \"debug\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"active\": false,\r\n        \"tosidebar\": true,\r\n        \"console\": false,\r\n        \"tostatus\": false,\r\n        \"complete\": \"false\",\r\n        \"x\": 630,\r\n        \"y\": 780,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"d3db6834687c27ea\",\r\n        \"type\": \"ui_gauge\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Rel. Feuchte innen\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 5,\r\n        \"width\": 4,\r\n        \"height\": 3,\r\n        \"gtype\": \"gage\",\r\n        \"title\": \"Rel. Feuchte innen\",\r\n        \"label\": \"% \",\r\n        \"format\": \"{{value}}\",\r\n        \"min\": \"50\",\r\n        \"max\": \"70\",\r\n        \"colors\": [\r\n            \"#7ef9fc\",\r\n            \"#8c91ea\",\r\n            \"#0000a0\"\r\n        ],\r\n        \"seg1\": \"63\",\r\n        \"seg2\": \"67\",\r\n        \"x\": 660,\r\n        \"y\": 860,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"d068abcc5dfefd48\",\r\n        \"type\": \"ui_text\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 1,\r\n        \"width\": 4,\r\n        \"height\": 1,\r\n        \"name\": \"innen upd\",\r\n        \"label\": \"&amp;nbsp\",\r\n        \"format\": \"{{msg.mytime}}\",\r\n        \"layout\": \"row-left\",\r\n        \"className\": \"\",\r\n        \"x\": 800,\r\n        \"y\": 540,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"e1a9de48988e17b1\",\r\n        \"type\": \"mqtt out\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"MQTT Fan\",\r\n        \"topic\": \"\/Keller\/switch\/fan\/cmnd\/POWER\",\r\n        \"qos\": \"1\",\r\n        \"retain\": \"\",\r\n        \"broker\": \"e3a7d99a.19f948\",\r\n        \"x\": 1950,\r\n        \"y\": 300,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"2538a6b1c88e8cfd\",\r\n        \"type\": \"debug\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"mqtt in\",\r\n        \"active\": false,\r\n        \"tosidebar\": true,\r\n        \"console\": false,\r\n        \"tostatus\": false,\r\n        \"complete\": \"payload\",\r\n        \"targetType\": \"msg\",\r\n        \"statusVal\": \"\",\r\n        \"statusType\": \"auto\",\r\n        \"x\": 1790,\r\n        \"y\": 240,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"1146bb3e1541084e\",\r\n        \"type\": \"inject\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Trigger (Test)\",\r\n        \"repeat\": \"\",\r\n        \"crontab\": \"\",\r\n        \"once\": false,\r\n        \"onceDelay\": 0.1,\r\n        \"topic\": \"\",\r\n        \"payload\": \"\",\r\n        \"payloadType\": \"date\",\r\n        \"x\": 1010,\r\n        \"y\": 600,\r\n        \"wires\": [\r\n            [\r\n                \"317654108e3b6afa\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"db1ed67538f1df08\",\r\n        \"type\": \"mqtt in\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"MQTT Fan Status\",\r\n        \"topic\": \"\/Keller\/switch\/fan\/POWER\",\r\n        \"qos\": \"1\",\r\n        \"datatype\": \"utf8\",\r\n        \"broker\": \"e3a7d99a.19f948\",\r\n        \"nl\": false,\r\n        \"rap\": false,\r\n        \"inputs\": 0,\r\n        \"x\": 1330,\r\n        \"y\": 300,\r\n        \"wires\": [\r\n            [\r\n                \"2b91401f3d6fd0d6\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"36e70cd4f9797388\",\r\n        \"type\": \"ui_switch\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Dehum Switch\",\r\n        \"label\": \"Trockner\",\r\n        \"tooltip\": \"\",\r\n        \"group\": \"49039f65.e3216\",\r\n        \"order\": 3,\r\n        \"width\": 2,\r\n        \"height\": 1,\r\n        \"passthru\": true,\r\n        \"decouple\": \"false\",\r\n        \"topic\": \"shellies\/Keller\/dehum\/relay\/0\/command\",\r\n        \"style\": \"\",\r\n        \"onvalue\": \"on\",\r\n        \"onvalueType\": \"str\",\r\n        \"onicon\": \"\",\r\n        \"oncolor\": \"\",\r\n        \"offvalue\": \"off\",\r\n        \"offvalueType\": \"str\",\r\n        \"officon\": \"\",\r\n        \"offcolor\": \"\",\r\n        \"x\": 1580,\r\n        \"y\": 720,\r\n        \"wires\": [\r\n            [\r\n                \"fc4e811a950eefa2\",\r\n                \"7a65b08f3a1e2e41\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"018a11c3375ca86d\",\r\n        \"type\": \"debug\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"compare\",\r\n        \"active\": false,\r\n        \"tosidebar\": true,\r\n        \"console\": false,\r\n        \"tostatus\": false,\r\n        \"complete\": \"true\",\r\n        \"targetType\": \"full\",\r\n        \"statusVal\": \"\",\r\n        \"statusType\": \"auto\",\r\n        \"x\": 1160,\r\n        \"y\": 480,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"317654108e3b6afa\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Trocknung n\u00f6tig?\",\r\n        \"func\": \"var iRF = flow.get('innenhum');\\nvar run = flow.get('runStatus');\\n\\n\/\/ Entfeuchtung n\u00f6tig?\\nif (iRF &lt;= 60){\\n    \/\/AUS!\\n    run = \\\"OFF\\\";\\n    }\\nelse if (iRF &gt;= 65){\\n    \/\/ iRF ist \u00fcber 65\\n    \/\/ Fan\/Trock anmachen\\n   run = \\\"ON\\\";\\n}\\n\\nmsg.payload = run;\\n\\n\/\/ \\\"runStatus\\\" = Merker f\u00fcr k\u00fcnftige Aufrufe dieser Fkt.\\nflow.set('runStatus', run);\\n\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"x\": 1030,\r\n        \"y\": 540,\r\n        \"wires\": [\r\n            [\r\n                \"018a11c3375ca86d\",\r\n                \"df3c0c7aba9bb494\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"df3c0c7aba9bb494\",\r\n        \"type\": \"switch\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"property\": \"payload\",\r\n        \"propertyType\": \"msg\",\r\n        \"rules\": [\r\n            {\r\n                \"t\": \"eq\",\r\n                \"v\": \"ON\",\r\n                \"vt\": \"str\"\r\n            },\r\n            {\r\n                \"t\": \"eq\",\r\n                \"v\": \"OFF\",\r\n                \"vt\": \"str\"\r\n            }\r\n        ],\r\n        \"checkall\": \"true\",\r\n        \"repair\": false,\r\n        \"outputs\": 2,\r\n        \"x\": 1270,\r\n        \"y\": 540,\r\n        \"wires\": [\r\n            [\r\n                \"4092692a0b2a6b0d\"\r\n            ],\r\n            [\r\n                \"2b91401f3d6fd0d6\",\r\n                \"100300d4bb07ffe4\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"4092692a0b2a6b0d\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Auswahl Methode\",\r\n        \"func\": \"\/\/ Methode\\nvar aAF = parseFloat(flow.get('aussenAF'));\\nvar iAF = parseFloat(flow.get('innenAF'));\\nvar iTemp = parseFloat(flow.get('innentemp'));\\nif (aAF &lt; iAF * 0.75){\\n    \/\/ Entfeuchtung  mit Ventilator \\n    msg.payload = \\\"fan\\\";\\n    msg.topic = \\\"fan\\\";\\n    }\\nelse {\/\/Entfeuchtung mit Trockner\\n    msg.payload = \\\"dehum\\\";\\n    msg.topic = \\\"dehum\\\";\\n    }\\nif (iTemp &lt; 5.0 || flow.get(\\\"sensorFail\\\") == true) {\/\/Frostsicherung bzw. Sensor Ausfall\\n    msg.payload = \\\"dehum\\\";\\n    msg.topic = \\\"dehum\\\";\\n    }\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 1470,\r\n        \"y\": 540,\r\n        \"wires\": [\r\n            [\r\n                \"e5390df4c3b85032\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"e5390df4c3b85032\",\r\n        \"type\": \"switch\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"property\": \"payload\",\r\n        \"propertyType\": \"msg\",\r\n        \"rules\": [\r\n            {\r\n                \"t\": \"eq\",\r\n                \"v\": \"fan\",\r\n                \"vt\": \"str\"\r\n            },\r\n            {\r\n                \"t\": \"eq\",\r\n                \"v\": \"dehum\",\r\n                \"vt\": \"str\"\r\n            }\r\n        ],\r\n        \"checkall\": \"true\",\r\n        \"repair\": false,\r\n        \"outputs\": 2,\r\n        \"x\": 1630,\r\n        \"y\": 540,\r\n        \"wires\": [\r\n            [\r\n                \"f7254ea9216dee4b\",\r\n                \"06d4e2e91ced84d0\",\r\n                \"dbae23dfc0bc3c7c\"\r\n            ],\r\n            [\r\n                \"0f8bd561ece7c298\",\r\n                \"dbae23dfc0bc3c7c\",\r\n                \"06d4e2e91ced84d0\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"f7254ea9216dee4b\",\r\n        \"type\": \"debug\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Fan\",\r\n        \"active\": false,\r\n        \"tosidebar\": true,\r\n        \"console\": false,\r\n        \"tostatus\": false,\r\n        \"complete\": \"payload\",\r\n        \"targetType\": \"msg\",\r\n        \"x\": 1890,\r\n        \"y\": 520,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"0f8bd561ece7c298\",\r\n        \"type\": \"debug\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Dehum\",\r\n        \"active\": false,\r\n        \"tosidebar\": true,\r\n        \"console\": false,\r\n        \"tostatus\": false,\r\n        \"complete\": \"payload\",\r\n        \"targetType\": \"msg\",\r\n        \"x\": 1900,\r\n        \"y\": 560,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"c2a66c724575466d\",\r\n        \"type\": \"rbe\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"func\": \"rbe\",\r\n        \"gap\": \"\",\r\n        \"start\": \"\",\r\n        \"inout\": \"out\",\r\n        \"property\": \"payload\",\r\n        \"x\": 1790,\r\n        \"y\": 300,\r\n        \"wires\": [\r\n            [\r\n                \"e1a9de48988e17b1\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"dbae23dfc0bc3c7c\",\r\n        \"type\": \"change\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"set Dehum\",\r\n        \"rules\": [\r\n            {\r\n                \"t\": \"change\",\r\n                \"p\": \"payload\",\r\n                \"pt\": \"msg\",\r\n                \"from\": \"dehum\",\r\n                \"fromt\": \"str\",\r\n                \"to\": \"on\",\r\n                \"tot\": \"str\"\r\n            },\r\n            {\r\n                \"t\": \"change\",\r\n                \"p\": \"payload\",\r\n                \"pt\": \"msg\",\r\n                \"from\": \"fan\",\r\n                \"fromt\": \"str\",\r\n                \"to\": \"off\",\r\n                \"tot\": \"str\"\r\n            }\r\n        ],\r\n        \"action\": \"\",\r\n        \"property\": \"\",\r\n        \"from\": \"\",\r\n        \"to\": \"\",\r\n        \"reg\": false,\r\n        \"x\": 1790,\r\n        \"y\": 620,\r\n        \"wires\": [\r\n            [\r\n                \"36e70cd4f9797388\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"06d4e2e91ced84d0\",\r\n        \"type\": \"change\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Set Fan\",\r\n        \"rules\": [\r\n            {\r\n                \"t\": \"change\",\r\n                \"p\": \"payload\",\r\n                \"pt\": \"msg\",\r\n                \"from\": \"fan\",\r\n                \"fromt\": \"str\",\r\n                \"to\": \"ON\",\r\n                \"tot\": \"str\"\r\n            },\r\n            {\r\n                \"t\": \"change\",\r\n                \"p\": \"payload\",\r\n                \"pt\": \"msg\",\r\n                \"from\": \"dehum\",\r\n                \"fromt\": \"str\",\r\n                \"to\": \"OFF\",\r\n                \"tot\": \"str\"\r\n            }\r\n        ],\r\n        \"action\": \"\",\r\n        \"property\": \"\",\r\n        \"from\": \"\",\r\n        \"to\": \"\",\r\n        \"reg\": false,\r\n        \"x\": 1780,\r\n        \"y\": 460,\r\n        \"wires\": [\r\n            [\r\n                \"2b91401f3d6fd0d6\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"d9f99cd97371f381\",\r\n        \"type\": \"ui_chart\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"group\": \"251d9c80.de5134\",\r\n        \"order\": 3,\r\n        \"width\": 13,\r\n        \"height\": 4,\r\n        \"label\": \"AF au\u00dfen\/innen\",\r\n        \"chartType\": \"line\",\r\n        \"legend\": \"false\",\r\n        \"xformat\": \"HH:mm\",\r\n        \"interpolate\": \"bezier\",\r\n        \"nodata\": \"awaiting data...\",\r\n        \"dot\": true,\r\n        \"ymin\": \"\",\r\n        \"ymax\": \"\",\r\n        \"removeOlder\": 1,\r\n        \"removeOlderPoints\": \"\",\r\n        \"removeOlderUnit\": \"86400\",\r\n        \"cutout\": 0,\r\n        \"useOneColor\": false,\r\n        \"useUTC\": false,\r\n        \"colors\": [\r\n            \"#1f77b4\",\r\n            \"#dc99fd\",\r\n            \"#ff7f0e\",\r\n            \"#2ca02c\",\r\n            \"#98df8a\",\r\n            \"#d62728\",\r\n            \"#ff9896\",\r\n            \"#9467bd\",\r\n            \"#c5b0d5\"\r\n        ],\r\n        \"outputs\": 1,\r\n        \"useDifferentColor\": false,\r\n        \"className\": \"\",\r\n        \"x\": 1040,\r\n        \"y\": 220,\r\n        \"wires\": [\r\n            []\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"0a47ddca3e84e7e1\",\r\n        \"type\": \"debug\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"active\": false,\r\n        \"tosidebar\": true,\r\n        \"console\": false,\r\n        \"tostatus\": false,\r\n        \"complete\": \"false\",\r\n        \"x\": 980,\r\n        \"y\": 740,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"10317651c184fa22\",\r\n        \"type\": \"mqtt in\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Sensor Quality innen\",\r\n        \"topic\": \"\/Keller\/innen\/quality\",\r\n        \"qos\": \"1\",\r\n        \"datatype\": \"auto-detect\",\r\n        \"broker\": \"e3a7d99a.19f948\",\r\n        \"nl\": false,\r\n        \"rap\": false,\r\n        \"inputs\": 0,\r\n        \"x\": 150,\r\n        \"y\": 920,\r\n        \"wires\": [\r\n            [\r\n                \"3d2086d8d903195a\",\r\n                \"de03908e51fc267e\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"9de75990a6782f45\",\r\n        \"type\": \"ui_text\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"group\": \"cf840cce.6d3fc\",\r\n        \"order\": 1,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"name\": \"Quality innen\",\r\n        \"label\": \"Quality\",\r\n        \"format\": \"{{msg.payload}}\",\r\n        \"layout\": \"row-left\",\r\n        \"x\": 640,\r\n        \"y\": 920,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"2513f54b4aac9567\",\r\n        \"type\": \"ui_chart\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"group\": \"cf840cce.6d3fc\",\r\n        \"order\": 2,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"label\": \"Retries\",\r\n        \"chartType\": \"line\",\r\n        \"legend\": \"false\",\r\n        \"xformat\": \"HH:mm:ss\",\r\n        \"interpolate\": \"step\",\r\n        \"nodata\": \"\",\r\n        \"dot\": true,\r\n        \"ymin\": \"0\",\r\n        \"ymax\": \"10\",\r\n        \"removeOlder\": \"24\",\r\n        \"removeOlderPoints\": \"\",\r\n        \"removeOlderUnit\": \"3600\",\r\n        \"cutout\": 0,\r\n        \"useOneColor\": false,\r\n        \"colors\": [\r\n            \"#ff0000\",\r\n            \"#aec7e8\",\r\n            \"#ff7f0e\",\r\n            \"#2ca02c\",\r\n            \"#98df8a\",\r\n            \"#d62728\",\r\n            \"#ff9896\",\r\n            \"#9467bd\",\r\n            \"#c5b0d5\"\r\n        ],\r\n        \"outputs\": 1,\r\n        \"x\": 640,\r\n        \"y\": 960,\r\n        \"wires\": [\r\n            []\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"3d2086d8d903195a\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"QSplit\",\r\n        \"func\": \"var str = msg.payload\\nvar res = str.split(\\\",\\\");\\n\\nmsg.payload= res[1] + res[2];\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"x\": 430,\r\n        \"y\": 920,\r\n        \"wires\": [\r\n            [\r\n                \"9de75990a6782f45\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"de03908e51fc267e\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"RSplit\",\r\n        \"func\": \"var str = msg.payload\\nvar res = str.split(\\\",\\\");\\nvar subs = res[2];\\nvar retr = subs.split(\\\":\\\");\\nmsg.payload = retr[1];\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 430,\r\n        \"y\": 960,\r\n        \"wires\": [\r\n            [\r\n                \"2513f54b4aac9567\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"d6623217239fe145\",\r\n        \"type\": \"comment\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Schreibfehler \\\"humdity\\\"\",\r\n        \"info\": \"\",\r\n        \"x\": 160,\r\n        \"y\": 760,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"9e9f04eaa5d7d66e\",\r\n        \"type\": \"mqtt in\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"topic\": \"shellies\/Keller\/dehum\/relay\/0\",\r\n        \"qos\": \"1\",\r\n        \"datatype\": \"auto-detect\",\r\n        \"broker\": \"e3a7d99a.19f948\",\r\n        \"nl\": false,\r\n        \"rap\": false,\r\n        \"inputs\": 0,\r\n        \"x\": 1320,\r\n        \"y\": 720,\r\n        \"wires\": [\r\n            [\r\n                \"36e70cd4f9797388\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"517af7b8b062cf8b\",\r\n        \"type\": \"mqtt out\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"topic\": \"shellies\/Keller\/dehum\/relay\/0\/command\",\r\n        \"qos\": \"1\",\r\n        \"retain\": \"\",\r\n        \"broker\": \"e3a7d99a.19f948\",\r\n        \"x\": 2080,\r\n        \"y\": 720,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"fc4e811a950eefa2\",\r\n        \"type\": \"rbe\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"func\": \"rbe\",\r\n        \"gap\": \"\",\r\n        \"start\": \"\",\r\n        \"inout\": \"out\",\r\n        \"property\": \"payload\",\r\n        \"x\": 1790,\r\n        \"y\": 720,\r\n        \"wires\": [\r\n            [\r\n                \"517af7b8b062cf8b\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"7a65b08f3a1e2e41\",\r\n        \"type\": \"debug\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"dehum cmd\",\r\n        \"active\": false,\r\n        \"tosidebar\": true,\r\n        \"console\": false,\r\n        \"tostatus\": false,\r\n        \"complete\": \"payload\",\r\n        \"targetType\": \"msg\",\r\n        \"statusVal\": \"\",\r\n        \"statusType\": \"auto\",\r\n        \"x\": 1840,\r\n        \"y\": 820,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"100300d4bb07ffe4\",\r\n        \"type\": \"change\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"OFF--&gt; off (shelly)\",\r\n        \"rules\": [\r\n            {\r\n                \"t\": \"change\",\r\n                \"p\": \"payload\",\r\n                \"pt\": \"msg\",\r\n                \"from\": \"OFF\",\r\n                \"fromt\": \"str\",\r\n                \"to\": \"off\",\r\n                \"tot\": \"str\"\r\n            }\r\n        ],\r\n        \"action\": \"\",\r\n        \"property\": \"\",\r\n        \"from\": \"\",\r\n        \"to\": \"\",\r\n        \"reg\": false,\r\n        \"x\": 1390,\r\n        \"y\": 620,\r\n        \"wires\": [\r\n            [\r\n                \"36e70cd4f9797388\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"0b95770a21cc2eee\",\r\n        \"type\": \"mqtt in\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Sensor Quality aussen\",\r\n        \"topic\": \"\/Keller\/aussen\/quality\",\r\n        \"qos\": \"1\",\r\n        \"datatype\": \"auto-detect\",\r\n        \"broker\": \"e3a7d99a.19f948\",\r\n        \"nl\": false,\r\n        \"rap\": false,\r\n        \"inputs\": 0,\r\n        \"x\": 960,\r\n        \"y\": 920,\r\n        \"wires\": [\r\n            [\r\n                \"729dc7c2ee6278ed\",\r\n                \"05ebc6d93387802c\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"e73b09f15d566297\",\r\n        \"type\": \"ui_text\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"group\": \"203bb44.7aea8cc\",\r\n        \"order\": 1,\r\n        \"width\": 13,\r\n        \"height\": 1,\r\n        \"name\": \"Quality aussen\",\r\n        \"label\": \"Quality\",\r\n        \"format\": \"{{msg.payload}}\",\r\n        \"layout\": \"row-left\",\r\n        \"className\": \"\",\r\n        \"x\": 1450,\r\n        \"y\": 920,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"f4c69b5c4844e045\",\r\n        \"type\": \"ui_chart\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"group\": \"203bb44.7aea8cc\",\r\n        \"order\": 3,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"label\": \"Retries\",\r\n        \"chartType\": \"line\",\r\n        \"legend\": \"false\",\r\n        \"xformat\": \"HH:mm:ss\",\r\n        \"interpolate\": \"step\",\r\n        \"nodata\": \"\",\r\n        \"dot\": true,\r\n        \"ymin\": \"\",\r\n        \"ymax\": \"\",\r\n        \"removeOlder\": \"24\",\r\n        \"removeOlderPoints\": \"\",\r\n        \"removeOlderUnit\": \"3600\",\r\n        \"cutout\": 0,\r\n        \"useOneColor\": false,\r\n        \"useUTC\": false,\r\n        \"colors\": [\r\n            \"#ff0000\",\r\n            \"#aec7e8\",\r\n            \"#ff7f0e\",\r\n            \"#2ca02c\",\r\n            \"#98df8a\",\r\n            \"#d62728\",\r\n            \"#ff9896\",\r\n            \"#9467bd\",\r\n            \"#c5b0d5\"\r\n        ],\r\n        \"outputs\": 1,\r\n        \"useDifferentColor\": false,\r\n        \"className\": \"\",\r\n        \"x\": 1440,\r\n        \"y\": 960,\r\n        \"wires\": [\r\n            []\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"729dc7c2ee6278ed\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"QSplit\",\r\n        \"func\": \"var str = msg.payload\\nvar res = str.split(\\\",\\\");\\n\\nmsg.payload= res[1] + res[2];\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"x\": 1230,\r\n        \"y\": 920,\r\n        \"wires\": [\r\n            [\r\n                \"e73b09f15d566297\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"05ebc6d93387802c\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"RSplit\",\r\n        \"func\": \"var str = msg.payload\\nvar res = str.split(\\\",\\\");\\nvar subs = res[2];\\nvar retr = subs.split(\\\":\\\");\\nmsg.payload = retr[1];\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"x\": 1230,\r\n        \"y\": 960,\r\n        \"wires\": [\r\n            [\r\n                \"f4c69b5c4844e045\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"17b6db3060c06abb\",\r\n        \"type\": \"simpletime\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"mydate\": false,\r\n        \"myymd\": true,\r\n        \"myyear\": false,\r\n        \"mymonth\": false,\r\n        \"mymonthn\": false,\r\n        \"mydom\": false,\r\n        \"mydoy\": false,\r\n        \"myday\": false,\r\n        \"myhourpm\": false,\r\n        \"myhour\": false,\r\n        \"mytime\": true,\r\n        \"mytimes\": false,\r\n        \"myminute\": false,\r\n        \"myminutes\": false,\r\n        \"mysecond\": false,\r\n        \"mymillis\": false,\r\n        \"myepoch\": true,\r\n        \"myrawdate\": false,\r\n        \"mypm\": false,\r\n        \"x\": 470,\r\n        \"y\": 140,\r\n        \"wires\": [\r\n            [\r\n                \"8be70bd51c301732\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"8be70bd51c301732\",\r\n        \"type\": \"change\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"set last reading\",\r\n        \"rules\": [\r\n            {\r\n                \"t\": \"set\",\r\n                \"p\": \"aussenEpoch\",\r\n                \"pt\": \"flow\",\r\n                \"to\": \"myepoch\",\r\n                \"tot\": \"msg\"\r\n            },\r\n            {\r\n                \"t\": \"set\",\r\n                \"p\": \"aussenTimes\",\r\n                \"pt\": \"flow\",\r\n                \"to\": \"mytime\",\r\n                \"tot\": \"msg\"\r\n            },\r\n            {\r\n                \"t\": \"set\",\r\n                \"p\": \"aussenDate\",\r\n                \"pt\": \"flow\",\r\n                \"to\": \"myymd\",\r\n                \"tot\": \"msg\"\r\n            }\r\n        ],\r\n        \"action\": \"\",\r\n        \"property\": \"\",\r\n        \"from\": \"\",\r\n        \"to\": \"\",\r\n        \"reg\": false,\r\n        \"x\": 640,\r\n        \"y\": 140,\r\n        \"wires\": [\r\n            []\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"4cf6ac6b78173f98\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Sensor timeout?\",\r\n        \"func\": \"var timeBetween = (msg.myepoch - flow.get('aussenEpoch'))\/1000;\\n\\nflow.set('timeBetween', timeBetween);\\nif (timeBetween &gt;= 7500) {\\n    msg.payload = \\\"&lt;font color='red'&gt;Sensor Failure\\\" + \\\" \\\" + flow.get(\\\"aussenDate\\\") + \\\" \\\" + flow.get('aussenTimes')+\\\"&lt;\/font\\\";\\n    flow.set(\\\"sensorFail\\\",true);}\\nelse {msg.payload=flow.get('aussenTimes');\\n    flow.set(\\\"sensorFail\\\", false);}\\n\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 1040,\r\n        \"y\": 40,\r\n        \"wires\": [\r\n            [\r\n                \"a86a84c7f583c828\",\r\n                \"147472f9726ad5bc\",\r\n                \"fdbd3efd6cdf3b65\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"a86a84c7f583c828\",\r\n        \"type\": \"ui_text\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 2,\r\n        \"width\": 4,\r\n        \"height\": 1,\r\n        \"name\": \"Aussensensor Time\/Fail\",\r\n        \"label\": \"&amp;nbsp\",\r\n        \"format\": \"{{msg.payload}}\",\r\n        \"layout\": \"row-left\",\r\n        \"className\": \"\",\r\n        \"x\": 1350,\r\n        \"y\": 60,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"90e8cbb57c3598dd\",\r\n        \"type\": \"inject\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"props\": [\r\n            {\r\n                \"p\": \"payload\"\r\n            },\r\n            {\r\n                \"p\": \"topic\",\r\n                \"vt\": \"str\"\r\n            }\r\n        ],\r\n        \"repeat\": \"60\",\r\n        \"crontab\": \"\",\r\n        \"once\": true,\r\n        \"onceDelay\": 0.1,\r\n        \"topic\": \"\",\r\n        \"payload\": \"\",\r\n        \"payloadType\": \"date\",\r\n        \"x\": 670,\r\n        \"y\": 40,\r\n        \"wires\": [\r\n            [\r\n                \"b74b0ad7bbc41883\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"b74b0ad7bbc41883\",\r\n        \"type\": \"simpletime\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"mydate\": false,\r\n        \"myymd\": false,\r\n        \"myyear\": false,\r\n        \"mymonth\": false,\r\n        \"mymonthn\": false,\r\n        \"mydom\": false,\r\n        \"mydoy\": false,\r\n        \"myday\": false,\r\n        \"myhourpm\": false,\r\n        \"myhour\": false,\r\n        \"mytime\": false,\r\n        \"mytimes\": false,\r\n        \"myminute\": false,\r\n        \"myminutes\": false,\r\n        \"mysecond\": false,\r\n        \"mymillis\": false,\r\n        \"myepoch\": true,\r\n        \"myrawdate\": false,\r\n        \"mypm\": false,\r\n        \"x\": 850,\r\n        \"y\": 40,\r\n        \"wires\": [\r\n            [\r\n                \"4cf6ac6b78173f98\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"fbdd61f42ae08016\",\r\n        \"type\": \"comment\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Sensor \u00dcberwachung\/Last read\",\r\n        \"info\": \"\",\r\n        \"x\": 430,\r\n        \"y\": 40,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"147472f9726ad5bc\",\r\n        \"type\": \"debug\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"active\": false,\r\n        \"tosidebar\": true,\r\n        \"console\": false,\r\n        \"tostatus\": false,\r\n        \"complete\": \"true\",\r\n        \"targetType\": \"full\",\r\n        \"statusVal\": \"\",\r\n        \"statusType\": \"auto\",\r\n        \"x\": 1130,\r\n        \"y\": 120,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"444c5f44b85a5841\",\r\n        \"type\": \"change\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"rules\": [\r\n            {\r\n                \"t\": \"set\",\r\n                \"p\": \"payload\",\r\n                \"pt\": \"msg\",\r\n                \"to\": \"KellerPi Au\u00dfensensor Fehler! Wahrscheinlich ist der Akku leer. Viele Gr\u00fc\u00dfe KellerPi\",\r\n                \"tot\": \"str\"\r\n            },\r\n            {\r\n                \"t\": \"set\",\r\n                \"p\": \"topic\",\r\n                \"pt\": \"msg\",\r\n                \"to\": \"KellerPi Au\u00dfensensor\",\r\n                \"tot\": \"str\"\r\n            },\r\n            {\r\n                \"t\": \"set\",\r\n                \"p\": \"from\",\r\n                \"pt\": \"msg\",\r\n                \"to\": \"deine.Email@Adresse\",\r\n                \"tot\": \"str\"\r\n            }\r\n        ],\r\n        \"action\": \"\",\r\n        \"property\": \"\",\r\n        \"from\": \"\",\r\n        \"to\": \"\",\r\n        \"reg\": false,\r\n        \"x\": 1690,\r\n        \"y\": 140,\r\n        \"wires\": [\r\n            [\r\n                \"a95d5d63fdd0783d\",\r\n                \"bc5624c328a41aa8\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"513bc3f05f5d12a6\",\r\n        \"type\": \"switch\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"property\": \"sensorFail\",\r\n        \"propertyType\": \"flow\",\r\n        \"rules\": [\r\n            {\r\n                \"t\": \"true\"\r\n            }\r\n        ],\r\n        \"checkall\": \"true\",\r\n        \"repair\": false,\r\n        \"outputs\": 1,\r\n        \"x\": 1490,\r\n        \"y\": 100,\r\n        \"wires\": [\r\n            [\r\n                \"444c5f44b85a5841\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"fdbd3efd6cdf3b65\",\r\n        \"type\": \"rbe\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"func\": \"rbe\",\r\n        \"gap\": \"\",\r\n        \"start\": \"\",\r\n        \"inout\": \"out\",\r\n        \"septopics\": true,\r\n        \"property\": \"payload\",\r\n        \"topi\": \"topic\",\r\n        \"x\": 1310,\r\n        \"y\": 100,\r\n        \"wires\": [\r\n            [\r\n                \"513bc3f05f5d12a6\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"5d442113d65b2d45\",\r\n        \"type\": \"ui_text\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 10,\r\n        \"width\": 4,\r\n        \"height\": 1,\r\n        \"name\": \"\",\r\n        \"label\": \"Quotient\",\r\n        \"format\": \"{{value|number:2}}\",\r\n        \"layout\": \"col-center\",\r\n        \"className\": \"\",\r\n        \"x\": 1060,\r\n        \"y\": 800,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"3d6cbce945760a99\",\r\n        \"type\": \"function\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"Quotient aussen\/innen\",\r\n        \"func\": \"msg.payload = flow.get(\\\"aussenAF\\\") \/ flow.get(\\\"innenAF\\\");\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 880,\r\n        \"y\": 800,\r\n        \"wires\": [\r\n            [\r\n                \"5d442113d65b2d45\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"febf32d35289c8a6\",\r\n        \"type\": \"inject\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"\",\r\n        \"props\": [\r\n            {\r\n                \"p\": \"payload\"\r\n            },\r\n            {\r\n                \"p\": \"topic\",\r\n                \"vt\": \"str\"\r\n            }\r\n        ],\r\n        \"repeat\": \"\",\r\n        \"crontab\": \"\",\r\n        \"once\": false,\r\n        \"onceDelay\": 0.1,\r\n        \"topic\": \"\",\r\n        \"payload\": \"\",\r\n        \"payloadType\": \"date\",\r\n        \"x\": 1500,\r\n        \"y\": 160,\r\n        \"wires\": [\r\n            [\r\n                \"444c5f44b85a5841\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"a95d5d63fdd0783d\",\r\n        \"type\": \"debug\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"debug 4\",\r\n        \"active\": false,\r\n        \"tosidebar\": true,\r\n        \"console\": false,\r\n        \"tostatus\": false,\r\n        \"complete\": \"true\",\r\n        \"targetType\": \"full\",\r\n        \"statusVal\": \"\",\r\n        \"statusType\": \"auto\",\r\n        \"x\": 1940,\r\n        \"y\": 100,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"bc5624c328a41aa8\",\r\n        \"type\": \"e-mail\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"server\": \"\",\r\n        \"port\": \"\",\r\n        \"authtype\": \"BASIC\",\r\n        \"saslformat\": false,\r\n        \"token\": \"\",\r\n        \"secure\": false,\r\n        \"tls\": false,\r\n        \"name\": \"\",\r\n        \"dname\": \"\",\r\n        \"credentials\": {\r\n            \"userid\": \"\",\r\n            \"password\": \"\"\r\n        },\r\n        \"x\": 1950,\r\n        \"y\": 180,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"3be24b421408f56a\",\r\n        \"type\": \"ui_spacer\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"spacer\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 9,\r\n        \"width\": 2,\r\n        \"height\": 1\r\n    },\r\n    {\r\n        \"id\": \"61abad1a85bc1076\",\r\n        \"type\": \"ui_spacer\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"spacer\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 11,\r\n        \"width\": 2,\r\n        \"height\": 1\r\n    },\r\n    {\r\n        \"id\": \"d67d09993b5d31c1\",\r\n        \"type\": \"ui_spacer\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"spacer\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 12,\r\n        \"width\": 2,\r\n        \"height\": 1\r\n    },\r\n    {\r\n        \"id\": \"29716fb099520937\",\r\n        \"type\": \"ui_spacer\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"spacer\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 14,\r\n        \"width\": 2,\r\n        \"height\": 1\r\n    },\r\n    {\r\n        \"id\": \"14b23f81bf786068\",\r\n        \"type\": \"ui_spacer\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"spacer\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 17,\r\n        \"width\": 2,\r\n        \"height\": 1\r\n    },\r\n    {\r\n        \"id\": \"0dd0829046a335b7\",\r\n        \"type\": \"ui_spacer\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"spacer\",\r\n        \"group\": \"fb4c39ba.5771e\",\r\n        \"order\": 19,\r\n        \"width\": 2,\r\n        \"height\": 1\r\n    },\r\n    {\r\n        \"id\": \"c6dca61d90a9f018\",\r\n        \"type\": \"ui_spacer\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"spacer\",\r\n        \"group\": \"49039f65.e3216\",\r\n        \"order\": 2,\r\n        \"width\": 1,\r\n        \"height\": 1\r\n    },\r\n    {\r\n        \"id\": \"c19da6bed2990669\",\r\n        \"type\": \"ui_spacer\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"spacer\",\r\n        \"group\": \"49039f65.e3216\",\r\n        \"order\": 4,\r\n        \"width\": 3,\r\n        \"height\": 1\r\n    },\r\n    {\r\n        \"id\": \"b6cb821a9e370399\",\r\n        \"type\": \"ui_spacer\",\r\n        \"z\": \"807b3e4c7befe2d7\",\r\n        \"name\": \"spacer\",\r\n        \"group\": \"203bb44.7aea8cc\",\r\n        \"order\": 2,\r\n        \"width\": 1,\r\n        \"height\": 1\r\n    },\r\n    {\r\n        \"id\": \"49039f65.e3216\",\r\n        \"type\": \"ui_group\",\r\n        \"name\": \"Trocknung\",\r\n        \"tab\": \"b4124179.b1efd8\",\r\n        \"order\": 3,\r\n        \"disp\": true,\r\n        \"width\": \"8\",\r\n        \"collapse\": false,\r\n        \"className\": \"\"\r\n    },\r\n    {\r\n        \"id\": \"fb4c39ba.5771e\",\r\n        \"type\": \"ui_group\",\r\n        \"name\": \"Innen\/Au\u00dfen\",\r\n        \"tab\": \"b4124179.b1efd8\",\r\n        \"order\": 1,\r\n        \"disp\": true,\r\n        \"width\": \"8\",\r\n        \"collapse\": false,\r\n        \"className\": \"\"\r\n    },\r\n    {\r\n        \"id\": \"e3a7d99a.19f948\",\r\n        \"type\": \"mqtt-broker\",\r\n        \"name\": \"KellerPi\",\r\n        \"broker\": \"192.168.178.42\",\r\n        \"port\": \"1883\",\r\n        \"clientid\": \"\",\r\n        \"autoConnect\": true,\r\n        \"usetls\": false,\r\n        \"compatmode\": false,\r\n        \"protocolVersion\": \"4\",\r\n        \"keepalive\": \"60\",\r\n        \"cleansession\": true,\r\n        \"birthTopic\": \"\",\r\n        \"birthQos\": \"0\",\r\n        \"birthPayload\": \"\",\r\n        \"birthMsg\": {},\r\n        \"closeTopic\": \"\",\r\n        \"closeQos\": \"0\",\r\n        \"closePayload\": \"\",\r\n        \"closeMsg\": {},\r\n        \"willTopic\": \"\",\r\n        \"willQos\": \"0\",\r\n        \"willPayload\": \"\",\r\n        \"willMsg\": {},\r\n        \"sessionExpiry\": \"\"\r\n    },\r\n    {\r\n        \"id\": \"251d9c80.de5134\",\r\n        \"type\": \"ui_group\",\r\n        \"name\": \"Keller Luftfeuchtigkeit\",\r\n        \"tab\": \"7e312a09.8bd094\",\r\n        \"order\": 1,\r\n        \"disp\": true,\r\n        \"width\": 13,\r\n        \"collapse\": false\r\n    },\r\n    {\r\n        \"id\": \"cf840cce.6d3fc\",\r\n        \"type\": \"ui_group\",\r\n        \"name\": \"innen\",\r\n        \"tab\": \"dee11b6a.c0fcc8\",\r\n        \"order\": 1,\r\n        \"disp\": true,\r\n        \"width\": 14,\r\n        \"collapse\": false\r\n    },\r\n    {\r\n        \"id\": \"203bb44.7aea8cc\",\r\n        \"type\": \"ui_group\",\r\n        \"name\": \"aussen\",\r\n        \"tab\": \"dee11b6a.c0fcc8\",\r\n        \"order\": 2,\r\n        \"disp\": true,\r\n        \"width\": 14,\r\n        \"collapse\": false\r\n    },\r\n    {\r\n        \"id\": \"b4124179.b1efd8\",\r\n        \"type\": \"ui_tab\",\r\n        \"name\": \"Messwerte\",\r\n        \"icon\": \"dashboard\",\r\n        \"order\": 1,\r\n        \"disabled\": false,\r\n        \"hidden\": false\r\n    },\r\n    {\r\n        \"id\": \"7e312a09.8bd094\",\r\n        \"type\": \"ui_tab\",\r\n        \"name\": \"Keller LF\",\r\n        \"icon\": \"dashboard\",\r\n        \"order\": 2,\r\n        \"disabled\": false,\r\n        \"hidden\": false\r\n    },\r\n    {\r\n        \"id\": \"dee11b6a.c0fcc8\",\r\n        \"type\": \"ui_tab\",\r\n        \"name\": \"Quality\",\r\n        \"icon\": \"dashboard\",\r\n        \"order\": 4,\r\n        \"disabled\": false,\r\n        \"hidden\": false\r\n    }\r\n]<\/pre>\n<p>&nbsp;<\/p>\n<p>Zugegeberma\u00dfen ist das Alles nicht ganz einfach zu verstehen bzw. seine Hirn um die Thematik zu wickeln. Wenn ihr Fragen oder Kommentare habt, dann freue ich mich \u00fcber euer Feedback.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Damit keine Missverst\u00e4ndnisse aufkommen: Node-Red ist nat\u00fcrlich kein Entfeuchtungsger\u00e4t sondern eine\u00a0 grafische Entwicklungsumgebung f\u00fcr Internet Of Things Anwendungen. Node-Red hat Schnittstellen zu Raspberry Pi bereits integriert, so dass das Ansteuern oder Auslesen der GPIO Pins ein Klacks ist. Die Node-Red Umgebung l\u00e4uft problemlos auf dem Raspberry Pi, gerne auch zusammen mit einem MQTT Broker wie &hellip; <a href=\"https:\/\/www.rustimation.eu\/index.php\/keller-entfeuchten-mit-node-red\/\" class=\"more-link\"><span class=\"screen-reader-text\">Keller entfeuchten mit MQTT und Node-Red<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[103,112,102,53,137,151],"tags":[127,128,126,129],"class_list":["post-1309","post","type-post","status-publish","format-standard","hentry","category-arduino","category-d1-mini","category-esp8266-esp32","category-iot","category-mqtt","category-node-red","tag-absolute-luftfeuchtigkeit","tag-luftentfeuchter","tag-node-red","tag-ventilator"],"_links":{"self":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/1309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1309"}],"version-history":[{"count":1,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/1309\/revisions"}],"predecessor-version":[{"id":3144,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/posts\/1309\/revisions\/3144"}],"wp:attachment":[{"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1309"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/categories?post=1309"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rustimation.eu\/index.php\/wp-json\/wp\/v2\/tags?post=1309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}