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. Überprüfen, ob Sonoff Schalter wirklich geschaltet hat

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    406

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.4k

Überprüfen, ob Sonoff Schalter wirklich geschaltet hat

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
8 Beiträge 4 Kommentatoren 544 Aufrufe
  • Ä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.
  • M Offline
    M Offline
    Marty56
    schrieb am zuletzt editiert von
    #1

    Ich möchte eine Errorhandling Routine schreiben, die mir anzeigt, ob der Schaltbefehl an ein Sonoff Schalter vom Schalter mit ack = true quittiert wurde.

    Ich weiß nicht, wie auf das ack flag zugreifen kann.

    Für ein Beispielscript wäre ich dankbar.

    HW:NUC (16 GB Ram)
    OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

    1 Antwort Letzte Antwort
    0
    • R Offline
      R Offline
      RappiRN
      Most Active
      schrieb am zuletzt editiert von
      #2

      Ich habe grad keinen Sonoff im System, hatte allerdings mal einen getestet. Da wurde doch, wenn ich mich recht erinnere eine Rückmeldung gegeben, ob das Relais geschaltet hat. Reicht das nicht?

      Ich hatte mit dem Sonoff-Adapter getestet.

      Enrico

      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        Marty56
        schrieb am zuletzt editiert von
        #3

        Ich habe jetzt so etwas gebastelt. Erscheint mir nicht allzu elegant.

        Ich vermute, ich sehe den Wald vor lauter Bäumen nicht.

        var schalter     = 'sonoff.0.WZ_S4.POWER';
        setState(schalter, false); // zu Testzwecken
        
        on({id: schalter, change: "ne"}, function(obj) {
            setTimeout( function() {
                if (getState('' + obj.id).ack === true) log("Empfang von " + obj.common.name + " ok");
                else log("Empfang gestört von " + obj.common.name);
                }, 500);
        });
        

        HW:NUC (16 GB Ram)
        OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          Ich würde die Überprüfung auf ack = true etwas anders machen.

          var schalter     = 'sonoff.0.WZ_S4.POWER';
          var timer = null;
          
          setState(schalter, false); // zu Testzwecken
          timer = setTimeout(function() {
             log("Empfang gestört von " + getObject(schalter).common.name);
          }, 500);
          
          on({id: schalter, ack: true}, function() {
             clearTimeout(timer);
          });
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            Marty56
            schrieb am zuletzt editiert von
            #5

            @paul: Danke für Deinen Vorschlag.

            Ich habe versucht einen globalen Timer zu vermeiden, weil ich möchte, dass die Funktion leicht für viele Schalter "skaliert".

            (noch nicht getestet).

            on({id: [schalter,schalter2,schalter3, ....], change: "ne"}, function(obj) {
                setTimeout( function() {
                    if (getState('' + obj.id).ack === true) log("Empfang von " + obj.common.name + " ok");
                    else log("Empfang gestört von " + obj.common.name);
                    }, 500);
            });
            

            HW:NUC (16 GB Ram)
            OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

            1 Antwort Letzte Antwort
            0
            • M Offline
              M Offline
              Marty56
              schrieb am zuletzt editiert von
              #6

              Meine finale Version. Feedback erwünscht.

              `// Sonoff Schalter Übertragsfehler ermitteln
              
              path_javascript         = 'javascript.0.';
              path_sonos              = 'sonoff.0.';
              initialize();
              
              function initialize() {
                  var sonoff = $(path_sonos + '*.POWER');
                  for (i = 0;i < sonoff.length;i++) {
                      initializeSubscribes(sonoff[i]);
                  }
              }
              
              function initializeSubscribes(sonoff) {
              // Ein "unreach" State für jeden Sonoff Schalter generieren
                  createState(path_javascript + sonoff.split("POWER") [0] + 'unreach',false);
              
              //  Prüfung ob Power Befehl vom Sonoff Schalter quitiert wurde   
                  on({id: sonoff, change: "any"}, function(obj) {
                      if (getState(obj.id).ack === false) {
                          setTimeout( function() {
                              if (getState(obj.id).ack === false) {
                                  setState(obj.id.split("POWER") [0] + 'unreach',true);
                              } else 
                                  setState(obj.id.split("POWER") [0] + 'unreach',false);
                          }, 500);
                      }
                  });
              
              // Timeout falls Betriebszeit nicht innerhalb von 30 Min upgedated wird 
                  on({id: sonoff.split("POWER") [0]+ 'Time', change: "any"}, function(obj) {
                      var help = obj.id.split("Time") [0] + 'unreach';
                      setStateDelayed(help,false);
                      clearStateDelayed(help);
                      setStateDelayed(help,true,false,30*60000);
                  });
              
              // Error Handling
                  on({id: path_javascript + sonoff.split("POWER") [0] + 'unreach', change: "ne"}, function(obj) {
                      var name = obj.id.replace(path_javascript + path_sonos , '').replace('.unreach' , '');
                      if (obj.state.val === true)
                          log( name +  " ist NICHT erreichbar");
                      else
                          log( name +  " ist wieder erreichbar");
                  });
              }` [/i]
              

              HW:NUC (16 GB Ram)
              OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

              1 Antwort Letzte Antwort
              0
              • M Offline
                M Offline
                Marty56
                schrieb am zuletzt editiert von
                #7

                Update und Vereinfachung.

                Diese Version setzt den Patch von dirkhe von issue

                https://github.com/ioBroker/ioBroker.sonoff/issues/58

                voraus

                `/*
                Sonoff Schalter Übertragsfehler ermitteln
                */
                
                var path_sonos  = 'sonoff.0.';
                initialize();
                // für alle sonoff Gerät ack Überwachung instanzieren
                function initialize() {
                    var sonoff = $(path_sonos + '*.POWER');
                    for (i = 0;i < sonoff.length;i++) {
                        initializeSubscribes(sonoff[i]);
                    }
                }
                
                function initializeSubscribes(sonoff) {
                
                // 'alive' setzen in Abhängigkeit von ack beim Ein/Ausschalten der Sonoff Schalter
                    on({id: sonoff, change: "any"}, function(obj) {
                        if (getState(obj.id).ack === false) {
                            setTimeout( function() {
                                if (getState(obj.id).ack === false) {
                                    setState(obj.id.split("POWER") [0] + 'alive',false);
                                } else 
                                    setState(obj.id.split("POWER") [0] + 'alive',true);
                            }, 500);
                        }
                    });
                
                // Fehlermeldung aufgrund von geändertem 'alive' status
                    on({id: sonoff.split("POWER") [0] + 'alive', change: "ne"}, function(obj) {
                        var name = obj.id.replace(path_sonos , '').replace('.alive' , '');
                        if (obj.state.val === true)
                            log( name +  " ist wieder erreichbar.");
                        else
                            log( name +  " ist NICHT mehr erreichbar.");
                    });
                }`[/i]
                

                HW:NUC (16 GB Ram)
                OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

                1 Antwort Letzte Antwort
                0
                • B Offline
                  B Offline
                  bekir munir
                  schrieb am zuletzt editiert von
                  #8

                  Hello, I have the same problem. where do I add the code that you have given?

                  can you help me. thank

                  –--

                  Hallo, ich habe das gleiche Problem. Wo füge ich den von Ihnen angegebenen Code hinzu?

                  kannst du helfen

                  danke,

                  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

                  345

                  Online

                  32.7k

                  Benutzer

                  82.5k

                  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