[gelöst] Attribut wait: sehr viele Events

Begonnen von Gisbert, 14 Dezember 2023, 13:46:37

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo Damian,

folgende Situation liegt vor:
In einem Fhem-Device habe ich in ein userReadings definiert:
{fhem("attr -silent Panasonic_Jeisha wait 0:0,1800:0,1:0,180,7200:0:0");7200}Das userReadings sieht in Gänze wie folgt aus:
HeishaMon_IP userReadings wait_Wert {if (ReadingsVal('HeishaMon_main','Outside_Temp','20') >= 12) {fhem("attr -silent Panasonic_Jeisha wait 0:0,1800:0,1:0,180,12600:0:0");;12600} \
elsif (9 <= ReadingsVal('HeishaMon_main','Outside_Temp','20') < 12) {fhem("attr -silent Panasonic_Jeisha wait 0:0,1800:0,1:0,180,10800:0:0");;10800} \
elsif (6 <= ReadingsVal('HeishaMon_main','Outside_Temp','20') < 9) {fhem("attr -silent Panasonic_Jeisha wait 0:0,1800:0,1:0,180,9000:0:0");;9000} \
elsif (ReadingsVal('HeishaMon_main','Outside_Temp','20') < 6) {fhem("attr -silent Panasonic_Jeisha wait 0:0,1800:0,1:0,180,7200:0:0");;7200}}
Ich benötige unterschiedliche Wartezeiten und habe es deshalb versucht wie beschrieben zu lösen.

Im Event monitor bekomme alle 30 Sekunden 4 Einträge der folgenden Art, die ich gerne vermeiden möchte, nur weiß ich nicht wie:
2023-12-14 13:37:35.801 Global global ATTR Panasonic_Jeisha wait 0:0,1800:0,1:0,180,7200:0:0
2023-12-14 13:37:35.900 Global global ATTR Panasonic_Jeisha wait 0:0,1800:0,1:0,180,7200:0:0
2023-12-14 13:37:36.014 Global global ATTR Panasonic_Jeisha wait 0:0,1800:0,1:0,180,7200:0:0
2023-12-14 13:37:36.114 Global global ATTR Panasonic_Jeisha wait 0:0,1800:0,1:0,180,7200:0:0
2023-12-14 13:38:05.851 Global global ATTR Panasonic_Jeisha wait 0:0,1800:0,1:0,180,7200:0:0
2023-12-14 13:38:05.946 Global global ATTR Panasonic_Jeisha wait 0:0,1800:0,1:0,180,7200:0:0
2023-12-14 13:38:06.064 Global global ATTR Panasonic_Jeisha wait 0:0,1800:0,1:0,180,7200:0:0
2023-12-14 13:38:06.173 Global global ATTR Panasonic_Jeisha wait 0:0,1800:0,1:0,180,7200:0:0

