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

Damian

Du willst, dass er am We schaltet und definierst aber Mi - das passt nicht ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ToKa

Man wie blind war ich... wenn die Box englische Wochentage liefert, sollte man diese auch in weekdays definieren.

Vielen Dank für den Schubers in die richtige Richtung - jetzt funktioniert es  :)
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

hoods

Hallo zusammen,

ich versuche gerade eine simple Zeitsteuerung für meine Rollos zu bauen. Leider bringt das DOIF einen Fehler (siehe Readings) und die timer passen noch nicht. Beispiel: timer_01_c01, müsste hier nicht stehen 22.04.2017 16:35:00|WE - da dies der nächste WE Tag ist?

defmod timer_Rollo_WZ_L DOIF ([[$SELF:WE_AUF,00:00]|WE] or [[$SELF:WD_AUF,00:00]|AT])(set Rollo_WZ_L up)\
DOELSEIF ([[$SELF:WE_AB,00:01]|WE] or [[$SELF:WD_AB,00:01]|AT])(set Rollo_WZ_L down)
attr timer_Rollo_WZ_L alias Wohnzimmer links
attr timer_Rollo_WZ_L group Rollo_Zeitsteuerung
attr timer_Rollo_WZ_L readingList WE_AUF WE_AB WD_AUF WD_AB
attr timer_Rollo_WZ_L room 99_Labor
attr timer_Rollo_WZ_L setList WE_AUF:time WE_AB:time WD_AUF:time WD_AB:time
attr timer_Rollo_WZ_L webCmd WE_AUF:WE_AB:WD_AUF:WD_AB
attr timer_Rollo_WZ_L weekdays So,Mo,Di,Mi,Do,Fr,Sa,WE,AT



   Readings:
     2017-04-18 16:24:33   WD_AB           16:30
     2017-04-17 14:26:44   WD_AUF          08:00
     2017-04-17 14:26:35   WE_AB           22:00
     2017-04-18 16:24:40   WE_AUF          16:35
     2017-04-18 16:30:00   cmd             2
     2017-04-18 16:30:00   cmd_event       timer_4
     2017-04-18 16:30:00   cmd_nr          2
     2017-04-18 16:47:26   error           timer_Rollo_WZ_L: error in default: 00:01
     2017-04-18 16:30:00   state           cmd_2
     2017-04-18 16:47:26   timer_01_c01    19.04.2017 16:35:00|WE
     2017-04-18 16:47:26   timer_02_c01    19.04.2017 08:00:00|AT
     2017-04-18 16:47:26   timer_03_c02    18.04.2017 22:00:00|WE
     2017-04-18 16:47:26   timer_04_c02    19.04.2017 16:30:00|AT


Hatte bereits doppelte Klammern und verschiedene andere Kombinationen probiert aber im Moment seh ich den Wald vor lauter Bäumen nicht.
Hat jemand einen Tipp?

Danke & Gruss Sven
Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

Ellert

müsste hier nicht stehen 22.04.2017 16:35:00|WE - da dies der nächste WE Tag ist?

Es wird immer der aktuelle Tag oder der nächste Tag angezeigt. Ausgelöst wird aber nur, wenn die Wochentagbeschränkung zutrifft.
Den Default-Wert müsstest Du in Anführungszeichen setzen.

hoods

Super, klappt. Vielen Dank für die schnelle Antwort. Gruss Sven
Odroid C2, FHEM 5.8, HMUSB, Jeelink, Rademacher DuoFern Stick, Benning WR über HTTPMOD

Syrex-o

Hey,
ich versuche gerade die Wochentagsfunktion mit einem Regex aus einem Reading zu verwenden.
Mit den Zeiten funktioniert das auch super. Vielleicht ist auch eine Verkettung nicht möglich?

Folgendes Beispiel übergibt mein Reading, dass ich auslese:
20:51-20:52|2345|
Daraus mache ich dann im DOIF folgendes:

([
  [dummyTest:state:[([0-9]{2}:[0-9]{2})]]
-[dummyTest:state:[((?<=.).[0-9]:[0-9]{2})]] |
  [dummyTest:state:[((?<=.{12})[0-9]*)]]

]) (set Kreis1 on) DOELSE (set Kreis1 off)


leider wird das regex für die nummern nicht übernommen.
Ich bekomme die Meldung:
SetKreis1 DOIF: right bracket without left bracket: 9]*)]]
doch meines Erachtens fehlt dort nichts.
Vielleicht kann mich jemand eines besseren belehren.

Grüße

Damian

Was es alles gibt :)

Du möchtest Ausgabeformatierung bei Timern verwenden. Das ist zwar nirgends beschrieben und von mir nicht getestet, aber es könnte funktionieren :)

Warum hast du die Regex-Angaben in eckige Klammern gesetzt, sie werden lt. Commandref

Syntax: [<device>:<reading>|<internal>:d<number>|"<regex>":<output>]


in Anführungszeichen angegeben, also z. B.:

[dummyTest:state:"([0-9]{2}:[0-9]{2})"]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Syrex-o

Hey Damian,

Um genau zu sein, möchte ich die Wochentage aus dem Reading filtern, die in 1234 angegeben werden.
DOIF kann zum Beispiel folgendes ohne Probleme:

([
  [dummyTest:state:"([0-9]{2}:[0-9]{2})"]
-[dummyTest:state:"((?<=.).[0-9]:[0-9]{2})"] |1234

]) (set Kreis1 on) DOELSE (set Kreis1 off)


Das Problem entsteht erst mit dem dritten Regex
Muss ich die Wochentage als MoDi definieren?

Hab mal die Syntax umgestellt  ;)

Damian

Bei mir wird der Ausdruck soweit erkannt.

Die Wochentagangaben werden erst zum Triggerzeitpunkt ausgewertet, daher steht der Ausdruck für die Wochentage wie angegeben hinter der Zeit bei den Timerreadings.


Internals:
   CFGFN     
   DEF        ([
  [d_test:state:"([0-9]{2}:[0-9]{2})"]-[d_test:state:"((?<=.).[0-9]:[0-9]{2})"]|[d_test:state:"((?<=.{12})[0-9]*)"]
])
   MODEL      FHEM
   NAME       di_test1
   NR         7516
   NTFY_ORDER 50-di_test1
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2018-07-24 21:53:21   cmd             0
     2018-07-24 21:53:21   mode            enabled
     2018-07-24 21:53:21   state           initialized
     2018-07-24 21:53:21   timer_01_c01    25.07.2018 05:00:00|[d:test:state:"((?<=.{12})[0-9]*)"]
     2018-07-24 21:53:21   timer_02_c01    25.07.2018 06:00:00|[d:test:state:"((?<=.{12})[0-9]*)"]
   Regex:
   condition:
     0          DOIF_time($hash,0,1,$wday,$hms,"[d_test:state:"((?<=.{12})[0-9]*)"]")
   days:
     0          [d_test:state:"((?<=.{12})[0-9]*)"]
     1          [d_test:state:"((?<=.{12})[0-9]*)"]
   devices:
   do:
     0:
       0         
     1:
   helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   interval:
     0          -1
     1          0
   intervalfunc:
   itimer:
     all         d_test
   localtime:
     0          1532487600
     1          1532491200
   realtime:
     0          05:00:00
     1          06:00:00
   time:
     0          [d_test:state:"([0-9]{2}:[0-9]{2})"]
     1          [d_test:state:"((?<=.).[0-9]:[0-9]{2})"]
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   triggertime:
     1532487600:
       localtime  1532487600
       hash:
     1532491200:
       localtime  1532491200
       hash:
   uiState:
   uiTable:
Attributes:


Edit:

Das Problem wird wohl wegen doppelter Anführungszeichen dieser Perl-Ausdruck sein:

DOIF_time($hash,0,1,$wday,$hms,"[d_test:state:"((?<=.{12})[0-9]*)"]")

Alternativ könnte man die drei Zeitangaben in DOIF_Readings ablegen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Syrex-o

Moment mal.

Also ich habe mal deinen Test:

([
  [d_test:state:"([0-9]{2}:[0-9]{2})"]-[d_test:state:"((?<=.).[0-9]:[0-9]{2})"]|[d_test:state:"((?<=.{12})[0-9]*)"]
])
übernommen.
Ich bekomme jedoch weiter die Meldung: SetKreis1 DOIF: right bracket without left bracket: 9]*)"]

Theoretisch könnte ich ja auch nach den "|  |" filtern und sie im selben regex nicht berücksichtigen.
Aber wie nur?  :o

Wie würde denn so ein DOIF Rediang dafür aussehen?
Da bin ich überfragt.

Edit: Leider geht auch das Folgende Regex nicht:

