Hallo Zusammen,
ich würde gern ein userReadings erstellen, welches aus den folgenden String "Max: 23.2" speichert.
Min: 23.1 Avg: 23.1 Max: 23.2 (since: 2020-05-12_21:30:33 ) [entspricht dem Reading stat1.ACTUAL_TEMPERATUREDay]
Leider ergeben beide folgende Codes nur den Wert 1:
TempMaxDay {
my $VAR = ReadingsVal("$NAME","stat1.ACTUAL_TEMPERATUREDay",0);;
my ($VAR2) = $VAR =~ /Max: \d\d.\d/;;
return $VAR2
}
TempMaxDay {ReadingsVal("$NAME","stat1.ACTUAL_TEMPERATUREDay",0) =~ /Max: \d\d.\d/}
Was mache ich falsch :-[
Dake für Hilfe.
Martin
Versuchs mal mit Folgemdem, scheint bei mir zu tun:
attr d userReadings TempMaxDay:stat1.ACTUAL_TEMPERATUREDay.* { ReadingsVal($NAME,"stat1.ACTUAL_TEMPERATUREDay",0) =~ m/(Max: \d\d.\d)/ ? $1 : "N/A" }
Code nimmt FHEM an, aber das userReading wird nicht angelegt (MaxTempDay), auch wenn das Reading "ACTUAL_TEMPERATUREDay" neu geschrieben wird :-\
Heisst das Reading ACTUAL_TEMPERATUREDay oder stat1.ACTUAL_TEMPERATUREDay ?
Das gleiche Problem besteht bei mir auch, und zwar bei einem CustomReadings. Dort habe ich ein Reading namens "sensor" mit u.a. folgender Zeile:
System Temp | 36.000 | degrees C | ok | -9.000 | -7.000 | -5.000 | 75.000 | 77.000 | 79.000
Darauf lasse ich nun folgendes userReadings los:
systemp:sensor.* {ReadingsVal("status_hera_ipmi", "sensor", "") =~ m/System Temp\s*\|\s*(\S*)/ ? $1 : "-"}
Es wird aber kein Reading "systemp" angelegt. Als erstes Argument von ReadingsVal habe ich auch schon $name and $NAME probiert, aber ohne Erfolg. Wenn ich dagegen
{ReadingsVal("status_hera_ipmi", "sensor", "") =~ m/System Temp\s*\|\s*(\S*)/ ? $1 : "-"}
in der Befehlszeile eingebe, bekomme ich erwartungsgemäß 36.000 als Ergebnis.
In anderen Geräten (HTTPMOD, Weather) funktionieren userReadings der Form {ReadingsVal($name, "...", "")} dagegen problemlos. In diesem Fall läuft aber nicht einmal das.
Das Reading heisst stat1.ACTUAL_TEMPERATUREDay
- Zeigt der Event-Monitor updates dieses Readings an?
- Enthält der Wert des Readings Zeilenumbrüche?
Bei mir war letzteres der Fall. Im Event-Monitor war das Reading auch nicht zu sehen. Nachdem ich die Zeilenumbrüche ausgefiltert habe, erscheint es im Event-Monitor, ebenso das UserReading.
Events mit Newlines werden im Event-Monitor angezeigt (gerade getestet), allerdings werden fuer die Anzeige alle Newlines durch Leerzeichen ersetzt.
Bei der userReadigs Filter matcht . kein Newline, dafuer muss man explizit \n schreiben, d.h. (.|\n)* statt .*
Will es auch nicht aendern, da NewLine in einem Event mAn nicht zum Normalfall werden sollte.
Zitat von: rudolfkoenig am 24 Mai 2020, 11:41:14
Bei der userReadigs Filter matcht . kein Newline, dafuer muss man explizit \n schreiben, d.h. (.|\n)* statt .*
Ah, das war es. Das gleiche scheint für den Filter im Event-Monitor zu gelten.
Jetzt habe ich folgendes UserReading:
system_temp:sensor(.|\n)* {ReadingsVal("status_hera_ipmi", "sensor", "") =~ m/System Temp\s*\|\s*(\S*)/ ? $1 : "-"}
Damit bekomme ich im Event Monitor:
2020-05-24 13:35:31 CustomReadings status_hera_ipmi sensor: CPU Temp | 0x0 | discrete | 0x0000| na | na | na | na | na | na System Temp | 37.000 | degrees C | ok | -9.000 | -7.000 | -5.000 | 75.000 | 77.000 | 79.000 CPU Vcore | 0.952 | Volts | ok | 0.776 | 0.800 | 0.824 | 1.320 | 1.344 | 1.368 ...
2020-05-24 13:35:31 CustomReadings status_hera_ipmi system_temp: 37.000
Seltsamerweise wird aber kein Reading system_temp im Device angelegt.