diff --git a/README.md b/README.md index fcef0a8..bfa9b33 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,8 @@ MQTT-Wetterstation mit Datenauswertung und -Darstellung in Node-Red sowie Aufzei Dieses Projekt besteht aus mehreren Teilen: -## [Grundlagen: VEML 6070 Sensor, UV-Index Berechnung](VEML_6070/README.md) +## 1. [Grundlagen: VEML 6070 Sensor, UV-Index Berechnung](VEML_6070/README.md) +## 2. [Bresser Wetterstation MQTT-Anbindung mit RTL-433](rtl_433_Bresser/README.md) ## [Zusatzinfos: verwendete Berechnungsformeln](Berechnungsfunktionen.md) diff --git a/rtl_433_Bresser/README.md b/rtl_433_Bresser/README.md new file mode 100644 index 0000000..a319f28 --- /dev/null +++ b/rtl_433_Bresser/README.md @@ -0,0 +1,133 @@ +# Bresser Wetterstation MQTT +Viele Wetterstationen können mit Hilfe der Software rtl_433 emfangen werden. +rtl_433 wird hierbei als Brücke zwischen dem Signal der Wetterstation (868MHz) und dem MQTT-Server verwendet. +Ich verwende eine `Bresser 5-in-1 Wetter Center`-Station ([Link](https://www.bresser.de/Wetter-Zeit/BRESSER-5-in-1-Wetter-Center-schwarz.html)). rtl_433 ist aber ebenfalls mit vielen anderen Wettersationen kompatibel. Dazu einfach einen Blick in die Dokumentation werfen. + +Der Empfang erfolgt mit Hilfe eines SDR-USB Sticks (auch ein DVBT-Stick mit RTL2832-Chipsatz ist möglich). + +------------------ + +# Installation von rtl_433 + +Link zur Software: https://github.com/merbanan/rtl_433 + +Die Software kann z.B. auf einem Raspberry Pi oder innerhalb einer Virtuellen Maschine (VM, Ubuntu 20.04 server) erfolgen. + +rtl_433 kann als Linux-Paket installiert werden (unter Debian mit `apt-get install rtl-433`). In meinem Fall konnte mit dieser Version jedoch keine erfolgreiche Decodierung erreicht werden. Deshalb der Weg über die manuelle Compillierung, welche bei mir die Wetterstation auf Anhieb erfolgreich empfangen konnte. + +Zur Verwendung des SDR-Sticks zunächst folgende Vorkehrungen treffen: + +In die Datei +``` +sudo nano /etc/modprobe.d/blacklist.conf +``` +folgende Einträge ergänzen: +``` +# Blacklist DVBT-SDR Stick (disable the Stick for DVBT) +blacklist dvb_usb_rtl28xxu +blacklist rtl2832 +blacklist rtl2830 +``` + +Nun kann der SDR-Stick eingesteckt und mit der eigentlichen Installation begonnen werden. Die hier angegeben Paketversionen müssen nicht zwangsläufig verwendet werden funktionierten in meinem Fall jedoch auf Anhieb. +``` +sudo apt-get install git libtool=2.4.6-14 libusb-1.0-0-dev=2:1.0.23-2build1 librtlsdr-dev=0.6.0-3 rtl-sdr=0.6.0-3 build-essential cmake pkg-config + +git clone https://github.com/merbanan/rtl_433.git +cd rtl_433/ +mkdir build +cd build +cmake .. +make +sudo make install +``` + +Die Funtkion des SDR-Sticks kann mit Hilfe des Befehls `rtl_test -t` geprüft werden. + +# Testen des Empfangs +Als Antenne kann bei geringer Entfernung zur Wetterstation die dem DVBT-Stick mitgelieferte Antenne verwendet werden. +Anderenfalls empfiehlt es sich eine `868MHz` Groundplane-Antenne zu bauen (Quelle: https://www.darc.de/fileadmin/filemounts/distrikte/o/ortsverbaende/38/Downloads/Bericht_868MHz_Antennen_V2.0.pdf): + +[](pictures/Groundplane.png) +([Bildquelle](http://sites.prenninger.com/elektronik/dvb-t-antennen/groundplane)) + +Für die Frequenz `868MHz` beträgt die Länge eines einzelnen Drahtes `lambda/4 = 1/4 * 300/868MHz * 0.96 = 8,29cm`. + +Mit der passenden Antenne kann nun ein erster Empfangstest stattfinden: + +``` +rtl_433 -f 868M +``` +Nach wenigen Sekunden/Minuten sollte ein erfolgreicher Empfang zustande gekommen sein. Die Ausgabe zeigt die Decodierten Messwerte: +``` +time : 2021-12-30 10:05:47 +model : Bresser-6in1 id : 27384665 +channel : 0 Battery : 1 Temperature: 19.8 C +Humidity : 53 Sensor type: 1 Wind Gust : 0.8 m/s +Wind Speed: 0.8 m/s Direction : 144 Integrity : CRC +``` +Es kann teilweise vorkommen, dass in einer Nachricht nicht alle Messwerte gesendet werden. +Der Empfang kann mit `STRG-C` beendet werden. + +# Produktivbetrieb mit MQTT +Die Einstellungen für den Betrieb werden in einer Konfigurationsdatei festgelegt. Dafür wird zunächst die Beispieldatei in das Programmverzeichnis kopiert und anschließend geöffnet. +``` +sudo mkdir /etc/rtl_433 +sudo cp conf/rtl_433.example.conf /etc/rtl_433/rtl_433.conf +sudo nano /etc/rtl_433/rtl_433.conf +``` +In dieser Datei folgende Zeilen auskommentieren und anpassen: +``` +frequency 868M # Empfangsfrequenz der Wetterstation +sample_rate 1000000 +report_meta time:iso # Fomat des Zeitstempels ISO +output mqtt://---MQTT-SERVER-IP---:1883,user=USERNAME,pass=PASSWORD,retain=0,devices=rtl_433[/protocol] # Ausgabe mit MQTT +``` +Achtung: Bei dieser Art der Konfiguration kann es vorkommen, dass auch andere Wettersationen des gleichen Typs empfangen werden, sofern sie in Reichweite des Empfängers sind. Dies kann durch einen Abgleich der `id` der eigenen Station vermieden werden. Zu beachten ist dabei jedoch, dass sich die id nach jedem Reset bzw. Batteriewechsel ändert und damit jedes mal eine erneute Konfigurationsänderung nöitg ist. + +Damit nur die Eigene Wetterstation (bzw. nur Sationen des gleichen Typs wie die eigene) empfangen wird, können in der Datei alle Protokolle außer das benötigte auskommentiert (`#` vor jede Zeile) oder gelöscht werden. Die einzige benötigte Zeile für diese Wetterstation muss erhalten bleiben: +``` +protocol 172 # Bresser Weather Center 6-in-1, 7-in-1 indoor, new 5-in-1, 3-in-1 wind gauge, Froggit WH6000, Ventus C8488A +``` + +Nun kann diese Datei gespeichert und geschlossen werden. + +Es wird zuletzt noch der automatische Start beim Hochfahren konfiguriert: +``` +sudo nano /etc/systemd/system/rtl_433-mqtt.service +``` +In diese Datei wird der folgende Inhalt eingefügt und gespeichert: +``` +[Unit] +Description=rtl_433 to MQTT publisher +After=network.target +[Service] +ExecStart=/usr/local/bin/rtl_433 +Restart=always +RestartSec=5 +[Install] +WantedBy=multi-user.target +``` +Nun kann der Autostart aktiviert werden: +``` +sudo systemctl enable rtl_433-mqtt.service +sudo systemctl start rtl_433-mqtt.service +sudo systemctl status rtl_433-mqtt.service +``` +(Eine Deaktivierung kann mit `sudo systemctl disable rtl_433-mqtt.service` erfolgen.) + +rtl_433 erzeugt nun für jeden Messwert eine MQTT-Nachricht. Der Name des MQTT-Topics entspricht dabei dem Messwertname, z.B. `rtl_433/172/wind_avg_m_s` oder `rtl_433/172/temperature_C`. + +# Datenverarbeitung mit Node-Red +rtl_433 erzeugt bei jeder Nachricht für jeden Messwert eine MQTT-Nachricht, welche mit Node-Red weiterverarbeitet werden kann. Ich habe einen Node-Red-Flow erstellt, welcher die Messwerte im Node-Red-Dashboard darstellt sowie in eine Influx-DB Datenbank schreibt. Somit ist auch eine Visualisierung mit Grafana möglich. In Node-Red erfolgt ebenfalls die Berechnung von Taupunkt und Hitzeindex (gefühlte Temperatur) aus den Messwerten sowie eine Umrechung der Windgeschwindigkeit in km/h und eine entsprechende Windstärke (Beaufortskala). + +[Screenshot des Node-Red-Flows](pictures/node_red_flow.png) + +Der Flow (`wetter_bresser_node_red_flow.json`) kann aus der Github-Repository heruntergeladen und importiert werden. Es werden folgende Erweiterungs-Nodes benötigt: node-red-dashboard, node-red-contrib-influxdb und node-red-contrib-calculate. + + +
+
+

