Im DEF-Teil eines Perl-DOIFs modifizierte Readings werden nicht in die Datenkank

Begonnen von WW, 12 November 2025, 20:43:33

Vorheriges Thema - Nächstes Thema

WW

Ich modifiziere im DEF-Teil des unten stehenden DOIFs Readings. Die Readings werden auch aktualisiert, es werden Events erzeugt. Lediglich der Eintrag in die Datenbank funktioniert nicht.

define myKlima DOIF DEF \
\
# Aussen\
mwAu_T {\
my $x = (\
[$SELF:AuGarageAussen_T] + \
[$SELF:AuGartenhausAussen_T] + \
[$SELF:AuHaustuer1_T] +\
[$SELF:AuTerrasse_T] +\
[$SELF:AuHeizung_T] +\
0) / 5;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwAu_T",$x,1);;\
}\
mwAu_H {\
my $x = (\
[$SELF:AuHaustuer1_H] +\
[$SELF:AuTerrasse_H] +\
0) / 2;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwAu_H",$x,1);;\
}\
mwAu_D {\
my $x = (\
[$SELF:AuHaustuer1_D] +\
[$SELF:AuTerrasse_D] +\
0) / 2;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwAu_D",$x,1);;\
}\
mwAu_P {\
my $x = (\
[$SELF:AuProplanta_P] +\
0) / 1;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwAu_P",$x,1);;\
}\
mwAu_Text {\
set_Reading ("mwAu_Text",[$SELF:mwAu_T:d1]."°C, ".[$SELF:mwAu_H:d1]."%, ".[$SELF:mwAu_P:d1]."hPa",1);; \
}\
\
\
# KG: Kellergeschoß\
mwKg_T {\
my $x = (\
[$SELF:KgFlur_T] + \
[$SELF:KgFlur2_T] + \
[$SELF:KgFlur3_T] + \
[$SELF:KgBz_T] +\
[$SELF:KgBz2_T] +\
[$SELF:KgVr_T] +\
[$SELF:KgVr2_T] +\
[$SELF:KgWk_T] +\
[$SELF:KgWk2_T] +\
[$SELF:KgWs_T] +\
0) / 10;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwKg_T",$x,1);;\
}\
mwKg_H {\
my $x = (\
[$SELF:KgFlur_H] +\
[$SELF:KgFlur2_H] +\
[$SELF:KgBz_H] +\
[$SELF:KgBz2_H] +\
[$SELF:KgVr2_H] +\
[$SELF:KgWk2_H] +\
[$SELF:KgWs_H] +\
0) / 7;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwKg_H",$x,1);;\
}\
mwKg_D {\
my $x = (\
[$SELF:KgFlur_D] +\
[$SELF:KgFlur2_D] +\
[$SELF:KgBz_D] +\
[$SELF:KgBz2_D] +\
[$SELF:KgVr2_D] +\
[$SELF:KgWk2_D] +\
[$SELF:KgWs_D] +\
0) / 7;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwKg_D",$x,1);;\
}\
#mwKg_P {\
#my $x = (\
# 0) / 1;;\
#$x = sprintf("%.1f",$x);;\
#set_Reading("mwAu_P",$x,1);;\
# }\
mwKg_Text {\
set_Reading ("mwKg_Text",[$SELF:mwKg_T:d1]."°C, ".[$SELF:mwKg_H:d1]."%",1);; \
}\
\
\
# EG: Erdgeschoss\
mwEg_T {\
my $x = (\
[$SELF:EgAb_T] + \
[$SELF:EgAb2_T] + \
[$SELF:EgBad_T] + \
[$SELF:EgDiele_T] + \
[$SELF:EgFlur_T] + \
[$SELF:EgEz_T] + \
[$SELF:EgEz2_T] +\
[$SELF:EgFz_T] +\
[$SELF:EgFz2_T] +\
[$SELF:EgKu_T] +\
[$SELF:EgKu2_T] +\
[$SELF:EgWz_T] +\
[$SELF:EgWz2_T] +\
0) / 13;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwEg_T",$x,1);;\
}\
mwEg_H {\
my $x = (\
[$SELF:EgAb_H] + \
[$SELF:EgAb2_H] + \
[$SELF:EgBad_H] + \
[$SELF:EgDiele_H] + \
[$SELF:EgFlur_H] + \
[$SELF:EgEz_H] + \
[$SELF:EgEz2_H] +\
[$SELF:EgFz_H] +\
[$SELF:EgFz2_H] +\
[$SELF:EgKu_H] +\
[$SELF:EgKu2_H] +\
[$SELF:EgWz_H] +\
[$SELF:EgWz2_H] +\
0) / 13;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwEg_H",$x,1);;\
}\
mwEg_D {\
my $x = (\
[$SELF:EgAb_D] + \
[$SELF:EgAb2_D] + \
[$SELF:EgBad_D] + \
[$SELF:EgDiele_D] + \
[$SELF:EgFlur_D] + \
[$SELF:EgEz_D] + \
[$SELF:EgEz2_D] +\
[$SELF:EgFz_D] +\
[$SELF:EgFz2_D] +\
[$SELF:EgKu_D] +\
[$SELF:EgKu2_D] +\
[$SELF:EgWz_D] +\
[$SELF:EgWz2_D] +\
0) / 13;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwEg_D",$x,1);;\
}\
mwEg_P {\
my $x = (\
[$SELF:EgKu_P] +\
0) / 1;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwEg_P",$x,1);;\
}\
mwEg_Text {\
set_Reading ("mwEg_Text",[$SELF:mwEg_T:d1]."°C, ".[$SELF:mwEg_H:d1]."%, ".[$SELF:mwEg_P:d1]."hPa",1);; \
}\
\
\
# OG: Obergeschoss\
mwOg_T {\
my $x = (\
[$SELF:OgAz_T] + \
[$SELF:OgAz2_T] + \
[$SELF:OgBad_T] + \
[$SELF:OgFlur_T] + \
[$SELF:OgGz_T] +\
[$SELF:OgGz2_T] +\
[$SELF:OgSz_T] +\
[$SELF:OgSz2_T] +\
0) / 8;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwOg_T",$x,1);;\
}\
mwOg_H {\
my $x = (\
[$SELF:OgAz_H] + \
[$SELF:OgAz2_H] + \
[$SELF:OgBad_H] + \
[$SELF:OgFlur_H] + \
[$SELF:OgGz_H] +\
[$SELF:OgGz2_H] +\
[$SELF:OgSz_H] +\
[$SELF:OgSz2_H] +\
0) / 8;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwOg_H",$x,1);;\
}\
mwOg_D {\
my $x = (\
[$SELF:OgAz_D] + \
[$SELF:OgAz2_D] + \
[$SELF:OgBad_D] + \
[$SELF:OgFlur_D] + \
[$SELF:OgGz_D] +\
[$SELF:OgGz2_D] +\
[$SELF:OgSz_D] +\
[$SELF:OgSz2_D] +\
0) / 8;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwOg_D",$x,1);;\
}\
mwOg_P {\
my $x = (\
[$SELF:OgAz_P] +\
0) / 1;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwOg_P",$x,1);;\
}\
mwOg_Text {\
set_Reading ("mwOg_Text",[$SELF:mwOg_T:d1]."°C, ".[$SELF:mwOg_H:d1]."%, ".[$SELF:mwOg_P:d1]."hPa",1);; \
}\
\
# DG: Dachgeschoss\
mwDg_T {\
my $x = (\
[$SELF:DgDruckerWilli_T] + \
[$SELF:DgSchreibtischWilli_T] + \
[$SELF:DgTreppe_T] + \
[$SELF:DgBueroNas_T] + \
[$SELF:DgNz_T] + \
[$SELF:DgNz2_T] + \
0) / 6;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwDg_T",$x,1);;\
}\
mwDg_H {\
my $x = (\
[$SELF:DgDruckerWilli_H] + \
[$SELF:DgSchreibtischWilli_H] + \
[$SELF:DgTreppe_H] + \
[$SELF:DgNz_H] + \
[$SELF:DgNz2_H] + \
0) / 5;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwDg_H",$x,1);;\
}\
mwDg_D {\
my $x = (\
[$SELF:DgDruckerWilli_D] + \
[$SELF:DgSchreibtischWilli_D] + \
[$SELF:DgTreppe_D] + \
[$SELF:DgNz_D] + \
[$SELF:DgNz2_D] + \
0) / 5;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwDg_D",$x,1);;\
}\
mwDg_P {\
my $x = (\
[$SELF:DgTreppe_P] + \
0) / 1;;\
$x = sprintf("%.1f",$x);;\
set_Reading("mwDg_P",$x,1);;\
}\
mwDg_Text {\
set_Reading ("mwDg_Text",[$SELF:mwDg_T:d1]."°C, ".[$SELF:mwDg_H:d1]."%, ".[$SELF:mwDg_P:d1]."hPa",1);; \
}\
\
# Taupunkt-Differenz zu Aussentaupunkt\
diffKg_D {\
set_Reading ("diffKg_D",::round([$SELF:mwKg_D]-[$SELF:mwAu_D],1));;\
}\
\
diffEg_D {\
set_Reading ("diffEg_D",::round([$SELF:mwEg_D]-[$SELF:mwAu_D],1));;\
} \
\
diffOg_D {\
set_Reading ("diffOg_D",::round([$SELF:mwOg_D]-[$SELF:mwAu_D],1));;\
} \
\
diffDg_D {\
set_Reading ("diffDg_D",::round([$SELF:mwDg_D]-[$SELF:mwAu_D],1));;\
}
attr myKlima DbLogExclude .*
attr myKlima DbLogInclude Au.*,Kg.*,Eg.*,Og.*,Dg.*,mwEg_T
attr myKlima alias Klima
attr myKlima event-min-interval diff.*:49000,mw.*:49000,Au.*:49000,Kg.*:49000,Eg.*:49000,Og.*:49000,Dg.*:49000
attr myKlima event-on-change-reading diff.*,mw.*,Au.*,Kg.*,Eg.*,Og.*,Dg.*
attr myKlima event_Readings AuGarageInnen_T: [AuGarageEsp02:T1],\
AuGarageAussen_T: [AuGarageEsp02:T2],\
\
AuGartenhausInnen_T: [AuGartenhausEsp01:T1],\
AuGartenhausAussen_T: [AuGartenhausEsp01:T2],\
\
AuHaustuer1_T: [AuHaustuerLacrosse:temperature],\
AuHaustuer1_H: [AuHaustuerLacrosse:humidity],\
AuHaustuer1_D: [AuHaustuerLacrosse:dewpoint],\
\
AuHaustuer2_T: [AuHaustuer2Lacrosse:temperature],\
AuHeizung_T: [Lambda:GeneralAmbient-ActualAmbientTemp],\
\
AuPv_T: [AuPvZbTuya:temperature],\
AuPv_H: [AuPvZbTuya:humidity],\
AuPv_D: [AuPvZbTuya:dewpoint],\
\
AuProplanta_T: [ProplantaWetter:temperature],\
AuProplanta_H: [ProplantaWetter:humidity],\
AuProplanta_D: [ProplantaWetter:dewPoint],\
AuProplanta_P: [ProplantaWetter:pressure],\
\
AuTerrasse_T: [AuTerrasseZbSnzb:temperature],\
AuTerrasse_H: [AuTerrasseZbSnzb:humidity],\
AuTerrasse_D: [AuTerrasseZbSnzb:dewpoint],\
\
\
DgDruckerWilli_T: [DgSonoff105:AM2301_Temperature],\
DgDruckerWilli_H: [DgSonoff105:AM2301_Humidity],\
DgDruckerWilli_D: [DgSonoff105:AM2301_DewPoint],\
\
DgNz_T: [DgNzZbSnzb:temperature],\
DgNz_H: [DgNzZbSnzb:humidity],\
DgNz_D: [DgNzZbSnzb:dewpoint],\
\
DgNz2_T: [DgNzSonoff120:AM2301_Temperature],\
DgNz2_H: [DgNzSonoff120:AM2301_Humidity],\
DgNz2_D: [DgNzSonoff120:AM2301_DewPoint],\
\
DgNzHeizungV: [DgNzSonoff120:DS18B20-1_Temperature],\
DgNzHeizungR: [DgNzSonoff120:DS18B20-2_Temperature],\
\
DgSchreibtischWilli_T: [DgBueroTasmota229:AM2301_Temperature],\
DgSchreibtischWilli_H: [DgBueroTasmota229:AM2301_Humidity],\
DgSchreibtischWilli_D: [DgBueroTasmota229:AM2301_DewPoint],\
\
DgTreppe_T: [DgLgwLacrosse98:temperature],\
DgTreppe_H: [DgLgwLacrosse98:humidity],\
DgTreppe_D: [DgLgwLacrosse98:dewpoint],\
DgTreppe_P: [DgLgwLacrosse98:pressure],\
\
DgBueroNas_T: [TestSonoff116:DS18B20_Temperature],\
\
\
EgAb_T: [EgAbSonoff103:AM2301_Temperature],\
EgAb_H: [EgAbSonoff103:AM2301_Humidity],\
EgAb_D: [EgAbSonoff103:AM2301_DewPoint],\
\
EgAb2_T: [EgAbZbSnzb:temperature],\
EgAb2_H: [EgAbZbSnzb:humidity],\
EgAb2_D: [EgAbZbSnzb:dewpoint],\
\
EgBad_T: [EgBadZbSnzb:temperature],\
EgBad_H: [EgBadZbSnzb:humidity],\
EgBad_D: [EgBadZbSnzb:dewpoint],\
\
EgDiele_T: [EgDieleZbSnzb:temperature],\
EgDiele_H: [EgDieleZbSnzb:humidity],\
EgDiele_D: [EgDieleZbSnzb:dewpoint],\
\
EgFlur_T: [EgFlurZbSnzb:temperature],\
EgFlur_H: [EgFlurZbSnzb:humidity],\
EgFlur_D: [EgFlurZbSnzb:dewpoint],\
\
EgEz_T: [EgEzBridgeSonoff107:AM2301_Temperature],\
EgEz_H: [EgEzBridgeSonoff107:AM2301_Humidity],\
EgEz_D: [EgEzBridgeSonoff107:AM2301_DewPoint],\
\
EgEz2_T: [EgEzZbSnzb:temperature],\
EgEz2_H: [EgEzZbSnzb:humidity],\
EgEz2_D: [EgEzZbSnzb:dewpoint],\
\
EgFz_T: [EgFzBridgeSonoff106:AM2301_Temperature],\
EgFz_H: [EgFzBridgeSonoff106:AM2301_Humidity],\
EgFz_D: [EgFzBridgeSonoff106:AM2301_DewPoint],\
\
EgFz2_T: [EgFzZbSnzb:temperature],\
EgFz2_H: [EgFzZbSnzb:humidity],\
EgFz2_D: [EgFzZbSnzb:dewpoint],\
\
EgKu_T: [EgKuSonoff113:BME280_Temperature],\
EgKu_H: [EgKuSonoff113:BME280_Humidity],\
EgKu_D: [EgKuSonoff113:BME280_DewPoint],\
EgKu_P: [EgKuSonoff113:BME280_Pressure],\
\
EgKu2_T: [EgKuZbSnzb:temperature],\
EgKu2_H: [EgKuZbSnzb:humidity],\
EgKu2_D: [EgKuZbSnzb:dewpoint],\
\
EgKuGefrierschrank_T: [EgKuGefrierschrankShellyBluHT:payload_temperature],\
EgKuGefrierschrank_Tm: [EgKuGefrierschrankShellyBluHT:payload_temperature_medium],\
EgKuGefrierschrank_H: [EgKuGefrierschrankShellyBluHT:payload_humidity],\
EgKuGefrierschrank_D: [EgKuGefrierschrankShellyBluHT:dewpoint],\
\
EgKuKuehlschrank_T: [EgKuKuehlschrankShellyBluHT:payload_temperature],\
EgKuKuehlschrank_Tm: [EgKuKuehlschrankShellyBluHT:payload_temperature_medium],\
EgKuKuehlschrank_H: [EgKuKuehlschrankShellyBluHT:payload_humidity],\
EgKuKuehlschrank_D: [EgKuKuehlschrankShellyBluHT:dewpoint],\
\
\
EgWz_T: [EgWzSonoff104:AM2301_Temperature],\
EgWz_H: [EgWzSonoff104:AM2301_Humidity],\
EgWz_D: [EgWzSonoff104:AM2301_DewPoint],\
\
EgWz2_T: [EgWzZbSnzb:temperature],\
EgWz2_H: [EgWzZbSnzb:humidity],\
EgWz2_D: [EgWzZbSnzb:dewpoint],\
\
KgBz_T: [KgBzLacrosse:temperature:d1],\
KgBz_H: [KgBzLacrosse:humidity:d1],\
KgBz_D: [KgBzLacrosse:dewpoint:d1],\
\
KgBzSauna_T: [KgFlurEsp05:KgBzSaunaT],\
KgBz2_T: [KgFlurEsp05:KgBzT],\
KgBz2_H: [KgFlurEsp05:KgBzH],\
KgBz2_D: [KgFlurEsp05:KgBzD],\
\
KgFlur_T: [KgFlurEsp05:KgFlurT],\
KgFlur_H: [KgFlurEsp05:KgFlurH],\
KgFlur_D: [KgFlurEsp05:KgFlurD],\
\
KgFlur2_T: [KgFlurZbSnzb:temperature],\
KgFlur2_H: [KgFlurZbSnzb:humidity],\
KgFlur2_D: [KgFlurZbSnzb:dewpoint],\
\
KgFlur3_T: [KgFlurEsp05:KgFlurT2],\
KgFlurWasser_T: [KgFlurEsp05:KgFlurWasserT],\
\
KgVrGefrierschrank_T: [KgFlurEsp05:KgVrGefrierschrankT],\
KgVrGefrierschrank_Tm: [KgFlurEsp05:KgVrGefrierschrankT_medium],\
KgVrGefriertruhe_T: [KgVrLacrosse:temperature2],\
KgVrGefriertruhe_Tm: [KgVrLacrosse:temperature2_medium],\
KgVr_T: [KgVrLacrosse:temperature],\
\
KgVr2_T: [KgVrLacrosse2:temperature],\
KgVr2_H: [KgVrLacrosse2:humidity],\
KgVr2_D: [KgVrLacrosse2:dewpoint],\
\
KgWs_T: [KgWsLacrosse:temperature],\
KgWs_H: [KgWsLacrosse:humidity],\
KgWs_D: [KgWsLacrosse:dewpoint],\
\
KgWkWasser_T: [KgWkEsp03:T1],\
KgWk_T: [KgWkEsp03:T2],\
\
KgWk2_T: [KgWkZbSnzb:temperature],\
KgWk2_H: [KgWkZbSnzb:humidity],\
KgWk2_D: [KgWkZbSnzb:dewpoint],\
\
OgAz_T: [OgAzLgwLacrosse99:temperature],\
OgAz_H: [OgAzLgwLacrosse99:humidity],\
OgAz_D: [OgAzLgwLacrosse99:dewpoint],\
OgAz_P: [OgAzLgwLacrosse99:pressure],\
\
OgAz2_T: [OgAzZbSnzb:temperature],\
OgAz2_H: [OgAzZbSnzb:humidity],\
OgAz2_D: [OgAzZbSnzb:dewpoint],\
\
OgBad_T: [OgBadZbSnzb:temperature],\
OgBad_H: [OgBadZbSnzb:humidity],\
OgBad_D: [OgBadZbSnzb:dewpoint],\
\
OgFlur_T: [OgFlurZbSnzb:temperature],\
OgFlur_H: [OgFlurZbSnzb:humidity],\
OgFlur_D: [OgFlurZbSnzb:dewpoint],\
\
OgGz_T: [OgGzBridgeSonoff108:AM2301_Temperature],\
OgGz_H: [OgGzBridgeSonoff108:AM2301_Humidity],\
OgGz_D: [OgGzBridgeSonoff108:AM2301_DewPoint],\
\
OgGz2_T: [OgGzZbSnzb:temperature],\
OgGz2_H: [OgGzZbSnzb:humidity],\
OgGz2_D: [OgGzZbSnzb:dewpoint],\
\
OgSz_T: [OgSzSonoff112:AM2301_Temperature],\
OgSz_H: [OgSzSonoff112:AM2301_Humidity],\
OgSz_D: [OgSzSonoff112:AM2301_DewPoint],\
\
OgSz2_T: [OgSzZbSnzb:temperature],\
OgSz2_H: [OgSzZbSnzb:humidity],\
OgSz2_D: [OgSzZbSnzb:dewpoint]\

