[gelöst]Device mit DOIF im bestimmten Zeitfenster nicht schalten

Begonnen von Larusso, 04 Dezember 2017, 08:08:19

Vorheriges Thema - Nächstes Thema

Amenophis86

bei and und or solltest du immer darauf achten, dass hier vielleicht weitere Klammern gesetzt werden müssen.

Deine letzten beiden Beispiele sind der Lösung sehr nahe. Als Tipp noch doch einfach die aktuelle Uhrzeit / aktuellen Tag und schaue was passiert. Kaputt wirst du nix machen.

@doman75: Ich halte es für kontraproduktiv, wenn wir versuchen ihm das Angeln beizubringen und du ihm direkt den Fisch gibst.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

doman75

Ich bin halt kein Angler, und da habe ich ihn von Anfänger zu Anfänger mit dem Fisch geholfen, weil ich mir hier im Forum schon öfter gewünscht hätte, einen Fisch zu bekommen, anstatt mich an der Angel verhungern zu lassen.

Jogi

Zitat von: doman75 am 04 Dezember 2017, 11:39:10
and ![?06:00-08:00]       mit dieser Und Verknüpfung schließt du die Zeit zwsichen zwischen 06:00 und 08:00 Uhr aus
Das finde ich sehr spannend, weil ich gerade in ähnliches Problem habe und es sehr umständlich gelöst habe. Das hier sieht viel einfacher aus.
Allerdings will ich kein Zeitfenster ausschliessen, sondern NUR in einem bestimmten Zeitfenster schalten.
Bis jetzt habe ich das mit zwei at (eins für ein und eins für aus) gelöst. Aber, wie schon gesagt, diese Lösung sieht besser aus.
Leider verstehe ich den Syntax von "![?.." nicht und habe auch nichts dazu gefunden.
Wie würde die Gleichung lauten, wenn NUR in dem Zeitfenster geschaltet werden soll?
Ich nehme gerne direkt den Fisch, bin aber auch bereit die Angel auszupacken, wenn mir jemand sagt in welchem Teich ich angeln muss, sprich, wo oder wonach ich suchen muss, um mich mit solchen Funktionen zu beschäftigen.
Leider haben meine Suchen im Wiki oder Google nichts gebracht, aber vielleicht habe ich falsch gesucht.

Jogi 

Damian

Bei DOIF kannst du Zeitintervalle in eckigen Klammern angeben siehe: http://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitintervallen

Das hast du bestimmt schon gefunden ;)

Nun zu Hintergrundinformationen zu ! und ?

! gehört zu Perl und steht für Verneinung. Kombiniert mit einem Zeitintervall, was nichts anders ist als eine Perlfunktionen (siehe list des DOIFs), wird dieses verneint - dazu musste ich noch nicht einmal etwas programmieren ;)

? gehört zum Syntaxumfang von DOIF, kommt es als erstes nach der eckigen Klammer vor, bedeutet es, dass die folgende Angabe in den eckigen Klammern, hier also das Zeitintervall, das DOIF nicht triggern soll. Wenn man kein Fragezeichen bei einem Zeitintervall angibt wird das Modul bei der Anfangszeit wie bei der Endzeit geweckt, aber hier wiederhole ich mich, denn das steht ja im obigen Link.







Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Larusso

([HUEDevice1] eq "on" or [HUEDevice4] eq "on" or [HUEDevice5] eq "on" and [08:00-06:00|Mo Di Mi Do Fr]) (set HUEDevice1 off) (set HUEDevice4 off) (set HUEDevice5 off)

wenn ich dort den Code so ändere kommt wrong time stamp

([HUEDevice1] eq "on" or [HUEDevice4] eq "on" or [HUEDevice5] eq "on" and [08:00-06:00/Mo Di Mi Do Fr]) (set HUEDevice1 off) (set HUEDevice4 off) (set HUEDevice5 off)

hinten bei den Wochten was dugeschrieben hast :

"Autor: Amenophis86
« am: Gestern um 13:26:02 » Zitat einfügen
bei and und or solltest du immer darauf achten, dass hier vielleicht weitere Klammern gesetzt werden müssen.

