NEWS
[gelöst] Zeitlich verzögertes Einschalten eines "Slave"
-
Hallo,
bräuchte einen Tipp von euch:
Ich möchte gerne mit einem Schalter mein Büro stromlos machen. Ist ein relativ leichtes Unterfangen (dachte ich!) und baute einen Sonoff (Tasmota) R2 ein um ihn über den iobroker bzw. natürlich der VIS ein und aus zu schalten.
Funktioniert prinzipiell - nur ab und zu fällt mir die Sicherung, weil anscheinend so viel draufhängt, dass der Startstrom oder die Startleistung zu viel wird.Daher hatte ich folgende Idee:
Alle Verbraucher aufteilen auf 2 Verteiler wobei der Sonoff Power R2 den ersten Verteiler einschaltet und dann eine Sonoff WLAN Steckdose am 1. Verteiler den 2. Verteiler zeitlich verzögert einschaltet.
Script dazu weiter unten.
Nur : Wenn der erste Verteiler stromlos ist, ist auch die WLAN Steckdose stromlos. Daher muss ich beim einschalten warten bis diese im Netz ist um einen State zu setzen.
Habt ihr vielleicht hier eine bessere, oder einfachere Idee?Script:
Ich habe einen State den ich true oder false setze. Aufgrund der Änderung dieses States wird der 1 Verteiler eingeschalten und 60 sek. später der 2. Verteiler über die WLAN Steckdose. Ich gehe von der Annahme aus, dass eine WLAN Steckdose innerhalb 60 sek. am Netz ist.
Beim Ausschalten gehe ich den anderen Weg, damit die WLAN Steckdose auch beim starten auch wirklich den State false hat - also nicht eingeschaltet ist./* ----------------------------------- zeitlich verzögertes einschalten des Büros Veröffentlichungsdatum: 26.10.2021 Änderungen: ------------------------------------*/ //Setzen des State im VIS, falls noch nicht vorhanden var Beschreibung = new Array(); var Name = new Array(); var Art = new Array(); var Def = new Array(); Beschreibung[0] = "0_userdata.0.VIS.Buero1OG.Power"; Name[0] = "Buero 1OG Power"; Art[0] = "boolean"; Def[0] = "false"; for (var x = 0; x < Beschreibung.length; x++) { if (!existsState(Beschreibung[x])) { createState(Beschreibung[x], { type: Art[x], name: Name[x], read: true, write: true, def: Def[x] }); } } var objBuero_Master = 'sonoff.0.SonOffBuero1OG.POWER'; var objBuero_Slave = 'sonoff.0.SonOffS20_2.POWER'; on({id: Beschreibung[0], val: true}, function(dp) { setState(objBuero_Master, true); setTimeout(function() { setState(objBuero_Slave, true); }, 60000); }); on({id: Beschreibung[0], val: false}, function(dp) { setState(objBuero_Slave, false); setTimeout(function() { setState(objBuero_Master, false); }, 5000); });
Danke für eure Hilfe.
Klaus -
@klaus88 sagte in Zeitlich verzögertes Einschalten einer "Slave" - Steckdose:
Daher hatte ich folgende Idee:
Alle Verbraucher aufteilen auf 2 Verteiler wobei der Sonoff Power R2 den ersten Verteiler einschaltet und dann eine Sonoff WLAN Steckdose am 1. Verteiler den 2. Verteiler zeitlich verzögert einschaltet.
Script dazu weiter unten.
Nur : Wenn der erste Verteiler stromlos ist, ist auch die WLAN Steckdose stromlos. Daher muss ich beim einschalten warten bis diese im Netz ist um einen State zu setzen.
Habt ihr vielleicht hier eine bessere, oder einfachere Idee?
Script:
Ich habe einen State den ich true oder false setze. Aufgrund der Änderung dieses States wird der 1 Verteiler eingeschalten und 60 sek. später der 2. Verteiler über die WLAN Steckdose. Ich gehe von der Annahme aus, dass eine WLAN Steckdose innerhalb 60 sek. am Netz ist.
Beim Ausschalten gehe ich den anderen Weg, damit die WLAN Steckdose auch beim starten auch wirklich den State false hat - also nicht eingeschaltet ist.Bitte bedenken:
- Wie ist das Einschaltverhalten der WLan Steckdose. Behält sie den letzten Status bei oder ist sie beim einschalten immer "an" ?
- im Adapter für die WLan Steckdose sollte es einen State für die Verbindung geben. Ich würde beim einschalten auf diesen State triggern um sicher zu gehen das der Schaltbefehl durch geht. Das sollte besser sein als eine Zeitsteuerung.
Ich würde im Zweifelsfall nicht das ganze Büro stromlos schalten sondern (wenn elektrisch möglich) über mehrere Schaltsteckdosen arbeiten. Der Strombedarf der Schaltsteckdosen ist gering, so das das energetisch unkritisch sein sollte.
A.
-
@asgothian : Erstmal ganz herzlichen Dank für deine Rückmeldung! Kurz zu deinen Themen : WLAN Steckdose ist genau so - also sie "merkt" sich den letzten Status.
Frage zu deiner 2. Bemerkung: Das ist mir auch eingefallen, aber ich bin dann bei folgenden Problem hängen geblieben, da ich kein Profi in Java bin:
Geht es, dass ich verschachtelt 2 onChange funktionen betreibe bzw. abfrage?
Also erste wäre wie im Script oben : on({id: Beschreibung[0], val: true}, function(dp) {
Zweite, wäre dann darunter (also in der ersten onchange Funktion) wenn die WLAN Steckdose alive ist
Weißt du das - geht das?Danke
Klaus -
@klaus88 sagte: Geht es, dass ich verschachtelt 2 onChange funktionen betreibe bzw. abfrage?
Nicht verschachtelt, sondern untereinander. Und nur einen Trigger pro Datenpunkt verwenden, da sonst Ressourcenverschwendung.
on(Beschreibung[0], function(dp) { // triggert bei Wertänderung if(dp.state.val) setState(objBuero_Master, true); else { setState(objBuero_Slave, false); setTimeout(function() { setState(objBuero_Master, false); }, 1000); } }); on({id: idConnected, change: 'gt'}, function() { if(getState(objBuero_Master).val) setState(objBuero_Slave, true); });
-
@paul53 : OK Alles klar - Danke!! - werde ich heute abend mal versuchen!
Danke vielmals für die Hilfe!lg
Klaus -
@paul53 :
Hab's natürlich nicht bis am Abend ausgehalten
FUNKTIONIERT PERFEKT!! DANKE vielmals für eure Hilfe.
Falls jemand ein ähnliches Problem hat hier das endgültige Script:
/* ----------------------------------- zeitlich verzögertes einschalten des Büros Veröffentlichungsdatum: 26.10.2021 Änderungen: ------------------------------------*/ /*Setzen des State im VIS, falls noch nicht vorhanden*/ var Beschreibung = new Array(); var Name = new Array(); var Art = new Array(); var Def = new Array(); Beschreibung[0] = "0_userdata.0.VIS.Buero1OG.Power"; Name[0] = "Buero 1OG Power"; Art[0] = "boolean"; Def[0] = "false"; for (var x = 0; x < Beschreibung.length; x++) { if (!existsState(Beschreibung[x])) { createState(Beschreibung[x], { type: Art[x], name: Name[x], read: true, write: true, def: Def[x] }); } } var objBuero_Master = 'sonoff.0.SonOffBuero1OG.POWER'; var objBuero_Slave = 'sonoff.0.SonOffS20_2.POWER'; var objBuero_Slaveconnected = 'sonoff.0.SonOffS20_2.alive'; on({id:Beschreibung[0], change: 'any'}, function(dp) { if(dp.state.val) setState(objBuero_Master, true); else { setState(objBuero_Slave, false); setTimeout(function() { setState(objBuero_Master, false); }, 10000); } }); /* Change bei Änderung die größer ist als der alte Wert --> also bei true */ on({id: objBuero_Slaveconnected, change: 'gt'}, function() { if(getState(objBuero_Master).val) setState(objBuero_Slave, true); });
lg
Klaus