FHEM Forum

FHEM => Automatisierung => Thema gestartet von: uwirt am 28 März 2020, 21:58:43

Titel: Wert von Reading ändern
Beitrag von: uwirt am 28 März 2020, 21:58:43
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?

Titel: Antw:Wert von Reading ändern
Beitrag von: amenomade am 28 März 2020, 22:01:08
userReadings oder (get|reading)[0-9]*OExpr
Titel: Antw:Wert von Reading ändern
Beitrag von: uwirt am 29 März 2020, 10:28:52
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?
Titel: Antw:Wert von Reading ändern
Beitrag von: frober am 29 März 2020, 10:33:23
Dir fehlt ein Leerzeichen bei return 2
Titel: Antw:Wert von Reading ändern
Beitrag von: uwirt am 29 März 2020, 10:41:41
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