Deine letzten beiden Beispiele sind der Lösung sehr nahe. Als Tipp noch doch einfach die aktuelle Uhrzeit / aktuellen Tag und schaue was passiert."
nanoCul434MHz, nanoCul868MHz, HueBridge, shellyRolladenaktoren, Nuki, Homematic, RPI3, Homebridge, Sonoffbridge, Xiaomi Saugrobotter,

Amenophis86

#20
wenn du es so schreibst, schaltet dein DOIF aktuell in folgenden Fällen:
- HUEDevice1 on
- HUEDevice4 on
- HUEDevice5 on UND 08:00-06:00|Mo Di Mi Do Fr

Soll heißen, dass and bezieht sich NUR auf HUEDevice5. Ich gehe davon aus, dass die Zeit sich aber auf alle beziehen soll. Aus diesem Grund solltest du es wie folgt schreiben:
( ([HUEDevice1] eq "on" or [HUEDevice4] eq "on" or [HUEDevice5] eq "on" ) and [08:00-06:00|Mo Di Mi Do Fr]) (set HUEDevice1 off) (set HUEDevice4 off) (set HUEDevice5 off)
Man beachte die extra Klammer um die OR-Anweisungen.

Diese Variante dürfte auch keinen Fehler auswerfen eigentlich. Ist allerdings nicht getestet.

Edit:
Jetzt verstehe ich warum du den / gemacht hast. Ich meinte damit nicht, dass du den | durch einen / ersetzen solltest. Ich meinte, dass du zum testen deines DOIF doch einfach die Zeitangaben auf den aktuellen Tag und die aktuelle Uhrzeit anpassen kannst um zu schauen, ob es schaltet. Soll heißen du würdest jetzt zum Testen die Zeit auf [07:00-08:00|Di] setzen und schauen, ob es klappt, wenn du die Lampen schaltest. Und dann auf [06:00-07:00|Di] setzen und dann schauen, ob es nicht reagiert.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Larusso

Danke für den Hinweis, wühle mich gerade seit ein paar Tagen durch das Perl wirwar bin da recht unbeholfen und versteh die Zusammenhänge noch nicht immer richtig. Ist es denn so das Erkannt wird das ich von 8Uhr bis 6Uhr die Lampen nach Zeit x ausgehen soll da dort ja von 8Uhr über 24Uhr ein neuer Tag begonnen wird bis 6Uhr morgens?
nanoCul434MHz, nanoCul868MHz, HueBridge, shellyRolladenaktoren, Nuki, Homematic, RPI3, Homebridge, Sonoffbridge, Xiaomi Saugrobotter,

Amenophis86

#22
Ja, wird es. Das siehst du im DOIF selbst in den Readings. Schau dir mal die Zeiten an. Übrigens würde ich vor die Uhrzeit noch ein ? setzen, also [?08:00-06:00]. Das bewirkt, dass der Zeitraum geprüft wird, aber um 08:00 und 06:00 Uhr nicht das DOIF ausgelöst wird, sondern nur das Schalten der Lampen es auslöst.

Edit:
Eigentlich kannste das ? auch weglassen. Du willst ja, dass ab dann es auch geschaltet wird. Somit würde es auch Sinn machen, dass ab dann die Treppe geschaltet wird, wenn sie vergessen wurde auszuschalten.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Larusso

So dann werde ich mir das morgen früh mal anschauen wenn unsere Kurzen zur Schule fertig gemacht werden.

;)
nanoCul434MHz, nanoCul868MHz, HueBridge, shellyRolladenaktoren, Nuki, Homematic, RPI3, Homebridge, Sonoffbridge, Xiaomi Saugrobotter,

Larusso

Hallo zusammen,

ich habe den nachfolgenden Code ausprobiert, aber die Lampen werden im angegebenen Zeitfenster trotzdem nach 10min ausgeschaltet. Hat noch jemand eine Idee warum das so ist? Im log wird mir kein Fehler angezeigt und wenn ich den doif initialisiere gibt es auch keine Fehlermeldung.

([HUEDevice1] eq "on" or [HUEDevice4] eq "on" or [HUEDevice5] eq "on" and [?08:00-06:00|Mo Di Mi Do Fr]) (set HUEDevice1 off) (set HUEDevice4 off) (set HUEDevice5 off)

