FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: dogas am 13 April 2018, 12:06:16

Titel: userReading mit RegEx extrahieren
Beitrag von: dogas am 13 April 2018, 12:06:16
Hallo,

viele haben es schon versucht und nur wenige haben es geschafft.
Ich versuche aus einem Statistik Reading meines Stromzählers nun schon seit knapp 2 Tage mit RegEx einen ordentlichen Wert zu extrahieren. Auf https://regex101.com/ habe ich den RegEx Wert am String getestet, leider funktioniert er in FHEM nicht. Ich bin auch am Ende meines noch recht beschränkten Lateins.

Der Zähler ist wie folgt definiert:
defmod Zaehler_HS OBIS /dev/serial/by-id/usb-Silicon_Labs_CP2104_USB_to_UART_Bridge_Controller_015AE266-if00-port0@9600,8,E,1 SML
attr Zaehler_HS event-on-change-reading ./
attr Zaehler_HS icon measure_power_meter
attr Zaehler_HS interval 5
attr Zaehler_HS pollingMode on
attr Zaehler_HS room HWR
attr Zaehler_HS unitReadings on
attr Zaehler_HS userReadings Test { if (ReadingsVal($NAME,"statTotal_consumption","")=~/Year: \d+\.\d+/) {$1} }

setstate Zaehler_HS opened
setstate Zaehler_HS 2018-03-31 10:27:28 0.118.7.0.10.255 0*var
setstate Zaehler_HS 2018-04-13 12:02:53 1.0.0.0.9.255 06-45-4D-48-01-0E-15-BE-87-A4
setstate Zaehler_HS 2018-04-13 12:02:53 129.129.199.130.3.255 EMH
setstate Zaehler_HS 2018-04-13 12:01:58 Test 1
setstate Zaehler_HS 2018-04-13 08:37:33 Version EMH\06454D48010E15BE87A4
setstate Zaehler_HS 2018-04-13 12:02:53 power 58.2 W
setstate Zaehler_HS 2018-04-13 12:02:47 statPowerDay Min: 27.4 Avg: 47.0 Max: 1373.2
setstate Zaehler_HS 2018-04-12 23:59:55 statPowerDayLast Min: 27.2 Avg: 115.5 Max: 2411.5
setstate Zaehler_HS 2018-04-13 12:02:47 statPowerMonth Min: 27.0 Avg: 127.5 Max: 5665.4
setstate Zaehler_HS 2018-03-31 23:59:55 statPowerMonthLast Min: 26.9 Avg: 155.7 Max: 5630.0 (since: 2018-03-21_07:35:22 )
setstate Zaehler_HS 2018-04-13 12:02:47 statPowerYear Min: 26.9 Avg: 140.4 Max: 5665.4 (since: 2018-03-21_07:35:22 )
setstate Zaehler_HS 2018-04-13 12:02:47 statTotal_consumption Hour: 2.8 Day: 565.5 Month: 39034.6 Year: 76314.0 (since: 2018-03-22 )
setstate Zaehler_HS 2018-04-13 11:59:55 statTotal_consumptionLast Hour: 53.0 Day: 2778.2 Month: 37279.4 Year: - (since: 2018-03-22 )
setstate Zaehler_HS 2018-04-12 10:42:07 state opened
setstate Zaehler_HS 2018-04-13 12:02:53 total_consumption 791747.9 Wh
setstate Zaehler_HS 2018-04-13 12:02:53 total_consumption_Ch1 0 Wh
setstate Zaehler_HS 2018-04-13 12:02:53 total_consumption_Ch2 791747.9 Wh



Ich möchte im userReading Test nun nur die Zahl des Jahresverbrauchs haben.

Das versuche ich mit
attr Zaehler_HS userReadings Test { if (ReadingsVal($NAME,"statTotal_consumption","")=~/Year: \d+\.\d+/) {$1} }

Lustigerweise bekomme ich entweder Syntaxfehler, oder nur eine 1.
Hat jemand einen Tipp was ich hier falsch mache?

mfg
Chris
Titel: Antw:userReading mit RegEx extrahieren
Beitrag von: Otto123 am 13 April 2018, 12:17:34
Hi,

ich hab es nicht ganz verstanden, aber was gibt Dir denn folgender Code in der FHEM Kommandozeile?
{ReadingsNum("Zaehler_HS","statTotal_consumption","")}

Gruß Otto
Titel: Antw:userReading mit RegEx extrahieren
Beitrag von: frank am 13 April 2018, 12:30:48
du hast die capture group für $1 nicht "angelegt" (fehlende klammern).

