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

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

Vorheriges Thema - Nächstes Thema

Ellert

Zitat von: mrfloppy am 08 April 2017, 20:44:59
Man sollte nicht zu viel Dinge auf einmal machen.
Habe upgedatet, aber dann voll auf den "shutdown restart" vergessen.

Danke funktioniert jetzt auch im Google Chrome.

Nie wieder den Neustart vergessen: https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche#Neustart_nach_Update_automatisieren

straightshooter

Hallo,

ich habe ein Problem mit der Funktion NextTimer bei DOIFtools:

Ich habe ein DOIF definiert:
define DOIF_Rolladen_Steuerung_FHEM DOIF (([{max("[TW_Tageslicht:sr_indoor]","06:00")}|8] || [10:00|7]) && [DU_Rolladen_Steuerung_FHEM] eq "FHEM") (set STRUCT_Rolladen_ALLE off)

Ich will werktags bzw. am Wochenende die Rolladen unterschiedlich hochfahren. Das klappt auch wunderbar.
Die DOIF-Timer werden entsprechend als Reading angelegt:
timer_01_c01 - 01.06.2017 06:00:00|8
timer_02_c01 - 01.06.2017 10:00:00|7

Mit DOIFtools (userReading_nextTimer_for) will ich aber das genaue Datum darstellen, wann quasi die Rollläden hochfahren.
Das funktioniert komischerweise nur, wenn ich FHEM mit "shutdown restart" neu hochfahre:
N_timer_01_c01 - 01.06.2017 06:00:00
N_timer_02_c01 - 03.06.2017 10:00:00

Erfolgt eine Änderung der Zeit aufgrund "[TW_Tageslicht:sr_indoor]" oder wenn das Ereignis eintrifft (wie heute früh), werden die "N_timer"-Readings nicht mehr korrekt dargestellt bzw. aktualisiert. Sie bleiben einfach leer, obwohl in den DOIF-Timern die richtige (veränderte) Uhrzeit steht.




Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt und jemand kann mir helfen.

MfG

Ellert

Ich kann das Problem nicht nachstellen alle Timer werden korrekt aktualisiert.

Hier das TestDOIF für "Raw definition"

defmod NTimer DOIF ([{max("[twizone:sr_indoor]","16:05")}|8] or [10:00|7])
attr NTimer do always
attr NTimer room 0_Test
attr NTimer userReadings N_timer_01_c01:timer_01_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_01_c01","none"),"NTimer")},N_timer_02_c01:timer_02_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_02_c01","none"),"NTimer")}

es wurde um 16:04:24 erstellt, der Timer hat um 16:05 getriggert und aktualisiert und die N_timer sind korrekt dargestellt, siehe Listing


Internals:
   CFGFN
   DEF        ([{max("[twizone:sr_indoor]","16:05")}|8] or [10:00|7])
   NAME       NTimer
   NR         16599
   NTFY_ORDER 50-NTimer
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-05-31 16:05:00   N_timer_01_c01  01.06.2017 16:05:00
     2017-05-31 16:04:24   N_timer_02_c01  03.06.2017 10:00:00
     2017-05-31 16:05:00   cmd             1
     2017-05-31 16:05:00   cmd_event       timer_1
     2017-05-31 16:05:00   cmd_nr          1
     2017-05-31 16:05:00   state           cmd_1
     2017-05-31 16:05:00   timer_01_c01    01.06.2017 16:05:00|8
     2017-05-31 16:04:24   timer_02_c01    01.06.2017 10:00:00|7
   Condition:
     0          DOIF_time_once($hash,0,$wday,"8") or DOIF_time_once($hash,1,$wday,"7")
   Days:
     0          8
     1          7
   Devices:
   Do:
     0:
       0
     1:
   Helper:
     event      timer_1
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev
     timerevent timer_1
     timereventsState
     triggerDev
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   Internals:
   Interval:
   Itimer:
     all         twizone
   Localtime:
     0          1496325900
     1          1496304000
   Readings:
   Realtime:
     0          16:05:00
     1          10:00:00
   Regexp:
     All:
   State:
     State:
   Time:
     0          {max("[twizone:sr_indoor]","16:05")}
     1          10:00:00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timers:
     0           0  1
   Triggertime:
     1496304000:
       localtime  1496304000
       Hash:
     1496325900:
       localtime  1496325900
       Hash:
Attributes:
   do         always
   room       0_Test
   userReadings N_timer_01_c01:timer_01_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_01_c01","none"),"NTimer")},N_timer_02_c01:timer_02_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_02_c01","none"),"NTimer")}


