UserReadings mit Regex

Begonnen von Saphora, 13 Mai 2020, 21:19:42

Vorheriges Thema - Nächstes Thema

Saphora

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

rudolfkoenig

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" }

Saphora

Code nimmt FHEM an, aber das userReading wird nicht angelegt (MaxTempDay), auch wenn das Reading "ACTUAL_TEMPERATUREDay" neu geschrieben wird  :-\

rudolfkoenig

Heisst das Reading ACTUAL_TEMPERATUREDay oder stat1.ACTUAL_TEMPERATUREDay ?

xenos1984

#4
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.

Saphora

Das Reading heisst stat1.ACTUAL_TEMPERATUREDay

xenos1984


  • 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.

rudolfkoenig

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.

xenos1984

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.