NEWS
Wie einfache Zeitschaltung?
-
Hallo Master77
dna909 hat Recht. Dein Trigger macht keinen Sinn. Sein Vorschlag geht in die richtige Richtung.
Du musst immer überlegen, was ein Trigger macht.
Ein Trigger reagiert auf Ereignisse.
Erst wenn das gewünschte/überwachte Ereignis eintritt, werden die Bausteine innerhalb der Triggers (einmalig) ausgeführt.
Dann wird auf das nächste Ereignis gewartet.
Dein Trigger wartet auf die Änderung eines Schalters.
Tritt das Ereignis ein, fragst Du die Zeit ab und schaltest den Schalter nochmal.
Blocklys kann man gut von oben nach unten lesen.
Machen wir das doch mal.
Dein Trigger überwacht den Schalter auf "Änderung".
Der Trigger startet wenn der Zustand des Schalters "wahr" und "unwahr" wird.
Jetzt muss man nur noch einige Möglichkeiten durchspielen.
Schalter wird eingeschaltet (wahr)
Falls Zeit zwischen 18 und 24 Uhr , wird er nochmal eingeschaltet (wahr)
Sonst wird er wieder ausgeschaltet (unwahr)
Das macht nicht wirklich Sinn. Ausser Du möchtest den Schalter nur zu bestimmten Zeiten schalten können.
Du möchtest aber den Schalter zu bestimmten Zeiten automatisch schalten.
Also musst Du die Zeit triggern und dann überprüfen ob der Zeitpunkt stimmt.
So wie Dir dna909 das vorgeschlagen hat.
Ganz wichtig ist auch in seinem Beispiel, die vorherige Abfrage des aktuellen Schalterzustands.
Wenn der Schalter schon "wahr" ist, muss er nicht nochmal eingeschaltet werden. Oder umgekehrt.
Das macht zwar nichts kaputt, erhöht aber unnötig den Funkverkehr (DutyCycle).
Also nichts schalten, was nicht geschaltet werden muss.
Grüße
-
So wie lobomau das gemacht hat geht es natürlich auch.
(ist aber etwas umständlicher)
Viele Wege führen nach Rom.
Grüße
-
Vielen Dank für die hilfreichen Tipps und die zusammengestellten Skripte. Wie gesagt, ich bin gerade erst am Anfang mit IoBroker. Habe bereits einiges hin bekommen, nur die Sache mit Blockly macht mir zu schaffen. Nachdem ich eure Zusammenstellung sehe kommt langsam Licht ins Dunkel. Werde die ganze Sache mal testen und dann wie gesagt sofort berichten. Nochmals vielen Dank…..
Gruß Markus
Gesendet von meinem HUAWEI NXT-L29 mit Tapatalk
-
Bessere Lösung, da hier das Senden nach einer Minute wiederholt wird, falls es nicht erfolgreich (Ack = true) war:
var idTemp = 'rflink.0.channels.Cresta_1.TEMP'; var idAktor = 'fritzdect.0.DECT200_087610163304.state'; var minOn = false; var temp = getState(idTemp).val; var aktor = getState(idAktor).val; function Zeitschaltung() { var morgen = compareTime('08:00', '09:00', 'between'); var mittag = compareTime('12:00', '17:00', 'between'); var abend = compareTime('18:00', '20:00', 'between'); if(morgen || (mittag && temp > 25) || abend) { if(!aktor) setState(idAktor, true); } else if(aktor && !minOn) setState(idAktor, false); } schedule('* * * * *', Zeitschaltung); // jede Minute on(idTemp, function(dp) { temp = dp.state.val; }); on({id: idAktor, ack: true}, function(dp) { aktor = dp.state.val; if(aktor) { minOn = true; setTimeout(function() {minOn = false;}, 1800000); // 30 Minuten } }); ```` `
Hallo,
bin gerade zufällig zuhause und sehe das die Pumpe läuft.
fritzdect.0 2017-07-07 13:08:02.327 info polling! fritzdect is alive fritzdect.0 2017-07-07 13:06:00.916 info Turned switch 087610163304 on fritzdect.0 2017-07-07 13:06:00.157 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 13:03:02.314 info polling! fritzdect is alive fritzdect.0 2017-07-07 13:03:00.920 info Turned switch 087610163304 off fritzdect.0 2017-07-07 13:03:00.158 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 13:02:00.921 info Turned switch 087610163304 off fritzdect.0 2017-07-07 13:02:00.157 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 13:00:01.320 info Turned switch 087610163304 off fritzdect.0 2017-07-07 13:00:00.166 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 12:59:00.905 info Turned switch 087610163304 off fritzdect.0 2017-07-07 12:59:00.156 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 12:58:02.307 info polling! fritzdect is alive fritzdect.0 2017-07-07 12:58:00.912 info Turned switch 087610163304 on fritzdect.0 2017-07-07 12:58:00.156 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 12:57:01.332 info Turned switch 087610163304 on fritzdect.0 2017-07-07 12:57:00.155 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 12:56:00.925 info Turned switch 087610163304 on fritzdect.0 2017-07-07 12:56:00.156 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 12:55:00.915 info Turned switch 087610163304 on fritzdect.0 2017-07-07 12:55:00.155 info SWITCH ID: 087610163304 identified for command
ID der Temp Sensors:
rflink.0.channels.Cresta_1.TEMP
Aktuell 23,2°. Normal dürfte die doch nicht angehen, oder?
2880_1.png -
Aktuell 23,2°. Normal dürfte die doch nicht angehen, oder? `
War es vielleicht zwischen 12:45 und 13:00 mal über 25 °C und die Pumpe läuft noch aufgrund der Mindestlaufzeit ?Um zu sehen, was wann passiert, helfen zum Testen ein par Logs, z.B. am Ende der Funktion Zeitschaltung
log('morgen: ' + morgen + ', mittag: ' + mittag + ', Temperatur: ' + temp + ', abend: ' + abend + ', Mindestlaufzeit: ' + minOn);
-
Nein, habe gerade Pumpe ausgeschaltet und nun ist die wieder
an
fritzdect.0 2017-07-07 14:43:02.520 info polling! fritzdect is alive fritzdect.0 2017-07-07 14:40:01.339 info Turned switch 087610163304 on fritzdect.0 2017-07-07 14:40:00.157 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 14:38:02.509 info polling! fritzdect is alive fritzdect.0 2017-07-07 14:36:00.924 info Turned switch 087610163304 off fritzdect.0 2017-07-07 14:36:00.156 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 14:35:00.923 info Turned switch 087610163304 off fritzdect.0 2017-07-07 14:35:00.157 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 14:34:01.457 info Turned switch 087610163304 off fritzdect.0 2017-07-07 14:34:00.156 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 14:33:02.500 info polling! fritzdect is alive fritzdect.0 2017-07-07 14:32:00.935 info Turned switch 087610163304 on fritzdect.0 2017-07-07 14:32:00.158 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 14:31:00.954 info Turned switch 087610163304 on fritzdect.0 2017-07-07 14:31:00.158 info SWITCH ID: 087610163304 identified for command fritzdect.0 2017-07-07 14:30:00.933 info Turned switch 087610163304 on fritzdect.0 2017-07-07 14:30:00.156 info SWITCH ID: 087610163304 identified for command
Beim LOG gibts nen Fehler
14:45:06.350 [info] javascript.0 Stop script script.js.common.PoolPumpe 14:45:06.389 [info] javascript.0 Start javascript script.js.common.PoolPumpe 14:45:06.391 [error] javascript.0 script.js.common.PoolPumpe: ReferenceError: morgen is not defined at script.js.common.PoolPumpe:29:18 at ContextifyScript.Script.runInContext (vm.js:35:29)
var idTemp = 'rflink.0.channels.Cresta_1.TEMP'; var idAktor = 'fritzdect.0.DECT200_087610163304.state'; var minOn = false; var temp = getState(idTemp).val; var aktor = getState(idAktor).val; schedule('* * * * *', function() { // jede Minute var morgen = compareTime('08:00', '09:00', 'between'); var mittag = compareTime('12:00', '17:00', 'between'); var abend = compareTime('18:00', '20:00', 'between'); if(morgen || (mittag && temp > 25) || abend) { if(!aktor) setState(idAktor, true); } else if(aktor && !minOn) setState(idAktor, false); }); on(idTemp, function(dp) { temp = dp.state.val; }); on({id: idAktor, ack: true}, function(dp) { aktor = dp.state.val; if(aktor) { minOn = true; setTimeout(function() {minOn = false;}, 1800000); // 30 Minuten } }); log('morgen: ' + morgen + ', mittag: ' + mittag + ', Temperatur: ' + temp + ', abend: ' + abend + ', Mindestlaufzeit: ' + minOn);
EDIT
Sehe gerade, das die Temp Anzeige manchmal auf 26°C springt, warum auch immer. Na wird wohl der "Fehler" liegen. Evtl
empfange ich auf dem selben Kanal auch einen Sensor vom Nachbarn….
-
Am Ende des Skripts wird das Log nur einmal bei Skriptstart ausgeführt. Richtig:
var idTemp = 'rflink.0.channels.Cresta_1.TEMP'; var idAktor = 'fritzdect.0.DECT200_087610163304.state'; var minOn = false; var temp = getState(idTemp).val; var aktor = getState(idAktor).val; schedule('* * * * *', function() { // jede Minute var morgen = compareTime('08:00', '09:00', 'between'); var mittag = compareTime('12:00', '17:00', 'between'); var abend = compareTime('18:00', '20:00', 'between'); if(morgen || (mittag && temp > 25) || abend) { if(!aktor) setState(idAktor, true); } else if(aktor && !minOn) setState(idAktor, false); log('morgen: ' + morgen + ', mittag: ' + mittag + ', Temperatur: ' + temp + ', abend: ' + abend + ', Mindestlaufzeit: ' + minOn); }); on(idTemp, function(dp) { temp = dp.state.val; }); on({id: idAktor, ack: true}, function(dp) { aktor = dp.state.val; if(aktor) { minOn = true; setTimeout(function() {minOn = false;}, 1800000); // 30 Minuten } });
Dann kommt auch die Fehlermeldung nicht, denn die Variable morgen ist lokal innerhalb der Funktion.
-
Hallo zusammen. Habe am Wochenende wieder ein wenig Zeit zum bastel und ausprobieren gehabt. Das Skript von dna909 funktioniert super. Habe nur noch eine Frage dazu. Wenn ich bei laufender Zeitschaltuhr das Bauteil aus der Reihe schalte ( Zeitschaltuhr Statur Bauteil aus und ich schalte per Schalter in Vis das Bauteil an) ändert die Zeitschaltuhr das relativ schnell wieder. Kann man diese Zeitspanne nicht ein wenig verlängern? Habe schon versucht bei Blocky unter Zeitplan auf alle zwei Stunden zu ändern. Hatte gedacht das durch diese Einstellung der Status der Zeitschaltuhr alle zwei Stunden geprüft wird. Ist dem nicht so? Danke im voraus für eure Hilfe. Im Anhang nochmal das Blocky Diagramm.
Gruß Markus
Gesendet von meinem HUAWEI NXT-L29 mit Tapatalk
2754_screenshot_20170710-220715.png -
Hallo zusammen. Habe am Wochenende wieder ein wenig Zeit zum bastel und ausprobieren gehabt. Das Skript von dna909 funktioniert super. Habe nur noch eine Frage dazu. Wenn ich bei laufender Zeitschaltuhr das Bauteil aus der Reihe schalte ( Zeitschaltuhr Statur Bauteil aus und ich schalte per Schalter in Vis das Bauteil an) ändert die Zeitschaltuhr das relativ schnell wieder. Kann man diese Zeitspanne nicht ein wenig verlängern? Habe schon versucht bei Blocky unter Zeitplan auf alle zwei Stunden zu ändern. Hatte gedacht das durch diese Einstellung der Status der Zeitschaltuhr alle zwei Stunden geprüft wird. Ist dem nicht so? Danke im voraus für eure Hilfe. Im Anhang nochmal das Blocky Diagramm. `
Hallo Master77Bilder bitte NIE als Link sondern als ".png" hier einbetten.
Ich konnte mir Dein Bild also nicht genau anschauen.
Bitte Deinen Beitrag editieren und Screenshot ändern.
Grundsätzlich ist es schwierig in eine automatik manuell einzugreifen.
Woher soll das Script den wissen, dass Du etwas manuell geändert hast?
Das würde nur über eine zusätzliche Variable gehen.
Grüße
-
Hallo. Habe den Beitrag nochmal editiert. Durch den Zeitplan kann man doch einen Intervall angeben in dem die Zeitschaltuhr prüft ob der Status der gegeben sein muss aus stimmt. Beispielsweise wenn ich die Pumpe manuelle um 19 Uhr nochmal anschalte die Zeitschaltuhr aber erst nach einer vorgegebenen Zeit den Status erneut prüft. Hatte gedacht das geht in dem abgebildeten Zeitplan Blocky. So hatte ich es zumindest verstanden als ich auf die *****drauf gegangen bin. Jedoch hatte die Änderung in dem Zeitplan nicht den gewünschten Erfolg gebracht.
Gruß Markus
Gesendet von meinem HUAWEI NXT-L29 mit Tapatalk
-
Hallo Master77
So etwas passiert wenn in einem Thread unterschiedliche Probleme bearbeitet werden.
In der ursprünglichen Anforderung ging es um eine Pumpe die in einem bestimmten Zeitraum für eine bestimmte Dauer läuft.
Dein gezeigtes Beispiel hat einen Trigger, der JEDE MINUTE startet.
Zwischen 18 und 24 Uhr wird die Lampe eingeschaltet WENN sie AUS ist.
Zu jedem anderen Zeitpunkt (sonst-Teil) wird die Lampe ausgeschaltet WENN sie AN ist.
Wenn Du die Lampe um 10 Uhr einschaltest, wird sie SPÄTESTENS eine Minute danach wieder ausgeschaltet.
Was willst Du erreichen?
Eventuell in einem neuen Thread mit "[FRAGE] Blockly…....." im Betreff.
Grüße
-
Hallo. Da es in dem ursprünglichen Beitrag ebenfalls um eine Blocky Zeitschaltuhr ging hatte ich gedacht ich klinke mich in das Thema mit ein. Wollte hier ja nicht für Unordnung sorgen. Was ich genau möchte hatte ich ja bereits geschrieben. Aus der Reihe manuell schalten und die Zeitschaltuhr soll erst nach einer Zeit x den Zustand erneut prüfen und ggf korrigieren. Nicht bereits nach 1 Minute. Werde selber noch mal versuchen die Sache auf die Kette zu bekommen. Ansonsten muss ich halt einen neuen Thread auf machen.
Gruß Markus
Gesendet von meinem HUAWEI NXT-L29 mit Tapatalk