Wert von Reading ändern

Begonnen von uwirt, 28 März 2020, 21:58:43

Vorheriges Thema - Nächstes Thema

uwirt

Ich lese Pollenwerte aus einer Webseite mittels HTTPOD aus und erhalte von den aktiven Pollen folgende Werte:

Zitat
setstate Pollenflug https://meteonews.ch
setstate Pollenflug 2020-03-28 16:41:34 Erle-1 schwache Belastung
setstate Pollenflug 2020-03-28 16:41:34 Erle-2 40%
setstate Pollenflug 2020-03-28 16:41:34 Esche-1 mässige Belastung
setstate Pollenflug 2020-03-28 16:41:34 Esche-2 70%
setstate Pollenflug 2020-03-28 16:41:34 Hagebuche-1 mässige Belastung
setstate Pollenflug 2020-03-28 16:41:34 Hagebuche-2 70%
setstate Pollenflug 2020-03-28 16:41:34 Hasel-1 schwache Belastung
setstate Pollenflug 2020-03-28 16:41:34 Hasel-2 40%

Die möglichen Werte sind für die gesamthaft 22 verschiedenen Pollenarten sind:
schwache Belastung / 40%
mässige Belastung / 70%
starke Belastung / 100%
Pollen mit keiner Belastung haben kein Reading.

Ich möchte nun den Werten der Readings die Zahl 1, 2, oder 3 zuordnen.

Weiss jemand eine Möglichkeit wie man mit einem Befehl z.B. den Wert "schwache Belastung" bzw. 40% in den numerischen Wert "1" für alle Pollenarten umwandeln kann?

FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya|EcoWitt

amenomade

userReadings oder (get|reading)[0-9]*OExpr
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

uwirt

Ich habe folgendes versucht um mit einem der Pollen-Typen zu beginnen:


attr Pollenflug userReadings Test Pollenflug:Erle-2 {if(ReadingsVal("Pollenflug","Erle-2","") eq "40%") {return 1} elsif (ReadingsVal("Pollenflug","Erle-2","") eq "70%") {return2} elsif (ReadingsVal("Pollenflug","Erle-2","") eq "100%") {return 3} else {return 0}}


Das scheint nicht zu funktionieren. Ich erhalte folgende Fehlermeldung bei den Readings:

Zitat
setstate Pollenflug 2020-03-28 22:42:40 Test Error evaluating Pollenflug userReading Test: Bareword "return2" not allowed while "strict subs" in use at (eval 8842) line 1.\

Was kann das wohl sein?
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya|EcoWitt

frober

Dir fehlt ein Leerzeichen bei return 2
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

uwirt

#4
Ok, besten Dank - das war's schon mal für den einen Parameter.


Test {if(ReadingsVal("Pollenflug","Erle-2","") eq "40%") {return 1} elsif (ReadingsVal("Pollenflug","Erle-2","") eq "70%") {return 2} elsif (ReadingsVal("Pollenflug","Erle-2","") eq "100%") {return 3} else {return 0}}


Muss ich das jetzt für alle anderen 21 Pollentypen auch so machen oder gibt es eine Möglichkeit das irgendwie mit einer Wildcard zu tun?


Ich gebe mir die Antwort gleich selber:
Das ganze mittels userReadings umzuformatieren hat wohl im Prinzip funktioniert nur war wohl der Perl code für die ganzen 22 Parameter zu lange. Nur etwa ein Drittel aller Werte wurde umformatiert.

Ich habe das jetzt mittels reading[0-9]*(-[0-9]+)?OMap gelöst:

Jedes Reading wird einzeln folgendermassen formatiert:


attr Pollenflug reading01OMap schwache Belastung:1, mittlere Belastung:2, hohe Belastung:3



FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya|EcoWitt