attr myKlima group Klima-Übersicht
attr myKlima icon temperature_humidity
attr myKlima room Temperatur
attr myKlima uiState { ## Perlblock für globale Tabellendefinitionen\
  $TABLE="border: 3px solid black";;\
  $TC{2..4}="align='center'" ## zentrierte Ausrichtung der 3 - 5 Spalte\\
  $TR{7,13,23,26,39,48,55} = "style='border-width: 1px;; border-bottom-style:solid;;'"\
  ## $TR{11} = "style='border-width: 1px;; border-bottom-style:solid;;'"\
  $TR{0,8,24,40,49,56} = "style='font-weight:bold;; border-width: 3px;; border-bottom-style:solid;;'"\
  $TC{0} = "style='font-weight:bold'"\
\
}\
\
""|"Überschrift"|"Temperatur"|"Taupunkt"|"Luftfeuchtigkeit"|"Luftdruck"\
"AU"|"Garage"|[$SELF:AuGarageAussen_T:d1]." °C"|""|""|""\
""|"Gartenhaus"|[$SELF:AuGartenhausAussen_T:d1]." °C"|""|""|""\
""|"Haustür 1"|[$SELF:AuHaustuer1_T:d1]." °C"|[$SELF:AuHaustuer1_D:d1]." °C"|[$SELF:AuHaustuer1_H:d1]." %"|""\
""|"Terrassentür"|[$SELF:AuTerrasse_T:d1]." °C"|[$SELF:AuTerrasse_D:d1]." °C"|[$SELF:AuTerrasse_H:d1]." %"|""\
""|"Heizungsfühler"|[$SELF:AuHeizung_T:d1]." °C"|""|""|""\
""|"(PV-Module)"|[$SELF:AuPv_T:d1]." °C"|[$SELF:AuPv_D:d1]." °C"|[$SELF:AuPv_H:d1]." %"|""\
""|"(Proplanta)"|[$SELF:AuProplanta_T:d1]." °C"|[$SELF:AuProplanta_D:d1]." °C"|[$SELF:AuProplanta_H:d1]." %"|[$SELF:AuProplanta_P:d1]." hPa"\
"AU"|"Durchschnitt"|[$SELF:mwAu_T:d1]." °C"|[$SELF:mwAu_D:d1]." °C"|[$SELF:mwAu_H:d1]." %"|[$SELF:mwAu_P:d1]." hPa"\
\
"KG"|"(Gefriertruhe)"|[$SELF:KgVrGefriertruhe_T:d1]." °C"|""|""|""\
""|"(Gefrierschrank)"|[$SELF:KgVrGefrierschrank_T:d1]." °C"|""|""|""\
""|"(Wasser)"|[$SELF:KgFlurWasser_T:d1]." °C"|""|""|""\
""|"(Brunnenwasser)"|[$SELF:KgWkWasser_T:d1]." °C"|""|""|""\
""|"(Sauna)"|[$SELF:KgBzSauna_T:d1]." °C"|""|""|""\
\
""|"Bügelzimmer 1"|[$SELF:KgBz_T:d1]." °C"|[$SELF:KgBz_D:d1]." °C"|[$SELF:KgBz_H:d1]." %"|""\
""|"Bügelzimmer 2"|[$SELF:KgBz2_T:d1]." °C"|[$SELF:KgBz2_D:d1]." °C"|[$SELF:KgBz2_H:d1]." %"|""\
""|"Flur 1"|[$SELF:KgFlur_T:d1]." °C"|[$SELF:KgFlur_D:d1]." °C"|[$SELF:KgFlur_H:d1]." %"|""\
""|"Flur 2"|[$SELF:KgFlur2_T:d1]." °C"|[$SELF:KgFlur2_D:d1]." °C"|[$SELF:KgFlur2_H:d1]." %"|""\
""|"Flur 3"|[$SELF:KgFlur3_T:d1]." °C"|""|""|""\
""|"Vorratskeller 1"|[$SELF:KgVr_T:d1]." °C"|""|""|""\
""|"Vorratskeller 2"|[$SELF:KgVr2_T:d1]." °C"|[$SELF:KgVr2_D:d1]." °C"|[$SELF:KgVr2_H:d1]." %"|""\
""|"Waschküche 1"|[$SELF:KgWk_T:d1]." °C"|""|""|""\
""|"Waschküche 2"|[$SELF:KgWk2_T:d1]." °C"|[$SELF:KgWk2_D:d1]." °C"|[$SELF:KgWk2_H:d1]." %"|""\
""|"Werkstatt"|[$SELF:KgWs_T:d1]." °C"|[$SELF:KgWs_D:d1]." °C"|[$SELF:KgWs_H:d1]." %"|""\
"KG"|"Durchschnitt"|[$SELF:mwKg_T:d1]." °C"|[$SELF:mwKg_D:d1]." °C (".[$SELF:diffKg_D:d1]." °C)"|[$SELF:mwKg_H:d1]." %"|""\
\
"EG"|"(Kühlschrank)"|[$SELF:EgKuKuehlschrank_T:d1]." °C"|[$SELF:EgKuKuehlschrank_D:d1]." °C"|[$SELF:EgKuKuehlschrank_H:d1]." %"|""\
""|"(Gefrierschrank)"|[$SELF:EgKuGefrierschrank_T:d1]." °C"|[$SELF:EgKuGefrierschrank_D:d1]." °C"|[$SELF:EgKuGefrierschrank_H:d1]." %"|""\
""|"Anbau 1"|[$SELF:EgAb_T:d1]." °C"|[$SELF:EgAb_D:d1]." °C"|[$SELF:EgAb_H:d1]." %"|""\
""|"Anbau 2"|[$SELF:EgAb2_T:d1]." °C"|[$SELF:EgAb2_D:d1]." °C"|[$SELF:EgAb2_H:d1]." %"|""\
""|"Bad"|[$SELF:EgBad_T:d1]." °C"|[$SELF:EgBad_D:d1]." °C"|[$SELF:EgBad_H:d1]." %"|""\
""|"Diele"|[$SELF:EgDiele_T:d1]." °C"|[$SELF:EgDiele_D:d1]." °C"|[$SELF:EgDiele_H:d1]." %"|""\
""|"Esszimmer 1"|[$SELF:EgEz_T:d1]." °C"|[$SELF:EgEz_D:d1]." °C"|[$SELF:EgEz_H:d1]." %"|""\
""|"Esszimmer 2"|[$SELF:EgEz2_T:d1]." °C"|[$SELF:EgEz2_D:d1]." °C"|[$SELF:EgEz2_H:d1]." %"|""\
""|"Flur"|[$SELF:EgFlur_T:d1]." °C"|[$SELF:EgFlur_D:d1]." °C"|[$SELF:EgFlur_H:d1]." %"|""\
""|"Flügelzimmer 1"|[$SELF:EgFz_T:d1]." °C"|[$SELF:EgFz_D:d1]." °C"|[$SELF:EgFz_H:d1]." %"|""\
""|"Flügelzimmer 2"|[$SELF:EgFz2_T:d1]." °C"|[$SELF:EgFz2_D:d1]." °C"|[$SELF:EgFz2_H:d1]." %"|""\
""|"Küche 1"|[$SELF:EgKu_T:d1]." °C"|[$SELF:EgKu_D:d1]." °C"|[$SELF:EgKu_H:d1]." %"|[$SELF:EgKu_P:d1]." hPa"\
""|"Küche 2"|[$SELF:EgKu2_T:d1]." °C"|[$SELF:EgKu2_D:d1]." °C"|[$SELF:EgKu2_H:d1]." %"|""\
""|"Wohnzimmer 1"|[$SELF:EgWz_T:d1]." °C"|[$SELF:EgWz_D:d1]." °C"|[$SELF:EgWz_H:d1]." %"|""\
""|"Wohnzimmer 2"|[$SELF:EgWz2_T:d1]." °C"|[$SELF:EgWz2_D:d1]." °C"|[$SELF:EgWz2_H:d1]." %"|""\
"EG"|"Durchschnitt"|[$SELF:mwEg_T:d1]." °C"|[$SELF:mwEg_D:d1]." °C (".[$SELF:diffEg_D:d1]." °C)"|[$SELF:mwEg_H:d1]." %"|[$SELF:mwEg_P:d1]." hPa"\
\
"OG"|"Arbeitszimmer 1"|[$SELF:OgAz_T:d1]." °C"|[$SELF:OgAz_D:d1]." °C"|[$SELF:OgAz_H:d1]." %"|[$SELF:OgAz_P:d1]." hPa"\
""|"Arbeitszimmer 2"|[$SELF:OgAz2_T:d1]." °C"|[$SELF:OgAz2_D:d1]." °C"|[$SELF:OgAz2_H:d1]." %"|""\
""|"Bad"|[$SELF:OgBad_T:d1]." °C"|[$SELF:OgBad_D:d1]." °C"|[$SELF:OgBad_H:d1]." %"|""\
""|"Flur"|[$SELF:OgFlur_T:d1]." °C"|[$SELF:OgFlur_D:d1]." °C"|[$SELF:OgFlur_H:d1]." %"|""\
""|"Gästezimmer 1"|[$SELF:OgGz_T:d1]." °C"|[$SELF:OgGz_D:d1]." °C"|[$SELF:OgGz_H:d1]." %"|""\
""|"Gästezimmer 2"|[$SELF:OgGz2_T:d1]." °C"|[$SELF:OgGz2_D:d1]." °C"|[$SELF:OgGz2_H:d1]." %"|""\
""|"Schlafzimmer 1"|[$SELF:OgSz_T:d1]." °C"|[$SELF:OgSz_D:d1]." °C"|[$SELF:OgSz_H:d1]." %"|""\
""|"Schlafzimmer 2"|[$SELF:OgSz2_T:d1]." °C"|[$SELF:OgSz2_D:d1]." °C"|[$SELF:OgSz2_H:d1]." %"|""\
"OG"|"Durchschnitt"|[$SELF:mwOg_T:d1]." °C"|[$SELF:mwOg_D:d1]." °C (".[$SELF:diffOg_D:d1]." °C)"|[$SELF:mwOg_H:d1]." %"|[$SELF:mwOg_P:d1]." hPa"\
\
"DG"|"Drucker Willi"|[$SELF:DgDruckerWilli_T:d1]." °C"|[$SELF:DgDruckerWilli_D:d1]." °C"|[$SELF:DgDruckerWilli_H:d1]." %"|""\
""|"Server Willi"|[$SELF:DgBueroNas_T:d1]. " °C"|""\
""|"Schreibtisch Willi"|[$SELF:DgSchreibtischWilli_T:d1]." °C"|[$SELF:DgSchreibtischWilli_D:d1]." °C"|[$SELF:DgSchreibtischWilli_H:d1]." %"|""\
""|"Treppe"|[$SELF:DgTreppe_T:d1]." °C"|[$SELF:DgTreppe_D:d1]." °C"|[$SELF:DgTreppe_H:d1]." %"|[$SELF:DgTreppe_P:d1]." hPa"\
""|"Nähzimmer 1"|[$SELF:DgNz_T:d1]." °C"|[$SELF:DgNz_D:d1]." °C"|[$SELF:DgNz_H:d1]." %"|""\
""|"Nähzimmer 2"|[$SELF:DgNz2_T:d1]." °C"|[$SELF:DgNz2_D:d1]." °C"|[$SELF:DgNz2_H:d1]." %"|""\
"DG"|"Durchschnitt"|[$SELF:mwDg_T:d1]." °C"|[$SELF:mwDg_D:d1]." °C (".[$SELF:diffDg_D:d1]." °C)"|[$SELF:mwDg_H:d1]." %"|[$SELF:mwDg_P:d1]." hPa"\
\

