FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Maui am 30 Januar 2019, 08:10:39

Titel: [erledigt] Aggregation greift nicht auf allen Devices
Beitrag von: Maui am 30 Januar 2019, 08:10:39
Guten Morgen, ich habe hier ein DOIF mit Aggregation, welches scheinbar selektiv ist  :o

Internals:
   DEF        ([+[1]:00]) ( {foreach (AggrDoIf('@','^Swi_','ENERGY_Total')) {fhem("setreading $_ PowerLastHour ".(ReadingsVal($_,"ENERGY_Total",0)-ReadingsVal($_,"temp_counts",0) ));fhem("setreading $_ temp_counts ".(ReadingsVal($_,"ENERGY_Total",0) )) } })
   FUUID      5c50c636-f33f-414e-c0b2-a5d706ac6dcfff4a
   MODEL      FHEM
   NAME       di_swi_power_hour
   NR         202
   NTFY_ORDER 50-di_swi_power_hour
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2019-01-30 08:00:00   cmd             1
     2019-01-30 08:00:00   cmd_event       timer_1
     2019-01-30 08:00:00   cmd_nr          1
     2019-01-29 22:26:55   mode            enabled
     2019-01-30 08:00:00   state           cmd_1
     2019-01-30 08:00:00   timer_01_c01    30.01.2019 09:00:00
   Regex:
   attr:
     cmdState:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday)
   days:
   devices:
   do:
     0:
       0           {foreach (AggrDoIf('@','^Swi_','ENERGY_Total')) {fhem("setreading $_ PowerLastHour ".(ReadingsVal($_,"ENERGY_Total",0)-ReadingsVal($_,"temp_counts",0) ));fhem("setreading $_ temp_counts ".(ReadingsVal($_,"ENERGY_Total",0) )) } }
     1:
   helper:
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev   
     timerevent timer_1
     timereventsState
     triggerDev
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: timer_1
       state: cmd_1
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   internals:
   interval:
   intervalfunc:
   itimer:
   localtime:
     0          1548835200
   perlblock:
   readings:
   realtime:
     0          09:00:00
   time:
     0          +[1]:00
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1548835200:
       localtime  1548835200
       hash:
   uiState:
   uiTable:
Attributes:
   do         always
   room       0_Beamer


Das erste setreading scheint immer zu klappen, aber das 2. setreading klappt komischerweise nicht bei allen Devices.
Hier mal einer bei dem es klappt.

Internals:
   FUUID      5c50c636-f33f-414e-7244-9e3cd3dff5fd947c
   NAME       Swi_Gosund2
   NR         205
   STATE      OFF
   TYPE       dummy
   Helper:
     DBLOG:
       ENERGY_Yesterday:
         logdb:
           TIME       1548802812.33832
           VALUE      0.079
       PowerActualMonth:
         logdb:
           TIME       1548802740.15841
           VALUE      8.47
   READINGS:
     2019-01-30 08:06:43   CostLastMonth   3.532671072
     2019-01-30 08:06:43   ENERGY_ApparentPower 0
     2019-01-30 08:06:43   ENERGY_Current  0
     2019-01-30 08:06:43   ENERGY_Factor   0
     2019-01-18 13:00:00   ENERGY_Hour     7.983
     2018-11-30 23:59:00   ENERGY_Month    0.192
     2019-01-30 08:06:43   ENERGY_Period   0
     2019-01-30 08:06:43   ENERGY_Power    0
     2019-01-30 08:06:43   ENERGY_ReactivePower 0
     2019-01-30 08:06:43   ENERGY_Today    0
     2019-01-30 08:06:43   ENERGY_Total    8.241
     2019-01-30 08:06:43   ENERGY_TotalStartTime 2018-10-30T22:04:38
     2019-01-30 08:06:43   ENERGY_Voltage  0
     2019-01-30 08:06:43   ENERGY_Yesterday 0.079
     2019-01-30 08:06:43   Energy          {"Time":"2019-01-30T08:06:43","ENERGY":{"TotalStartTime":"2018-10-30T22:04:38","Total":8.241,"Yesterday":0.079,"Today":0.000,"Period":0,"Power":0,"ApparentPower":0,"ReactivePower":0,"Factor":0.00,"Voltage":0,"Current":0.000}}
     2019-01-29 15:06:25   POWER           OFF
     2018-12-15 20:12:21   Power           {"Time":"2018-12-15T20:12:18","Uptime":"0T20:24:22","Vcc":3.237,"POWER":"OFF","Wifi":{"AP":1,"SSId":"Weit","BSSId":"FC:EC:DA:3E:5B:D0","Channel":11,"RSSI":54}}
     2019-01-29 23:59:00   PowerActualMonth 8.47
     2019-01-30 08:00:00   PowerLastHour   0
     2018-12-31 23:59:00   PowerLastMonth  6.719
     2019-01-30 08:06:43   Time            2019-01-30T08:06:43
     2018-12-15 20:12:21   Uptime          0T20:24:22
     2018-12-15 20:12:21   Vcc             3.237
     2018-12-15 20:12:21   Wifi_AP         1
     2018-12-15 20:12:21   Wifi_BSSId      FC:EC:DA:3E:5B:D0
     2018-12-15 20:12:21   Wifi_Channel    11
     2018-12-15 20:12:21   Wifi_RSSI       54
     2018-12-15 20:12:21   Wifi_SSId       Weit
     2019-01-29 15:06:25   state           OFF
     2019-01-30 08:00:00   temp_counts     8.241
Attributes:
   DbLogInclude PowerActualMonth,PowerLastHour,PowerLastMonth,ENERGY_Yesterday
   event-on-change-reading .*
   event-on-update-reading state
   mqttPublish state:topic=cmnd/Gosund2/POWER1
   mqttSubscribe Energy:topic=tele/Gosund2/SENSOR POWER:topic=stat/Gosund2/POWER
   room       9_Drucker
   setList    ON OFF
   stateFormat POWER
   userReadings CostLastMonth { ReadingsVal("Swi_Trockner","PowerLastMonth",0)*0.2422 ;; }


Und bei einem ziemlich ähnlichen klappt es nicht. (Kann man ganz gut an dem Timestamp beim temp_counts sehen).
Ändere ich das DOIF in ...(AggrDoIf('@','^Swi_Gosund1','ENERGY_Total')) klappt es auch problemlos bei dem Device, aber dann bräuchte ich ja keine Aggregation mehr.

Internals:
   FUUID      5c50c636-f33f-414e-0a92-388158dd1f48c19d
   NAME       Swi_Gosund1
   NR         201
   STATE      ON
   TYPE       dummy
   Helper:
     DBLOG:
       ENERGY_Yesterday:
         logdb:
           TIME       1548802975.10939
           VALUE      0.528
       PowerActualMonth:
         logdb:
           TIME       1548802740.10979
           VALUE      43.576
       PowerLastHour:
         logdb:
           TIME       1548831600.31302
           VALUE      0.199000000000002
   READINGS:
     2019-01-30 08:07:54   ENERGY_ApparentPower 2
     2019-01-30 08:07:54   ENERGY_Current  0.009
     2019-01-30 08:07:54   ENERGY_Factor   0.73
     2018-12-17 10:00:00   ENERGY_Hour     35.194
     2018-11-30 23:59:00   ENERGY_Month    23.836
     2019-01-30 08:07:54   ENERGY_Period   0
     2019-01-30 08:07:54   ENERGY_Power    2
     2019-01-30 08:07:54   ENERGY_ReactivePower 1
     2019-01-30 08:07:54   ENERGY_Today    0.164
     2019-01-30 08:07:54   ENERGY_Total    26.542
     2019-01-30 08:07:54   ENERGY_TotalStartTime 2018-12-18T14:18:40
     2019-01-30 08:07:54   ENERGY_Voltage  228
     2019-01-30 08:07:54   ENERGY_Yesterday 0.528
     2019-01-30 08:07:54   Energy          {"Time":"2019-01-30T08:07:55","ENERGY":{"TotalStartTime":"2018-12-18T14:18:40","Total":26.542,"Yesterday":0.528,"Today":0.164,"Period":0,"Power":2,"ApparentPower":2,"ReactivePower":1,"Factor":0.73,"Voltage":228,"Current":0.009}}
     2018-12-18 14:37:53   POWER           ON
     2018-12-15 20:10:26   Power           {"Time":"2018-12-15T20:10:25","Uptime":"45T01:33:30","Vcc":3.256,"POWER":"ON","Wifi":{"AP":1,"SSId":"Weit","RSSI":40,"APMac":"FC:EC:DA:3E:5B:D0"}}
     2019-01-29 23:59:00   PowerActualMonth 43.576
     2019-01-30 08:00:00   PowerLastHour   0.199000000000002
     2018-12-31 23:59:00   PowerLastMonth  -14.838
     2019-01-30 08:07:54   Time            2019-01-30T08:07:55
     2018-12-15 20:10:26   Uptime          45T01:33:30
     2018-12-15 20:10:26   Vcc             3.256
     2018-12-15 20:10:26   Wifi_AP         1
     2018-12-15 20:10:26   Wifi_APMac      FC:EC:DA:3E:5B:D0
     2018-12-15 20:10:26   Wifi_RSSI       40
     2018-12-15 20:10:26   Wifi_SSId       Weit
     2018-12-15 20:11:02   state           ON
     2019-01-29 22:27:02   temp_counts     26.343
Attributes:
   DbLogInclude PowerActualMonth,PowerLastHour,PowerLastMonth,ENERGY_Yesterday
   event-on-change-reading .*
   event-on-update-reading state
   mqttPublish state:topic=cmnd/Gosund1/POWER
   mqttSubscribe Energy:topic=tele/Gosund1/SENSOR POWER:topic=stat/Gosund1/POWER
   room       0_Beamer
   setList    ON OFF


Vielleicht hat ja einer eine Idee, ich bin nämlich ratlos  ::)
Titel: Antw:Aggregation greift nicht auf allen Devices
Beitrag von: Damian am 30 Januar 2019, 09:40:20
Dann musst du dich herantasten.

Was liefert list Swi_.*

Haben alle Devices das Reading ENERGY_Total?

Was liefert AggrDoIf('@','^Swi_','')?
Titel: Antw:Aggregation greift nicht auf allen Devices
Beitrag von: Maui am 31 Januar 2019, 07:34:03
Danke dir. Weiß immer noch nicht wo es herkommt, aber hab den 2. Teil einfach in einen weiteren Ausführungsteil gepackt und lauf dann nochmal durch die foreach Schleife.
([+[1]:00]) ( {foreach (AggrDoIf('@','^Swi_','')) {fhem("setreading $_ PowerLastHour ".(ReadingsVal($_,"ENERGY_Total",0)-ReadingsVal($_,"temp_counts",0) )) }} ) ( {foreach (AggrDoIf('@','^Swi_','')) {fhem("setreading $_ temp_counts ".(ReadingsVal($_,"ENERGY_Total",0) )) }} )
Ist zwar eine Krücke, aber sie funktioniert  ;)