NEWS
[ERLEDIGT] Wunsch: ioBroker.vis-canvas-gauges erweitern auf dynamische Sektoren
-
~~Moin,
ich bin gerade dabei mein Maverick BBQ Funkthermometer in ioBroker einzubinden, was relativ gut funktioniert.
Jetzt bin ich dabei, mir in VIS eine Seite zu erstellen, die die Temperaturen der beiden Fühler anzeigt.
Eine coole Erweiterung wäre es, wenn man die Sektoren der "vis-canvas-gauges" über Objekte verändern könnte, damit man, je nachdem was auf dem Grill liegt, den Bereich der Kerntemperatur verändern könnte.
Im Moment müsste man ja zig verschiedene Anzeigen erstellen und diese, je nach Bedarf anzeigen bzw. verstecken.
Gruß,
Mark
[EDIT]
Funktioniert tadellos über Bindings!!!
PS: Für die, die es interessiert.
Thermometer: Maverick ET-733
Funkempfänger: Standard 433MHz
Code: https://github.com/milaq/maverick_et-733_rf/ wurde von mir so verändert, das nur noch ein Einzeiler im Log steht
Sehr einfaches Skript zum "abfragen":
createState('bbq.sensor_1_ist', 0); createState('bbq.sensor_2_ist', 0); createState('bbq.lastvalue', 0); var t=setInterval(readTemp,5000); var lastTime = 0; function readTemp() { exec("cat /tmp/maverick.log", function(err, stdout, stderr) { if (err) { flog(err); return; } if(stdout) { flog(stdout); var data = stdout.split(';'); if(lastTime != data[2]) { setState('bbq.sensor_1_ist', data[0]); setState('bbq.sensor_2_ist', data[1]); setState('bbq.lastvalue', data[2]); lastTime = data[2]; } } if (stderr) { flog(stderr); } }); }
-
Am besten für Feature-Requests im Github beim Adapter ein Issue anlegen mit Infos, Beispielen und so
-
Hallo,
Wie hast du denn die Abfrage vom Maverick realisiert? Habe das auch vor und Frage noch wie das nur am besten/einfachsten funktioniert.
-
Für die, die über diesen Beitrag stolpern, weil sie auch das Maverick ET-733 nutzen.
Benötigte Teile:
Maverick ET-733
433Mhz Reciever mit (Externer)Antenne
Raspberry Pi (bei mir reicht der Zero)
Netzteil für den PiEvtl. zusätzlich:
2x MAX7219 Dot Matrix Modul z.B. https://de.aliexpress.com/item/32955063973.htmlDamit das ganze funktioniert, muss auf dem Pi folgendes installiert werden:
sudo apt update sudo apt install pigpio python3-pigpio python3-pip python-pip pip install setproctitle pip install paho-mqtt
In der /etc/rc.local habe ich folgendes ergänzt:
sleep 15 /usr/bin/pigpiod echo '{"temperature_2": 23, "checksum": 65342, "type": "et732", "temperature_1": 22, "unit": "\u00b0C", "time": 1554964966.4205735}' > /tmp/maverickpy.log chmod 777 /tmp/maverickpy.log sleep 5 /home/pi/BBQ-Pi/maverick.py --pin 4 --nosync --json & /home/pi/BBQ-Pi/bbq2.py & #den Display Teil nur dann, wenn ihr ein Matrix Display am Pi betreiben wollt. (# entfernen) #/home/pi/BBQ-Pi/display.py & exit 0
In den Anhang packe ich die Dateien display.py bbq2.py maverick.py
In der bbq2.py natürlich IP Adresse des MQTT Servers, Benutzername und Passwort anpassen.
Nutzt ihr das Ganze in dicht besiedelten Gegenden, wo evtl. viele Leute das Maverick einsetzen, könnte es Probleme geben.
Ich starte die Lib mit "no-sync", d.h. der Empfänger liest die Werte von jedem Maverick in Reichweite.Bei mir läuft der Pi-Zero aber im Dauerbetrieb, da ich auf dem Matrix Display die Uhrzeit und Außentemperatur anzeigen lasse und ich keine Lust habe, vor jedem Grillen, das Skript bzw. den Pi neu zu starten.
Das Ganze, wie immer, ohne jegliche Garantie.
Gruß,
Mark -
Für die, bei denen IoBroker und der Maverick-Kram auf einem Pi laufen, die können die Zeile
/home/pi/BBQ-Pi/bbq2.py &
auskommentieren
#/home/pi/BBQ-Pi/bbq2.py &
und die Daten, die von der maverick.py empfangen werden, mit Hilfe des Javascript Adapters auswerten.
Hier ein Denkanstoß, wie das klappen könnte:
Es muss im JavaScript Adapter "Erlaube das Kommando exec" aktiviert werden.
Dann ein Scrip erstellen (Javascript! Kein Blockly oder TypeScript) und einen Namen vergeben.var interval = 2; //Interval der Logabfrage in Minuten var timeout = 5; //Timeout in Minuten, ab wann wir die Werte als ungültig erklären wollen (Muss ausprobiert werden) var validStateName = "BBQ-Pi.SensorValid"; var sensor1StateName = "BBQ-Pi.Sensor_1"; var sensor2StateName = "BBQ-Pi.Sensor_2"; //hier werden Datenpunkte angelegt createState(sensor1StateName, 0, { name: 'Fühler 1', desc: 'Temperatur von Fühler 1', type: 'number', read: true, write: true, }); createState(sensor2StateName, 0, { name: 'Fühler 2', desc: 'Temperatur von Fühler 2', type: 'number', read: true, write: true, }); createState(validStateName, false, { name: 'Werte valide', desc: 'Sind die Werte noch aktuell?', type: 'boolean', read: true, write: true, }); //Lese die logdatei alle 'interval' Minuten schedule("*/" + interval + " * * * *", function () { //lesen der logdatei exec('cat /tmp/maverickpy.log', function (error, stdout, stderr) { //console.log('stdout: ' + stdout); //konvertieren zu JSON var result = JSON.parse(stdout); //Sensor 1 abfragen var t1 = result["temperature_1"]; //Sensor 2 abfragen var t2 = result["temperature_2"]; //Letzten Zeitstempel abfragen und in JavaScript Zeitstempel umwandeln var date_t = new Date(result["time"] * 1000); var date_now = Date.now(); //Differenz berechnen var age_t = new Date(date_now - (result["time"] * 1000)); //Schreibe Sensor Werte in die Datenpunkte setState(sensor1StateName, t1); setState(sensor2StateName, t2); if (age_t.getMinutes() > timeout) { //Werte sind zu alt setState(validStateName, false); } else { //Werte sind okay setState(validStateName, true); } }); });
Wie bereits erwähnt, dies ist nur eine Idee!
Das Script maverick.py wertet die Temperaturen manchmal nicht richtig aus, daher kann ich nicht sagen, wie mein oben genanntes Bespiel funktioniert oder ob es dann evtl. Fehler hagelt.
Viel Spaß!!!