Hallo Zusammen. Ich möchte ein Dummy haben, welches je nach Woche einen anderen Status hat.
Gerade Woche: "State:Gerade-Woche"
Ungerade Woche: "State:Ungerade-Woche"
Ich dachte mir, dass ich ein DOIF baue, welches Montag um 00:01 den State vom Dummy auf "Gerade Woche" setzt, sofern es eine Gerade Woche ist.
Sonntag Abend um 23:59 wird in der Geraden Woche der State auf "Ungerade Woche" gesetzt.
Ich wollte es so lösen:
define DOIF_Kinder_KW DOIF ([00:01|1] and strftime("%W",localtime)%2 == 1) (set Kinder_KW Gerade-Woche) DOELSEIF ([23:59|0] and strftime("%W",localtime)%2 == 1) (set Kinder_KW Ungerade-Woche)
Mit Testen wird es schwer werden, ich müsste es 2 Wochen laufen lassen, bis ich weiß das es geht.
Ist mein Code richtig? Kann es überhaupt funktionieren?
Ich danke euch. :)
Wen es Interessiert: Meine Kids haben im wöchentlichen Wechsel eine kleine tägliche Aufgabe zu erledigen. Ständig zoffen sie sich, wer in dieser Woche dran ist. Und ich vergesse es auch. Darum will ich einen Dummy haben, in dem zu sehen ist, ob es eine gerade oder ungerade Woche ist. Das lasse ich dann auf TabletUI anzeigen und ich habe weniger streß. :)
Warum nicht ein at, welches jeden Montag läuft?
Das würde die Woche "berechnen" und den Dummy setzen.
Mit zweimal
Zitatand strftime("%W",localtime)%2 == 1
wird das wohl nicht klappen. Das bleibt scheinbar immer auf gerade.
Zitat von: M.Piet am 24 April 2018, 07:45:05
Hallo Zusammen. Ich möchte ein Dummy haben, welches je nach Woche einen anderen Status hat.
Gerade Woche: "State:Gerade-Woche"
Ungerade Woche: "State:Ungerade-Woche"
Ich dachte mir, dass ich ein DOIF baue, welches Montag um 00:01 den State vom Dummy auf "Gerade Woche" setzt, sofern es eine Gerade Woche ist.
Sonntag Abend um 23:59 wird in der Geraden Woche der State auf "Ungerade Woche" gesetzt.
Ich wollte es so lösen:
define DOIF_Kinder_KW DOIF ([00:01|1] and strftime("%W",localtime)%2 == 1) (set Kinder_KW Gerade-Woche) DOELSEIF ([23:59|0] and strftime("%W",localtime)%2 == 1) (set Kinder_KW Ungerade-Woche)
Mit Testen wird es schwer werden, ich müsste es 2 Wochen laufen lassen, bis ich weiß das es geht.
Ist mein Code richtig? Kann es überhaupt funktionieren?
Ich danke euch. :)
Wen es Interessiert: Meine Kids haben im wöchentlichen Wechsel eine kleine tägliche Aufgabe zu erledigen. Ständig zoffen sie sich, wer in dieser Woche dran ist. Und ich vergesse es auch. Darum will ich einen Dummy haben, in dem zu sehen ist, ob es eine gerade oder ungerade Woche ist. Das lasse ich dann auf TabletUI anzeigen und ich habe weniger streß. :)
Sollte einfacher gehen:
define DOIF_Kinder_KW DOIF ([00:01|Mo] and $week % 2 == 0) (set Kinder_KW Gerade-Woche) DOELSE (set Kinder_KW Ungerade-Woche)
sollte mit cmdState auch ohne Dummy gehen.
Zitat von: Frank_Huber am 24 April 2018, 08:36:02
sollte mit cmdState auch ohne Dummy gehen.
Die Kurzversion.
Damit es auch schon morgen funktioniert, ohne Montagsabfrage:
define Kinder_KW DOIF ([00:01] and $week % 2)
attr cmdState Ungerade-Woche|Gerade-Woche
Zitat von: Damian am 24 April 2018, 08:41:42
Die Kurzversion.
Damit es auch schon morgen funktioniert, ohne Montagsabfrage:
define Kinder_KW DOIF ([00:01] and $week % 2)
attr cmdState Ungerade-Woche|Gerade-Woche
das ist wirklich kurz.
Fage von mir zum Verständnis, geht das so auch ohne DOELSE am Ende?
Zitat von: Frank_Huber am 24 April 2018, 09:13:35
das ist wirklich kurz.
Fage von mir zum Verständnis, geht das so auch ohne DOELSE am Ende?
ja, DOELSE ist ohne do always bei einer einzigen Bedingung automatisch intern immer dabei. Begründung: wenn es nicht so wäre, würde man cmd_1 nur einmal schalten können, weil man aus cmd_1 nie wieder herauskäme ;)
Super, ich danke euch. Das ist ja so wirklich viel einfacher. :)
Ich teste mal.
Ich hab es mir als "Müll-Kalender eingebaut. läuft gut.
lediglich im cmdState war es vertauscht.
defmod Abfall_KW DOIF ([00:01] and $week % 2)
attr Abfall_KW DbLogExclude .*
attr Abfall_KW cmdState Restmüll-Woche|Wertstoff-Woche
attr Abfall_KW event-on-change-reading .*
attr Abfall_KW verbose 0
also das Beispiel korrigiert:
defmod Kinder_KW DOIF ([00:01] and $week % 2)
attr Kinder_KW cmdState Gerade-Woche|Ungerade-Woche
Moin Moin,
Ich muss den hier nochmal hoch kramen.
Diese Woche ist ja KW 01. Das FHEM Log ist auch auf 2020-01. Sowohl Y%-W% als auch G%-V% bringt die korrekte Woche 01.
Mein Abfall DOIF zeigte mir aber an dass eine Gerade Woche ist?
Habe ich etwas falsch? Oder läuft in meinem System was falsch?
Hier das List:
Internals:
DEF ([00:01] and $week % 2)
FUUID 5c4aeffd-f33f-c13c-2077-dbd5982b694b7e92
MODEL FHEM
NAME Abfall_KW
NOTIFYDEV global
NR 217
NTFY_ORDER 50-Abfall_KW
STATE Wertstoff
TYPE DOIF
VERSION 23418 2020-12-26 10:04:12
.attraggr:
.attreocr:
.*
.attrminint:
READINGS:
2020-12-28 00:01:00 cmd 1
2020-12-28 00:01:00 cmd_event timer_1
2020-12-28 00:01:00 cmd_nr 1
2020-08-18 07:28:57 mode enabled
2020-12-28 00:01:00 state Wertstoff
2021-01-05 00:01:00 timer_01_c01 06.01.2021 00:01:00
Regex:
accu:
attr:
cmdState:
0:
Wertstoff
1:
Restmüll
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday) and $week % 2
days:
do:
0:
0
1:
helper:
DEVFILTER ^global$
NOTIFYDEV global
event timer_1
globalinit 1
last_timer 1
sleeptimer -1
timerdev
timerevent timer_1
triggerDev
timerevents:
timer_1
timereventsState:
timer_1
triggerEvents:
timer_1
triggerEventsState:
timer_1
interval:
intervalfunc:
localtime:
0 1609887660
perlblock:
realtime:
0 00:01:00
time:
0 00:01:00
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1609887660:
localtime 1609887660
hash:
uiTable:
Attributes:
DbLogExclude .*
cmdState Wertstoff|Restmüll
event-on-change-reading .*
Wieso gerade?
$week % 2 ist gerade bei Ergebnis 0, sonst 1
ab dem 04.01 ist $week 1, daher ungerade -> Ergebnis 1
vor dem 04.01 war $week 53, also auch ungerade -> Ergebnis 1
Für den wöchentlichen Wechsel ist diese Prüfung beim Jahresübergang tatsächlich ungeeignet.
Zitat von: Damian am 05 Januar 2021, 11:52:02
Wieso gerade?
$week % 2 ist gerade bei Ergebnis 0, sonst 1
ab dem 04.01 ist $week 1, daher ungerade -> Ergebnis 1
vor dem 04.01 war $week 53, also auch ungerade -> Ergebnis 1
Für den wöchentlichen Wechsel ist diese Prüfung beim Jahresübergang tatsächlich ungeeignet.
Danke Damian!
Ich war durch Unwissenheit davon ausgegangen dass CMD_1 gerade ist. :-)
Jetzt ist es klar. Werde mir einen Kommentar in das DOIF schreiben.
Bei uns kommt Restmüll und Wertstoff im Wochenwechsel. Das lässt sich damit ganz gut abbilden.
Aber klar ist (jetzt) auch, Wenn ein Jahr 53 Wochen hat muss ich das DOIF im neuen Jahr anpassen da die Abfuhr ja auch wechselt.