neue Features: Wochentage mit Namen, Überarbeitung für indirekte Timer

Begonnen von Damian, 20 März 2017, 23:00:58

Vorheriges Thema - Nächstes Thema

Damian

1) Wochentage

Mit folgender Version kann man jetzt eigene Wochentag-Benennungen vornehmen.

Es gibt jetzt das Attribut weekdays, mit diesem können statt Zahlenangaben beliebige Wochentag-Benennungen definiert werden.

Die Angaben werden mit Komma getrennt definiert und müssen mit Sonntag ( 0 ) beginnen und mit Arbeitstagen ( 8 ) enden.

Beispiel:

di_test attr weekdays So,Mo,Di,Mi,Do,Fr,Sa,WE,AT

Angabe in der Definition:


DOIF ([10:00|SoMo])...


oder z. B.

di_mydoif attr weekdays Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Wochenende,Arbeitstage

DOIF ([10:00|Arbeitstage])

Es wird wie bisher nach dem Vorkommen der Wochentagnamen gesucht, egal was sonst drin steht. Mit der obigen Definition funktioniert also auch:

DOIF ([10:00|Montag,Dienstag,blabla, Donnerstag    sonstwas §$%Arbeitstageasdlfkj])...

Selbstverständlich funktioniert die Ersetzung auch bei indirekten Wochentagangaben aus Readings oder Dummys.

set wochentag Montag,Wochenende

DOIF ([10:00|[wochentag]])...


2) Timer-Management für indirekte Timer wurde überarbeitet. Eine fehlerhafte Definition führte bisher zum Fehler bei der Definition eines DOIF-Moduls - das Modul wurde beim Hochfahren nicht angelegt. Nun wird das DOIF-Modul angelegt, im jeweiligen Timer wird eine entsprechende Meldung abgelegt. Sobald der fehlerhafte Timer zur Laufzeit korrigiert wird, wird der entsprechende Timer gesetzt.

Das Modul ist wie immer voll abwärtskompatibel.

Edit: Version wurde eingecheckt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ToKa

Hallo,

das ist eine super Erweiterung mit den Wochentagen, da z.B. die FritzBox beim Wecker im reading alarm1_wday die Wochentage als Text liefert. Allerdings mit einem Leerzeichen getrennt z.B.: "Mo Tu We Th Fr". Wenn ich Deine Beschreibung richtig verstehe, müsste ich also die Leerzeichen eliminieren?

Beste Grüße
Torsten
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

Damian

Zitat von: ToKa am 20 März 2017, 23:19:28
Hallo,

das ist eine super Erweiterung mit den Wochentagen, da z.B. die FritzBox beim Wecker im reading alarm1_wday die Wochentage als Text liefert. Allerdings mit einem Leerzeichen getrennt z.B.: "Mo Tu We Th Fr". Wenn ich Deine Beschreibung richtig verstehe, müsste ich also die Leerzeichen eliminieren?

Beste Grüße
Torsten

nein. Wie schon beschrieben: es ist egal was sonst noch drinsteht, Leerzeichen oder sonstwas. Es reicht die Definition attr weekdays Su,Mo,Tu,We,Th,Fr,Sa

und dann die Angabe in der Definition des DOIF: DOIF ([<zeit>|[alarm1_wday]])...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ToKa

ZitatDas liefert im Timer timer_01_c01  21.03.2017 06:15:00|[StarGateAP1:alarm2_wdays]
Müssten dort nicht jetzt die Wochentage auftauchen?

nein, es entspricht der bisherigen Vorgehensweise: die indirekte Wochentagangabe erscheint beim Timer, sie wird erst zum Triggerzeitpunkt ausgewertet.
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

the ratman

hehe,
ich finds echt genial!

auf diesem wege nochmal vielen, vielen dank, dass du dich der idee angenommen hast und dann auch noch so derartig rasant reagiert hast!
gelöst hast is ja - wie immer - genial.

kanns kaum erwarten, dass du das offiziell machst. wann denkst den, wirds soweit sein und als offizielles update kommen?
→do↑p!dnʇs↓shit←

devo

Hallo Damian,
habe dein Modul aus dem ersten Beitrag heruntergeladen und Fhem neu gestartet. Bekomme aber folgende Fehlemeldungen:

