NEWS
Überprüfen, ob Sonoff Schalter wirklich geschaltet hat
-
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.
-
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
-
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); }); -
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); }); -
@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); }); -
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] -
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] -
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,