This work by Dustin Brunner is licensed under CC BY 4.0

+ +Creative Commons Lizenzvertrag
Dieses Werk von Dustin Brunner ist lizenziert unter einer Creative Commons Namensnennung 4.0 International Lizenz. \ No newline at end of file diff --git a/rtl_433_Bresser/pictures/Groundplane.png b/rtl_433_Bresser/pictures/Groundplane.png new file mode 100644 index 0000000..ca85a55 Binary files /dev/null and b/rtl_433_Bresser/pictures/Groundplane.png differ diff --git a/rtl_433_Bresser/pictures/node_red_flow.png b/rtl_433_Bresser/pictures/node_red_flow.png new file mode 100644 index 0000000..e8175f9 Binary files /dev/null and b/rtl_433_Bresser/pictures/node_red_flow.png differ diff --git a/rtl_433_Bresser/wetter_bresser_node_red_flow.json b/rtl_433_Bresser/wetter_bresser_node_red_flow.json new file mode 100644 index 0000000..5c08d0e --- /dev/null +++ b/rtl_433_Bresser/wetter_bresser_node_red_flow.json @@ -0,0 +1,1650 @@ +[ + { + "id": "d3ca8384.37e118", + "type": "mqtt in", + "z": "199a2494.d44483", + "name": "", + "topic": "rtl_433/172/temperature_C", + "qos": "2", + "datatype": "auto", + "broker": "3bfdb428.8d8e3c", + "x": 200, + "y": 420, + "wires": [ + [ + "80a65e52.86759" + ] + ] + }, + { + "id": "4191850c.80a284", + "type": "mqtt in", + "z": "199a2494.d44483", + "name": "", + "topic": "rtl_433/172/humidity", + "qos": "2", + "datatype": "auto", + "broker": "3bfdb428.8d8e3c", + "x": 170, + "y": 500, + "wires": [ + [ + "b37a161c.fcd9d" + ] + ] + }, + { + "id": "5fc4ebb6.d73924", + "type": "mqtt in", + "z": "199a2494.d44483", + "name": "", + "topic": "rtl_433/172/wind_dir_deg", + "qos": "2", + "datatype": "auto", + "broker": "3bfdb428.8d8e3c", + "x": 170, + "y": 1180, + "wires": [ + [ + "877c91d6.50b2f8" + ] + ] + }, + { + "id": "8416fcd5.454c68", + "type": "mqtt in", + "z": "199a2494.d44483", + "name": "", + "topic": "rtl_433/172/wind_avg_m_s", + "qos": "2", + "datatype": "auto", + "broker": "3bfdb428.8d8e3c", + "x": 170, + "y": 1400, + "wires": [ + [ + "69c1a305.442864" + ] + ] + }, + { + "id": "b239c78f.f0f78", + "type": "mqtt in", + "z": "199a2494.d44483", + "name": "", + "topic": "rtl_433/172/wind_max_m_s", + "qos": "2", + "datatype": "auto", + "broker": "3bfdb428.8d8e3c", + "x": 180, + "y": 1500, + "wires": [ + [ + "67d40285.0349a4" + ] + ] + }, + { + "id": "aee03a48.f3c4c8", + "type": "function", + "z": "199a2494.d44483", + "name": "Taupunkt berechnen (°C)", + "func": "//Quelle: https://myscope.net/taupunkttemperatur/\n\nvar calcdewpoint = function(celsius, humidity) {\n\n var a, b;\n if (celsius >= 0) {\n a = 7.5;\n b = 237.3;\n } else if (celsius < 0) {\n a = 7.6;\n b = 240.7;\n }\n\n // Sättigungsdampfdruck (hPa)\n var sdd = 6.1078 * Math.pow(10, (a * celsius) / (b + celsius));\n\n // Dampfdruck (hPa)\n var dd = sdd * (humidity / 100);\n\n // v-Parameter\n var v = Math.log10(dd / 6.1078);\n\n // Taupunkttemperatur (°C)\n var td = (b * v) / (a - v);\n \n //Runden 1 Nachkommastelle\n td = Math.round(td * 10) / 10;\n \n return td;\n}\n\nmsg.payload = calcdewpoint(parseFloat(global.get(\"Temperatur_Bresser\")), parseFloat(global.get(\"Luftfeuchte_Bresser\")));\n\n\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 1610, + "y": 700, + "wires": [ + [ + "c7363d81.8c8b4", + "e52715fe.b9702" + ] + ] + }, + { + "id": "49939cf0.ba107c", + "type": "delay", + "z": "199a2494.d44483", + "name": "", + "pauseType": "delay", + "timeout": "1", + "timeoutUnits": "seconds", + "rate": "1", + "nbRateUnits": "1", + "rateUnits": "second", + "randomFirst": "1", + "randomLast": "5", + "randomUnits": "seconds", + "drop": false, + "x": 1240, + "y": 760, + "wires": [ + [ + "aee03a48.f3c4c8", + "97086b92.1b9c08", + "4f2c0771.d273d8", + "2f685a95.9a24e6", + "38c10a6d.ba730e" + ] + ] + }, + { + "id": "97086b92.1b9c08", + "type": "function", + "z": "199a2494.d44483", + "name": "Gefühlte Temperatur berechnen (°C)", + "func": "\n//Quelle: https://myscope.net/windchill-gefuehlte-temperatur-berechnen/\n// https://de.wikipedia.org/wiki/Windchill\nvar calcwindchill = function(celsius, windspeed) {\n var windchill = 13.12 + 0.6215 * celsius - 11.37 * Math.pow(windspeed, 0.16) + 0.3965 * celsius * Math.pow(windspeed, 0.16);\n return windchill;\n}\n\n//Quelle: https://myscope.net/hitzeindex-gefuehle-temperatur/\n// https://de.wikipedia.org/wiki/Hitzeindex\nvar calcheatindex = function(celsius, humidity) {\n return (-8.784695 + 1.61139411 * celsius + 2.338549 * humidity - 0.14611605 * celsius * humidity - 0.012308094 * celsius * celsius - 0.016424828 * humidity * humidity + 0.002211732 * celsius * celsius * humidity + 0.00072546 * celsius * humidity * humidity - 0.000003582 * celsius * celsius * humidity * humidity);\n}\n\nvar Temperatur_2m = parseFloat(global.get(\"Temperatur_Bresser\"));\nvar Luftfeuchte_rel = parseFloat(global.get(\"Luftfeuchte_Bresser\"));\nvar windkmh = parseFloat(global.get(\"Wind_kmh_10min_Bresser\"));\n\nif (Temperatur_2m <= 10 && windkmh >= 4.8) \n{\n msg.payload = calcwindchill(Temperatur_2m, windkmh);\n msg.topic = \"123\";\n}\nelse if (Temperatur_2m >= 26.7 && Luftfeuchte_rel >= 40) \n{\n msg.payload = calcheatindex(Temperatur_2m, Luftfeuchte_rel);\n msg.topic = \"246\";\n}\nelse //Keine der beiden Formeln ist definiert\n{\n //msg.payload = -1;\n msg.payload = Temperatur_2m;\n}\n \n//Runden 1 Nachkommastelle\nmsg.payload = Math.round(msg.payload * 10) / 10;\n\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 1650, + "y": 760, + "wires": [ + [ + "9a55cc4c.f15f48" + ] + ] + }, + { + "id": "39227a60.41774e", + "type": "function", + "z": "199a2494.d44483", + "name": "in km/h", + "func": "//Runden 1 Nachkommastelle und *3.6\n\nmsg.payload = Math.round(msg.payload * 3.6 * 10) / 10;\n\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 600, + "y": 1400, + "wires": [ + [ + "341cfe64.27c68a", + "963932e3.0adc28" + ] + ] + }, + { + "id": "4f2c0771.d273d8", + "type": "function", + "z": "199a2494.d44483", + "name": "Absolute Luftfeuchtigkeit berechnen (g/m^3)", + "func": "\n// Relative to absolute humidity\n// Based on https://carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/\nvar absoluteHumidity = function(temperature, humidity) {\n return (13.2471*Math.pow(2.7182818,17.67*temperature/(temperature+243.5))*humidity/(273.15+temperature));\n}\n\nvar Temperatur_2m = parseFloat(global.get(\"Temperatur_Bresser\"));\nvar Luftfeuchte_rel = parseFloat(global.get(\"Luftfeuchte_Bresser\"));\n\nmsg.payload = absoluteHumidity(Temperatur_2m, Luftfeuchte_rel);\n\n//Runden 1 Nachkommastelle\nmsg.payload = Math.round(msg.payload * 10) / 10;\n\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 1670, + "y": 820, + "wires": [ + [ + "ebcfdb2b.8317e" + ] + ] + }, + { + "id": "add19758.e17278", + "type": "function", + "z": "199a2494.d44483", + "name": "Wind (km/h) in Wort und bft umwandeln", + "func": "var windmax = parseFloat(msg.payload) / 3.6;\n\nvar windstarkewort = {};\nwindstarkewort.topic = \"Windstärke_Wort\";\n\nvar windstarkebft = {};\nwindstarkebft.topic = \"Windstärke_bft\";\n\nif (windmax < 0.3) {\n windstarkebft.payload = 0;\n windstarkewort.payload = \"Windstille\";\n }\n else if (windmax >= 0.3 && windmax < 1.6) {\n windstarkebft.payload = 1;\n windstarkewort.payload = \"leiser Zug\";\n }\n else if (windmax >= 1.6 && windmax < 3.4 ) {\n windstarkebft.payload = 2;\n windstarkewort.payload = \"leichte Brise\";\n }\n else if (windmax >= 3.4 && windmax < 5.5) {\n windstarkebft.payload = 3;\n windstarkewort.payload = \"schwache Brise\";\n }\n else if (windmax >= 5.5 && windmax < 8.0 ) {\n windstarkebft.payload = 4;\n windstarkewort.payload = \"mäßige Brise\";\n }\n else if (windmax >= 8.0 && windmax < 10.8 ) {\n windstarkebft.payload = 5;\n windstarkewort.payload = \"frische Brise\";\n }\n else if (windmax >= 10.8 && windmax < 13.9 ) {\n windstarkebft.payload = 6;\n windstarkewort.payload = \"starker Wind\";\n }\n else if (windmax >= 13.9 && windmax < 17.2 ) {\n windstarkebft.payload = 7;\n windstarkewort.payload = \"steifer Wind\";\n }\n else if (windmax >= 17.2 && windmax < 20.8 ) {\n windstarkebft.payload = 8;\n windstarkewort.payload = \"stürmischer Wind\";\n }\n else if (windmax >= 20.8 && windmax < 24.5 ) {\n windstarkebft.payload = 9;\n windstarkewort.payload = \"Sturm\";\n }\n else if (windmax >= 24.5 && windmax < 28.5 ) {\n windstarkebft.payload = 10;\n windstarkewort.payload = \"schwerer Sturm\";\n }\n else if (windmax >= 28.5 && windmax < 32.7 ) {\n windstarkebft.payload = 11;\n windstarkewort.payload = \"orkanartiger Sturm\";\n }\n else if (windmax >= 32.7) {\n windstarkebft.payload = 12;\n windstarkewort.payload = \"Sturm\";\n }\n\n\nreturn [windstarkewort, windstarkebft];", + "outputs": 2, + "noerr": 0, + "x": 1240, + "y": 1580, + "wires": [ + [ + "fafdb2ed.83711" + ], + [ + "3e740b7d.c55024" + ] + ], + "outputLabels": [ + "Wort", + "bft" + ] + }, + { + "id": "9d684adf.b3eb9", + "type": "function", + "z": "199a2494.d44483", + "name": "Windrichtung (°) in Wort umwandeln", + "func": "var windrichtung = parseInt(msg.payload);\n\nvar windrichtungwort = {};\nwindrichtungwort.topic = \"Windrichtung_Wort\";\n\n\nif (windrichtung >= 348 && windrichtung < 12) {\n windrichtungwort.payload = \"N\";\n }\n else if (windrichtung >= 12 && windrichtung < 35) {\n windrichtungwort.payload = \"NNO\";\n }\n else if (windrichtung >= 35 && windrichtung < 57) {\n windrichtungwort.payload = \"NO\";\n }\n else if (windrichtung >= 57 && windrichtung < 80) {\n windrichtungwort.payload = \"NOO\";\n }\n else if (windrichtung >= 80 && windrichtung < 102) {\n windrichtungwort.payload = \"O\";\n }\n else if (windrichtung >= 102 && windrichtung < 125) {\n windrichtungwort.payload = \"SOO\";\n }\n else if (windrichtung >= 125 && windrichtung < 147) {\n windrichtungwort.payload = \"SO\";\n }\n else if (windrichtung >= 147 && windrichtung < 170) {\n windrichtungwort.payload = \"SSO\";\n }\n else if (windrichtung >= 170 && windrichtung < 192) {\n windrichtungwort.payload = \"S\";\n }\n else if (windrichtung >= 192 && windrichtung < 215) {\n windrichtungwort.payload = \"SSW\";\n }\n else if (windrichtung >= 215 && windrichtung < 237) {\n windrichtungwort.payload = \"SW\";\n }\n else if (windrichtung >= 237 && windrichtung < 260) {\n windrichtungwort.payload = \"SWW\";\n }\n else if (windrichtung >= 260 && windrichtung < 282) {\n windrichtungwort.payload = \"W\";\n }\n else if (windrichtung >= 282 && windrichtung < 305) {\n windrichtungwort.payload = \"NWW\";\n }\n else if (windrichtung >= 305 && windrichtung < 327) {\n windrichtungwort.payload = \"NW\";\n }\n else if (windrichtung >= 327 && windrichtung < 348) {\n windrichtungwort.payload = \"NNW\";\n }\n else {\n windrichtungwort.payload = \"???\";\n }\n\nreturn windrichtungwort;", + "outputs": 1, + "noerr": 0, + "x": 690, + "y": 1280, + "wires": [ + [ + "3c90d4d6.84584c", + "7b8b407f.02c5a8" + ] + ], + "outputLabels": [ + "Wort" + ] + }, + { + "id": "80a65e52.86759", + "type": "change", + "z": "199a2494.d44483", + "name": "Str to Num + Topic", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "$number(payload)", + "tot": "jsonata" + }, + { + "t": "set", + "p": "topic", + "pt": "msg", + "to": "temp_Bresser", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 490, + "y": 420, + "wires": [ + [ + "341cfe64.27c68a" + ] + ] + }, + { + "id": "b37a161c.fcd9d", + "type": "change", + "z": "199a2494.d44483", + "name": "Str to Num + Topic", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "$number(payload)", + "tot": "jsonata" + }, + { + "t": "set", + "p": "topic", + "pt": "msg", + "to": "humidity_Bresser", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 490, + "y": 500, + "wires": [ + [ + "341cfe64.27c68a" + ] + ] + }, + { + "id": "69c1a305.442864", + "type": "change", + "z": "199a2494.d44483", + "name": "Str to Num + Topic", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "$number(payload)", + "tot": "jsonata" + }, + { + "t": "set", + "p": "topic", + "pt": "msg", + "to": "wind_avg_Bresser", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 410, + "y": 1400, + "wires": [ + [ + "39227a60.41774e" + ] + ] + }, + { + "id": "67d40285.0349a4", + "type": "change", + "z": "199a2494.d44483", + "name": "Str to Num + Topic", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "$number(payload)", + "tot": "jsonata" + }, + { + "t": "set", + "p": "topic", + "pt": "msg", + "to": "wind_max_Bresser", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 410, + "y": 1500, + "wires": [ + [ + "3512b6e8.1bedba" + ] + ] + }, + { + "id": "877c91d6.50b2f8", + "type": "change", + "z": "199a2494.d44483", + "name": "Str to Num + Topic", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "$number(payload)", + "tot": "jsonata" + }, + { + "t": "set", + "p": "topic", + "pt": "msg", + "to": "wind_dir_Bresser", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 410, + "y": 1180, + "wires": [ + [ + "9d684adf.b3eb9", + "46c57b66.607724", + "341cfe64.27c68a", + "a10f98b.29a2768", + "22ee949c.098b5c" + ] + ] + }, + { + "id": "da27693.de58618", + "type": "mqtt in", + "z": "199a2494.d44483", + "name": "", + "topic": "rtl_433/#", + "qos": "2", + "datatype": "auto", + "broker": "3bfdb428.8d8e3c", + "x": 140, + "y": 360, + "wires": [ + [ + "e35797c8.af7488" + ] + ] + }, + { + "id": "e35797c8.af7488", + "type": "debug", + "z": "199a2494.d44483", + "name": "", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "x": 470, + "y": 360, + "wires": [] + }, + { + "id": "4209f5b.074ca0c", + "type": "mqtt in", + "z": "199a2494.d44483", + "name": "", + "topic": "rtl_433/172/rain_mm", + "qos": "2", + "datatype": "auto", + "broker": "3bfdb428.8d8e3c", + "x": 150, + "y": 1780, + "wires": [ + [ + "1e42eb82.cff744" + ] + ] + }, + { + "id": "1e42eb82.cff744", + "type": "change", + "z": "199a2494.d44483", + "name": "Str to Num + Topic", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "$number(payload)", + "tot": "jsonata" + }, + { + "t": "set", + "p": "topic", + "pt": "msg", + "to": "rain_mm_Bresser", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 410, + "y": 1780, + "wires": [ + [ + "7f870b19.89622c" + ] + ] + }, + { + "id": "341cfe64.27c68a", + "type": "calculate", + "z": "199a2494.d44483", + "name": "10 Minuten Durchschnitt", + "pauseType": "timed", + "calculation": "average", + "timeout": "10", + "timeoutUnits": "minutes", + "rate": "10", + "x": 810, + "y": 460, + "wires": [ + [ + "3f1feb1f.260b64" + ] + ] + }, + { + "id": "3f1feb1f.260b64", + "type": "function", + "z": "199a2494.d44483", + "name": "runden", + "func": "//Runden 1 Nachkommastelle\nmsg.payload = Math.round(msg.payload * 10) / 10;\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 1020, + "y": 460, + "wires": [ + [ + "960e35aa.265a98" + ] + ] + }, + { + "id": "ee710eac.efa0d", + "type": "function", + "z": "199a2494.d44483", + "name": "Temperatur_Bresser Variable schreiben", + "func": "global.set(\"Temperatur_Bresser\", msg.payload);\n", + "outputs": 1, + "noerr": 0, + "x": 1660, + "y": 400, + "wires": [ + [] + ] + }, + { + "id": "960e35aa.265a98", + "type": "switch", + "z": "199a2494.d44483", + "name": "topics trennen", + "property": "topic", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "temp_Bresser", + "vt": "str" + }, + { + "t": "eq", + "v": "humidity_Bresser", + "vt": "str" + }, + { + "t": "eq", + "v": "wind_dir_Bresser", + "vt": "str" + }, + { + "t": "eq", + "v": "wind_avg_Bresser", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 4, + "x": 1220, + "y": 460, + "wires": [ + [ + "ee710eac.efa0d", + "4f5132b0.5b63ac", + "49ed1cfc.c5bbe4", + "49939cf0.ba107c" + ], + [ + "5d216762.ec5fb8", + "12046eec.09e511", + "2a5b6588.fca1da", + "3dc3fd5f.6d6a82" + ], + [ + "88b65228.1a1ed8", + "4a76a8aa.2a864" + ], + [ + "7cb4e1ab.fecf68", + "331f012a.0b21d6", + "b91b4ae0.6e4aa8" + ] + ] + }, + { + "id": "5d216762.ec5fb8", + "type": "function", + "z": "199a2494.d44483", + "name": "Luftfeuchte_Bresser Variable schreiben", + "func": "global.set(\"Luftfeuchte_Bresser\", msg.payload);\n", + "outputs": 1, + "noerr": 0, + "x": 1660, + "y": 580, + "wires": [ + [] + ] + }, + { + "id": "4f5132b0.5b63ac", + "type": "ui_chart", + "z": "199a2494.d44483", + "name": "", + "group": "6d9811b9.aafee", + "order": 2, + "width": "6", + "height": "5", + "label": "Letzte 24 Stunden", + "chartType": "line", + "legend": "true", + "xformat": "HH:mm", + "interpolate": "linear", + "nodata": "", + "dot": false, + "ymin": "", + "ymax": "", + "removeOlder": "24", + "removeOlderPoints": "", + "removeOlderUnit": "3600", + "cutout": 0, + "useOneColor": false, + "colors": [ + "#1f77b4", + "#aec7e8", + "#00ffff", + "#2ca02c", + "#98df8a", + "#d62728", + "#ff9896", + "#9467bd", + "#c5b0d5" + ], + "useOldStyle": false, + "outputs": 1, + "x": 1590, + "y": 360, + "wires": [ + [] + ] + }, + { + "id": "9a55cc4c.f15f48", + "type": "ui_gauge", + "z": "199a2494.d44483", + "name": "", + "group": "3d91d558.b0b642", + "order": 2, + "width": "3", + "height": "2", + "gtype": "gage", + "title": "Gefühlte Temperatur", + "label": "°C", + "format": "{{value}}", + "min": "-30", + "max": "50", + "colors": [ + "#2701fe", + "#00ff00", + "#ff0000" + ], + "seg1": "0", + "seg2": "30", + "x": 2000, + "y": 760, + "wires": [] + }, + { + "id": "c7363d81.8c8b4", + "type": "ui_gauge", + "z": "199a2494.d44483", + "name": "", + "group": "3d91d558.b0b642", + "order": 3, + "width": "3", + "height": "2", + "gtype": "gage", + "title": "Taupunkt", + "label": "°C", + "format": "{{value}}", + "min": "-30", + "max": "50", + "colors": [ + "#2701fe", + "#00ff00", + "#ff0000" + ], + "seg1": "0", + "seg2": "30", + "x": 1960, + "y": 700, + "wires": [] + }, + { + "id": "ebcfdb2b.8317e", + "type": "ui_text", + "z": "199a2494.d44483", + "group": "be69e0ff.5c8f3", + "order": 3, + "width": "0", + "height": "0", + "name": "", + "label": "Absolute Luftfeuchte g/m³", + "format": "{{msg.payload}}", + "layout": "row-spread", + "x": 2010, + "y": 820, + "wires": [] + }, + { + "id": "d259eb08.ebf568", + "type": "ui_text", + "z": "199a2494.d44483", + "group": "4d0d0eb6.cfdf1", + "order": 3, + "width": "0", + "height": "0", + "name": "", + "label": "Bresser Letzte Nachricht", + "format": "{{msg.payload}}", + "layout": "row-spread", + "x": 650, + "y": 1860, + "wires": [] + }, + { + "id": "12301ad9.a4bc05", + "type": "mqtt in", + "z": "199a2494.d44483", + "name": "", + "topic": "rtl_433/172/time", + "qos": "2", + "datatype": "auto", + "broker": "3bfdb428.8d8e3c", + "x": 140, + "y": 1860, + "wires": [ + [ + "687e718a.7700b" + ] + ] + }, + { + "id": "12046eec.09e511", + "type": "ui_gauge", + "z": "199a2494.d44483", + "name": "Luftfeuchte", + "group": "be69e0ff.5c8f3", + "order": 1, + "width": "0", + "height": "0", + "gtype": "gage", + "title": "", + "label": "%", + "format": "{{value}}", + "min": "0", + "max": "100", + "colors": [ + "#ff8000", + "#ff8000", + "#ff8000" + ], + "seg1": "", + "seg2": "", + "x": 1570, + "y": 500, + "wires": [] + }, + { + "id": "2a5b6588.fca1da", + "type": "ui_chart", + "z": "199a2494.d44483", + "name": "", + "group": "9e770773.d8a92", + "order": 2, + "width": 0, + "height": 0, + "label": "Letzte 24 Stunden", + "chartType": "line", + "legend": "false", + "xformat": "HH:mm", + "interpolate": "linear", + "nodata": "", + "dot": false, + "ymin": "0", + "ymax": "100", + "removeOlder": "24", + "removeOlderPoints": "", + "removeOlderUnit": "3600", + "cutout": 0, + "useOneColor": false, + "colors": [ + "#ff8000", + "#aec7e8", + "#ff7f0e", + "#2ca02c", + "#98df8a", + "#d62728", + "#ff9896", + "#9467bd", + "#c5b0d5" + ], + "useOldStyle": false, + "outputs": 1, + "x": 1590, + "y": 540, + "wires": [ + [] + ] + }, + { + "id": "49ed1cfc.c5bbe4", + "type": "influxdb out", + "z": "199a2494.d44483", + "influxdb": "17baa071.c57db8", + "name": "", + "measurement": "Temperatur_Bresser", + "precision": "s", + "retentionPolicy": "", + "x": 1670, + "y": 440, + "wires": [] + }, + { + "id": "963932e3.0adc28", + "type": "ui_gauge", + "z": "199a2494.d44483", + "name": "", + "group": "30d719a6.8689be", + "order": 1, + "width": "0", + "height": "0", + "gtype": "gage", + "title": "Windgeschwindigkeit", + "label": "km/h", + "format": "{{value}}", + "min": "0", + "max": "100", + "colors": [ + "#00ff40", + "#00ff00", + "#ff0000" + ], + "seg1": "", + "seg2": "", + "x": 780, + "y": 1400, + "wires": [] + }, + { + "id": "7cb4e1ab.fecf68", + "type": "function", + "z": "199a2494.d44483", + "name": "Wind_kmh_10min_Bresser Variable schreiben", + "func": "global.set(\"Wind_kmh_10min_Bresser\", msg.payload);\n", + "outputs": 1, + "noerr": 0, + "x": 1680, + "y": 1420, + "wires": [ + [] + ] + }, + { + "id": "331f012a.0b21d6", + "type": "influxdb out", + "z": "199a2494.d44483", + "influxdb": "17baa071.c57db8", + "name": "", + "measurement": "Wind_kmh", + "precision": "s", + "retentionPolicy": "", + "x": 1640, + "y": 1460, + "wires": [] + }, + { + "id": "b91b4ae0.6e4aa8", + "type": "ui_chart", + "z": "199a2494.d44483", + "name": "", + "group": "4ec81a48.48104c", + "order": 6, + "width": 0, + "height": 0, + "label": "Letzte 24 Stunden km/h", + "chartType": "line", + "legend": "true", + "xformat": "HH:mm:ss", + "interpolate": "linear", + "nodata": "", + "dot": false, + "ymin": "", + "ymax": "", + "removeOlder": "24", + "removeOlderPoints": "", + "removeOlderUnit": "3600", + "cutout": 0, + "useOneColor": false, + "colors": [ + "#1f77b4", + "#ff0000", + "#ff7f0e", + "#2ca02c", + "#98df8a", + "#d62728", + "#ff9896", + "#9467bd", + "#c5b0d5" + ], + "useOldStyle": false, + "outputs": 1, + "x": 1610, + "y": 1380, + "wires": [ + [] + ] + }, + { + "id": "3512b6e8.1bedba", + "type": "function", + "z": "199a2494.d44483", + "name": "in km/h", + "func": "//Runden 1 Nachkommastelle und *3.6\n\nmsg.payload = Math.round(msg.payload * 3.6 * 10) / 10;\n\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 600, + "y": 1500, + "wires": [ + [ + "fa956745.9f4dd", + "5ee7357e.918624" + ] + ] + }, + { + "id": "fa956745.9f4dd", + "type": "ui_gauge", + "z": "199a2494.d44483", + "name": "", + "group": "30d719a6.8689be", + "order": 3, + "width": "3", + "height": "2", + "gtype": "gage", + "title": "Windböen", + "label": "km/h", + "format": "{{value}}", + "min": "0", + "max": "100", + "colors": [ + "#00ff40", + "#00ff00", + "#ff0000" + ], + "seg1": "", + "seg2": "", + "x": 750, + "y": 1560, + "wires": [] + }, + { + "id": "5ee7357e.918624", + "type": "calculate", + "z": "199a2494.d44483", + "name": "10 Minuten Maximum", + "pauseType": "timed", + "calculation": "max", + "timeout": "10", + "timeoutUnits": "minutes", + "rate": "10", + "x": 780, + "y": 1500, + "wires": [ + [ + "d5b01530.e810f" + ] + ] + }, + { + "id": "d5b01530.e810f", + "type": "function", + "z": "199a2494.d44483", + "name": "runden", + "func": "//Runden 1 Nachkommastelle\nmsg.payload = Math.round(msg.payload * 10) / 10;\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 980, + "y": 1500, + "wires": [ + [ + "b91b4ae0.6e4aa8", + "add19758.e17278", + "c8cec4c9.f1016" + ] + ] + }, + { + "id": "c8cec4c9.f1016", + "type": "influxdb out", + "z": "199a2494.d44483", + "influxdb": "17baa071.c57db8", + "name": "", + "measurement": "Wind_kmh_max", + "precision": "s", + "retentionPolicy": "", + "x": 1230, + "y": 1500, + "wires": [] + }, + { + "id": "3e740b7d.c55024", + "type": "ui_gauge", + "z": "199a2494.d44483", + "name": "Windstärke bft", + "group": "30d719a6.8689be", + "order": 5, + "width": "3", + "height": "2", + "gtype": "gage", + "title": "Windstärke", + "label": "bft", + "format": "{{value}}", + "min": "0", + "max": "12", + "colors": [ + "#00ff40", + "#ff8000", + "#ff00ff" + ], + "seg1": "4", + "seg2": "10", + "x": 1580, + "y": 1600, + "wires": [] + }, + { + "id": "fafdb2ed.83711", + "type": "ui_text", + "z": "199a2494.d44483", + "group": "30d719a6.8689be", + "order": 4, + "width": "0", + "height": "0", + "name": "Windstärke Wort", + "label": "Windstärke", + "format": "{{msg.payload}}", + "layout": "row-spread", + "x": 1590, + "y": 1560, + "wires": [] + }, + { + "id": "46c57b66.607724", + "type": "ui_gauge", + "z": "199a2494.d44483", + "name": "Windrichtung Kompass", + "group": "30d719a6.8689be", + "order": 7, + "width": "6", + "height": "4", + "gtype": "compass", + "title": "Windrichtung
N
", + "label": "", + "format": "{{value}}°", + "min": "0", + "max": "360", + "colors": [ + "#00ff40", + "#00ff00", + "#ff0000" + ], + "seg1": "", + "seg2": "", + "x": 810, + "y": 1240, + "wires": [] + }, + { + "id": "4a76a8aa.2a864", + "type": "ui_chart", + "z": "199a2494.d44483", + "name": "Windrichtung Letzte 24 Stunden", + "group": "4ec81a48.48104c", + "order": 9, + "width": "6", + "height": "5", + "label": "Windrichtung", + "chartType": "line", + "legend": "true", + "xformat": "HH:mm:ss", + "interpolate": "linear", + "nodata": "", + "dot": false, + "ymin": "0", + "ymax": "360", + "removeOlder": "24", + "removeOlderPoints": "", + "removeOlderUnit": "3600", + "cutout": 0, + "useOneColor": false, + "colors": [ + "#ff8000", + "#0080ff", + "#ff0000", + "#2ca02c", + "#98df8a", + "#d62728", + "#ff9896", + "#9467bd", + "#c5b0d5" + ], + "useOldStyle": false, + "outputs": 1, + "x": 1630, + "y": 1080, + "wires": [ + [] + ] + }, + { + "id": "3c90d4d6.84584c", + "type": "ui_text", + "z": "199a2494.d44483", + "group": "30d719a6.8689be", + "order": 8, + "width": "0", + "height": "0", + "name": "", + "label": "Himmelsrichtung", + "format": "{{msg.payload}}", + "layout": "row-spread", + "x": 980, + "y": 1280, + "wires": [] + }, + { + "id": "7b8b407f.02c5a8", + "type": "function", + "z": "199a2494.d44483", + "name": "Windr_wort_Bresser Variable schreiben", + "func": "global.set(\"Windr_wort_Bresser\", msg.payload);\n", + "outputs": 1, + "noerr": 0, + "x": 1060, + "y": 1320, + "wires": [ + [] + ] + }, + { + "id": "22ee949c.098b5c", + "type": "calculate", + "z": "199a2494.d44483", + "name": "10 Minuten Minimum", + "pauseType": "timed", + "calculation": "min", + "timeout": "10", + "timeoutUnits": "minutes", + "rate": "10", + "x": 800, + "y": 1200, + "wires": [ + [ + "2deb55ab.8be922" + ] + ] + }, + { + "id": "a10f98b.29a2768", + "type": "calculate", + "z": "199a2494.d44483", + "name": "10 Minuten Maximum", + "pauseType": "timed", + "calculation": "max", + "timeout": "10", + "timeoutUnits": "minutes", + "rate": "10", + "x": 800, + "y": 1160, + "wires": [ + [ + "458aef6c.4e3d6" + ] + ] + }, + { + "id": "458aef6c.4e3d6", + "type": "function", + "z": "199a2494.d44483", + "name": "runden + Topic", + "func": "//Runden 1 Nachkommastelle\nmsg.payload = Math.round(msg.payload * 10) / 10;\nmsg.topic = \"wind_dir_max\";\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 1020, + "y": 1160, + "wires": [ + [ + "1cb0de67.9432d2", + "4a76a8aa.2a864" + ] + ] + }, + { + "id": "2deb55ab.8be922", + "type": "function", + "z": "199a2494.d44483", + "name": "runden + Topic", + "func": "//Runden 1 Nachkommastelle\nmsg.payload = Math.round(msg.payload * 10) / 10;\nmsg.topic = \"wind_dir_min\";\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 1020, + "y": 1200, + "wires": [ + [ + "f18dfaf0.fed0f8", + "4a76a8aa.2a864" + ] + ] + }, + { + "id": "1cb0de67.9432d2", + "type": "influxdb out", + "z": "199a2494.d44483", + "influxdb": "17baa071.c57db8", + "name": "", + "measurement": "Wind_Richtung_Max", + "precision": "s", + "retentionPolicy": "", + "x": 1670, + "y": 1160, + "wires": [] + }, + { + "id": "f18dfaf0.fed0f8", + "type": "influxdb out", + "z": "199a2494.d44483", + "influxdb": "17baa071.c57db8", + "name": "", + "measurement": "Wind_Richtung_Min", + "precision": "s", + "retentionPolicy": "", + "x": 1670, + "y": 1200, + "wires": [] + }, + { + "id": "88b65228.1a1ed8", + "type": "influxdb out", + "z": "199a2494.d44483", + "influxdb": "17baa071.c57db8", + "name": "", + "measurement": "Wind_Richtung_Avg", + "precision": "s", + "retentionPolicy": "", + "x": 1670, + "y": 1120, + "wires": [] + }, + { + "id": "8af69694.23b5c", + "type": "comment", + "z": "199a2494.d44483", + "name": "Art des Messwertes", + "info": "Gesendete Regenmenge ist GESAMTMENGE seit dem letzten Reset der Wetterstation. -> Auswertung der Differenzwerte", + "x": 150, + "y": 1740, + "wires": [] + }, + { + "id": "7f870b19.89622c", + "type": "delay", + "z": "199a2494.d44483", + "name": "1 Nachricht pro Minute", + "pauseType": "rate", + "timeout": "5", + "timeoutUnits": "seconds", + "rate": "1", + "nbRateUnits": "1", + "rateUnits": "minute", + "randomFirst": "1", + "randomLast": "5", + "randomUnits": "seconds", + "drop": true, + "x": 640, + "y": 1780, + "wires": [ + [ + "f8592001.4e8f1" + ] + ] + }, + { + "id": "f8592001.4e8f1", + "type": "function", + "z": "199a2494.d44483", + "name": "Regen_Summe_aktuell Variable schreiben", + "func": "global.set(\"Regen_Summe_aktuell\", msg.payload);\n", + "outputs": 1, + "noerr": 0, + "x": 930, + "y": 1780, + "wires": [ + [] + ] + }, + { + "id": "2f685a95.9a24e6", + "type": "function", + "z": "199a2494.d44483", + "name": "Regenmenge auswerten", + "func": "\nvar regenmenge = parseFloat(global.get(\"Regen_Summe_aktuell\")) - parseFloat(global.get(\"Regen_Summe_letzte\"));\n\nglobal.set(\"Regen_Summe_letzte\", global.get(\"Regen_Summe_aktuell\"));\n\nif(regenmenge < 0 || regenmenge > 50) //Keine Ausgabe bei Offensichtlich falschen Werten\n{\n regenmenge = 0;\n}\nelse\n{\n var output = {};\n output.topic = \"Regen_Bresser\";\n output.payload = parseFloat(regenmenge);\n\n return output;\n}\n\n", + "outputs": 1, + "noerr": 0, + "x": 1610, + "y": 880, + "wires": [ + [ + "aff85f7d.ce0928" + ] + ] + }, + { + "id": "fa96407b.05dd4", + "type": "ui_gauge", + "z": "199a2494.d44483", + "name": "", + "group": "580799fe.f1c69", + "order": 2, + "width": "6", + "height": "4", + "gtype": "wave", + "title": "mm letzte 10 Minuten", + "label": "", + "format": "{{value}}°", + "min": "0", + "max": "10", + "colors": [ + "#00ff40", + "#00ff00", + "#ff0000" + ], + "seg1": "", + "seg2": "", + "x": 2000, + "y": 880, + "wires": [] + }, + { + "id": "480b62d5.dc63dc", + "type": "ui_chart", + "z": "199a2494.d44483", + "name": "", + "group": "39eba35.13c6edc", + "order": 4, + "width": 0, + "height": 0, + "label": "Letzte 24 Stunden", + "chartType": "line", + "legend": "false", + "xformat": "HH:mm:ss", + "interpolate": "linear", + "nodata": "", + "dot": false, + "ymin": "", + "ymax": "", + "removeOlder": "24", + "removeOlderPoints": "", + "removeOlderUnit": "3600", + "cutout": 0, + "useOneColor": false, + "colors": [ + "#1f77b4", + "#aec7e8", + "#ff7f0e", + "#2ca02c", + "#98df8a", + "#d62728", + "#ff9896", + "#9467bd", + "#c5b0d5" + ], + "useOldStyle": false, + "outputs": 1, + "x": 1990, + "y": 920, + "wires": [ + [] + ] + }, + { + "id": "3dc3fd5f.6d6a82", + "type": "influxdb out", + "z": "199a2494.d44483", + "influxdb": "17baa071.c57db8", + "name": "", + "measurement": "Luftfeuchte_Bresser", + "precision": "s", + "retentionPolicy": "", + "x": 1670, + "y": 620, + "wires": [] + }, + { + "id": "b7f019c2.117be8", + "type": "influxdb out", + "z": "199a2494.d44483", + "influxdb": "17baa071.c57db8", + "name": "", + "measurement": "Regen_Bresser", + "precision": "s", + "retentionPolicy": "", + "x": 2050, + "y": 960, + "wires": [] + }, + { + "id": "687e718a.7700b", + "type": "function", + "z": "199a2494.d44483", + "name": "Uhrzeit extrahieren", + "func": "msg.payload = msg.payload.substr(msg.payload.indexOf(\"T\") + 1);\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 410, + "y": 1860, + "wires": [ + [ + "d259eb08.ebf568" + ] + ] + }, + { + "id": "aff85f7d.ce0928", + "type": "function", + "z": "199a2494.d44483", + "name": "runden", + "func": "//Runden 3 Nachkommastellen\nmsg.payload = Math.round(msg.payload * 1000) / 1000;\nreturn msg;", + "outputs": 1, + "noerr": 0, + "x": 1800, + "y": 880, + "wires": [ + [ + "fa96407b.05dd4", + "480b62d5.dc63dc", + "b7f019c2.117be8" + ] + ] + }, + { + "id": "38c10a6d.ba730e", + "type": "function", + "z": "199a2494.d44483", + "name": "Zeitstempel erzeugen", + "func": "//Source: https://stackoverflow.com/questions/5416920/timestamp-to-human-readable-format\n\nvar date = new Date();\n\nvar hour = date.getHours();\nvar min = date.getMinutes();\nvar sec = date.getSeconds();\n\nhour = (hour < 10 ? \"0\" : \"\") + hour;\nmin = (min < 10 ? \"0\" : \"\") + min;\nsec = (sec < 10 ? \"0\" : \"\") + sec;\n\nmsg.payload = hour + \":\" + min + \":\" + sec;\nreturn msg;\n", + "outputs": 1, + "noerr": 0, + "x": 1600, + "y": 1000, + "wires": [ + [ + "baad3cdb.5b8d58" + ] + ] + }, + { + "id": "baad3cdb.5b8d58", + "type": "ui_text", + "z": "199a2494.d44483", + "group": "4d0d0eb6.cfdf1", + "order": 3, + "width": "0", + "height": "0", + "name": "", + "label": "Bresser Letzte 10min-AVG Werte", + "format": "{{msg.payload}}", + "layout": "row-spread", + "x": 2040, + "y": 1000, + "wires": [] + }, + { + "id": "e52715fe.b9702", + "type": "function", + "z": "199a2494.d44483", + "name": "Taupunkt Variable schreiben", + "func": "global.set(\"Taupunkt\", msg.payload);\n", + "outputs": 1, + "noerr": 0, + "x": 2020, + "y": 660, + "wires": [ + [] + ] + }, + { + "id": "3bfdb428.8d8e3c", + "type": "mqtt-broker", + "z": "", + "name": "MQTT_PVE2", + "broker": "192.168.1.20", + "port": "1883", + "clientid": "", + "usetls": false, + "compatmode": true, + "keepalive": "60", + "cleansession": true, + "birthTopic": "", + "birthQos": "0", + "birthPayload": "", + "closeTopic": "", + "closeQos": "0", + "closePayload": "", + "willTopic": "", + "willQos": "0", + "willPayload": "" + }, + { + "id": "6d9811b9.aafee", + "type": "ui_group", + "z": "", + "name": "Temperatur", + "tab": "615adc4e.b8b374", + "order": 2, + "disp": true, + "width": "6", + "collapse": false + }, + { + "id": "3d91d558.b0b642", + "type": "ui_group", + "z": "", + "name": "Temperatur", + "tab": "ebc25885.554eb", + "order": 3, + "disp": true, + "width": "6", + "collapse": false + }, + { + "id": "be69e0ff.5c8f3", + "type": "ui_group", + "z": "", + "name": "Luftfeuchte", + "tab": "ebc25885.554eb", + "order": 6, + "disp": true, + "width": "6", + "collapse": false + }, + { + "id": "4d0d0eb6.cfdf1", + "type": "ui_group", + "z": "", + "name": "Status", + "tab": "ebc25885.554eb", + "order": 2, + "disp": true, + "width": "6", + "collapse": true + }, + { + "id": "9e770773.d8a92", + "type": "ui_group", + "z": "", + "name": "Luftfeuchte", + "tab": "615adc4e.b8b374", + "order": 4, + "disp": true, + "width": "6", + "collapse": false + }, + { + "id": "17baa071.c57db8", + "type": "influxdb", + "z": "", + "hostname": "127.0.0.1", + "port": "8086", + "protocol": "http", + "database": "Wetter_Bresser", + "name": "Influx Wetter_Bresser", + "usetls": false, + "tls": "" + }, + { + "id": "30d719a6.8689be", + "type": "ui_group", + "z": "", + "name": "Wind", + "tab": "ebc25885.554eb", + "order": 4, + "disp": true, + "width": "6", + "collapse": false + }, + { + "id": "4ec81a48.48104c", + "type": "ui_group", + "z": "", + "name": "Wind", + "tab": "615adc4e.b8b374", + "order": 7, + "disp": true, + "width": "6", + "collapse": false + }, + { + "id": "580799fe.f1c69", + "type": "ui_group", + "z": "", + "name": "Regen", + "tab": "ebc25885.554eb", + "order": 8, + "disp": true, + "width": "6", + "collapse": false + }, + { + "id": "39eba35.13c6edc", + "type": "ui_group", + "z": "", + "name": "Regen", + "tab": "615adc4e.b8b374", + "order": 5, + "disp": true, + "width": "6", + "collapse": false + }, + { + "id": "615adc4e.b8b374", + "type": "ui_tab", + "z": "", + "name": "Wetter außen Historie", + "icon": "dashboard", + "order": 3, + "disabled": false, + "hidden": true + }, + { + "id": "ebc25885.554eb", + "type": "ui_tab", + "z": "", + "name": "Wetter Außen", + "icon": "wb_sunny", + "order": 1, + "disabled": false, + "hidden": false + } +] \ No newline at end of file