Die Lampen waren um 6.10Uhr an und gingen zehn Minuten später wieder aus.
nanoCul434MHz, nanoCul868MHz, HueBridge, shellyRolladenaktoren, Nuki, Homematic, RPI3, Homebridge, Sonoffbridge, Xiaomi Saugrobotter,

Amenophis86

#25
Mach mal ein List des Device.

Edit:
Meine Nachredner haben recht, dachte du hast Antwort #20 umgesetzt hast du aber nicht.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

automatisierer

Zitat von: Amenophis86 am 05 Dezember 2017, 07:12:43
wenn du es so schreibst, schaltet dein DOIF aktuell in folgenden Fällen:
- HUEDevice1 on
- HUEDevice4 on
- HUEDevice5 on UND 08:00-06:00|Mo Di Mi Do Fr

Soll heißen, dass and bezieht sich NUR auf HUEDevice5. Ich gehe davon aus, dass die Zeit sich aber auf alle beziehen soll. Aus diesem Grund solltest du es wie folgt schreiben:
( ([HUEDevice1] eq "on" or [HUEDevice4] eq "on" or [HUEDevice5] eq "on" ) and [08:00-06:00|Mo Di Mi Do Fr]) (set HUEDevice1 off) (set HUEDevice4 off) (set HUEDevice5 off)
Man beachte die extra Klammer um die OR-Anweisungen.

Diese Variante dürfte auch keinen Fehler auswerfen eigentlich. Ist allerdings nicht getestet.

Edit:
Jetzt verstehe ich warum du den / gemacht hast. Ich meinte damit nicht, dass du den | durch einen / ersetzen solltest. Ich meinte, dass du zum testen deines DOIF doch einfach die Zeitangaben auf den aktuellen Tag und die aktuelle Uhrzeit anpassen kannst um zu schauen, ob es schaltet. Soll heißen du würdest jetzt zum Testen die Zeit auf [07:00-08:00|Di] setzen und schauen, ob es klappt, wenn du die Lampen schaltest. Und dann auf [06:00-07:00|Di] setzen und dann schauen, ob es nicht reagiert.


doman75

Beachte doch einfach mal die Antwort 20 von Amenophis86.

Larusso

oh man, habe nach Backup einspielen die alte Variante noch in der Def gehabt.......................... Man so ein Mist, sehe vor lauter Bäumen........

Ich werde das so jetzt nochmal testen

( ([HUEDevice1] eq "on" or [HUEDevice4] eq "on" or [HUEDevice5] eq "on" ) and ![?06:00-08:00|Mo Di Mi Do Fr]) (set HUEDevice1 off) (set HUEDevice4 off) (set HUEDevice5 off)

hab die Abfrage einfach mal von der Zeit ausgeschlossen wie vorher im Betreig erwähnt mit "!" mal sehen obs jetzt läuft.  ;D
nanoCul434MHz, nanoCul868MHz, HueBridge, shellyRolladenaktoren, Nuki, Homematic, RPI3, Homebridge, Sonoffbridge, Xiaomi Saugrobotter,

Jogi

Zitat von: Damian am 04 Dezember 2017, 17:38:16
Bei DOIF kannst du Zeitintervalle in eckigen Klammern angeben siehe: http://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung_mit_Zeitintervallen

Das hast du bestimmt schon gefunden ;)

Nun zu Hintergrundinformationen zu ! und ?

! gehört zu Perl und steht für Verneinung. Kombiniert mit einem Zeitintervall, was nichts anders ist als eine Perlfunktionen (siehe list des DOIFs), wird dieses verneint - dazu musste ich noch nicht einmal etwas programmieren ;)

? gehört zum Syntaxumfang von DOIF, kommt es als erstes nach der eckigen Klammer vor, bedeutet es, dass die folgende Angabe in den eckigen Klammern, hier also das Zeitintervall, das DOIF nicht triggern soll. Wenn man kein Fragezeichen bei einem Zeitintervall angibt wird das Modul bei der Anfangszeit wie bei der Endzeit geweckt, aber hier wiederhole ich mich, denn das steht ja im obigen Link.
Vielen Dank,
der Link hilft mir sehr weiter!