#   .AttrList  disable:0,1 loglevel:0,1,2,3,4,5,6 notexist checkReadingEvent:0,1 addStateEvent:1,0 weekdays setList:textField-long readingList DOIF_Readings:textField-long event_Readings:textField-long uiState:textField-long uiTable:textField-long event-aggregator event-min-interval event-on-change-reading event-on-update-reading oldreadings stateFormat:textField-long timestamp-on-change-reading

# ... truncated, original length 173741

2025-11-12 19:46:44.509 DOIF myKlima EgBad_T: 19.0
2025-11-12 19:46:44.509 DOIF myKlima mwEg_T: 20.3
2025-11-12 19:46:44.509 DOIF myKlima mwEg_Text: 20.3°C, 65.4%, 1009.0hPa
...
2025-11-12 19:48:14.150 DOIF myKlima EgBad_T: 21.0
2025-11-12 19:48:14.150 DOIF myKlima mwEg_T: 20.4
2025-11-12 19:48:14.150 DOIF myKlima mwEg_Text: 20.4°C, 65.4%, 1009.0hPa

Kann mir bitte jemand sagen, was ich falsch mache?

Willi
FHEM 6.x im Docker-Container (OMV4 auf ASRock J3455-ITX), FHEM 6.0 auf Raspi, Fritzbox 7490, CUL433, CUL868, Jeelink868, SIGNALduino, LaCrosseGateway, Shelly, Sonoff, ESP8266, ESP32, ESP32-Cam, LaCrosse, OneWire, Zigbee (Sonoff, Blitzwolf, IKEA, Lidl), Azzurro-WR/Pylontech-Bat., Lambda-Wärmepumpe