[dummyTest:state:"(?<=.{12})(.*)(?=\|)

Ich bekomme als timer nicht die werte aufgelistet, sondern das: timer_01_c01
24.07.2018 22:32:00|[dummyTest:state:"(?<=\|)(.*)(?=\|)"]

Grüße

Damian

Dann hast du evtl. nicht die aktuelle DOIF-Version.

Mit DOIF-Readings:

Internals:
   CFGFN     
   DEF        ([
  [$SELF:anfang]-[$SELF:ende]|[$SELF:woche]
])
   MODEL      FHEM
   NAME       di_test1
   NR         7516
   NTFY_ORDER 50-di_test1
   STATE      initialized
   TYPE       DOIF
   DOIF_Readings:
     anfang     ReadingValDoIf($hash,'d_test','state','','([0-9]{2}:[0-9]{2})')
     ende       ReadingValDoIf($hash,'d_test','state','','((?<=.).[0-9]:[0-9]{2})')
     woche      ReadingValDoIf($hash,'d_test','state','','((?<=.{12})[0-9]*)')
   READINGS:
     2018-07-24 23:20:08   anfang          05:00
     2018-07-24 23:19:53   cmd             0
     2018-07-24 23:20:08   ende            06:00
     2018-07-24 23:19:53   mode            enabled
     2018-07-24 23:19:53   state           initialized
     2018-07-24 23:20:08   timer_01_c01    25.07.2018 05:00:00|[di_test1:woche]
     2018-07-24 23:20:08   timer_02_c01    25.07.2018 06:00:00|[di_test1:woche]
     2018-07-24 23:20:08   woche           123
   Regex:
     DOIF_Readings:
       d_test:
         anfang:
           state      ^d_test$:^state:
         ende:
           state      ^d_test$:^state:
         woche:
           state      ^d_test$:^state:
   condition:
     0          DOIF_time($hash,0,1,$wday,$hms,"[di_test1:woche]")
   days:
     0          [di_test1:woche]
     1          [di_test1:woche]
   devices:
   do:
     0:
       0         
     1:
   helper:
     DOIF_Readings_events
     globalinit 1
     last_timer 2
     sleeptimer -1
   interval:
     0          -1
     1          0
   intervalfunc:
   intervaltimer:
   itimer:
     all         di_test1
   localtime:
     0          1532487600
     1          1532491200
   realtime:
     0          05:00:00
     1          06:00:00
   time:
     0          [di_test1:anfang]
     1          [di_test1:ende]
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   triggertime:
     1532487600:
       localtime  1532487600
       hash:
     1532491200:
       localtime  1532491200
       hash:
   uiState:
   uiTable:
Attributes:
   DOIF_Readings anfang:[d_test:state:"([0-9]{2}:[0-9]{2})"],ende:[d_test:state:"((?<=.).[0-9]:[0-9]{2})"],woche:[d_test:state:"((?<=.{12})[0-9]*)"]



Die DOIF_Readings werden erst gesetzt, wenn d_test aktualisiert wird

hier  z. B mit

set d_test 05:00-06:00|123
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Syrex-o

Vielen Dank für den Hinweis.

Habe mal ein Update durchlaufen lassen und scheibar war ich hinter dem DOIF_Readings Stand.

Auf DOIF_Readings schaltet das DOIF nun, jetzt muss ich nur noch rausbekommen, wie ich einen dummy damit trigger.

Edit: Hat sich auch gerade gelöst.

Dankeschön für die tolle und späte Hilfe ;D

Damian

Zitat von: Syrex-o am 24 Juli 2018, 23:55:00
Dankeschön für die tolle und späte Hilfe ;D

Warum spät, meine Reaktionszeit nach deiner ersten Anfrage betrug gerade mal 34 Minuten ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

l2r

Wissen ist Macht.
Ich weiß nix.
Macht nix.

Damian

Zitat von: l2r am 25 Juli 2018, 09:19:55
ich glaube das war auf die Uhrzeit bezogen ;-)

Dann hätte es wohl zur späten Zeitstunde heißen müssen ;) immerhin Problem gelöst.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Syrex-o

Zitat von: Damian am 25 Juli 2018, 09:38:42
Dann hätte es wohl zur späten Zeitstunde heißen müssen ;) immerhin Problem gelöst.

@Damian Aber natürlich meinte ich zu später Stunde  ;D