attr Zaehler_HS userReadings Test { if (ReadingsVal($NAME,"statTotal_consumption","")=~/Year: (\d+\.\d+)/) {return $1} }
Titel: Antw:userReading mit RegEx extrahieren
Beitrag von: dogas am 13 April 2018, 12:50:41
@Otto123: Da kommt nur eine 2.8 und das ist nicht sinnvoll, da ja mehrere Zahlen in dem Reading sind.

@frank: Auch mit dem capture bekomme ich nur eine 1 zurück.

defmod Zaehler_HS OBIS /dev/serial/by-id/usb-Silicon_Labs_CP2104_USB_to_UART_Bridge_Controller_015AE266-if00-port0@9600,8,E,1 SML
attr Zaehler_HS event-on-change-reading ./
attr Zaehler_HS icon measure_power_meter
attr Zaehler_HS interval 5
attr Zaehler_HS pollingMode on
attr Zaehler_HS room HWR
attr Zaehler_HS unitReadings on
attr Zaehler_HS userReadings Test { if (ReadingsVal($NAME,"statTotal_consumption","")=~/Year: \d+\.\d+/) {return $1} }

setstate Zaehler_HS opened
setstate Zaehler_HS 2018-03-31 10:27:28 0.118.7.0.10.255 0*var
setstate Zaehler_HS 2018-04-13 12:49:51 1.0.0.0.9.255 06-45-4D-48-01-0E-15-BE-87-A4
setstate Zaehler_HS 2018-04-13 12:49:51 129.129.199.130.3.255 EMH
setstate Zaehler_HS 2018-04-13 12:01:58 Test 1
setstate Zaehler_HS 2018-04-13 08:37:33 Version EMH\06454D48010E15BE87A4
setstate Zaehler_HS 2018-04-13 12:49:51 power 33.9 W
setstate Zaehler_HS 2018-04-13 12:02:47 statPowerDay Min: 27.4 Avg: 47.0 Max: 1373.2
setstate Zaehler_HS 2018-04-12 23:59:55 statPowerDayLast Min: 27.2 Avg: 115.5 Max: 2411.5
setstate Zaehler_HS 2018-04-13 12:02:47 statPowerMonth Min: 27.0 Avg: 127.5 Max: 5665.4
setstate Zaehler_HS 2018-03-31 23:59:55 statPowerMonthLast Min: 26.9 Avg: 155.7 Max: 5630.0 (since: 2018-03-21_07:35:22 )
setstate Zaehler_HS 2018-04-13 12:02:47 statPowerYear Min: 26.9 Avg: 140.4 Max: 5665.4 (since: 2018-03-21_07:35:22 )
setstate Zaehler_HS 2018-04-13 12:02:47 statTotal_consumption Hour: 2.8 Day: 565.5 Month: 39034.6 Year: 76314.0 (since: 2018-03-22 )
setstate Zaehler_HS 2018-04-13 11:59:55 statTotal_consumptionLast Hour: 53.0 Day: 2778.2 Month: 37279.4 Year: - (since: 2018-03-22 )
setstate Zaehler_HS 2018-04-12 10:42:07 state opened
setstate Zaehler_HS 2018-04-13 12:49:51 total_consumption 791780.4 Wh
setstate Zaehler_HS 2018-04-13 12:49:51 total_consumption_Ch1 0 Wh
setstate Zaehler_HS 2018-04-13 12:49:51 total_consumption_Ch2 791780.4 Wh

Titel: Antw:userReading mit RegEx extrahieren
Beitrag von: frank am 13 April 2018, 13:29:36
ich sehe nur das "return", aber keine capture group.
Titel: Antw:userReading mit RegEx extrahieren
Beitrag von: dogas am 13 April 2018, 13:38:45
Zitat von: frank am 13 April 2018, 13:29:36
ich sehe nur das "return", aber keine capture group.
Was meinst Du denn?

Gesendet von meinem LEX720 mit Tapatalk

Titel: Antw:userReading mit RegEx extrahieren
Beitrag von: frank am 13 April 2018, 13:49:33
Zitat/Year: (\d+\.\d+)/
Titel: Antw:userReading mit RegEx extrahieren
Beitrag von: Otto123 am 13 April 2018, 14:04:55
Zitat von: dogas am 13 April 2018, 12:50:41
@Otto123: Da kommt nur eine 2.8 und das ist nicht sinnvoll, da ja mehrere Zahlen in dem Reading sind.
Ich sagte doch, ich habe es nicht verstanden  :-[

Gruß Otto
Titel: Antw:userReading mit RegEx extrahieren
Beitrag von: dogas am 13 April 2018, 21:13:16
Ich fasse es nicht. Danke @frank  ::)

Ich muss wohl noch etwas weiter regex üben.

mfg chris