Damian

Wenn ein Event, welches im Eventmonitor zu sehen ist, nicht im dbLog landet, dann sollte es eigentlich nicht ein Problem des DOIFs sein.

Du kannst ein primitives DOIF bauen, wo du per set_Reading ein Event erzeugst und eins bauen, wo du per event_Reading ein Event erzeugst.

Dann kannst du erst mal schauen, ob diese geloggt werden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

WW

Zitat von: Damian am 12 November 2025, 22:25:54Wenn ein Event, welches im Eventmonitor zu sehen ist, nicht im dbLog landet, dann sollte es eigentlich nicht ein Problem des DOIFs sein.
...

Da muss ich widersprechen. Wenn ich die ursprüngliche Fassung mit z.B.

# EG: Erdgeschoss
mwEg_T {
    my $x = (
        [$SELF:EgAb_T] +
        [$SELF:EgAb2_T] +
        [$SELF:EgBad_T] +
        [$SELF:EgDiele_T] +
        [$SELF:EgFlur_T] +
        [$SELF:EgEz_T] +
        [$SELF:EgEz2_T] +
        [$SELF:EgFz_T] +
        [$SELF:EgFz2_T] +
        [$SELF:EgKu_T] +
        [$SELF:EgKu2_T] +
        [$SELF:EgWz_T] +
        [$SELF:EgWz2_T] +
        0) / 13;;
    $x = sprintf("%.1f",$x);
    set_Reading("mwEg_T",$x,1);
    }

