NEWS
[Problem] Ansteuerung aller Dimmer im Haus
-
Hallo zusammen,
ich versuche alle Dimmer im Haus auszuschalten. Wenn ich das mit einem konkreten Befehl mache, funktioniert das:
setState("hm-rpc.1.IEQ0208606.3.LEVEL"/*WZ Licht hohe Decke.LEVEL*/,0);
Wenn ich das aber wie folgt mache geht es nicht:
cacheSelectorState = $('channel[state.id=.LEVEL](functions=Licht)'); cacheSelectorState.each(function (id, i) { setState(id,0); });
Komisch finde ich, dass der Wert im Reiter "Objekte" bei dem Dimmer im Level in rot eingetragen ist.
Habt ihr einen Tipp für mich?
Der Flossdorfer
-
… noch eine neue Erkenntnis:
im LOG steht jetzt:
hm-rpc.1 2017-05-03 19:28:54.131 error Error: You are sending too fast hm-rpc.1 2017-05-03 19:28:54.131 error binrpc -> setValue ["3","LEVEL",0] FLOAT
-
Ich machs so: Nachts Lichter ausschalten und dabei 3x blinken.
Klappt bei mir einwandfrei.
!
// Licht/Dimmer nachts ausschalten und dabei 3x blinken ! function weiter() { ! var cacheSelectorState = $('channel[state.id=*.STATE](functions="Licht")'); var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Licht")'); ! cacheSelectorLevel.each(function (id, i) { var name = getObject(id).common.name; var devicename = name.substring(0, name.indexOf(".LEVEL")); //.level aus Text entfernen var status = getState(id).val; if (status > 0) { // 3 x blinken setState(id, 0); setTimeout(function() { setState(id, status); }, 2000); setTimeout(function() { setState(id, 0); }, 4000); setTimeout(function() { setState(id, status); }, 6000); setTimeout(function() { setState(id, 0); }, 8000); setTimeout(function() { setState(id, status); }, 10000); setTimeout(function() { setState(id, 0); }, 12000); } }); ! cacheSelectorState.each(function (id, i) { var name = getObject(id).common.name; var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen var status = getState(id).val; if (status > 0) { // 3 x blinken setState(id, false); setTimeout(function() { setState(id, true); }, 2000); setTimeout(function() { setState(id, false); }, 4000); setTimeout(function() { setState(id, true); }, 6000); setTimeout(function() { setState(id, false); }, 8000); setTimeout(function() { setState(id, true); }, 10000); setTimeout(function() { setState(id, false); }, 12000); } }); ! } ! schedule("0 1,3,5,23 * * *", function () { weiter(); }); !
-
Delay integrieren in deiner Funktion ?
ioBroker und ein Script schafft es teils in Millisekunden zu feuern das wird wohl ein bisschen zu viel laut Log….
Edit: nochwas, ich empfehle dir noch eine states Abfrage einzubauen.
Dimmer die ausstehem brauchst du ja nicht den Wert 0 zu setzen.
Dein System und duty cycle werden dir dankbar sein
Sent from my iPhone using Tapatalk
-
Danke schon einmal für die guten Tips.
Ich bin der Sache auf der Spur: Wenn ich das LOG lösche, funktioniert es ein paar mal, dann kommt der Fehler wieder. Beim nächsten LOG löschen wieder kein Fehler.
Kann ioBroker die LOG Datei nicht schnell genug schreiben? Was kann man dagegen tun?
-
Danke schon einmal für die guten Tips.
Ich bin der Sache auf der Spur: Wenn ich das LOG lösche, funktioniert es ein paar mal, dann kommt der Fehler wieder. Beim nächsten LOG löschen wieder kein Fehler.
Kann ioBroker die LOG Datei nicht schnell genug schreiben? Was kann man dagegen tun? `
Hmm, also ich denke mal nicht das es an den log von iObroker liegt, die meldung wuerd ja durch den adapter generiert ! ( siehe "hm-rpc.1 ").
Daher tippe ich mal darauf das die commandos zu schnell hintereinander gesendet werden, demnach sollte ein delay von z.b. 100ms schon eine loesungsrichung sein.
(und 100ms merkt man nicht :))
Poste mal bitte mehr logdaten, bin gespannt wie schnell er probiert update zu senden.
Wen deine schleife dafuer sorgt das die commandos hientereinander gesendet werden und da liegen nu ein par millisecunden zwischen ist das deutlich overkill fuer ein system.
Greetz,
Dutch
PS: Dir is bekannt wie du einen delay einbauen kannst ?
-
Ich würde es mit kurzer Verzögerung (200 ms) zwischen den Sendebefehlen versuchen:
cacheSelectorState = $('channel[state.id=.LEVEL](functions=Licht)'); cacheSelectorState.each(function (id, i) { if(getState(id).val) setStateDelayed(id, 0, false, 200 * i); });
-
Du könntest probieren, mit den setState-callbacks zu arbeiten. D.h. erst den nächsten Dimmer schalten, wenn der vorherige mit ack=true bestätigt wurde.
-
erst den nächsten Dimmer schalten, wenn der vorherige mit ack=true bestätigt wurde. `
Das kann bei einem Kommunikatiosproblem mit einem Dimmer dazu führen, dass die restlichen Dimmer nicht ausgeschaltet werden. -
stimmt… hatte ich nicht bedacht!