[GELÖST] Wie mehrere at-Befehle in ein DOIF zusammenfassen?

Begonnen von Gisbert, 12 Februar 2017, 15:18:16

Vorheriges Thema - Nächstes Thema

igami

Formulier doch mal bitte wann das Licht eingeschaltet werden soll. Also einfach in Worten.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Per

Zitat von: Gisbert am 12 Februar 2017, 17:13:08wenn die aktuelle Zeit größer als 27.11.2017 und kleiner als 8.1.2018 ist, dann soll Schalter.1 angeschaltet werden.
Wenn du nur auf Tag.Monat prüfst und mit or verknüpfst, musst du nix anpassen.
Und wenn du aber eh jedes Jahr die Daten ändern willst ("es ist nur einmal..."), könntest du auch mit einem Dummy arbeiten und erzeugst dir weniger Arbeit UND dem System weniger Last.

Gisbert

Hallo igami,

Zitat von: igami am 12 Februar 2017, 19:16:21
Formulier doch mal bitte wann das Licht eingeschaltet werden soll. Also einfach in Worten.

Ich versuch mal mit der Weihnachstbeleuchtung (Schalter.1), das erscheint mir der schwierigere Fall von beiden zu sein:
1. define: Schalte Schalter.1 um 6:30 an, wenn die aktuelle Zeit größer als 27.11.2017 ... und kleiner als 7.1.2018 ... ist und wenn es nicht Wochende und nicht Feiertag ist
2. define: Schalte Schalter.1 um 7:15 an, wenn die aktuelle Zeit größer als 27.11.2017 ... und kleiner als 7.1.2018 ... ist und wenn es Wochende oder Feiertag ist
3. define: Schalte Schalter.1 bei Sonnenuntergang (oder kurz vorher) an, wenn die aktuelle Zeit größer als 27.11.2017 ... und kleiner als 7.1.2018 ... ist
Die set Befehle set ... on-till ... sind auf jeden Fall korrekt, d.h. es wird bis zur vorgesehen Zeit angeschaltet bis zur Zeitmarke, die im set-Befhel steht.

Wie eingangs geschildert funktionieren die drei at-Befehle, mein Ziel wäre es aus Übersichtlichkeitsgründen dafür nur ein DOIF zu haben.

Hallo Per,
mir ist nicht klar, wie ich eine zeitliche Abfrage in einen Dummy reinbekomme. Bisher hab ich Dummys so verstanden, dass sie mehr owder weniger nur an oder aus sein können, wobei die Bedingungen von anderen Devices oder Befeheln kommen.
Wie sieht dein Vorschlag konkret aus?

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Per

Zitat von: Gisbert am 14 Februar 2017, 17:34:55Hallo Per,
mir ist nicht klar, wie ich eine zeitliche Abfrage in einen Dummy reinbekomme.
Gar nicht.

Zitat von: Gisbert am 14 Februar 2017, 17:34:55Wie sieht dein Vorschlag konkret aus?
Statt einmal im Jahr die Zeiten manuell in die Config zu schreiben, kannst du auch schnell manuell einen Dummy "Weihnachten" (oder nach Wunsch benannt) auf 0 oder 1 setzen. Diesen fragst du dann ab.

Gisbert

Hallo Per,

den "Weihnacht"-Dummy manuell auf ein oder aus zu schalten, ist wahrscheinlich die bessere Idee.
Die Config wird dann durch diesen Vorgang nicht mehr geändert und ich werde diese unhandliche Abfrage der Zeiten los.
Ich versuche auf der Basis ein DOIF zurechtzuschnitzen; wenn ich Erfolg hab melde ich mich nochmals :), wenn nicht auch :(

Viele Grüße Gisbert

Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Damian

Zitat von: Gisbert am 14 Februar 2017, 20:54:45
Hallo Per,

den "Weihnacht"-Dummy manuell auf ein oder aus zu schalten, ist wahrscheinlich die bessere Idee.
Die Config wird dann durch diesen Vorgang nicht mehr geändert und ich werde diese unhandliche Abfrage der Zeiten los.
Ich versuche auf der Basis ein DOIF zurechtzuschnitzen; wenn ich Erfolg hab melde ich mich nochmals :), wenn nicht auch :(

Viele Grüße Gisbert

Ab morgen kannst du die Variablen $md und $ymd im DOIF benutzen ;)

