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

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

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo,

ich möchte der Übersichtlichkeit halber jeweils 3 at-Befhele zur Steuerung der Außenbeleuchtung in einem DOIF zusammenfassen.
Was sich zunächst als lösbare Aufgabe darstellte, gelingt mir leider auch nach etlichen Versuchen nicht.

Die 3 at-Befehle für das Haustürlicht:
define Haustuer.Licht.1WT at *06:45 {if(sunrise_abs(1130) gt "06:45" && !($we) && !(Value("Feiertag_NRW")) && (ReadingsVal("Schalter.1","state","off") eq "off")) \
{fhem 'set Haustuer.Licht on-till {sunrise_abs(1190,"5:00","9:30")}'}}
define Haustuer.Licht.1WE at *07:30 {if(sunrise_abs(1130) gt "07:30" && ($we || (Value("Feiertag_NRW"))) && (ReadingsVal("Schalter.1","state","off") eq "off")) \
{fhem 'set Haustuer.Licht on-till {sunrise_abs(1190,"5:00","9:30")}'}}
define Haustuer.Licht.2 at *{sunset_abs(-660,"15:00","23:00")} IF ([Schalter.1] eq "off") ((set Haustuer.Licht on-till {sunset_abs(2700,"22:13:26","23:11:43")}))


Das Haustürlicht wird in der Weihnachtszeit nicht eingeschaltet, wenn die Lichterkette (Schalter.1) an ist.
Die 3 at-Befehle für den Schalter.1, der für die Weihnachstbeleuchtung sorgt:
define Schalter.1.1WT at *06:30 {if(time ge time_str2num("2017-11-27 00:00:10") && time le time_str2num("2018-01-07 23:59:50") && sunrise_abs(1130) gt "06:30" && !($we) && !(Value("Feiertag_NRW"))) \
{fhem 'set Schalter.1 on-till {sunrise_abs(2090,"5:00","9:30")}'}}
define Schalter.1.1WE at *07:15 {if(time ge time_str2num("2017-11-27 00:00:10") && time le time_str2num("2018-01-07 23:59:50") && sunrise_abs(1130) gt "07:15" && ($we || (Value("Feiertag_NRW")))) \
{fhem 'set Schalter.1 on-till {sunrise_abs(2090,"5:00","9:30")}'}}
define Schalter.1.2 at *{sunset_abs(-1200,"15:00","23:00")} {if(time ge time_str2num("2017-11-27 00:00:10") && time le time_str2num("2018-01-07 23:59:50")) \
{fhem 'set Schalter.1 on-till {sunset_abs(2700,"23:17:26","23:33:43")}'}}


Egal welche Kombinationen aus runden, geschweiften oder eckigen Klammern ich auch benutze, ich komme nicht zu einem funktionierenden DOIF.
Kann mir jemand dabei helfen?

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

KernSani

Hi Gisbert,

mal abgesehen von der Frage, warum du ein funktionierendes "at" in ein DOIF umbauen möchtest: Ich würde vorschlagen, du tastest dich langsam an dein Vorhaben heran - die Beispiele in der CommandRef sollten dabei helfen.
Wenn das nicht weiter hilft, poste dein (erfolgloses) DOIF hier, dann kommen wir da sicher weiter....

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

igami

Was hast du denn bisher versucht? In der Commandref sind doch einige beispiele DOIF  Zeitsteuerung.
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

#3
Hallo KernSani und igami,

da hätte ich mir meine ganzen erfolglosen Versuche besser aufschreiben sollen.
Die Commandref hab ich rauf und runter gelesen, aber nichts passendes gefunden.

Eine Variante die nicht funktioniert hat, ist diese:
define Haustuer.Licht.Schaltzeit DOIF ([06:45] and ({sunrise_abs(1130) gt "06:45" && !($we) && !(Value("Feiertag_NRW"))}) and [Schalter.1] eq "off") \
(set Haustuer.Licht on-till {sunrise_abs(1190,"5:00","9:30")}) \
DOELSEIF ([07:30] and ({sunrise_abs(1130) gt "07:30" && ($we || (Value("Feiertag_NRW")))}) and [Schalter.1] eq "off") \
(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")})


und diese:
define Schalter.1.Schaltzeit DOIF ([06:30] and {time ge time_str2num("2017-11-27 00:00:10") && time le time_str2num("2018-01-07 23:59:50") && sunrise_abs(1130) gt "06:30" && !($we) && !(Value("Feiertag_NRW"))}) \
(set Schalter.1 on-till {sunrise_abs(2090,"5:00","9:30")}) \
DOELSEIF ([07:15] and {time ge time_str2num("2017-11-27 00:00:10") && time le time_str2num("2018-01-07 23:59:50") && sunrise_abs(1130) gt "07:15" && ($we || (Value("Feiertag_NRW")))}) \
(set Schalter.1 on-till {sunrise_abs(2090,"5:00","9:30")}) \
DOELSEIF ([{sunset_abs(-1200,"15:00","23:00")}] and {time ge time_str2num("2017-11-27 00:00:10") && time le time_str2num("2018-01-07 23:59:50")}) \
(set Schalter.1 on-till {sunset_abs(2700,"23:17:26","23:33: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

Ellert

Mich würde mal interessieren für welchen Breitengrad diese Angabe {sunset_abs(2700,"23:17:26","23:33:43")} sinnvoll ist und etwas anderes als 23:17:26 zurückliefert?

Gisbert

Hallo Ellert,

ich mags gerne hell, das war Absicht; Breitengrad NRW.
Zugegebenermaßen hätte ich auch gleich eine feste Zeitangabe nehmen können.
Vermutlich war's mal anderes angedacht und hat sich dann zu dem unsinnigen Code entwickelt.

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

KernSani

In der ersten Zeile sitzt schonmal eine schließende Klammer zu viel...  (vor "and [Schalter1]")






RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Ellert

Also, die Set-Befehle sehen funktionsfähig aus.

Ich sehe, dass Du Wochentagsteuerung einsetzt, dazu gibt es in der Befehlsreferenz ein Kapitel das solltest Du erstmal umsetzen, zunächst beim ersten DOIF.

igami

Was sicherlich hilft ist das formatieren des Codes. also anstatt alles in eine Zeile zu schreiben ruhig mal einen Umbruch machen
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

Ellert

Und wenn Du den DEF-Editor mit codemirror verwendest, dann ist eine Klammerprüfung enthalten, siehe: https://wiki.fhem.de/wiki/DOIF/Tipps_zur_leichteren_Bedienung

igami

noch ein Frage: was soll 'time ge time_str2num("2017-11-27 00:00:10")' bewirken?
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 igami,

Zitat von: igami am 12 Februar 2017, 17:04:39
noch ein Frage: was soll 'time ge time_str2num("2017-11-27 00:00:10")' bewirken?
Das ist die Abfrage für die Weihnachtsbeleuchtung, d.h wenn die aktuelle Zeit größer als 27.11.2017 und kleiner als 8.1.2018 ist, dann soll Schalter.1 angeschaltet werden.

Hallo Ellert,
die Wochentagssteuerung und den DEF-Editor schaue ich mir an.
Im Moment bin ich allerdings erkältungs/grippe-geschwächt und nicht Herr meiner Sinne  :'(

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

igami

Zitat von: Gisbert am 12 Februar 2017, 17:13:08
Hallo igami,
Das ist die Abfrage für die Weihnachtsbeleuchtung, d.h wenn die aktuelle Zeit größer als 27.11.2017 und kleiner als 8.1.2018 ist, dann soll Schalter.1 angeschaltet werden.
und das willst du dann jedes Jahr anpassen?
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

Ellert

ZitatIm Moment bin ich allerdings erkältungs/grippe-geschwächt und nicht Herr meiner Sinne.
Und da dachtest Du Dir, wir würden die Umstellung für Dich erledigen.

Gute Besserung

Gisbert

Hallo Ellert und igami,

es gibt ja nur einmal im Jahr Weihnachten. Ich kann mir zwar vorstellen, dass man das auch automatisieren kann, x Tage vor 25.12. und y Tage nach 25.12., allerdings geht das bei weitem über meine Möglichkeiten.

Zitat von: Ellert am 12 Februar 2017, 17:48:54
Und da dachtest Du Dir, wir würden die Umstellung für Dich erledigen.
Gute Besserung
Danke für die Besserungswünsche. Es geht ja ums Selbermachen und Anleitungen bzw. Erklärungen zu übernehmen.
Mein Hinweis wollte ich nur so verstanden wissen, dass falls ich nicht kurzfristig antworte, darin die Erklärung zu suchen ist.

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