FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: prenzela am 19 Februar 2025, 18:54:35

Titel: (gelöst) Wochentage / Feiertage
Beitrag von: prenzela am 19 Februar 2025, 18:54:35
Hallo,

Ich habe im global Device die Feiertage für BY hinterlegt. Jetzt möchte ich ein Gerät Mo-Fr von 6-22 Uhr und Samstag von 6-13 Uhr schalten. Fällt einer der Tage jedoch auf einen Feiertag, soll nichts passieren. Ist das durch  mein erstelltes DOIF bereits abgedeckt oder fehlt da noch was ? Ich werde aus den Beispielen nicht schlau oder hab ich was überlesen ?

define di_Feiertage_Test DOIF ([06:00-22:00|1-5] or [06:00-13:00|6]) (set myswitch1_h on) DOELSE (set myswitch1_h off)

Danke
Titel: Aw: Wochentage / Feiertage
Beitrag von: rabehd am 19 Februar 2025, 19:29:40
Wo ist die Bedingung "nicht Feiertag"?
Titel: Aw: Wochentage / Feiertage
Beitrag von: prenzela am 20 Februar 2025, 09:13:31
Lösung: define di_Feiertage_Test DOIF (([06:00-22:00|12345] or [06:00-13:00|6]) and !$we) (set myswitch1_h on) DOELSE (set myswitch1_h off)

Mit [06:00-22:00|1-5] funktioniert es nicht.
Titel: Aw: (gelöst) Wochentage / Feiertage
Beitrag von: Damian am 20 Februar 2025, 09:33:45
Zitat von: prenzela am 20 Februar 2025, 09:13:31Mit [06:00-22:00|1-5] funktioniert es nicht.

Wo steht denn diese Syntax?
Titel: Aw: (gelöst) Wochentage / Feiertage
Beitrag von: tobi01001 am 20 Februar 2025, 09:48:28
Zitat von: prenzela am 20 Februar 2025, 09:13:31Lösung: define di_Feiertage_Test DOIF (([06:00-22:00|12345] or [06:00-13:00|6]) and !$we) (set myswitch1_h on) DOELSE (set myswitch1_h off)

Mit [06:00-22:00|1-5] funktioniert es nicht.
Sicher? Ich glaub $we schließt den Samstag mit ein und somit wird [06:00-13:00|6] zwar "wahr" aber in Verbindung mit !$we eben nicht).
$we = Wochenende oder Feiertag.

Schau mal da:https://wiki.fhem.de/wiki/Wochenende,_Feiertage_und_Schulferien#IsWe() (https://wiki.fhem.de/wiki/Wochenende,_Feiertage_und_Schulferien#IsWe())
Damit müsste man die Samstage, die kein Feiertag sind ausschließen können.

Oder für den Fall [06:00-13:00|6] bzw generell ein holiday device abfragen (Anstatt !$we ein ([he:state] eq "none")
Titel: Aw: (gelöst) Wochentage / Feiertage
Beitrag von: rabehd am 20 Februar 2025, 11:15:25
Zitat von: prenzela am 20 Februar 2025, 09:13:31Lösung: define di_Feiertage_Test DOIF (([06:00-22:00|12345] or [06:00-13:00|6]) and !$we) (set myswitch1_h on) DOELSE (set myswitch1_h off)

Mit [06:00-22:00|1-5] funktioniert es nicht.

Warum nicht mit Codetag?
define di_Feiertage_Test DOIF (([06:00-22:00|12345] or [06:00-13:00|6]) and !$we) (set myswitch1_h on) DOELSE (set myswitch1_h off)
Titel: Aw: (gelöst) Wochentage / Feiertage
Beitrag von: Bartimaus am 20 Februar 2025, 12:41:23
Warum nicht:

define di_Feiertage_Test DOIF ([06:00-22:00|68]]) (set myswitch1_h on)
DOELSE (set myswitch1_h off)
Titel: Aw: (gelöst) Wochentage / Feiertage
Beitrag von: rabehd am 20 Februar 2025, 15:44:36
Zitat von: Bartimaus am 20 Februar 2025, 12:41:23Warum nicht:

define di_Feiertage_Test DOIF ([06:00-22:00|68]]) (set myswitch1_h on)
DOELSE (set myswitch1_h off)
Weil Du die 13:00 für die Wochenden übersehen hast.
Titel: Aw: (gelöst) Wochentage / Feiertage
Beitrag von: tobi01001 am 20 Februar 2025, 16:16:57
Zitat von: rabehd am 20 Februar 2025, 15:44:36Weil Du die 13:00 für die Wochendende übersehen hast.
Fast:
Wochentags von 6 - 22 sofern kein Feiertag und Samstag von 6 - 13 sofern kein Feiertag.


Also:
Wenn((nicht feiertag) und (6-22 und Wochentag) oder (6-13 und Samstag))) dann an, sonst aus.defmod di_Feiertage_Test DOIF ([holidaydev:today] eq "none" and ([06:00-22:00|12345] or [06:00-13:00|6])) (set myswitch1_h on) DOELSE (set myswitch1_h off)
Titel: Aw: (gelöst) Wochentage / Feiertage
Beitrag von: rabehd am 20 Februar 2025, 16:47:43
Zitat von: prenzela am 19 Februar 2025, 18:54:35Fällt einer der Tage jedoch auf einen Feiertag, soll nichts passieren.

DOELSE (set myswitch1_h off)

Danke

Da passt Anforderung und Umsetzung nicht zusammen.
Titel: Aw: (gelöst) Wochentage / Feiertage
Beitrag von: tobi01001 am 20 Februar 2025, 17:16:39
Zitat von: rabehd am 20 Februar 2025, 16:47:43
Zitat von: prenzela am 19 Februar 2025, 18:54:35Fällt einer der Tage jedoch auf einen Feiertag, soll nichts passieren.

DOELSE (set myswitch1_h off)

Danke

Da passt Anforderung und Umsetzung nicht zusammen.
Ja OK, ist ein wenig antizipiert und würde Feiertags ausschalten. Ich würde annehmen, dass das im Sinne des TE ist. Ansonsten:
defmod di_Feiertage_Test DOIF ([holidaydev:today] ne "none") (\
### hier passiert am Feiertag nichts\
)\
DOELSEIF ([holidaydev:today] eq "none" and ([06:00-22:00|12345] or [06:00-13:00|6])) (set myswitch1_h on) \
DOELSE (set myswitch1_h off)
Titel: Aw: (gelöst) Wochentage / Feiertage
Beitrag von: Bartimaus am 20 Februar 2025, 17:51:17
Warum nicht:
define di_Feiertage_Test DOIF ([06:00-22:00|8] or [06:00-13:00|6])
 (set myswitch1_h on)
 DOELSE (set myswitch1_h off)

Schau Dir mal die Bedeutung von [time|7] oder [time|8] an
Titel: Aw: (gelöst) Wochentage / Feiertage
Beitrag von: tobi01001 am 20 Februar 2025, 18:06:37
Zitat von: Bartimaus am 20 Februar 2025, 17:51:17Warum nicht:
define di_Feiertage_Test DOIF ([06:00-22:00|8] or [06:00-13:00|6])
 (set myswitch1_h on)
 DOELSE (set myswitch1_h off)

Schau Dir mal die Bedeutung von [time|7] oder [time|8] an
Ja,
Zitat7 Wochenende und Feiertage (entspricht $we), 8 Arbeitstag (entspricht !$we)

Wo ist berücksichtigt, wenn der Samstag ein Feiertag ist und wenn der Samstag kein Feiertag ist?
Titel: Aw: (gelöst) Wochentage / Feiertage
Beitrag von: Bartimaus am 20 Februar 2025, 18:27:42
Ok, das wird bei ,,7" nicht berücksichtigt. Nur ob WE ODER Feiertag
Titel: Aw: (gelöst) Wochentage / Feiertage
Beitrag von: Damian am 21 Februar 2025, 09:41:08
Nur mal zur Info.

DOIF wertet selbst $we aus. Da bei $we nicht zwischen Wochenende und Feiertag unterschieden wird, ist die einzig sinnvolle Lösung selbst das holiday-Device abzufragen, wie in der Lösung von @tobi01001