[GELÖST]Zeitkonstanten wie $month ohne Trigger

Begonnen von dennisk, 10 September 2022, 10:21:10

Vorheriges Thema - Nächstes Thema

dennisk

Hallo,

ich habe folgende DOIF-Bedingung (beispielhaft, in den genauso aufgebauten DOELSEIF kommen die anderen Monate vor):
([Fensterkontakt] eq "open" and ($month == 1 || $month == 2 || $month == 12)) {}

Dies funktioniert auch soweit wie gewünscht, aber triggert leider auch zu viel: eigentlich soll das ganze nur auf den Fensterkontakt reagieren und dann geprüft werden, welcher Monat aktuell ist. Mir ist jetzt aber aufgefallen, dass beim Monatswechsel auch getriggert wird. Mein naiver Versuch, ?$month für die ausschließliche Prüfung ohne Event-Trigger zu verwenden, hat leider nicht geklappt. Gibt es einen Weg, das mit DOIF zu erreichen, kann DOIF das überhaupt? Wenn weitere Infos benötigt werden, liefere ich die gerne.
Meine Google- und Foren-Suche war leider erfolglos, zumindest mit den mir einfallenden Suchbegriffen.
Vielen Dank schon mal.

Gisbert

Hallo dennisk,

ich würde versuchen, die Monate in den Ausführungsteil zu schieben und dort wie folgt abfragen:
{IF ($month == (1|2|12)) ()}

Es ist nicht geprüft, sollte aber funktionieren. Keine Garantie, dass es nicht eine viel bessere oder elegantere Lösung gibt.

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

DetlefR

Benutze mal logische Verknüpfungen aus dem gleichen Level.
Also entweder && || oder and or
Ich vergesse das auch immer wieder was zuerst kommt && oder and Aber so kann man sich wenigstens sicher sein, dass nicht einer der beiden unerwartet Vorrang hat.

Per

Ich kann mir nicht vorstellen, dass da die Monate triggern. Da verheimlichst du uns was vom Quellcode.
Ansonsten würde ich mit =~ arbeiten, das dürfte besser zu pflegen sein.

Evtl gibt es auch eine ganz andere Lösung, aber auch da bräuchte man das gesamte List.

Damian

1. $month triggert nicht - es ist eine Perlvariable
2.  $month == (1|2|12) geht nicht, wenn schon, dann $month =~ "(1|2|12)"
3. Operatorenreihenfolge siehe: http://perl-seiten.privat.t-online.de/html/perl_op.html
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dennisk

Hallo zusammen,

vielen vielen Dank für eure Antworten erstmal! Und ich muss mich entschuldigen, dass ich erst jetzt dazu komme, mich wieder zu melden.
Es ist mir peinlich, aber das Fehlverhalten rührt wohl daher, dass ich beim DOIF versehentlch do always gesetzt hatte. Beim nächsten Mal denke ich direkt dran, ein list einzustellen, dann wäre sicherlich aufgefallen.

Danke in die Runde, den Thread schließe ich direkt.