2017.03.21 10:56:41 1: reload: Error:Modul 98_DOIF deactivated:
Global symbol "$lastWarningMsg" requires explicit package name at ./FHEM/98_DOIF.pm line 1088.
Global symbol "$lastWarningMsg" requires explicit package name at ./FHEM/98_DOIF.pm line 1095.
Global symbol "$lastWarningMsg" requires explicit package name at ./FHEM/98_DOIF.pm line 1096.
Global symbol "$lastWarningMsg" requires explicit package name at ./FHEM/98_DOIF.pm line 1097.
Global symbol "$lastWarningMsg" requires explicit package name at ./FHEM/98_DOIF.pm line 1101.


Fehlt da noch etwas, mache ich was falsch. Würde das neue Feature gerne nutzen.

Viele Grüße

devo


Damian

Zitat von: devo am 21 März 2017, 11:09:07
Hallo Damian,
habe dein Modul aus dem ersten Beitrag heruntergeladen und Fhem neu gestartet. Bekomme aber folgende Fehlemeldungen:

2017.03.21 10:56:41 1: reload: Error:Modul 98_DOIF deactivated:
Global symbol "$lastWarningMsg" requires explicit package name at ./FHEM/98_DOIF.pm line 1088.
Global symbol "$lastWarningMsg" requires explicit package name at ./FHEM/98_DOIF.pm line 1095.
Global symbol "$lastWarningMsg" requires explicit package name at ./FHEM/98_DOIF.pm line 1096.
Global symbol "$lastWarningMsg" requires explicit package name at ./FHEM/98_DOIF.pm line 1097.
Global symbol "$lastWarningMsg" requires explicit package name at ./FHEM/98_DOIF.pm line 1101.


Fehlt da noch etwas, mache ich was falsch. Würde das neue Feature gerne nutzen.

Viele Grüße

devo

Du brauchst die aktuelle Version von fhem.pl
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zitat von: the ratman am 21 März 2017, 11:02:11
hehe,
ich finds echt genial!

auf diesem wege nochmal vielen, vielen dank, dass du dich der idee angenommen hast und dann auch noch so derartig rasant reagiert hast!
gelöst hast is ja - wie immer - genial.

kanns kaum erwarten, dass du das offiziell machst. wann denkst den, wirds soweit sein und als offizielles update kommen?

Ich kann es im Grunde genommen jederzeit einchecken - meine Tests sind abgeschlossen. Allerdings können ein paar Tester im Vorfeld nicht schaden, zu mal sich größere Änderungen in dieser Version zusätzlich wegen indirekter Timer ergeben haben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

devo

Hallo,

vielen Dank, nachdem fhem.pm durch ein update aktualisiert wurde, läuft es. Erste Test verliefen erfolgreich.
Vielen Dank für diese praktische Erweiterung!

Gruß

devo

the ratman

kann auch nicht klagen ... alle doif's rennen bis jetzt normal weiter.
wochentagsdeffinition lässt sich einfügen und es gibt auch keine blöden meldungen im log.
das "neue" doif reagiert brav auf wochentagsänderungen.

war nun sicher kein ausgiebiger test, aber so siehts aus bei mir *g* <-- der onkel ist glücklich und zufrieden

ne frage: wenn ich sowieso nur 0 bis 6 brauch, muß ich dann 7 und 8 auch immer im weekdays mit deffinieren, oder is das dem guten doif egel, wenn ich faul bin?
→do↑p!dnʇs↓shit←

Damian

Zitat von: the ratman am 21 März 2017, 12:31:40
kann auch nicht klagen ... alle doif's rennen bis jetzt normal weiter.
wochentagsdeffinition lässt sich einfügen und es gibt auch keine blöden meldungen im log.
das "neue" doif reagiert brav auf wochentagsänderungen.

war nun sicher kein ausgiebiger test, aber so siehts aus bei mir *g* <-- der onkel ist glücklich und zufrieden

ne frage: wenn ich sowieso nur 0 bis 6 brauch, muß ich dann 7 und 8 auch immer im weekdays mit deffinieren, oder is das dem guten doif egel, wenn ich faul bin?