Möglicherweise ist Dein FHEM nicht aktuell.

straightshooter

Hmmm ... habe dein Code eingegeben ... geht auch nicht.

FHEM ist aktuell.




Internals:
   CFGFN
   DEF        ([{max("[TW_Tageslicht:sr_indoor]","16:20")}|8] or [10:00|7])
   NAME       NTimer
   NR         600
   NTFY_ORDER 50-NTimer
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-05-31 16:20:00   N_timer_01_c01
     2017-05-31 16:20:00   cmd             1
     2017-05-31 16:20:00   cmd_event       timer_1
     2017-05-31 16:20:00   cmd_nr          1
     2017-05-31 16:20:00   state           cmd_1
     2017-05-31 16:20:00   timer_01_c01    01.06.2017 16:20:00|8
     2017-05-31 16:19:45   timer_02_c01    01.06.2017 10:00:00|7
   Condition:
     0          DOIF_time_once($hash,0,$wday,"8") or DOIF_time_once($hash,1,$wday,"7")
   Days:
     0          8
     1          7
   Devices:
   Do:
     0:
       0
     1:
   Helper:
     event      timer_1
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev
     timerevent timer_1
     timereventsState
     triggerDev
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   Internals:
   Interval:
   Itimer:
     all         TW_Tageslicht
   Localtime:
     0          1496326800
     1          1496304000
   Readings:
   Realtime:
     0          16:20:00
     1          10:00:00
   Regexp:
     All:
   State:
     State:
   Time:
     0          {max("[TW_Tageslicht:sr_indoor]","16:20")}
     1          10:00:00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timers:
     0           0  1
   Triggertime:
     1496304000:
       localtime  1496304000
       Hash:
     1496326800:
       localtime  1496326800
       Hash:
Attributes:
   do         always
   room       0_Test
   userReadings N_timer_01_c01:timer_01_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_01_c01","none"),"NTimer")},N_timer_02_c01:timer_02_c01.* {DOIFtoolsNextTimer(ReadingsVal("NTimer","timer_02_c01","none"),"NTimer")}


Vielleicht habe ich die DOIFtools Definition falsch.
Der zweite Timer wird gar nicht angezeigt.

defmod DOIFtools DOIFtools associated DOIF: DOIF_BZ_Thermostat_FHEM DOIF_CGB_Parameter DOIF_CGB_Parameter_EBUSD DOIF_CGB_Parameter_Wert_EBUSD DOIF_DU_Differenz_Temperatur_T2_T1 DOIF_GB_Thermostat_FHEM DOIF_G_Licht_FHEM_Tor DOIF_G_Tor_Anzeige DOIF_G_Tor_Taster DOIF_MAIL_Alert DOIF_PLUGGIT_Betriebsart_Bypass_Taster DOIF_PLUGGIT_Betriebsart_Taster DOIF_PLUGGIT_Lueften_FHEM DOIF_PLUGGIT_Lueften_FHEM_Stufe DOIF_PLUGGIT_Steuerung_FHEM DOIF_PLUGGIT_Steuerung_FHEM_MANUELL_AUS DOIF_PLUGGIT_Steuerung_FHEM_manuell DOIF_PLUGGIT_Ventilatorstufe_Taster DOIF_Rolladen_Beschattung_FHEM DOIF_Rolladen_Steuerung_FHEM DOIF_STRUCT_Thermostate_ALLE_FHEM DOIF_SamsungTV_POWER_Anzeige DOIF_SamsungTV_POWER_Taster DOIF_WZ_Thermostat_FHEM NTimer
attr DOIFtools DOIFtoolsEventMonitorInDOIF 1
attr DOIFtools DOIFtoolsExecuteDefinition 1
attr DOIFtools DOIFtoolsExecuteSave 1
attr DOIFtools DOIFtoolsMenuEntry 1
attr DOIFtools DOIFtoolsNoLookUp 1

setstate DOIFtools initialized
setstate DOIFtools 2017-05-31 15:58:11 .eM off
setstate DOIFtools 2017-05-31 16:19:45 DOIF_version 98_DOIF.pm 14112 2017-04-26 16:09:48Z Damian
setstate DOIFtools 2017-05-31 15:58:11 FHEM_revision 14434
setstate DOIFtools 2017-05-30 11:29:36 doStatistics disabled
setstate DOIFtools 2017-05-31 15:58:11 recording_target_duration 0
setstate DOIFtools 2017-05-30 11:29:36 sourceAttribute readingList
setstate DOIFtools 2017-05-30 13:02:46 specialLog 0
setstate DOIFtools 2017-05-30 11:29:36 statisticsDeviceFilterRegex .*



