NEWS
[Blockly] Schalten zwischen Sonnenunter- und -aufgang mit zusätzlicher Bedingung
-
Hallo zusammen,
ich bin gerade dabei mich in ioBroker einzuarbeiten und baue so langsam meine Programme von der CCU2 in ioBroker nach.
Bei dem folgenden Programm aber stoße ich aktuell noch an meine Grenzen und bekomme es einfach nicht ans Laufen:
Zwischen Sonnenuntergang und Sonnenaufgang soll sobald sich eine gewissen Türe öffnet und das Deckenlicht angehen, aber eben auch nur dann, wenn eine andere Lampe im Raum nicht leuchtet.
on({id: getState("hm-rpc.1.OEQ0392593.1.STATE").val == true, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (compareTime(getAstroDate("sunrise", undefined, 0), getAstroDate("sunset", undefined, 0), "between", null) && getState("lightify.0.C2DF060000261884.on").val == true) { setState("hm-rpc.1.LEQ0074667.1.STATE"/*Licht Ankleide.STATE*/, true); } });
Gebaut habe das mit Blockly und zum testen die Bedingung für den Zeitraum zwischen Sonnenauf- und -untergang gesetzt. Wenn es läuft soll das Programm aber nachts zwischen Sonnenunter- und aufgang laufen.
Vielleicht könnt ihr mir helfen?
Danke im Voraus.
echicor
5188_licht_ankleide.png -
Ich beherrsche JavaScript noch nicht gut genug dir ein fertiges
Script zu präsentieren aber dein Blocky ist Käse.
Das Blocky muss so aufgebaut sein:
Falls Objekt ID „Tür“ wurde geändert:
Falls Wert von Objekt ID Tür = true
und Wert von Objekt ID andere Lampe = false
und aktuelle Zeit zwischen Sonnenuntergang / Aufgang:
Schalte andere Lampe an.
Ich hoffe das ist verständlich.
Gruß
Udo
-
Wenn du auch gern ein Blockly zum Probieren haben möchtest, schreib mal bitte in den Betreff noch Blockly rein.
Um dir leichter helfen zu können, wäre noch ein Blockly-Export hilfreich. Das kannst du in den Scripten oben rechts machen, da ist ein Pfeil für Export und ein Pfeil für Import, damit du unsere Beispiele auch wieder ausprobieren kannst!
Enrico
-
Ich beherrsche JavaScript noch nicht gut genug dir ein fertiges
Script zu präsentieren aber dein Blocky ist Käse. `
[/OT ON]Diese Ausdrucksweise lese ich in diesem Forum sehr, sehr, sehr…....selten.
Und ich hoffe das bleibt so!!!!!!
[/OT OFF]
-
Wenn es läuft soll das Programm aber nachts zwischen Sonnenunter- und aufgang laufen. ` Also zunächst einmal finde ich dass dein Blockly sehr sinnvoll ausschaut (zumindestens wenn dein zu prüfendes Licht tatsächlich "on" heißt) 8-)
Ich nehme an, dass Du in die Falle mit dem Tageswechsel läufst.
Wenn ich das hier im Forum richtig verstanden habe, dann sind Timerfunktionen nur innerhalb eines Tages möglich.
Du benötigst daher wahrscheinlich 2 Scripte:
1. mit der Zeit von Sonnenuntergang bis 23:59h
2. mit der Zeit 00:00h (oder ggf. 00:01h) bis Sonnenaufgang
-
Einfach umdrehen:
Aktuelle Zeit ist NICHT zwischen Sonnenaufgang und Sonnenuntergang.
-
[
[/OT ON]
Diese Ausdrucksweise lese ich in diesem Forum sehr, sehr, sehr…....selten.
Und ich hoffe das bleibt so!!!!!!
[/OT OFF] `
Was ist daran falsch?
(von der Rechtschreibung mal abgesehen)
Sorry falls sich jemand auf den Schlips getreten fühlt.
War nicht böse gemeint.
Ich bin der Meinung der Trigger "Falls Wert von xyz = Wahr wurde geändert" macht keinen Sinn.
Es sollte doch "falls Wert xyz wurde geändert und falls Wert von xyz = wahr" heißen?
-
Vielleicht könnt ihr mir helfen? `
Hallo echicor
Man kann keine Abfrage/Bedingung triggern.
Da kommt nur der zu überwachende Datenpunkt hin.
Den Status kannst Du dann innerhalb des Triggers auswerten oder Du lässt den Trigger nur auf einen
bestimmten Zustand reagieren.
Ändern von "wurde geändert" auf "ist wahr"
Grüße
-
sag ich doch.
-
Man kann keine Abfrage/Bedingung triggern.
Da kommt nur der zu überwachende Datenpunkt hin. ` Du hast wahr, darüber bin ich nicht gestolpert 8-)
-
Was Du willst ist wahrscheinlich sowas hier:
Der Trigger ist dabei auf die Objekt-ID (hier eben dein Objekt), dann auf "wahr" prüfen.
Also wenn dein Objekt auf "wahr" umgeschaltet wird.
In dem Falls kommt dann die Bedigung rein mit UND verknüft.
Also Astreiteiz NICHt zwischen Sonnenaufgang und Untergang UND dann mch dein Licht.
Dann sollte das klappen.
-
Danke zunächst für die Impulse.
ich habe es jetzt so gelöst wie es in der angehängten Grafik zu sehen ist. Testen kann ich es leider erst in den kommenden 2 Tagen wenn ich wieder daheim bin. Aber Ihr könnt gerne Eure Einschätzung abgeben ob es funktionieren sollte…..
5188_2018-01-17_14_56_47-iobroker.admin.png -
Wofür ist denn die "sonst falls" Bedingung gut?
-
Wofür ist denn die "sonst falls" Bedingung gut? `
Ich will, dass die Deckenlampe nachts nur angeht bei öffnen der Tür, wenn die Lightfy-Lampe am Sideboard aus ist. Leuchtet die, soll die Deckenlampe aus bleiben.
-
So steht das aber nicht im Blockly, mit dem sonst falls hebst du ja die obere Bedingung auf!
Enrico
-
die Deckenlampe nachts nur angeht bei öffnen der Tür, wenn die Lightfy-Lampe am Sideboard aus ist. Leuchtet die, soll die Deckenlampe aus bleiben. `
Unter welcher Bedingung soll die Deckenlampe wieder ausschalten ?Das reine Einschalten unter den Bedingungen ist per Javascript recht einfach (Blockly liefert nicht alle Funktionen):
const idTuer = "hm-rpc.1.OEQ0392593.1.STATE"; const idSideboard = "lightify.0.C2DF060000261884.on"; const idDecke = "hm-rpc.1.LEQ0074667.1.STATE"/*Licht Ankleide.STATE*/; var sideboard = getState(idSideboard).val; // Initialisierung bei Skriptstart on({id: idTuer, val: true, change: "ne"}, function () { // Tür öffnet if(!isAstroDay() && !sideboard) setState(idDecke, true); }); on(idSideboard, function(dp) { // Aktualisierung bei Wertänderung sideboard = dp.state.val; });
-
Es geht auch in Blockly, wenn man !isAstroDay() durch compareTime('sunset', 'sunrise', 'between') ersetzt.
-
Ich hole mal etwas weiter aus:
Wir haben 2 Lampen auf den Sideboards in dem entsprechenden Zimmer. Diese werden bei Aktivierung des Nachtverschlusses des Hauses eingeschaltet. Wenn wir dann noch kurz in das Zimmer gehen soll die Deckenlampe wegen der eingeschalteten Lampen auf dem Sideboard nicht angehen. Gehen wir jedoch zum Beispiel morgens nach dem Aufstehen in das Zimmer sind die Lampen auf den Sideboards aus und da soll dann eben die Deckenlampe angehen. Ausgeschaltet wird die Deckenlampe in jedem Fall manuell am Schalter an der Wand bei verlassen der Tür, bzw. über den eingebauten Timer im Aktor nach spätestens 30 Minuten.
Ich versuche erstmal eine Vorschläge umzusetzen und zu testen und melde mich dann hier noch mal…hoffe ich bekomme das hin