Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [ERLEDIGT] Wunsch: ioBroker.vis-canvas-gauges erweitern auf dynamische Sektoren

    NEWS

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    [ERLEDIGT] Wunsch: ioBroker.vis-canvas-gauges erweitern auf dynamische Sektoren

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mark77 last edited by

      ~~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);
      
              }
          });
      }
      
      
      1 Reply Last reply Reply Quote 0
      • apollon77
        apollon77 last edited by

        Am besten für Feature-Requests im Github beim Adapter ein Issue anlegen mit Infos, Beispielen und so

        1 Reply Last reply Reply Quote 0
        • X
          xyroryx last edited by

          Hallo,

          Wie hast du denn die Abfrage vom Maverick realisiert? Habe das auch vor und Frage noch wie das nur am besten/einfachsten funktioniert.

          1 Reply Last reply Reply Quote 0
          • M
            mark77 last edited by mark77

            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 Pi

            Evtl. zusätzlich:
            2x MAX7219 Dot Matrix Modul z.B. https://de.aliexpress.com/item/32955063973.html

            Damit 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

            1 Reply Last reply Reply Quote 0
            • M
              mark77 last edited by mark77

              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ß!!!

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate
              FAQ Cloud / IOT
              HowTo: Node.js-Update
              HowTo: Backup/Restore
              Downloads
              BLOG

              940
              Online

              32.1k
              Users

              80.8k
              Topics

              1.3m
              Posts

              3
              5
              718
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo