(gelöst) Wochentage / Feiertage

Begonnen von prenzela, 19 Februar 2025, 18:54:35

Vorheriges Thema - Nächstes Thema

prenzela

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

rabehd

Wo ist die Bedingung "nicht Feiertag"?
Auch funktionierende Lösungen kann man hinterfragen.

prenzela

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.

Damian

Zitat von: prenzela am 20 Februar 2025, 09:13:31Mit [06:00-22:00|1-5] funktioniert es nicht.

Wo steht denn diese Syntax?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tobi01001

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()
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")
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

rabehd

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)
Auch funktionierende Lösungen kann man hinterfragen.

Bartimaus

Warum nicht:

define di_Feiertage_Test DOIF ([06:00-22:00|68]]) (set myswitch1_h on)
DOELSE (set myswitch1_h off)
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

rabehd

#7
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.
Auch funktionierende Lösungen kann man hinterfragen.

tobi01001

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)
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

rabehd

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.
Auch funktionierende Lösungen kann man hinterfragen.

tobi01001

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)
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

Bartimaus

#11
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
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

tobi01001

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?
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

Bartimaus

Ok, das wird bei ,,7" nicht berücksichtigt. Nur ob WE ODER Feiertag
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF