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); } }); } -
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-mqttIn 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 0In 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ß!!!
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden