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
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:0
Viele Grüße Gisbert