Es ist ganz einfach. Die Definitionen fangen bei 0 also Sonntag an, was du nicht angibst wird auch nicht in Zahlen übersetzt. Wenn du also 7 und 8 nicht benötigst, dann kannst du die letzten Definitionen weglassen.

Und noch eins: Zahlenangaben funktionieren weiterhin, auch wenn man Umbenennung vorgenommen hat.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Ich habe die Sache noch etwas user-freundlicher gestaltet. Man kann jetzt neben den Ziffern auch Kürzel angeben, dh. das Attribut weekdays braucht nur noch definiert werden, wenn man andere Kürzel nehmen möchte. Die interne Default-Definition sieht so aus.

attr weekdays So,Mo,Di,Mi,Do,Fr,Sa,WE,AT

Die Doku wurde auch entsprechend angepasst.

@Ellert: Das Einsteigerbeispiel in der commandref habe ich auf die neue Syntax angepasst, weil es aussagekräftiger ist; müsste  man dann noch im Wiki anpassen:

define di_clock_radio DOIF ([06:30|Mo Di Mi] or [08:30|Do Fr Sa So]) (set radio on) DOELSEIF ([08:00|Mo Di Mi] or [09:30|Do Fr Sa So]) (set radio off)


Neue Version im ersten Post. Wenn keine Einwände kommen, werde ich die neue Version morgen Abend einchecken.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Zitat von: Damian am 21 März 2017, 20:46:11
Ich habe die Sache noch etwas user-freundlicher gestaltet. Man kann jetzt neben den Ziffern auch Kürzel angeben, dh. das Attribut weekdays braucht nur noch definiert werden, wenn man andere Kürzel nehmen möchte. Die interne Default-Definition sieht so aus.

attr weekdays So,Mo,Di,Mi,Do,Fr,Sa,WE,AT

Die Doku wurde auch entsprechend angepasst.

@Ellert: Das Einsteigerbeispiel in der commandref habe ich auf die neue Syntax angepasst, weil es aussagekräftiger ist; müsste  man dann noch im Wiki anpassen:

define di_clock_radio DOIF ([06:30|Mo Di Mi] or [08:30|Do Fr Sa So]) (set radio on) DOELSEIF ([08:00|Mo Di Mi] or [09:30|Do Fr Sa So]) (set radio off)


Neue Version im ersten Post. Wenn keine Einwände kommen, werde ich die neue Version morgen Abend einchecken.
Habe ich angepasst.

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ToKa

Hallo Damian,

