FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Saphora am 13 Mai 2020, 21:19:42

Titel: UserReadings mit Regex
Beitrag von: Saphora am 13 Mai 2020, 21:19:42
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
Titel: Antw:UserReadings mit Regex
Beitrag von: rudolfkoenig am 13 Mai 2020, 21:43:05
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" }
Titel: Antw:UserReadings mit Regex
Beitrag von: Saphora am 13 Mai 2020, 21:54:54
Code nimmt FHEM an, aber das userReading wird nicht angelegt (MaxTempDay), auch wenn das Reading "ACTUAL_TEMPERATUREDay" neu geschrieben wird  :-\
Titel: Antw:UserReadings mit Regex
Beitrag von: rudolfkoenig am 13 Mai 2020, 22:53:01
Heisst das Reading ACTUAL_TEMPERATUREDay oder stat1.ACTUAL_TEMPERATUREDay ?
Titel: Antw:UserReadings mit Regex
Beitrag von: xenos1984 am 14 Mai 2020, 14:41:46
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.
Titel: Antw:UserReadings mit Regex
Beitrag von: Saphora am 14 Mai 2020, 22:36:16
Das Reading heisst stat1.ACTUAL_TEMPERATUREDay
Titel: Antw:UserReadings mit Regex
Beitrag von: xenos1984 am 24 Mai 2020, 11:12:18
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.
Titel: Antw:UserReadings mit Regex
Beitrag von: rudolfkoenig am 24 Mai 2020, 11:41:14
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.
Titel: Antw:UserReadings mit Regex
Beitrag von: xenos1984 am 24 Mai 2020, 12:39:26
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.