Internals:
   DEF        associated DOIF: DOIF_BZ_Thermostat_FHEM DOIF_CGB_Parameter DOIF_CGB_Parameter_EBUSD DOIF_CGB_Parameter_Wert_EBUSD DOIF_DU_Differenz_Temperatur_T2_T1 DOIF_GB_Thermostat_FHEM DOIF_G_Licht_FHEM_Tor DOIF_G_Tor_Anzeige DOIF_G_Tor_Taster DOIF_MAIL_Alert DOIF_PLUGGIT_Betriebsart_Bypass_Taster DOIF_PLUGGIT_Betriebsart_Taster DOIF_PLUGGIT_Lueften_FHEM DOIF_PLUGGIT_Lueften_FHEM_Stufe DOIF_PLUGGIT_Steuerung_FHEM DOIF_PLUGGIT_Steuerung_FHEM_MANUELL_AUS DOIF_PLUGGIT_Steuerung_FHEM_manuell DOIF_PLUGGIT_Ventilatorstufe_Taster DOIF_Rolladen_Beschattung_FHEM DOIF_Rolladen_Steuerung_FHEM DOIF_STRUCT_Thermostate_ALLE_FHEM DOIF_SamsungTV_POWER_Anzeige DOIF_SamsungTV_POWER_Taster DOIF_WZ_Thermostat_FHEM NTimer
   NAME       DOIFtools
   NOTIFYDEV  global,RLP
   NR         523
   NTFY_ORDER 50-DOIFtools
   STATE      initialized
   TYPE       DOIFtools
   VERSION    98_DOIFtools.pm 14089 2017-04-23 18:24:17Z Ellert
   logfile    ./log/DOIFtoolsLog-%Y-%j.log
   Readings:
     2017-05-31 16:19:45   DOIF_version    98_DOIF.pm 14112 2017-04-26 16:09:48Z Damian
     2017-05-31 15:58:11   FHEM_revision   14434
     2017-05-30 11:29:36   doStatistics    disabled
     2017-05-31 15:58:11   recording_target_duration 0
     2017-05-30 11:29:36   sourceAttribute readingList
     2017-05-30 13:02:46   specialLog      0
     2017-05-30 11:29:36   statisticsDeviceFilterRegex .*
   Helper:
     Counter:
       0          0
Attributes:
   DOIFtoolsEventMonitorInDOIF 1
   DOIFtoolsExecuteDefinition 1
   DOIFtoolsExecuteSave 1
   DOIFtoolsMenuEntry 1
   DOIFtoolsNoLookUp 1




Ellert

Deine Definition ist o.k.
Teste mal bitte die anliegende Version.

straightshooter

Perfekt ... jetzt gehts.
Was ist da anders zu der normalen Version?

Ellert


Ellert

Ausgehen von diesem Wunsch https://forum.fhem.de/index.php/topic,72072.msg637113.html#msg637113

habe ich in DOIFtools eine Möglichkeit eingebaut über das Attribut myWebCmd in DOIF Befehle mehrzeilig und mit Bezeichnung darzustellen.


attr <DOIF name> myWebCmd <label1|cmd1>|<label2|cmd2>...
myWebCmd ist in einem DOIF-Gerät im Atribut userattr einzutragen, danach kann das Attribut myWebCmd in dem DOIF gesetzt werden.
Es sind immer Pärchen von Bezeichnung und Befehl anzugeben.
Befehl und Bezeichnung werden durch | getrennt.
Die Pärchen werden ebenfalls durch | getrennt.
Wird nach einem Pärchen nicht | verwendet sondern \n, dann werden die nachfolgenden Pärchen innerhalb Gerätezeile in einer neuen Zeile dargestellt. Für die Bezeichnung ist HTML erlaubt.

Ein Beispiel für "Raw definition"

defmod datumsbereich_Labor0 DOIF ([[$SELF:P_bhm,"00:00"]] and [?$SELF:P_byear] == $year and [?$SELF:P_bmon] == $month and [?$SELF:P_bday] == $mday)\
   {Log 1, "Alarmstart"}\
DOELSEIF ([[$SELF:P_ehm,"00:00"]] and [?$SELF:P_eyear] == $year and [?$SELF:P_emon] == $month and [?$SELF:P_eday] == $mday)\
   {Log 1, "Alarmstop"}
