[Neues Modul DOIFtools] Logfile, readingsGroup, nextTimer, EVENT-Statistik

Begonnen von Ellert, 03 Januar 2017, 07:32:21

Vorheriges Thema - Nächstes Thema

Ellert

Welchen Browser verwendest Du?

Es sieht so aus als würde Dein Browser den table-Tag nicht interpretieren, wenn er in einem pre-Tag verwendet wird.

Bei Firefox,Chrome und IE funktioniert es.

Ellert


ComputerZOO


Ellert

Es scheint, dass der erste Tag ignoriert wird.
Teste bitte die anliegende Datei, Safari kann ich nicht testen.

ComputerZOO


Ellert



Ellert

Ja, das ist in der Tat mysteriös.

Der Inhalt im Popup wird von FHEM in <pre>Inhalt</pre> gepackt. In pre-Tags ist offiziell unter Anderem kein table-Tag erlaubt.
Daher beendet DOIFtools den pre-Tag vor dem Inhalt und startet ihn nach dem Inhalt (</pre>Inhalt<pre>). Damit sollte HTML-Inhalt wie gewohnt angezeigt werden.

In den Browsertools zum untersuchen der HTML-Elemente sieht der Inhalt des Popups dann so aus, wie in der Anlage.

Wie sieht es bei Dir aus?

Kann es sein, dass an der fhemweb.js manipuliert wurde und irgendwelche Tags nicht geschlossen werden?

ToKa

Hallo zusammen,

ich habe ein Problem mit den UserReadings für Timer mit Wochentageinschränkung. Die Angabe der Wochentage im DOIF erfolgt durch Readings in eckigen Klammern  und das DOIF selbst funktioniert einwandfrei.

Die UserReadings für die nächsten Schaltzeitpunkte werden zwar aktualisiert, aber m.E. nicht korrekt berechnet. Nachfolgend die Def. des Doifs
Internals:
   DEF        ( [[ZS.zs.WE.Residents:alarm1_time]|[ZS.zs.WE.Residents:alarm1_wdays]] and
  [ZS.zs.WE.Residents:alarm1_state] eq "on" and
  [isdayreal] eq "Nacht" )
      ( set ST.fl.SD.WakeUpLight on-for-timer 1200 )
DOELSEIF ( [[ZS.zs.WE.Residents:alarm2_time]|[ZS.zs.WE.Residents:alarm2_wdays]] and
  [ZS.zs.WE.Residents:alarm2_state] eq "on" and
  [isdayreal] eq "Nacht" )
       ( set ST.fl.SD.WakeUpLight on-for-timer 600 )