habe gerade noch mal mit der neusten Version getestet. Entweder ich steh auf dem Schlauch und meine doif-Definition ist falsch oder es geht nicht ein reading für die Wochentage zu verwenden :(

List vom DOIF
Internals:
   DEF        ( [[StarGateAP1:alarm2_time]|[StarGateAP1:alarm2_wdays]] and
  [StarGateAP1:alarm2_state] eq "on" )
     ## Nachtlicht für 10 Minuten zur Weckzeit einschalten, wenn Wecker aktiv und Wochentag stimmt
     ( {Log 3, 'Test Weekdays'} )

   NAME       di.02.ST.fl.SD.wakeUpLight.Torsten
   NR         224
   NTFY_ORDER 50-di.02.ST.fl.SD.wakeUpLight.Torsten
   STATE      23.03.2017 18:10:00|[StarGateAP1:alarm2_wdays] (on)
   TYPE       DOIF
   Readings:
     2017-03-22 18:16:54   Device          StarGateAP1
     2017-03-22 07:00:17   cmd             2
     2017-03-22 07:00:17   cmd_event       StarGateAP1
     2017-03-22 07:00:17   cmd_nr          2
     2017-03-22 18:16:54   e_StarGateAP1_alarm2_state on
     2017-03-22 07:00:17   state           cmd_2
     2017-03-22 18:10:00   timer_01_c01    23.03.2017 18:10:00|[StarGateAP1:alarm2_wdays]
   Condition:
     0           DOIF_time_once($hash,0,$wday,"[StarGateAP1:alarm2_wdays]") and    ReadingValDoIf($hash,'StarGateAP1','alarm2_state') eq "on"
   Days:
     0          [StarGateAP1:alarm2_wdays]
   Devices:
     0           StarGateAP1
     all         StarGateAP1
   Do:
     0:
       0           {Log 3, 'Test Weekdays'}
     1:
   Helper:
     event      box_wlanCount: 3,mac_34_D2_70_AB_1A_5D: linux (WLAN, 148 / 98 Mbit/s, -41),mac_20_64_32_D4_47_1D: Android (WLAN, 53 / 65 Mbit/s, -74),mac_4C_66_41_10_66_12: UPnP-Monkey-on-SM-N910F-10a698085f2eb7e9 (WLAN, 129 / 51 Mbit/s, -52),lastReadout: 304 values captured in 2.00 s
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev   StarGateAP1
     timerevent box_wlanCount: 3,mac_34_D2_70_AB_1A_5D: linux (WLAN, 148 / 98 Mbit/s, -41),mac_20_64_32_D4_47_1D: Android (WLAN, 53 / 65 Mbit/s, -74),mac_4C_66_41_10_66_12: UPnP-Monkey-on-SM-N910F-10a698085f2eb7e9 (WLAN, 129 / 51 Mbit/s, -52),lastReadout: 304 values captured in 2.00 s
     triggerDev StarGateAP1
     timerevents:
       box_wlanCount: 3
       mac_34_D2_70_AB_1A_5D: linux (WLAN, 148 / 98 Mbit/s, -41)
       mac_20_64_32_D4_47_1D: Android (WLAN, 53 / 65 Mbit/s, -74)
       mac_4C_66_41_10_66_12: UPnP-Monkey-on-SM-N910F-10a698085f2eb7e9 (WLAN, 129 / 51 Mbit/s, -52)
       lastReadout: 304 values captured in 2.00 s
     timereventsState:
       box_wlanCount: 3
       mac_34_D2_70_AB_1A_5D: linux (WLAN, 148 / 98 Mbit/s, -41)
       mac_20_64_32_D4_47_1D: Android (WLAN, 53 / 65 Mbit/s, -74)
       mac_4C_66_41_10_66_12: UPnP-Monkey-on-SM-N910F-10a698085f2eb7e9 (WLAN, 129 / 51 Mbit/s, -52)
       lastReadout: 304 values captured in 2.00 s
     triggerEvents:
       box_wlanCount: 3
       mac_34_D2_70_AB_1A_5D: linux (WLAN, 148 / 98 Mbit/s, -41)
       mac_20_64_32_D4_47_1D: Android (WLAN, 53 / 65 Mbit/s, -74)
       mac_4C_66_41_10_66_12: UPnP-Monkey-on-SM-N910F-10a698085f2eb7e9 (WLAN, 129 / 51 Mbit/s, -52)
       lastReadout: 304 values captured in 2.00 s
     triggerEventsState:
       box_wlanCount: 3
       mac_34_D2_70_AB_1A_5D: linux (WLAN, 148 / 98 Mbit/s, -41)
       mac_20_64_32_D4_47_1D: Android (WLAN, 53 / 65 Mbit/s, -74)
       mac_4C_66_41_10_66_12: UPnP-Monkey-on-SM-N910F-10a698085f2eb7e9 (WLAN, 129 / 51 Mbit/s, -52)
       lastReadout: 304 values captured in 2.00 s
   Internals:
   Interval:
   Itimer:
     all         StarGateAP1
   Localtime:
     0          1490289000
   Readings:
     0           StarGateAP1:alarm2_state
     all         StarGateAP1:alarm2_state
   Realtime:
     0          18:10:00
   Regexp:
     0:
     All:
   State:
   Time:
     0          [StarGateAP1:alarm2_time]
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Trigger:
   Triggertime:
     1490289000:
       localtime  1490289000
       Hash:
Attributes:
   alias      wakeUpLight Torsten2
   group      Zeitsteuerung Beleuchtung
   icon       socket_timer
   room       Zentrale Steuerung
   sortby     2
   stateFormat timer_01_c01 (e_StarGateAP1_alarm2_state)
   verbose    5
   weekdays   So,Mo,Di,Mi,Do,Fr,Sa,WE,AT


Um 18:10 hätte es einen Logeintrag geben müssen, aber das Kommando wird nicht ausgeführt. Im StarGateAP1:alarm2_wdays steht aktuell: Mo Tu We Th Fr

Kannst Du mir weiterhelfen?

Beste Grüße
Torsten
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight