Hi,
ich habe folgende Userreadings meinem k200 Modul zugewiesen:
Modulation {ReadingsVal ("LWP","/heatSources/actualModulation",0)},
Temp_WW {ReadingsVal ("LWP","/system/sensors/temperatures/hotWater_t2",0)},
Temp_VL {ReadingsVal ("LWP","/system/sensors/temperatures/supply_t1",0)},
Starts {ReadingsVal ("LWP","/heatSources/numberOfStarts",0)},
Starts_Heute {ReadingsVal("LWP","/heatSources/numberOfStarts",0) - ReadingsVal("LWP","Starts_Tageswechsel",'')},
Laufzeit_Heute {ReadingsVal("LWP","/heatSources/workingTime/totalSystem",'') - ReadingsVal("LWP","Betriebsminuten_Tageswechsel",'')},
Betriebsstunden_Heute:Laufzeit_Heute.* {my $hours=ReadingsNum($NAME,"Laufzeit_Heute",0)/60; my $h=int($hours); my $im=$hours - $h; my $m=int($im * 60); "$h:$m";})
Funktioniert prinzipiell auch, jedoch, bläst es mir mein Filelog extrem auf, da ich nach jedem Reading (sind in Summe 128), 7 Zeilen für die UserReadings bekomme.
Wie kann ich einstellen, dass z. B: das UserReading "Modulation" nur bei dem Reading "/heatSources/actualModulation" geschrieben wird. Und nicht bei allen 128 Readings?
Danke!
Die Doku zu userReadings:
ZitatuserReadings
Komma getrennte Liste von benutzerdefinierten Readings. Jede Definition hat folgendes Format:
<reading>[:<trigger>] [<modifier>] { <perl code> }
Diese benutzerdefinierte Readings werden bei jeder Aktualisierung der Gerätereadings gesetzt, indem das spezifizierte perl code { <perl code> } ausgeführt wird, und dessen Wert dem Reading zugewiesen wird. Falls <trigger> spezifiziert ist, dann findet diese Ausführung nur dann statt, falls einer der aktualisierten Readings dem regexp <trigger> entspricht (matched).
Beispiele:
attr myEnergyMeter userReadings energy { ReadingsVal("myEnergyMeter","counters.A",0)/1250.0;; }
attr myMultiMeter userReadings energy1:counters.A.* {ReadingsVal("myMultiMeter","counters.A",0)/1250.0}, energy2:counters.B.* {ReadingsVal("myMultiMeter","counters.B",0)/1250.0}
<modifier> kann die folgenden Werte haben:
none: als ob man es gar nicht spezifiziert hätte.
difference: das Reading wird auf die Differenz zw. dem aktuellen und dem vorherigen Wert gesetzt.
differential: das Reading wird auf die Differenz zw. dem aktuellen und dem vorherigen Wert, geteilt durch die Sekunden zw. der aktuellen Zeit und der letzten Auswertung, sekundengenau. Kein Wert wird berechnet, falls der Unterschied unter eine Sekunde liegt.
integral: das Gegenteil von differential. Das Ergebnis wird um das Produkt aus der Zeit-Differenz und der Durschnittswert der letzten zwei Readings erhöht.
result += (time - timeold) * (oldval + value) / 2
offset: wenn der aktuellen Wert kleiner als der vorherige Wert ist wird der vorherige Wert zum Reading addiert. Das Reading kann dann als offset verwendet werden um einen Zähler der durch Sromverlust zurückgesetzt wird zu korrigieren.
monotonic: wenn die Differenz zw. dem aktuellen und dem vorherigen Wert positiv ist wird diese Differenz zum Reading addiert. Damit lässt sich von einem Zähler der bei Stromverlust zurückgesetzt wird ein monoton wachsender Zähler ableiten.
Beispiel:
attr myPowerMeter userReadings power differential { ReadingsVal("myPowerMeter","counters.A",0)/1250.0}
Achtung:
Falls difference oder differential spezifiziert ist, dann werden für die Berechnung ältere Werte benötigt, d.h. der Wert wird frühestens beim zweiten Änderung gesetzt.
der Name der definierten Readings besteht aus alphanumerischen Zeichen, Unterstrich (_) und Minus-Zeichen (-).
Betriebsstunden_Heute:Laufzeit_Heute.* {my $hours=ReadingsNum($NAME,"Laufzeit_Heute",0)/60; my $h=int($hours); my $im=$hours - $h; my $m=int($im * 60); "$h:$m";})
Hier hast Du es richtig gemacht. Du musst die RegEx fü den Event entsprechend enger setzen
Modulation:.heatSources.actualModulation:.* {ReadingsVal ("LWP","/heatSources/actualModulation",0)},
Temp_WW:.system.sensors.temperatures.hotWater_t:.* {ReadingsVal ("LWP","/system/sensors/temperatures/hotWater_t2",0)},
Teste bitte einmal das hier
Zitat von: CoolTux am 30 Januar 2020, 14:24:22
Betriebsstunden_Heute:Laufzeit_Heute.* {my $hours=ReadingsNum($NAME,"Laufzeit_Heute",0)/60; my $h=int($hours); my $im=$hours - $h; my $m=int($im * 60); "$h:$m";})
Hier hast Du es richtig gemacht. Du musst die RegEx fü den Event entsprechend enger setzen
Modulation:.heatSources.actualModulation:.* {ReadingsVal ("LWP","/heatSources/actualModulation",0)},
Temp_WW:.system.sensors.temperatures.hotWater_t:.* {ReadingsVal ("LWP","/system/sensors/temperatures/hotWater_t2",0)},
Teste bitte einmal das hier
Mit deinem Beispiel werden die Werte gar nicht mehr geschrieben auch nicht bei LWP /heatSources/hs1/actualModulation: 25
Dann zeig mal bitte wie der Event der Readings aus schaut.
ich glaub jetzt hab ich´s:
Wenn ich dein Beispiel so umschreibe:
Modulation:/heatSources/actualModulation:.* {ReadingsVal ("LWP","/heatSources/actualModulation",0)},
bekomme ich im Filelog nur nach dem Reading LWP /heatSources/actualModulation
einen Eintrag mit Modulation!
Vielen Dank!
Zitat von: CoolTux am 30 Januar 2020, 14:24:22
Du musst die RegEx fü den Event entsprechend enger setzen
Was heißt das für einen Fhem-Laien? ;)
Kann man sagen, dass "Modulation:/heatSources/actualModulation:.* "
Das UserReading Modulation, auf alle Änderungen vom Reading "/heatSources/actualModulation" einschränkt?
für was ist das ":.*" nach dem Reading?
Zitat von: NewMatic am 30 Januar 2020, 14:47:40
ich glaub jetzt hab ich´s:
Wenn ich dein Beispiel so umschreibe:
Modulation:/heatSources/actualModulation:.* {ReadingsVal ("LWP","/heatSources/actualModulation",0)},
bekomme ich im Filelog nur nach dem Reading LWP /heatSources/actualModulation
einen Eintrag mit Modulation!
Vielen Dank!
Ich wusste nicht wie er auf / reagiert. Daher . aber schön wenn es klappt.
Zitat von: CoolTux am 30 Januar 2020, 14:51:33
Ich wusste nicht wie er auf / reagiert. Daher . aber schön wenn es klappt.
nochmal ein großes Danke für deine rasche Hilfe!