Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Shelly schaltet nicht zuverlässig über MQTT

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.7k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    692

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    1.2k

Shelly schaltet nicht zuverlässig über MQTT

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
6 Beiträge 2 Kommentatoren 489 Aufrufe 2 Beobachtet
  • Ä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.
  • P Offline
    P Offline
    PewX
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    • mickymM Online
      mickymM Online
      mickym
      Most Active
      schrieb am zuletzt editiert von
      #2

      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.

      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

      P 1 Antwort Letzte Antwort
      0
      • mickymM mickym

        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 Offline
        P Offline
        PewX
        schrieb am zuletzt editiert von PewX
        #3

        @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.

        mickymM P 2 Antworten Letzte Antwort
        0
        • P 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.

          mickymM Online
          mickymM Online
          mickym
          Most Active
          schrieb am zuletzt editiert von mickym
          #4

          @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.

          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

          P 1 Antwort Letzte Antwort
          0
          • mickymM 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 Offline
            P Offline
            PewX
            schrieb am zuletzt editiert von
            #5

            @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 Antwort Letzte Antwort
            0
            • P 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.

              P Offline
              P Offline
              PewX
              schrieb am zuletzt editiert von
              #6

              @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 Antwort Letzte Antwort
              0

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

              441

              Online

              32.9k

              Benutzer

              83.0k

              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