DOELSEIF ( [[ZS.zs.WE.Residents:alarm3_time]|[ZS.zs.WE.Residents:alarm3_wdays]] and
  [ZS.zs.WE.Residents:alarm3_state] eq "on" and
  [isdayreal] eq "Nacht" )
      ( set ST.fl.SD.WakeUpLight on-for-timer 600 )

   NAME       di.01.ZS.zs.WE.Residents
   NR         280
   NTFY_ORDER 50-di.01.ZS.zs.WE.Residents
   STATE      &nbsp
   TYPE       DOIF
   READINGS:
     2017-11-28 19:23:35   Device          ZS.zs.WE.Residents
     2017-11-28 19:23:31   N_timer_01_c01  04.12.2017 05:15:00
     2017-11-28 19:23:31   N_timer_02_c02  05.12.2017 06:00:00
     2017-11-28 19:23:31   N_timer_03_c03  29.11.2017 07:45:00
     2017-11-28 06:00:00   cmd             2
     2017-11-28 06:00:00   cmd_event       timer_2
     2017-11-28 06:00:00   cmd_nr          2
     2017-11-28 19:23:35   e_ZS.zs.WE.Residents_alarm1_state on
     2017-11-28 19:23:35   e_ZS.zs.WE.Residents_alarm2_state on
     2017-11-28 19:23:35   e_ZS.zs.WE.Residents_alarm3_state off
     2017-11-28 16:30:00   e_isdayreal_STATE Nacht
     2017-11-25 17:57:18   offsetAfter     25
     2017-11-25 17:57:49   offsetBefore    -5
     2017-11-28 06:00:00   state           cmd_2
     2017-11-28 19:23:31   timer_01_c01    29.11.2017 05:15:00|[ZS.zs.WE.Residents:alarm1_wdays]
     2017-11-28 19:23:31   timer_02_c02    29.11.2017 06:00:00|[ZS.zs.WE.Residents:alarm2_wdays]
     2017-11-28 19:23:31   timer_03_c03    29.11.2017 07:45:00|[ZS.zs.WE.Residents:alarm3_wdays]
   condition:
     0           DOIF_time_once($hash,0,$wday,"[ZS.zs.WE.Residents:alarm1_wdays]") and    ReadingValDoIf($hash,'ZS.zs.WE.Residents','alarm1_state') eq "on" and   InternalDoIf($hash,'isdayreal','STATE') eq "Nacht"
     1           DOIF_time_once($hash,1,$wday,"[ZS.zs.WE.Residents:alarm2_wdays]") and    ReadingValDoIf($hash,'ZS.zs.WE.Residents','alarm2_state') eq "on" and    InternalDoIf($hash,'isdayreal','STATE') eq "Nacht"
     2           DOIF_time_once($hash,2,$wday,"[ZS.zs.WE.Residents:alarm3_wdays]") and    ReadingValDoIf($hash,'ZS.zs.WE.Residents','alarm3_state') eq "on" and    InternalDoIf($hash,'isdayreal','STATE') eq "Nacht"
   days:
     0          [ZS.zs.WE.Residents:alarm1_wdays]
     1          [ZS.zs.WE.Residents:alarm2_wdays]
     2          [ZS.zs.WE.Residents:alarm3_wdays]
   devices:
     0           ZS.zs.WE.Residents isdayreal
     1           ZS.zs.WE.Residents isdayreal
     2           ZS.zs.WE.Residents isdayreal
     all         ZS.zs.WE.Residents isdayreal
   do:
     0:
       0           {set ST.fl.SD.WakeUpLight on-for-timer 1200
     1:
       0           {set ST.fl.SD.WakeUpLight on-for-timer 600
     2:
       0           {set ST.fl.SD.WakeUpLight on-for-timer 600
     3:
   helper:
     event      active
     globalinit 1
     last_timer 3
     sleeptimer -1
     triggerDev ZS.zs.WE.Residents
     triggerEvents:
       active
     triggerEventsState:
       state: active
   internals:
     0           isdayreal:STATE
     1           isdayreal:STATE
     2           isdayreal:STATE
     all         isdayreal:STATE
   itimer:
     all         ZS.zs.WE.Residents
   localtime:
     0          1511928900
     1          1511931600
     2          1511937900
   readings:
     0           ZS.zs.WE.Residents:alarm1_state
     1           ZS.zs.WE.Residents:alarm2_state
     2           ZS.zs.WE.Residents:alarm3_state
     all         ZS.zs.WE.Residents:alarm1_state ZS.zs.WE.Residents:alarm2_state ZS.zs.WE.Residents:alarm3_state
   realtime:
     0          05:15:00
     1          06:00:00
     2          07:45:00
   regexp:
     0:
     1:
     2:
     all:
   state:
     STATE:
   time:
     0          [ZS.zs.WE.Residents:alarm1_time]
     1          [ZS.zs.WE.Residents:alarm2_time]
     2          [ZS.zs.WE.Residents:alarm3_time]
   timeCond:
     0          0
     1          1
     2          2
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0
     1           1
     2           2
   trigger:
   triggertime:
     1511928900:
       localtime  1511928900
       hash:
     1511931600:
       localtime  1511931600
       hash:
     1511937900:
       localtime  1511937900
       hash:
Attributes:
   do         always
   group      Zeitsteuerung Beleuchtung
   icon       socket_timer
   readingList offsetBefore,offsetAfter
   room       Zentrale Steuerung
   setList    offsetBefore:0,-5,-10,-15,-20,-25,-30,-40,-45,-50,-55 offsetAfter:0,5,10,15,20,25,30,40,45,50,55
   stateFormat &nbsp
   userReadings N_timer_01_c01:timer_01_c01.* {DOIFtoolsNextTimer(ReadingsVal("di.01.ZS.zs.WE.Residents","timer_01_c01","none"),"di.01.ZS.zs.WE.Residents")},N_timer_02_c02:timer_02_c02.* {DOIFtoolsNextTimer(ReadingsVal("di.01.ZS.zs.WE.Residents","timer_02_c02","none"),"di.01.ZS.zs.WE.Residents")},N_timer_03_c03:timer_03_c03.* {DOIFtoolsNextTimer(ReadingsVal("di.01.ZS.zs.WE.Residents","timer_03_c03","none"),"di.01.ZS.zs.WE.Residents")}
   webCmd     offsetBefore:offsetAfter
   webCmdLabel Offset vorher:Offset danach
   weekdays   Su,Mo,Tu,We,Th,Fr,Sa,NW,WD


Nach der letzten Aktualisierung sehen die UserReadings so aus:
     2017-11-28 19:23:31   N_timer_01_c01  04.12.2017 05:15:00
     2017-11-28 19:23:31   N_timer_02_c02  05.12.2017 06:00:00
     2017-11-28 19:23:31   N_timer_03_c03  29.11.2017 07:45:00


und die Wochentage, die in den steuernden Readings hinterlegt sind so:
     2017-11-28 19:33:44   alarm1_wdays    Mo Tu We Th Fr
     2017-11-28 19:33:44   alarm2_wdays    Mo Tu We Th Fr
     2017-11-28 19:33:44   alarm3_wdays    Sa


Die ersten beiden Timer müssten also aktuell auf morgen lauten und der dritte Timer auf den nächsten Samstag also den 2.12.2017.

Ich hoffe, das ist nachzuvollziehen und es gibt für das Problem eine Lösung.

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

Ellert


ToKa

Das ist aber schade... besteht die Chance, dass dies noch kommt?
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 29 November 2017, 19:41:15
Das ist aber schade... besteht die Chance, dass dies noch kommt?


Das ist ein Fass ohne Boden, als nächstes wird der Wunsch kommen holiday auszuwerten. ;)

Bei DOIF wird, wie auch beim at, jeden Tag getriggert und dann erst nachgeschaut, ob die Zeitangabe wahr ist. Bei dieser Vorgehensweise ist es fast unmöglich eine Vorhersage zu treffen.

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

Ellert

Zitat von: ToKa am 29 November 2017, 19:41:15
Das ist aber schade... besteht die Chance, dass dies noch kommt?
Du hast die Chance, userReadings nutzt die Funktion DOIFtoolsNextTimer aus 98_DOIFtools.pm, die könntest Du unter einem anderen Namen in die 99_myUtils kopieren, an Deine Bedürfnisse anpassen und statt DOIFtoolsNextTimer verwenden.

ToKa

Hallo Ellert,

danke für den Tipp. Habe mir die Funktion "DOIFtoolsNextTimer" angeschaut und werde es mal mit einer eigenen Variante probieren.

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

Ellert

Zitat von: ToKa am 29 November 2017, 21:06:56
Hallo Ellert,

danke für den Tipp. Habe mir die Funktion "DOIFtoolsNextTimer" angeschaut und werde es mal mit einer eigenen Variante probieren.

Beste Grüße
Torsten
DOIFtoolsNextTimer benötigt ein Timerreading in der Form" timer_xx_cyy"

Das könntest Du über DOIF_Readings anlegen und daraus den DOIFtoolsNextTimer bilden.

Beispiel

defmod indNTimer DOIF ([18:00|[$SELF:mydays]])
attr indNTimer DOIF_Readings timer_91_c01:[$SELF:timer_01_c01:"(.*\|)"].[$SELF:mydays]
attr indNTimer do always
attr indNTimer room 0_Test
attr indNTimer userReadings N_timer_01_c01:timer_91_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_91_c01","none"),"NTimer")}

setstate indNTimer initialized
setstate indNTimer 2017-11-30 13:24:42 N_timer_01_c01 04.12.2017 21:45:00
setstate indNTimer 2017-11-30 13:22:14 cmd 0
setstate indNTimer 2017-11-30 13:24:42 mydays 123
setstate indNTimer 2017-11-30 13:22:14 state initialized
setstate indNTimer 2017-11-30 13:22:14 timer_01_c01 30.11.2017 18:00:00|[indNTimer:mydays]
setstate indNTimer 2017-11-30 13:24:42 timer_91_c01 30.11.2017 18:00:00|123


über DOIF_Readings wird der Pseudotimer timer_91_c01 erzeugt und darauf das userReading gesetzt, das den N_timer_c01_01 bildet.