Ein list des DOIF-Devices Panansonic_Jeisha:
define Panasonic_Jeisha DOIF (-5 <= [HeishaMon_IP:Z1HeatRequestTemp] <= 5 and [?HeishaMon_main:Heatpump_State] == 1 and [?HeishaMon_IP:Taktsperre] == 0) \
(set HeishaMon_main SetZ1HeatRequestTemperature [HeishaMon_IP:Z1HeatRequestTemp]) \
DOELSEIF ([?{sunrise_abs()}-{sunrise_abs(14400)}] and [?HeishaMon_main:Outside_Temp] <= 12 and [HeishaMon_IP:Beheizte_Flaeche_av] >= 35 \
and [?HeishaMon_IP:Taktsperre] == 0 and [?HeishaMon_main:Heatpump_State] == 0) \
(set HeishaMon_main SetZ1HeatRequestTemperature [HeishaMon_IP:Z1HeatRequestTemp]) \
(IF ([HeishaMon_IP:Beheizte_Flaeche_av] >= 35) (set HeishaMon_main:FILTER=Heatpump_State!=1 SetHeatpump 1)) \
DOELSEIF (([?00:00-{sunrise_abs()}] or [?{sunrise_abs(14400)}-23:59]) and [?HeishaMon_main:Outside_Temp] <= 12 and [HeishaMon_IP:Beheizte_Flaeche_av] >= 30 \
and [?HeishaMon_IP:Taktsperre] == 0 and [?HeishaMon_main:Heatpump_State] == 0) \
(set HeishaMon_main SetZ1HeatRequestTemperature [HeishaMon_IP:Z1HeatRequestTemp]) \
(set HeishaMon_main:FILTER=Heatpump_State!=1 SetHeatpump 1) \
DOELSEIF ([HeishaMon_main:Compressor_Freq] == 0 and [?HeishaMon_main:Defrosting_State] == 0 and [?HeishaMon_main:Heatpump_State] == 1) \
(setreading HeishaMon_IP Taktsperre 1) \
(IF ([HeishaMon_main:Compressor_Freq] == 0) (set HeishaMon_main:FILTER=Heatpump_State!=0 SetHeatpump 0)) \
(setreading HeishaMon_IP Taktsperre 0) \
DOELSEIF ([HeishaMon_IP:Zeitstempel] =~ "20" and [?HeishaMon_main:Heatpump_State] == 0 and [?HeishaMon_IP:Taktsperre] == 1 and [?HeishaMon_IP:Taktsperre:sec] > [?HeishaMon_IP:wait_Wert]) \
(setreading HeishaMon_IP Taktsperre 0) \
DOELSEIF ([HeishaMon_IP:Zeitstempel] =~ "20" and [?HeishaMon_main:Heatpump_State] == 0 and [$SELF:state] eq "cmd_2") \
DOELSEIF ([HeishaMon_main:Outside_Temp] <= 3 and [?Zuhause.WZ:state] eq "on") (set Zuhause.WZ off) \
DOELSEIF ([HeishaMon_main:Outside_Temp] >= 7 and [?Zuhause.WZ:state] eq "off") (set Zuhause.WZ on)
attr Panasonic_Jeisha alias Panasonic Jeisha
attr Panasonic_Jeisha devStateIcon (cmd_1):sani_heating_heatpump@orange (cmd_2|cmd_2_1|cmd_2_2|cmd_3|cmd_3_1|cmd_3_2):sani_heating_heatpump@red (cmd_4|cmd_4_1|cmd_4_2|cmd_4_3|cmd_5|cmd_6):sani_heating_heatpump@grey cmd_7:sani_floor_heating_neutral@red cmd_8:sani_floor_heating_neutral@grey
attr Panasonic_Jeisha do always
attr Panasonic_Jeisha icon sani_heating_heatpump
attr Panasonic_Jeisha repeatsame 0:2:2:2:1:1
attr Panasonic_Jeisha room Heizung
attr Panasonic_Jeisha wait 0:0,1800:0,1:0,180,9000:0:0
#   DEF        (-5 <= [HeishaMon_IP:Z1HeatRequestTemp] <= 5 and [?HeishaMon_main:Heatpump_State] == 1 and [?HeishaMon_IP:Taktsperre] == 0)
#(set HeishaMon_main SetZ1HeatRequestTemperature [HeishaMon_IP:Z1HeatRequestTemp])
#DOELSEIF ([?{sunrise_abs()}-{sunrise_abs(14400)}] and [?HeishaMon_main:Outside_Temp] <= 12 and [HeishaMon_IP:Beheizte_Flaeche_av] >= 35
#and [?HeishaMon_IP:Taktsperre] == 0 and [?HeishaMon_main:Heatpump_State] == 0)
#(set HeishaMon_main SetZ1HeatRequestTemperature [HeishaMon_IP:Z1HeatRequestTemp])
#(IF ([HeishaMon_IP:Beheizte_Flaeche_av] >= 35) (set HeishaMon_main:FILTER=Heatpump_State!=1 SetHeatpump 1))
#DOELSEIF (([?00:00-{sunrise_abs()}] or [?{sunrise_abs(14400)}-23:59]) and [?HeishaMon_main:Outside_Temp] <= 12 and [HeishaMon_IP:Beheizte_Flaeche_av] >= 30
#and [?HeishaMon_IP:Taktsperre] == 0 and [?HeishaMon_main:Heatpump_State] == 0)
#(set HeishaMon_main SetZ1HeatRequestTemperature [HeishaMon_IP:Z1HeatRequestTemp])
#(set HeishaMon_main:FILTER=Heatpump_State!=1 SetHeatpump 1)
#DOELSEIF ([HeishaMon_main:Compressor_Freq] == 0 and [?HeishaMon_main:Defrosting_State] == 0 and [?HeishaMon_main:Heatpump_State] == 1)
#(setreading HeishaMon_IP Taktsperre 1)
#(IF ([HeishaMon_main:Compressor_Freq] == 0) (set HeishaMon_main:FILTER=Heatpump_State!=0 SetHeatpump 0))
#(setreading HeishaMon_IP Taktsperre 0)
#DOELSEIF ([HeishaMon_IP:Zeitstempel] =~ "20" and [?HeishaMon_main:Heatpump_State] == 0 and [?HeishaMon_IP:Taktsperre] == 1 and [?HeishaMon_IP:Taktsperre:sec] > [?HeishaMon_IP:wait_Wert])
#(setreading HeishaMon_IP Taktsperre 0)
#DOELSEIF ([HeishaMon_IP:Zeitstempel] =~ "20" and [?HeishaMon_main:Heatpump_State] == 0 and [$SELF:state] eq "cmd_2")
#DOELSEIF ([HeishaMon_main:Outside_Temp] <= 3 and [?Zuhause.WZ:state] eq "on") (set Zuhause.WZ off)
#DOELSEIF ([HeishaMon_main:Outside_Temp] >= 7 and [?Zuhause.WZ:state] eq "off") (set Zuhause.WZ on)
#   FUUID      65412ff6-f33f-e986-ab0b-a591492833e10344
#   MODEL      FHEM
#   NAME       Panasonic_Jeisha
#   NOTIFYDEV  HeishaMon_main,Panasonic_Jeisha,global,HeishaMon_IP
#   NR         1351
#   NTFY_ORDER 50-Panasonic_Jeisha
#   STATE      cmd_1
#   TYPE       DOIF
#   VERSION    27740 2023-07-10 09:31:11
#   eventCount 2
#   READINGS:
#     2023-12-14 13:38:36   Device          HeishaMon_main
#     2023-12-14 13:31:06   cmd             1
#     2023-12-14 13:31:06   cmd_event       HeishaMon_IP
#     2023-12-14 13:31:06   cmd_nr          1
#     2023-12-14 13:34:05   e_HeishaMon_IP_Beheizte_Flaeche_av 30.38
#     2023-12-14 13:31:06   e_HeishaMon_IP_Z1HeatRequestTemp 0
#     2023-12-14 13:35:05   e_HeishaMon_IP_Zeitstempel 2023-12-14 13:35
#     2023-12-14 13:38:36   e_HeishaMon_main_Compressor_Freq 33
#     2023-12-14 13:38:36   e_HeishaMon_main_Outside_Temp 6
#     2023-12-14 12:37:36   e_Panasonic_Jeisha_state cmd_1
#     2023-12-14 12:37:28   mode            enabled
#     2023-12-14 13:31:06   state           cmd_1
#     2023-12-14 13:25:05   timer_01_c02    15.12.2023 07:47:31
#     2023-12-14 13:25:05   timer_02_c02    15.12.2023 11:47:31
#     2023-12-14 13:25:05   timer_03_c03    15.12.2023 00:00:00
#     2023-12-14 13:25:05   timer_04_c03    15.12.2023 07:47:31
#     2023-12-14 13:25:05   timer_05_c03    15.12.2023 11:47:31
#     2023-12-14 13:25:05   timer_06_c03    14.12.2023 23:59:00
#   Regex:
#     accu:
#     bar:
#     barAvg:
#     collect:
#     cond:
#       HeishaMon_IP:
#         0:
#           Z1HeatRequestTemp ^HeishaMon_IP$:^Z1HeatRequestTemp:
#         1:
#           Beheizte_Flaeche_av ^HeishaMon_IP$:^Beheizte_Flaeche_av:
#         2:
#           Beheizte_Flaeche_av ^HeishaMon_IP$:^Beheizte_Flaeche_av:
#         3:
#         4:
#           Zeitstempel ^HeishaMon_IP$:^Zeitstempel:
#         5:
#           Zeitstempel ^HeishaMon_IP$:^Zeitstempel:
#         6:
#         7:
#       HeishaMon_main:
#         0:
#         1:
#         2:
#         3:
#           Compressor_Freq ^HeishaMon_main$:^Compressor_Freq:
#         4:
#         5:
#         6:
#           Outside_Temp ^HeishaMon_main$:^Outside_Temp:
#         7:
#           Outside_Temp ^HeishaMon_main$:^Outside_Temp:
#       Panasonic_Jeisha:
#         5:
#           state      ^Panasonic_Jeisha$:^state:
#   attr:
#     cmdState:
#     repeatsame:
#       0
#       2
#       2
#       2
#       1
#       1
#     wait:
#       0:
#         0
#       1:
#         0
#         1800
#       2:
#         0
#         1
#       3:
#         0
#         180
#         9000
#       4:
#         0
#       5:
#         0
#     waitdel:
#   condition:
#     0          -5 <= ::ReadingValDoIf($hash,'HeishaMon_IP','Z1HeatRequestTemp') <= 5 and ::ReadingValDoIf($hash,'HeishaMon_main','Heatpump_State') == 1 and ::ReadingValDoIf($hash,'HeishaMon_IP','Taktsperre') == 0
#     1          ::DOIF_time($hash,0,1,$wday,$hms) and ::ReadingValDoIf($hash,'HeishaMon_main','Outside_Temp') <= 12 and ::ReadingValDoIf($hash,'HeishaMon_IP','Beheizte_Flaeche_av') >= 35  and ::ReadingValDoIf($hash,'HeishaMon_IP','Taktsperre') == 0 and ::ReadingValDoIf($hash,'HeishaMon_main','Heatpump_State') == 0
#     2          (::DOIF_time($hash,2,3,$wday,$hms) or ::DOIF_time($hash,4,5,$wday,$hms)) and ::ReadingValDoIf($hash,'HeishaMon_main','Outside_Temp') <= 12 and ::ReadingValDoIf($hash,'HeishaMon_IP','Beheizte_Flaeche_av') >= 30  and ::ReadingValDoIf($hash,'HeishaMon_IP','Taktsperre') == 0 and ::ReadingValDoIf($hash,'HeishaMon_main','Heatpump_State') == 0
#     3          ::ReadingValDoIf($hash,'HeishaMon_main','Compressor_Freq') == 0 and ::ReadingValDoIf($hash,'HeishaMon_main','Defrosting_State') == 0 and ::ReadingValDoIf($hash,'HeishaMon_main','Heatpump_State') == 1
#     4          ::ReadingValDoIf($hash,'HeishaMon_IP','Zeitstempel') =~ "20" and ::ReadingValDoIf($hash,'HeishaMon_main','Heatpump_State') == 0 and ::ReadingValDoIf($hash,'HeishaMon_IP','Taktsperre') == 1 and ::ReadingSecDoIf('HeishaMon_IP','Taktsperre') > ::ReadingValDoIf($hash,'HeishaMon_IP','wait_Wert')
#     5          ::ReadingValDoIf($hash,'HeishaMon_IP','Zeitstempel') =~ "20" and ::ReadingValDoIf($hash,'HeishaMon_main','Heatpump_State') == 0 and ::ReadingValDoIf($hash,'Panasonic_Jeisha','state') eq "cmd_2"
#     6          ::ReadingValDoIf($hash,'HeishaMon_main','Outside_Temp') <= 3 and ::ReadingValDoIf($hash,'Zuhause.WZ','state') eq "on"
#     7          ::ReadingValDoIf($hash,'HeishaMon_main','Outside_Temp') >= 7 and ::ReadingValDoIf($hash,'Zuhause.WZ','state') eq "off"
#   days:
#   do:
#     0:
#       0          set HeishaMon_main SetZ1HeatRequestTemperature [HeishaMon_IP:Z1HeatRequestTemp]
#     1:
#       0          set HeishaMon_main SetZ1HeatRequestTemperature [HeishaMon_IP:Z1HeatRequestTemp]
#       1          IF ([HeishaMon_IP:Beheizte_Flaeche_av] >= 35) (set HeishaMon_main:FILTER=Heatpump_State!=1 SetHeatpump 1)
#     2:
#       0          set HeishaMon_main SetZ1HeatRequestTemperature [HeishaMon_IP:Z1HeatRequestTemp]
#       1          set HeishaMon_main:FILTER=Heatpump_State!=1 SetHeatpump 1
#     3:
#       0          setreading HeishaMon_IP Taktsperre 1
#       1          IF ([HeishaMon_main:Compressor_Freq] == 0) (set HeishaMon_main:FILTER=Heatpump_State!=0 SetHeatpump 0)
#       2          setreading HeishaMon_IP Taktsperre 0
#     4:
#       0          setreading HeishaMon_IP Taktsperre 0
#     5:
#       0         
#     6:
#       0          set Zuhause.WZ off
#     7:
#       0          set Zuhause.WZ on
#     8:
#   helper:
#     NOTIFYDEV  HeishaMon_main,Panasonic_Jeisha,global,HeishaMon_IP
#     event      Outside_Temp: 6
#     globalinit 1
#     last_timer 6
#     sleeptimer -1
#     timerdev   HeishaMon_IP
#     timerevent Z1HeatRequestTemp: 0
#     triggerDev HeishaMon_main
#     bm:
#       DOIF_Attr:
#         cnt        100
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        14.12. 13:29:35
#         max        0.0173330307006836
#         tot        0.896361827850342
#         mAr:
#           set
#           Panasonic_Jeisha
#           wait
#           0:0,1800:0,1:0,180,9000:0:0
#       DOIF_Get:
#         cnt        2
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        14.12. 13:29:11
#         max        2.12192535400391e-05
#         tot        3.31401824951172e-05
#         mAr:
#           HASH(0x55be102cc878)
#           Panasonic_Jeisha
#           ?
#       DOIF_Notify:
#         cnt        223
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        14.12. 13:31:06
#         max        0.0228798389434814
#         tot        0.0937471389770508
#         mAr:
#           HASH(0x55be102cc878)
#           HASH(0x55be1026c8b0)
#       DOIF_Set:
#         cnt        15
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        14.12. 13:29:35
#         max        0.000204086303710938
#         tot        0.000912666320800781
#         mAr:
#           HASH(0x55be102cc878)
#           Panasonic_Jeisha
#           ?
#     timerevents:
#       Z1HeatRequestTemp: 0
#     timereventsState:
#       Z1HeatRequestTemp: 0
#     triggerEvents:
#       Outside_Temp: 6
#     triggerEventsState:
#       Outside_Temp: 6
#   internals:
#   interval:
#     0          -1
#     1          0
#     2          -1
#     3          2
#     4          -1
#     5          4
#   intervalfunc:
#   localtime:
#     0          1702622851
#     1          1702637251
#     2          1702594800
#     3          1702622851
#     4          1702637251
#     5          1702594740
#   perlblock:
#   readings:
#     all         HeishaMon_IP:Z1HeatRequestTemp HeishaMon_IP:Beheizte_Flaeche_av HeishaMon_main:Compressor_Freq HeishaMon_IP:Zeitstempel Panasonic_Jeisha:state HeishaMon_main:Outside_Temp
#   realtime:
#     0          07:47:31
#     1          11:47:31
#     2          00:00:00
#     3          07:47:31
#     4          11:47:31
#     5          23:59:00
#   time:
#     0          {sunrise_abs()}
#     1          {sunrise_abs(14400)}
#     2          00:00:00
#     3          {sunrise_abs()}
#     4          {sunrise_abs(14400)}
#     5          23:59:00
#   timeCond:
#     0          1
#     1          1
#     2          2
#     3          2
#     4          2
#     5          2
#   timer:
#     0          0
#     1          0
#     2          0
#     3          0
#     4          0
#     5          0
#   trigger:
#   triggertime:
#     1702594740:
#       localtime  1702594740
#       hash:
#     1702594800:
#       localtime  1702594800
#       hash:
#     1702622851:
#       localtime  1702622851
#       hash:
#     1702637251:
#       localtime  1702637251
#       hash:
#   uiState:
#   uiTable:
#
setstate Panasonic_Jeisha cmd_1
setstate Panasonic_Jeisha 2023-12-14 13:38:36 Device HeishaMon_main
setstate Panasonic_Jeisha 2023-12-14 13:31:06 cmd 1
setstate Panasonic_Jeisha 2023-12-14 13:31:06 cmd_event HeishaMon_IP
setstate Panasonic_Jeisha 2023-12-14 13:31:06 cmd_nr 1
setstate Panasonic_Jeisha 2023-12-14 13:34:05 e_HeishaMon_IP_Beheizte_Flaeche_av 30.38
setstate Panasonic_Jeisha 2023-12-14 13:31:06 e_HeishaMon_IP_Z1HeatRequestTemp 0
setstate Panasonic_Jeisha 2023-12-14 13:35:05 e_HeishaMon_IP_Zeitstempel 2023-12-14 13:35
setstate Panasonic_Jeisha 2023-12-14 13:38:36 e_HeishaMon_main_Compressor_Freq 33
setstate Panasonic_Jeisha 2023-12-14 13:38:36 e_HeishaMon_main_Outside_Temp 6
setstate Panasonic_Jeisha 2023-12-14 12:37:36 e_Panasonic_Jeisha_state cmd_1
setstate Panasonic_Jeisha 2023-12-14 12:37:28 mode enabled
setstate Panasonic_Jeisha 2023-12-14 13:31:06 state cmd_1
setstate Panasonic_Jeisha 2023-12-14 13:25:05 timer_01_c02 15.12.2023 07:47:31
setstate Panasonic_Jeisha 2023-12-14 13:25:05 timer_02_c02 15.12.2023 11:47:31
setstate Panasonic_Jeisha 2023-12-14 13:25:05 timer_03_c03 15.12.2023 00:00:00
setstate Panasonic_Jeisha 2023-12-14 13:25:05 timer_04_c03 15.12.2023 07:47:31
setstate Panasonic_Jeisha 2023-12-14 13:25:05 timer_05_c03 15.12.2023 11:47:31
setstate Panasonic_Jeisha 2023-12-14 13:25:05 timer_06_c03 14.12.2023 23:59:00

Viele Grüße
Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Gisbert

Hallo Damian,
ich hab die commandref studiert, und beim Attribut wait kann man Readings anwenden. Das ist viel einfacher als mein verschwurbeltes Konstrukt.
Lösung:
attr Panasonic_Jeisha wait 0:0,1800:0,1:0,180,[HeishaMon_IP:wait_Wert]:0:0Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY