DOIF und Kalenderwoche erstellen

Begonnen von moonsorrox, 26 Februar 2018, 19:00:40

Vorheriges Thema - Nächstes Thema

rabehd

Ich habe hier wieder einiges gelernt.
Trotzdem käme ich nie auf die Idee sowas per DOIF zu machen.
Entweder im at, welches jede Nacht läuft und welches dann ein dummy setzen würde oder nur als at.
Es gibt viele Wege, richtig tolle Lösungen und auch welche die ich auf Anhieb verstehe  ;). Hauptsache man weiss nach 3 Wochen noch was man getan hat. :P
Auch funktionierende Lösungen kann man hinterfragen.

Damian

Zitat von: rabehd am 27 Februar 2018, 20:31:13
Ich habe hier wieder einiges gelernt.
Trotzdem käme ich nie auf die Idee sowas per DOIF zu machen.
Entweder im at, welches jede Nacht läuft und welches dann ein dummy setzen würde oder nur als at.
Es gibt viele Wege, richtig tolle Lösungen und auch welche die ich auf Anhieb verstehe  ;). Hauptsache man weiss nach 3 Wochen noch was man getan hat. :P

Dann dürfte mein letzter Vorschlag für Dich auch in 3 Wochen verständlich sein (entspricht at mit Setzen eines Readings). Und falls du nicht bis 00:00 Uhr beim at warten willst, sondern direkt nach der Definition schon die korrekte Woche im Status haben willst, dann geht so etwas neuerdings auch mit:

define week DOIF init {set_Reading ("state",strftime ('%W', localtime),1)}
{if ([00:00]) {set_Reading ("state",strftime ('%W', localtime),1)}}


In beiden Fällen brauchst du nicht zusätzlich ein weiteres Device in Form eines Dummys zu definieren. ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Oder auch direkt die Variable $week aus DOIF nutzen, sie wird bereits im DOIF gesetzt:

define week DOIF init{set_Reading ("state",$week,1)}
{if ([00:00]) {set_Reading ("state",$week,1)}}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Und noch ein Nebeneffekt der neuen Features.

Auch beim Hochfahren des Systems wird durch den init-Block der Status mit der korrekten Woche belegt. D. h. damit hat man zu jedem Zeitpunkt die korrekte Woche (auch wenn das System zwischendurch über eine Woche nicht laufen sollte) ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat von: moonsorrox am 26 Februar 2018, 19:00:40
Ich möchte gern mit DOIF die Kalenderwoche anzeigen lassen in der 99_myUtils habe ich dafür ein Perlcode.
Jetzt dachte ich ich kann das so machen, funktioniert aber nicht, hat jemand ein Tipp was da falsch ist..?

defmod di_kalenderwoche DOIF ([18:51])
attr di_kalenderwoche room System
attr di_kalenderwoche state {getWeekNumber()}
...


Nach dem wir alle denkbaren Lösungsansätze geklärt haben, hier die Lösung des ersten Posts:

attr di_kalenderwoche state {(getWeekNumber())}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

Zitat von: Damian am 27 Februar 2018, 22:23:06
Nach dem wir alle denkbaren Lösungsansätze geklärt haben, hier die Lösung des ersten Posts:

attr di_kalenderwoche state {(getWeekNumber())}

Gerade eben habe ich den Code aus der 99_myUtils geschmissen..!!!  :-\
Weil ich die Lösungen hier einmal nachvollziehen wollte und verstehen

Nun habe ich mit den letzten Vorschlägen das nicht hin bekommen weil er mir beim erstellen den Fehler liefert, braucht dieses ein DOIF welches nicht über das Update kommt..?
di_week DOIF: no left bracket of condition: init{set_Reading ("state",$week,1)} {if ([22:30]) {set_Reading ("state",$week,1)}}

Diese Lösung hier funktioniert jetzt bei mir:
state {(strftime ('%W', localtime))}

Aber ich möchte die anderen auch verstehen..
DIesen Code hier im state ist denke ich nicht richtig, denn es funktioniert nicht
init{set_Reading ("state",$week,1)} {if ([22:30]) {set_Reading ("state",$week,1)}}
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 27 Februar 2018, 22:45:58
Gerade eben habe ich den Code aus der 99_myUtils geschmissen..!!!  :-\
Weil ich die Lösungen hier einmal nachvollziehen wollte und verstehen

Nun habe ich mit den letzten Vorschlägen das nicht hin bekommen weil er mir beim erstellen den Fehler liefert, braucht dieses ein DOIF welches nicht über das Update kommt..?
di_week DOIF: no left bracket of condition: init{set_Reading ("state",$week,1)} {if ([22:30]) {set_Reading ("state",$week,1)}}

Diese Lösung hier funktioniert jetzt bei mir:
state {(strftime ('%W', localtime))}

Aber ich möchte die anderen auch verstehen..
DIesen Code hier im state ist denke ich nicht richtig, denn es funktioniert nicht
init{set_Reading ("state",$week,1)} {if ([22:30]) {set_Reading ("state",$week,1)}}

Die neue Syntax ist erst ein paar Tage alt und noch nicht eingecheckt. Ich dachte es hat sich schon rumgesprochen ;) https://forum.fhem.de/index.php/topic,84969.0.html
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

andies

Ich hatte es bisher mit dem Befehl $week gemacht (siehe unten im DEF),  aber heute ergab das falsche Angaben; weiß jemand warum?
Internals:
   DEF        init{[00:00];set_State($week)}
   FUUID      5ff05639-f33f-1115-c94e-3c6467f368ef0c2b
   FVERSION   98_DOIF.pm:0.241000/2021-03-27
   MODEL      Perl
   NAME       DOIFweek
   NOTIFYDEV  global
   NR         436
   NTFY_ORDER 50-DOIFweek
   STATE      52
   TYPE       DOIF
   VERSION    24100 2021-03-27 20:15:23
   READINGS:
     2022-01-02 00:00:00   block_init      executed
     2021-01-02 12:17:13   mode            enabled
     2022-01-02 00:00:00   state           52
     2022-01-02 00:00:00   timer_01_c01    03.01.2022 00:00:00
   Regex:
     accu:
   condition:
     0          ::DOIF_time_once($hash,0,$wday);set_State($week)
   days:
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     triggerDev
     triggerEvents:
       timer_1
     triggerEventsState:
       timer_1
   interval:
   intervalfunc:
   localtime:
     0          1641164400
   perlblock:
     0          init
     init       0
   realtime:
     0          00:00:00
   time:
     0          00:00:00
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1641164400:
       localtime  1641164400
       hash:
   uiTable:
Attributes:
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann