Prüfung Zeitebereich mit Daten aus dummy (Datum Problem)

Begonnen von tunguskar, 04 August 2020, 22:23:42

Vorheriges Thema - Nächstes Thema

Sany

Du kannst es einfacher, und vielleicht verständlicher machen: Ich versuch es mal in Deiner Schreibweise:
Zitatdoif (aktiverZeitbereich AND schalterStehtAufAuto) (schalteVentilEin) elseIf (schalterStehtAufAuto OR schalterStehtAufDeaktivieren) (schalteVentilAus) else (schalteVentilAus)

könnte auch so aussehen:
doif (Startzeit AND schalterStehtAufAuto) (schalteVentilEin) DoelseIf (Stoppzeit OR schalterStehtAufAuto OR schalterStehtAufDeaktivieren) (schalteVentilAus)

wenn Du in DOIF einen Zeitbereich angibst [xx:xx-yy:yy] passiert nichts anderes, als dass 2 timer angelegt werden mit den Zeiten xx:xx und yy:yy. Zum Zeitpunkt xx:xx wird der "Zeitbereich" in der Bedingung wahr (true), zum Zeitpunkt yy:yy wird er unwahr (false). Mehr nicht! Das DOIF "denkt" da nicht irgendwie innerhalb oder ausserhalb eines Bereiches, es geht nur um Zeitpunkte, die den "Zeitbereich" triggern.
Der Hinweis auf die CommandRef von amenomade bzgl. Abarbeiten der bedingungen und wann damit aufgehört wird ist allerdings sehr wichtig fürs Verständnis von DOIF.

Gruß
Sany

P.S. wie auch schon häufigst erwähnt und gebeten: Code, Device-Definitionen und Lists von Devices in Code-tags, das ist viel leserlicher und man könnte auch einfach mal eine (funktionierende) Korrektur machen.
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

tunguskar

Zitat von: amenomade am 06 August 2020, 22:15:33
not[begin-end] geht ja nicht... aber [end-begin] geht.

Zum Verständnis hilft das Lesen von CommandRef:
Du musst im Sinn von EVENTS denken. Das kann man auch in C++ machen, das ist aber ein andere Art von Programmierung als eine sequenzielle  Programmierung.

Wenn ich grob schematisiere:

DOIF([begin-end]) bedeutet irgendwie "wenn begin oder end erreicht werden (das sind Zeit Events), ist diese Bedingung betroffen, und es wird getestet, ob es wahr ist, und ggf den Befehl ausgeführt".

DOIF ([device:reading] eq "blabla") bedeutet "wenn ein Event auf Device / Reading kommt, ist diese Bedingung betroffen, und ...

Jetzt hab ich's dank dir so gehts.

tunguskar

Zitat von: Sany am 06 August 2020, 23:19:00
Du kannst es einfacher, und vielleicht verständlicher machen: Ich versuch es mal in Deiner Schreibweise:
könnte auch so aussehen:
doif (Startzeit AND schalterStehtAufAuto) (schalteVentilEin) DoelseIf (Stoppzeit OR schalterStehtAufAuto OR schalterStehtAufDeaktivieren) (schalteVentilAus)

wenn Du in DOIF einen Zeitbereich angibst [xx:xx-yy:yy] passiert nichts anderes, als dass 2 timer angelegt werden mit den Zeiten xx:xx und yy:yy. Zum Zeitpunkt xx:xx wird der "Zeitbereich" in der Bedingung wahr (true), zum Zeitpunkt yy:yy wird er unwahr (false). Mehr nicht! Das DOIF "denkt" da nicht irgendwie innerhalb oder ausserhalb eines Bereiches, es geht nur um Zeitpunkte, die den "Zeitbereich" triggern.
Der Hinweis auf die CommandRef von amenomade bzgl. Abarbeiten der bedingungen und wann damit aufgehört wird ist allerdings sehr wichtig fürs Verständnis von DOIF.

Gruß
Sany

P.S. wie auch schon häufigst erwähnt und gebeten: Code, Device-Definitionen und Lists von Devices in Code-tags, das ist viel leserlicher und man könnte auch einfach mal eine (funktionierende) Korrektur machen.

Dank dir für die Erklärung, jetzt wird's klarer. Das mit der device-Definition Kommt dann noch :)