ändere in:

# EG: Erdgeschoss
mwEg_T {
    my $x = (
        [$SELF:EgAb_T] +
        [$SELF:EgAb2_T] +
        [$SELF:EgBad_T] +
        [$SELF:EgDiele_T] +
        [$SELF:EgFlur_T] +
        [$SELF:EgEz_T] +
        [$SELF:EgEz2_T] +
        [$SELF:EgFz_T] +
        [$SELF:EgFz2_T] +
        [$SELF:EgKu_T] +
        [$SELF:EgKu2_T] +
        [$SELF:EgWz_T] +
        [$SELF:EgWz2_T] +
        0) / 13;
    $x = sprintf("%.1f",$x);
    set_Exec("myKlima_timer_mwEg_T", 1, "fhem('setreading $SELF mwEg_T $x')");   
    }

dann funktioniert alles.


Für mich sieht das so aus: Erzeuge ich im Def-Teil neue Readings, die in eventReadings erzeugte Readings enthalten, so wird der Datenbankeintrag für das entsprechende Reading nur erzeugt, wenn ich über "set_Exec" eine zeitliche Verzögerung implementiere.
FHEM 6.x im Docker-Container (OMV4 auf ASRock J3455-ITX), FHEM 6.0 auf Raspi, Fritzbox 7490, CUL433, CUL868, Jeelink868, SIGNALduino, LaCrosseGateway, Shelly, Sonoff, ESP8266, ESP32, ESP32-Cam, LaCrosse, OneWire, Zigbee (Sonoff, Blitzwolf, IKEA, Lidl), Azzurro-WR/Pylontech-Bat., Lambda-Wärmepumpe

Damian

Das ist immer in FHEM ein Problem, wenn man auf eigene Events im Device reagieren will. Das ist bei allen Modulen so, weil FHEM solche möglichen Endlosschleifen unterbindet.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Prof. Dr. Peter Henning

Eine solche DOIF-Definition ist, vorsichtig gesprochen, keine gute Praxis.

Mittelwerte einiger Stationen sind besser in userReadings aufgehoben, und Zusammenfassungen lassen sich besser mit CustomReadings erstellen. Darüber hinaus macht die Länge der DOIF-Definition diese ziemlich unwartbar.

LG

pah

Damian

Diese Zeile im DOIF-Device tut das Gleiche. Ist vielleicht etwas kryptisch aber sehr mächtig.

event_Readings mwEg_T:[#average:"^$SELF$:^Eg":"^Eg"]
Genauso gut könntest du mit so einer Zeile Temperaturen aus verschiedenen Devices mitteln, wenn die Devices-Namen sich gut durch ihre Namensgebung per RegEx filtern lassen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF