NEWS
[Erledigt] Anfängerhilfe: Zeitsteuerung aus CCU nachbauen
-
Hallo,
ich stelle gerade meine CCU Programme auf javascript Programme um.
Habe jetzt mal wieder ein Problem und benötige mal wieder einen Schubs in die richtige Richtung damit ich weiterkomme
Mein CCU Programm:
Systemzustand Systemvariable Wach bei Schlafen auf Änderung auslösen
Zeitsteuerung Täglich von 20:00 - 04:00 nur prüfen
Mein Script
// Beispiel Zeitsteuerung var SchlafenZeit; schedule("00 20 * * *", function () { SchlafenZeit = true; console.log(SchlafenZeit); }); schedule("00 4 * * *", function () { SchlafenZeit = false; console.log(SchlafenZeit); }); on({ id: SchlafenZeit, change: 'any', }, function (obj) { if (obj.state.val === true){ log('Log true'); } else if (obj.state.val === false){ log('Log false'); } });
Ich habe bis jetzt immer Variablen fest im javascript Adapter angelegt, damit würde ich es wohl auch hinkriegen, da ich aber die Variable SchlafenZeit nur in diesem Programm brauche, dachte ich es geht auch so.
Allerdings wird die Funktion nicht gestartet auch wenn sich die Variable ändert.
Danke für Eure Hilfe
Gruß Zippolighter
-
Eine CCU "Systemvariable" entspricht einem Datenpunkt im IOBroker (in etwa :)).
Mit "on" kannst Du nicht auf Änderungen in einer Javascript Variable auslösen, sondern auf nen Datenpunkt.
Ausserdem machen das CCU-Script und das Javascript was unterschiedliches:
Die CCU startet das Programm wenn sich "SchlafenZeit" ändert und überprüft dann, ob es zwischen 20:00 und 04:00 ist.
Das Javascript setzt um 20:00 SchlafenZeit auf true und um 04:00 auf false.
Was ist denn das Verhalten, das Du haben willst?
CU
Werner
-
Hallo
Mein Ziel ist es auf Änderung eines Datenpunktes zu reagieren, dabei aber zu überprüfen welcher Zeitrahmen ist 20:00 - 04:00 oder 04:00 - 20:00.
Durch meine zwei schedule lege ich fest das entweder der erste Zeitrahmen oder der zweite Zeitrahmen aktiv ist. Dies kann ich dann überprüfen
Wenn ich mit On nur einen Datenpunkt überprüfen kann, dann mache ich halt doch wieder eine Variable im javascript Adapter.
Danke für Deine Antwort
-
Mein Ziel ist es auf Änderung eines Datenpunktes zu reagieren, dabei aber zu überprüfen welcher Zeitrahmen ist 20:00 - 04:00 oder 04:00 - 20:00. `
Dafür gibt es https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#comparetime. -
Das ist leider die etwas ungewöhnlich HM-Denke:
Im normalen Programm gibt es ganz simple Abfragen und Verzweigen, die wesentlich klarer sind:
Wenn Uhrzeit > 20 Uhr oder Uhrzeit < 4 Uhr { //Nachtprogramm } Sonst { //Tagprogramm }
Das ganze Programm muss natürlich noch regelmäßig aufgerufen werden (z.B. einmal pro Minute schedule "1 * * * *")
-
Hm, die zwei schedules brauchst dann eigentlich nicht …
z.B. (ohne Garantie, ohne es probiert zu haben) ...
var SchlafenZeitId = "javascript.0.Aktiv.Schlafenzeit"; // Datenpunkt var Zeit1 = "04:00"; var Zeit2 = "20:00"; on ({ id: SchlafenZeitId, change: "ne"} function (obj) { var now_ = formatDate (obj.state.ts,"hh:mm"); if ((now_ >= Zeit1 && now < Zeit2)) { log('Zwischen 4 Uhr morgens und 8 Uhr abends"); } else { log('Zwischen 8 abends und 4 morgens); } });
… Du möchtest ja die Zeiten "nur prüfen"
Weitere Ausbaustufe:
Die Zeiten nicht fest definieren, sondern in der Callback-Funktion aus Datenpunkten lesen
CU
Werner
-
Super, danke für Eure Hilfe. Wieder etliches dazu gelernt