attr datumsbereich_Labor0 userattr myWebCmd
attr datumsbereich_Labor0 alias Terminspanne
attr datumsbereich_Labor0 cmdState 1|0
attr datumsbereich_Labor0 comment P_bhm:P_bday:P_bmon:P_byear:P_ehm:P_eday:P_emon:P_eyear
attr datumsbereich_Labor0 group Labor: Datumsbereich von HH:MM dd.mm.yyyy bis HH:MM dd.mm.yyyy ohne datetimepicker Widget
attr datumsbereich_Labor0 icon time_calendar
attr datumsbereich_Labor0 myWebCmd Start:&nbsp;;Zeit|P_bhm|Tag|P_bday|Monat|P_bmon|Jahr|P_byear\
Ende:&nbsp;;Zeit|P_ehm|Tag|P_eday|Monat|P_emon|Jahr|P_eyear
attr datumsbereich_Labor0 readingList P_bhm P_bday P_bmon P_byear P_ehm P_eday P_emon P_eyear
attr datumsbereich_Labor0 room DOIF_Labor
attr datumsbereich_Labor0 setList P_bhm:time\
P_bday:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 \
P_bmon:1,2,3,4,5,6,7,8,9,10,11,12\
P_byear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026\
P_ehm:time\
P_eday:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31\
P_emon:1,2,3,4,5,6,7,8,9,10,11,12\
P_eyear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026
attr datumsbereich_Labor0 widgetOverride (setList|myWebCmd):textField-long

setstate datumsbereich_Labor0 initialized
setstate datumsbereich_Labor0 2017-06-10 15:25:25 .eM off
setstate datumsbereich_Labor0 2017-03-08 19:28:30 P_bday 8
setstate datumsbereich_Labor0 2017-06-09 18:54:17 P_bhm 12:00
setstate datumsbereich_Labor0 2017-03-08 19:28:28 P_bmon 3
setstate datumsbereich_Labor0 2017-01-19 11:02:57 P_byear 2017
setstate datumsbereich_Labor0 2017-03-08 19:28:35 P_eday 8
setstate datumsbereich_Labor0 2017-06-09 19:17:29 P_ehm 12:00
setstate datumsbereich_Labor0 2017-03-08 19:28:37 P_emon 3
setstate datumsbereich_Labor0 2017-06-09 18:55:16 P_eyear 2017
setstate datumsbereich_Labor0 2017-03-08 20:12:08 cmd 0
setstate datumsbereich_Labor0 2017-03-08 20:12:08 state initialized
setstate datumsbereich_Labor0 2017-06-10 15:35:29 timer_01_c01 11.06.2017 12:00:00
setstate datumsbereich_Labor0 2017-06-10 15:35:29 timer_02_c02 11.06.2017 12:00:00



Das Beispiel funktioniert nur mit der anliegenden DOIFtools-Test-Version.

Damian

Prinzipiell funktioniert es.

Vielleicht kommt ja noch webCmd mehrzeilig - ich warte es ab.

Ich habe noch mit TabletUI experimentiert, finde aber den Aufbau zu träge. Vielleicht gelingt es mir die Wigets direkt einzubinden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

StephanFHEM

bekomme beim neusten Update folgende Fehlermeldung im Start-Log:
PERL WARNING: Use of uninitialized value in string ne at ./FHEM/98_DOIFtools.pm line 643

Grüße
Stephan

Ellert


Ellert

Mit DOIFtools kann ab morgen eine Tabelle erzeugt werden, die linear abgestufte Farben (Farbnummern) anzeigt. Diese Farben sind stufenweise Werten eines Wertebereiches zu geordnet.

ComputerZOO

Moin,
habe ich meine CSS irgendwie verpfriemelt, oder warum habe ich keine Zeilenumbrüche?


EDIT: Ach ja, es geht um die neue Funktion zur Erzeugung der Farbverläufe...

Ellert

habe ich meine CSS irgendwie verpfriemelt, oder warum habe ich keine Zeilenumbrüche?

Keine Ahnung, welcher Style ist das?


ComputerZOO

hausautomatisierung-com benutze ich standardmäßig. Habe aber gerade mal default, oder auch dark ausprobiert, überall die selbe Darstellung 🤷‍♂️
Da ich mal etwas in den CSS rumgespielt habe, dachte ich auch erst, ich hätte die Files damit sie bei einem Update nicht wieder mit dem Original überschrieben werden in Global aus der Aktualisierung ausgeschlossen, dem ist aber nicht so.