Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Aqara RTCGQ11LM - no_occupancy_since fehlt über Zigbee2MQTT

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

Aqara RTCGQ11LM - no_occupancy_since fehlt über Zigbee2MQTT

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
zigbee2mqttrtcgq11lmnooccupancysince
5 Beiträge 3 Kommentatoren 527 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • A Offline
    A Offline
    Amylopektin
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    ich bin aktuell von Zigbee-HomeAutomation (iobroker.zigbee Adapter) auf MQTT/Zigbee2MQTT zu wechsel. Ich habe nur leider ein Problem bei dem ich gerade nicht weiter komme.

    Im Zigbee-HomeAutomation hatte ich beim Bewegungsmelder den Wert "no_motion" = Sekunden seit der letzten Bewegungserkennung. Diesen Wert verwende ich in Skripten zum Steuern von Lichtern.

    Im MQTT Explorer konnte ich prüfen, dass die Werte korrekt übermittelt werden. Jedoch scheint das den Zigbee2MQTT Adapter in iobroker nicht zu interessieren.

    Hat jemand von Euch nen Tipp?

    A K 2 Antworten Letzte Antwort
    0
    • A Amylopektin

      Hallo zusammen,

      ich bin aktuell von Zigbee-HomeAutomation (iobroker.zigbee Adapter) auf MQTT/Zigbee2MQTT zu wechsel. Ich habe nur leider ein Problem bei dem ich gerade nicht weiter komme.

      Im Zigbee-HomeAutomation hatte ich beim Bewegungsmelder den Wert "no_motion" = Sekunden seit der letzten Bewegungserkennung. Diesen Wert verwende ich in Skripten zum Steuern von Lichtern.

      Im MQTT Explorer konnte ich prüfen, dass die Werte korrekt übermittelt werden. Jedoch scheint das den Zigbee2MQTT Adapter in iobroker nicht zu interessieren.

      Hat jemand von Euch nen Tipp?

      A Offline
      A Offline
      Amylopektin
      schrieb am zuletzt editiert von
      #2

      @amylopektin
      Laut Github Comments sieht es aktuell "dünn" aus, was eine Anpassung bzgl. "no_occupancy_since" angeht.

      Habe jetzt einen Workaround dafür.
      Solange der State "Occupancy" sich nicht verändert, wird bis zu 1200 Sekunden hochgezählt. Danach erfolgt keine Aktualisierung mehr. Sollte sich der State "Occupancy" während oder nach dem Hochzählen verändern, wird von neuem hochgezählt. Initial wird - wenn Occupancy auf true ist, gezählt. Wenn Occupancy auf false ist, wird der eingestellte Maximalwert an Sekunden in den State geschrieben (Default 1200 Sekunden). Der Rest sollte aus dem Script heraus ersichtlich sein.

      // Bewegungsmelder-Datenpunkte
      const motionSensor1 = "zigbee2mqtt.0.0x00158d0007752803.occupancy";  // Ersetze dies durch den tatsächlichen Pfad zum Bewegungsmelder 1
      const motionSensor2 = "zigbee2mqtt.0.0x00158d000775a2dd.occupancy";  // Ersetze dies durch den tatsächlichen Pfad zum Bewegungsmelder 2
      
      // Ziel-Datenpunkte für die Sekunden seit letzter Bewegung
      const state1 = "0_userdata.0.Custom_Variables.Treppenaufgang.Bewegungsmelder_EG.no_occupancy_since";
      const state2 = "0_userdata.0.Custom_Variables.Treppenaufgang.Bewegungsmelder_OG.no_occupancy_since";
      
      // Maximale Sekundenanzahl (1200 Sekunden = 20 Minuten)
      const maxSeconds = 1200;
      
      // Variable für die Zeitintervalle in Sekunden, nach denen der Zähler erhöht wird
      const interval = 10;  // Setze diesen Wert auf die gewünschte Anzahl an Sekunden
      
      // Timer-Variablen
      let timer1 = null;
      let timer2 = null;
      
      // Funktion zum Starten oder Zurücksetzen des Timers für einen Sensor
      function startOrResetTimer(sensor, state, timer) {
          if (timer) clearInterval(timer);  // Vorherigen Timer stoppen
      
          setState(state, 0);  // Zähler auf 0 setzen
      
          // Neuen Timer starten
          return setInterval(() => {
              let currentValue = getState(state).val;
              if (currentValue < maxSeconds) {
                  setState(state, currentValue + interval);
              } else {
                  clearInterval(timer);  // Timer stoppen, wenn maxSeconds erreicht sind
              }
          }, interval * 1000);  // Intervall in Millisekunden (z.B. alle 10 Sekunden)
      }
      
      // Bewegungsmelder 1 überwachen
      on({id: motionSensor1, change: "ne"}, function (obj) {
          if (obj.state.val && !obj.oldState.val) {  // Wechsel von false auf true
              timer1 = startOrResetTimer(motionSensor1, state1, timer1);
          }
      });
      
      // Bewegungsmelder 2 überwachen
      on({id: motionSensor2, change: "ne"}, function (obj) {
          if (obj.state.val && !obj.oldState.val) {  // Wechsel von false auf true
              timer2 = startOrResetTimer(motionSensor2, state2, timer2);
          }
      });
      
      // Initialisierung: Timer oder Initialwert setzen
      function initializeState(sensor, state) {
          if (getState(sensor).val) {  // Wenn Occupancy auf true steht
              timer1 = startOrResetTimer(sensor, state, timer1);  // Timer starten
          } else {  // Wenn Occupancy auf false steht
              setState(state, maxSeconds);  // Wert auf 1200 Sekunden setzen
          }
      }
      
      // Initialisierung für beide Bewegungsmelder
      initializeState(motionSensor1, state1);
      initializeState(motionSensor2, state2);
      
      
      K 1 Antwort Letzte Antwort
      0
      • A Amylopektin

        Hallo zusammen,

        ich bin aktuell von Zigbee-HomeAutomation (iobroker.zigbee Adapter) auf MQTT/Zigbee2MQTT zu wechsel. Ich habe nur leider ein Problem bei dem ich gerade nicht weiter komme.

        Im Zigbee-HomeAutomation hatte ich beim Bewegungsmelder den Wert "no_motion" = Sekunden seit der letzten Bewegungserkennung. Diesen Wert verwende ich in Skripten zum Steuern von Lichtern.

        Im MQTT Explorer konnte ich prüfen, dass die Werte korrekt übermittelt werden. Jedoch scheint das den Zigbee2MQTT Adapter in iobroker nicht zu interessieren.

        Hat jemand von Euch nen Tipp?

        K Offline
        K Offline
        Kaskadeur111
        schrieb am zuletzt editiert von
        #3

        @amylopektin sagte in Aqara RTCGQ11LM - no_occupancy_since fehlt über Zigbee2MQTT:

        utomation hatte ich beim Bewegungsmelder de

        Verdammt... genau das hab ich auch grad bemerkt... habe jetzt 40 Geräte vom Zigbee Adapter umgestellt auf Zigbee2Mqtt und jetzt kommen 10 Bewegungsmelder... Datenpunkt fehlt mir auch :-(. Habe einige Scripte die die no Occupancy since werte verwenden.

        Ich werde dein Script verwenden, Danke dafür.

        Über Kurz oder Lang wäre das ne ziemlich coole Nummer wenn das im Zigbee2Mqtt Adapter eingearbeitet werden würde... die Konfiguration wann die Werte gesendet werden sollen gibt es in Zigbee2Mqtt ja bereits, nur müsste das als Datenpunkt in iobroker angelegt werden.

        d220e3fa-a84f-4b3e-8ee1-e9be3328679a-image.png

        fa37b1f1-9ea5-4810-8d0a-8481e616e5fa-image.png

        5664ff18-9efd-495b-8738-c449fda99943-image.png

        1 Antwort Letzte Antwort
        0
        • A Amylopektin

          @amylopektin
          Laut Github Comments sieht es aktuell "dünn" aus, was eine Anpassung bzgl. "no_occupancy_since" angeht.

          Habe jetzt einen Workaround dafür.
          Solange der State "Occupancy" sich nicht verändert, wird bis zu 1200 Sekunden hochgezählt. Danach erfolgt keine Aktualisierung mehr. Sollte sich der State "Occupancy" während oder nach dem Hochzählen verändern, wird von neuem hochgezählt. Initial wird - wenn Occupancy auf true ist, gezählt. Wenn Occupancy auf false ist, wird der eingestellte Maximalwert an Sekunden in den State geschrieben (Default 1200 Sekunden). Der Rest sollte aus dem Script heraus ersichtlich sein.

          // Bewegungsmelder-Datenpunkte
          const motionSensor1 = "zigbee2mqtt.0.0x00158d0007752803.occupancy";  // Ersetze dies durch den tatsächlichen Pfad zum Bewegungsmelder 1
          const motionSensor2 = "zigbee2mqtt.0.0x00158d000775a2dd.occupancy";  // Ersetze dies durch den tatsächlichen Pfad zum Bewegungsmelder 2
          
          // Ziel-Datenpunkte für die Sekunden seit letzter Bewegung
          const state1 = "0_userdata.0.Custom_Variables.Treppenaufgang.Bewegungsmelder_EG.no_occupancy_since";
          const state2 = "0_userdata.0.Custom_Variables.Treppenaufgang.Bewegungsmelder_OG.no_occupancy_since";
          
          // Maximale Sekundenanzahl (1200 Sekunden = 20 Minuten)
          const maxSeconds = 1200;
          
          // Variable für die Zeitintervalle in Sekunden, nach denen der Zähler erhöht wird
          const interval = 10;  // Setze diesen Wert auf die gewünschte Anzahl an Sekunden
          
          // Timer-Variablen
          let timer1 = null;
          let timer2 = null;
          
          // Funktion zum Starten oder Zurücksetzen des Timers für einen Sensor
          function startOrResetTimer(sensor, state, timer) {
              if (timer) clearInterval(timer);  // Vorherigen Timer stoppen
          
              setState(state, 0);  // Zähler auf 0 setzen
          
              // Neuen Timer starten
              return setInterval(() => {
                  let currentValue = getState(state).val;
                  if (currentValue < maxSeconds) {
                      setState(state, currentValue + interval);
                  } else {
                      clearInterval(timer);  // Timer stoppen, wenn maxSeconds erreicht sind
                  }
              }, interval * 1000);  // Intervall in Millisekunden (z.B. alle 10 Sekunden)
          }
          
          // Bewegungsmelder 1 überwachen
          on({id: motionSensor1, change: "ne"}, function (obj) {
              if (obj.state.val && !obj.oldState.val) {  // Wechsel von false auf true
                  timer1 = startOrResetTimer(motionSensor1, state1, timer1);
              }
          });
          
          // Bewegungsmelder 2 überwachen
          on({id: motionSensor2, change: "ne"}, function (obj) {
              if (obj.state.val && !obj.oldState.val) {  // Wechsel von false auf true
                  timer2 = startOrResetTimer(motionSensor2, state2, timer2);
              }
          });
          
          // Initialisierung: Timer oder Initialwert setzen
          function initializeState(sensor, state) {
              if (getState(sensor).val) {  // Wenn Occupancy auf true steht
                  timer1 = startOrResetTimer(sensor, state, timer1);  // Timer starten
              } else {  // Wenn Occupancy auf false steht
                  setState(state, maxSeconds);  // Wert auf 1200 Sekunden setzen
              }
          }
          
          // Initialisierung für beide Bewegungsmelder
          initializeState(motionSensor1, state1);
          initializeState(motionSensor2, state2);
          
          
          K Offline
          K Offline
          Kaskadeur111
          schrieb am zuletzt editiert von
          #4

          @amylopektin

          ich habe hier ein besseres Script (habe ich mir damals für meine Aquara P1 programmiert und gerade noch angepasst:)

          Es durchsucht alle Geräte im "Zigbee2Mqtt.0" welche einen Datenpunkt "occupancy" haben (sollten also nur Bewegungsmelder sein).

          Es legt den Datenpunkt "no_motion" als Zahlenwert an und aktualisiert ihn alle 10 Sekunden wenn occupancy auf false steht (zählt auf unbegrenzte Zeit in 10 Sekunden Schritten nach oben) oder setzt no_motion auf "0" wenn occupancy auf true geht.

          Mit diesem Script brauchst du also nicht alle Bewegungsmelder im Script erfassen.

          Einfach ein Javascript anlegen Code reinkopieren, starten und freuen ;-)

          /////////////////////////////////////////////////////////
          // Bei Scriptstart Subscription-Objekte festlegen //////
          /////////////////////////////////////////////////////////
          var object_occupancy  = $('channel[state.id=zigbee2mqtt.0.*.occupancy]'); // Alle Sensoren mit occupancy
          
          /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
          
          // Funktion, die prüft, ob der no_motion-Datenpunkt existiert, und ihn bei Bedarf erstellt
          function checkAndCreateNoMotion(id) {
              var parentDeviceId = id.split(".").slice(0,-1).join("."); // Geräte-ID ohne .occupancy
              var noMotionId = parentDeviceId + '.no_motion'; // no_motion-Datenpunkt
          
              // Prüfen, ob der no_motion-Datenpunkt existiert
              if (!existsState(noMotionId)) {
                  setObject(noMotionId, {
                      type: 'state',
                      common: {
                          name: 'No Motion Duration',
                          type: 'number',
                          role: 'value',
                          unit: 's',
                          def: 0,
                          read: true,
                          write: true
                      },
                      native: {}
                  });
              }
          }
          
          // Hauptfunktion, die die Sensoren durchläuft und den no_motion-Wert setzt
          function Schleife() {
              object_occupancy.each(function (id, i) {
                  checkAndCreateNoMotion(id); // Prüfen und ggf. Anlegen des no_motion-Datenpunkts
                  
                  var occupancy = getState(id).val; // occupancy-Wert ermitteln (true/false)
                  var occupancy_changezeitpunkt = getState(id).lc; // Zeitstempel letzte Änderung
                  var aktuelles_Datum = new Date().getTime();
          
                  var parentDeviceId = id.split(".").slice(0,-1).join(".");
                  var noMotionId = parentDeviceId + '.no_motion';
          
                  if (occupancy === false) { // wenn occupancy auf false steht, ermitteln seit wann
                      var differenz = Math.round((aktuelles_Datum - occupancy_changezeitpunkt) / 1000); // Differenz in Sekunden
                      setState(noMotionId, differenz, true);
                  } else if (occupancy === true) { // wenn occupancy auf true -> last Motion auf 0 setzen
                      setState(noMotionId, 0, true);
                  }
              });
          }
          
          ///////////////////////////////////////////////////////////
          // Trigger ///////////////////////////////////////////////
          ///////////////////////////////////////////////////////////
          
          object_occupancy.on(function() { // bei Zustandänderung occupancy (true/false)
              Schleife();
          });
          
          schedule("*/10 * * * * *", function () { // jede 10 Sekunden
              Schleife();
          });
          
          
          1 Antwort Letzte Antwort
          0
          • arteckA Offline
            arteckA Offline
            arteck
            Developer Most Active
            schrieb am zuletzt editiert von arteck
            #5

            @amylopektin sagte in Aqara RTCGQ11LM - no_occupancy_since fehlt über Zigbee2MQTT:

            Laut Github Comments sieht es aktuell "dünn" aus, was eine Anpassung bzgl. "no_occupancy_since" angeht.

            aha... und das resultiert woraus ??? ich seh auf GIT kein issue dafür
            das Gerät kann
            20e27500-e609-4227-927a-7974602a5247-grafik.png

            und das wird bestimmt auch so angezeigt...

            das von dir erwähnte no_motion ist eine besonderheit von zigbee2mqtt... das wird nicht DIREKT vom Gerät geliefert...

            ausserdem was ist das da im object

            78e88d4e-36c1-4a03-8b44-dd387db41a66-grafik.png

            ich würde mal behaupten dass soll so nicht..

            zigbee hab ich, zwave auch, nuc's genauso und HA auch

            1 Antwort Letzte Antwort
            0
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

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

            853

            Online

            32.4k

            Benutzer

            81.6k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2025
            logo
            • Anmelden

            • Du hast noch kein Konto? Registrieren

            • Anmelden oder registrieren, um zu suchen
            • Erster Beitrag
              Letzter Beitrag
            0
            • Home
            • Aktuell
            • Tags
            • Ungelesen 0
            • Kategorien
            • Unreplied
            • Beliebt
            • GitHub
            • Docu
            • Hilfe