Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Shelly schaltet nicht zuverlässig über MQTT

    NEWS

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

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

    • Wir empfehlen: Node.js 22.x

    Shelly schaltet nicht zuverlässig über MQTT

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

      Guten Abend,
      ich habe schon seit mehreren Monaten dieses Problem und bekomme es nicht in den Griff. Hoffe hier kann mir wer helfen.

      Ich betreibe im Haus einige Shelly Plug S, die ich per JavaScript in verschiedenen Intervallen Schalte. Leider passiert dies nicht zuverlässig (entsprechende Teil vom Script ist unten).
      Als Beispiel für ein Shelly, dieser soll 30 Minuten eingeschaltet und 60 Minuten ausgeschaltet sein (Relais versteht sich). Ich überprüfe jede Minute, wann das Relais zuletzt den Zustand geändert hat, wenn größer, dann schalte. Das funktioniert auch, aber irgendwann nicht mehr. Im Log steht dann, dass der Shellie an ist, und die letzte State Änderung vor 70 Minuten war (manchmal auch > 1000). Ich erhalte vom Shelly jedoch weiterhin Daten über die aktuelle Leistung. Auch das eigene Web Panel vom Shelly ist erreichbar. Also sie sind im Netz. Eingebunden sind sie über den MQTT Adapter. Testweise habe ich auf einen Shelly Tasmota geflasht, leider mit dem gleichen Problem. Es ist auch nicht ein spezifischer Shelly, sondern kann bei allen passieren zu unterschiedlichen Zeitpunkten. Testweise hab ich dann probiert, per eigenen Shelly/Tasmota Web Oberfläche zu schalten, dass geht dann. Auch über die http API den Toggle Befehl senden geht auch. Der Shelly schaltet dann auch wieder einige Zeit "zuverlässig". Wenn ich in ioBroker in die Objekten gehe, und dort den Wert setze, scheint das auch manchmal zu funktionieren und manchmal nicht.

      schedule("0 */1 * * * *", 
          function() {
              for (const key in shellies) {
                  let timeCtlEnabled = getState(`${path_main}.${key}.timeCtlEnabled`).val;
                  let online = getState(`${path_main}.${key}.online`).val;
                  
                  if (timeCtlEnabled && online) {
                      let onTime = getState(`${path_main}.${key}.onTime`).val;
                      let offTime = getState(`${path_main}.${key}.offTime`).val;
                                      
                      let relayState = getState(shellies[key].relayPath).val;
                      let lc = getState(shellies[key].relayPath).lc;
                      let lastStateChange = Math.round((Date.now() - lc)/1000/60);
      
                      log(`[${key}] Relay is ${relayState} and last state change was ${lastStateChange} min ago..`)
                      setState(`${path_main}.${key}.lastChange`, lastStateChange);
      
                      if (relayState == "on" && (lastStateChange > onTime)) {
                          setState(shellies[key].relayPath + ".command", "off");
                      } else if (relayState == "off" && (lastStateChange > offTime)) {
                          setState(shellies[key].relayPath + ".command", "on");
                      }
                  }
              }
          }
      );
      
      
      1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active last edited by

        So was ist auch ineffizient. Der Shelly triggert selbst, da muss man nicht alle Minuten überprüfen. Das ist ineffizient und nutzt nur unnötig Resourcen.

        P 1 Reply Last reply Reply Quote 0
        • P
          PewX @mickym last edited by PewX

          @mickym Könntest du das etwas genauer erläutern? Wie soll sich der Shelly denn selbst triggern?
          Der Timer ist auf eine Minute, weil ich über VIS auch durchaus die Schaltzeit auf eine Minute stellen kann und eine Totzeit vermeiden möchte.

          Nebenbei teste ich gerade einen Shelly (mit Tasmota) und dem Sonoff Adapter anstatt den normalen MQTT Adapter. Mal sehen was ich heute Abend so im Log finde.

          mickym P 2 Replies Last reply Reply Quote 0
          • mickym
            mickym Most Active @PewX last edited by mickym

            @pewx nun ich nutze zwar kein JavaScript Direkt, aber ianstelle m Minutenrhythmus den Status abzufragen, könnte man bei jedem Schaltvorgang einen Timer mit schicken, der selbstständig nach der abgelaufenen Zeitperiode triggert und schaltet. Du musst die Timer halt nur programmatisch orchestrieren.So wie das bei Dir aussieht toggelt als schaltet man halt grundsätzlich das Gegenteil.

            Wenn du als einen Schelly 30 min einschalten und 60 min ausgeschaltet haben möchtest, schaltest du einen shelly ein und startest eine.n 30 Minuten Timer. Nach 30 Minuten meldet sich dieser selbst wieder, triggert also und du schaltest den shelly aus und startest nun den trigger mit 60 Minuten usw.

            Sprich die Zeiten in den gerade keine Aktion fällig ist, muss dein Skript nicht Laufen.

            Ggf. Kann Dir jemand der gerne codiert hier unter die Arme greifen, ich bin seit dem ich NodeRed benutze inzwischen zu faul.

            Solche Taktgeber in dem Zustände abgefragt werden, weil sie nicht selbst auf bestimmte Ereignisse hören. Wenn du lieber mit JS codieren willst, dann schau dir mal die Timeout Funktion an:

            https://www.w3schools.com/js/js_timing.asp

            Aber auch wenn du es so belassen willst, würde ich wahrscheinlich eher das setinterval nehmen, anstelle den scheduler zu bemühen.

            Ansonsten wenn du durch irgendwas anderes den shelly schaltest, dann triggert der Datenpunkt doch selbst, dass das Relay geschaltet hat, das muss man nicht überprüfen das war eigentlich der Anlass meines Posts.

            Vielleicht hab ich’s aber auch nicht verstanden. Insofern vergiss vielleicht einfach was ich geschrieben habe,

            Ich glaube auch nicht dass ich verstehe was du mit Shelly an aus meinst. Im relay 0 Datenpunkt siehst du doch immer den aktuellen Zustand des Shellie’s. Im Prinzip sind sie ja immer an, sonst könnte man sie ja nicht steuern. Aber wie gesagt, ich verstehe es wahrscheinlich einfach nicht. Ggf. Könnte man auch mit den Auto on und Off Timer arbeiten, wenn die Intervalle sich nicht dauernd ändern. Sprich bei 30 Minuten an und 60 Minuten aus, schaltest du den shelly einfach alle 90 min ein und er schaltet sich über die Auto Off Funktion selbst nach 30 min aus.

            P 1 Reply Last reply Reply Quote 0
            • P
              PewX @mickym last edited by

              @mickym Danke für die Umfangreiche Antwort. Jetzt verstehe ich, was du mit dem selbst triggern meinst. Es ist richtig, dass der Shelly einfach nur sein Schaltzustand "toggeln" soll. Das ist auch das was ich mit Shelly an und aus mein. Relais entsprechend angezogen oder eben nicht.

              Ja ich hätte Timer nutzen können, was Resourcenschonender wäre. Ist ein richtiger Einwand, wäre aber bisschen mehr Arbeit gewesen, die ich mir damals Erparen wollte. Auf setInterval könnte man zumindest einfach ändern. Der Unterschied zwischen schedule und setInterval ist mir zwar gerade noch nicht so ganz klar, ich werde mich aber mal schlau machen.

              Aber egal ob ich es jetzt über den Timer, setInterval oder schedule mache, das Hauptproblem ist ja, dass obwohl ich den Datenpunkt ändere, der Shelly das Relais manchmal nicht schaltet. Und da bräuchte ich irgend ein Kluger Hinweis mit dem ich rausfinden kann, woran das liegt. Vielleicht durch irgend welche Debug Möglichkeiten auf broker oder shelly Seite die ich aktuell noch nicht kenne.

              Da würde mir dann auch die Auto-Off Funktion wohl nicht weiterhelfen. Einmal muss ich ja triggern und wenn der nicht ankommt bringt mich das nicht weiter. Nebenbei ändern sich die Intervalle auch recht häufig. Was wohl auch ein Grund war, weshalb ich die Timer nicht genutzt hab.

              1 Reply Last reply Reply Quote 0
              • P
                PewX @PewX last edited by

                @pewx said in Shelly schaltet nicht zuverlässig über MQTT:

                Nebenbei teste ich gerade einen Shelly (mit Tasmota) und dem Sonoff Adapter anstatt den normalen MQTT Adapter. Mal sehen was ich heute Abend so im Log finde.

                Bisher habe ich damit keinerlei Probleme. Hab nun gestern Abend alle Shellies mit Tasmota geflasht und das Script entsprechend angepasst. Läuft nun einwandfrei.

                Jemand eine Idee, wieso es mit dem Sonoff Adapter funktioniert?

                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

                871
                Online

                32.0k
                Users

                80.6k
                Topics

                1.3m
                Posts

                2
                6
                427
                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