Beispiel

([6:30] and  $md gt "11-27" and $md lt "01-07")

oder

([6:30] and  $ymd gt "2017-11-27" and $ymd lt "2018-01-07")
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

igami

Zitat von: Per am 14 Februar 2017, 20:16:03
Statt einmal im Jahr die Zeiten manuell in die Config zu schreiben, kannst du auch schnell manuell einen Dummy "Weihnachten" (oder nach Wunsch benannt) auf 0 oder 1 setzen. Diesen fragst du dann ab.
Alternativ kann man noch das holday Modul nutzen. Weihnachten ist ja meist auf dem gleichen Datum ;)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Gisbert

Hallo,

vielen Dank an Damian für den Hinweis und die Implemntierung der Variablen $md und $ymd im DOIF. Mit $md ist eine jährliche Änderung nicht mehr notwendig, die Bedingung gilt ohne Angabe der Jahreszahl.

Eine Schwierigkeit gab es dann doch noch. Wie bekomme ich die folgende Bedingung in DOIF hin: Sonnenaufgang größer einer definierten Zeit (an der das Haustürlicht angehen soll; Einschalten nach Sonnenaufgang macht ja keinen Sinn).
Die Schwierigkeiten waren die geschweiften Klammern, die bei {sunrise()} üblicherweise genutzt werden (wegen Perlcode).

Im Forum habe ich den folgenden Beitrag gefunden:
Zitathttps://forum.fhem.de/index.php/topic,58884.0.html # Thema: Zeitintervall Ende vor Anfang wegen sunrise... wie ist Syntax korrekt?
Hier wird erklärt, dass sunrise / sunset im DOIF ohne geschweifte Klammern benutzt werden muss. Ich hab vorher die commandref und das Wiki rauf und runter gelesen, da aber keinen Hinweis gefunden.
Statt der Abfrage sunrise_abs(1130) gt "06:30" geht auch sunrise_abs(1130) gt $hms, was natürlich eleganter ist, da ja die Abfrage nach der Einschaltzeit 06:30 schon vorne drin ist.

Der Vollständigkeit halber meine beiden DOIF's (Schalter.1 schaltet die Weihnachtsbeleuchtung an der Haustür):
define Schalter.1.Schaltzeit DOIF ([06:30|8] and $md ge "11-25" and $md le "01-10" and [Feiertag.NRW] == 0 and sunrise_abs(1130) gt $hms) \
(set Schalter.1 on-till {sunrise_abs(2090,"5:00","9:30")}) \
DOELSEIF (([07:15|7] or ([07:15] and [Feiertag.NRW] == 1)) and $md ge "11-25" and $md le "01-10" and sunrise_abs(1130) gt $hms) \
(set Schalter.1 on-till {sunrise_abs(2090,"5:00","9:30")}) \
DOELSEIF ([{sunset_abs(-1200,"15:00","23:00")}] and $md ge "11-25" and $md le "01-10") \
(set Schalter.1 on-till {sunset_abs(2700,"23:17:26","23:33:43")})

und
define Haustuer.Licht.Schaltzeit DOIF ([06:45|8] and [Schalter.1] eq "off" and [Feiertag.NRW] == 0 and sunrise_abs(1130) gt $hms) \
(set Haustuer.Licht on-till {sunrise_abs(1190,"5:00","9:30")}) \
DOELSEIF (([07:45|7] or ([07:45] and [Feiertag.NRW] == 1)) and [Schalter.1] eq "off" and sunrise_abs(1130) gt $hms) \
(set Haustuer.Licht on-till {sunrise_abs(1190,"5:00","9:30")}) \
DOELSEIF ([{sunset_abs(-660,"15:00","23:00")}] and [Schalter.1] eq "off") \
(set Haustuer.Licht on-till {sunset_abs(2700,"22:13:26","23:11:43")})


Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY