Es gibt zwar ein Modul 60_allergy.pm, das die Daten der Pollenflugvorhersage von der Firma Hexal abholt. Allerdings werden die nicht von Hexal aufbereitet, sondern kommen von wetteronline.de. Es lag also nahe, dieses etwas ältere Modul durch eine Instanz von HTTPMOD zu ersetzen.
Internals:
BUSY 0
DEF https://www.wetteronline.de/pollen?gid=x5210&lat=49.05&locationname=Weingarten%20(Baden)&lon=8.53 10800
FUUID 62e6870e-f33f-8771-40b9-843633484e953375
Interval 10800
MainURL https://www.wetteronline.de/pollen?gid=x5210&lat=49.05&locationname=Weingarten%20(Baden)&lon=8.53
ModuleVersion 4.1.12 - 19.4.2022
NAME Pollen
NOTIFYDEV global
NR 989621
NTFY_ORDER 50-Pollen2
STATE Heute mäßiger Kräuterpollenflug sowie schwacher Flug von Ambrosia- und Gräserpollen
TYPE HTTPMOD
eventCount 29
value
HttpUtils:
NAME
addr https://www.wetteronline.de:443
auth 0
code 200
compress 1
conn
data
displayurl https://www.wetteronline.de/pollen?gid=x5210&lat=49.05&locationname=Weingarten%20(Baden)&lon=8.53
header
host www.wetteronline.de
httpheader HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Connection: close
Date: Sun, 31 Jul 2022 14:39:32 GMT
Server: Apache
Cache-Control: max-age=300, must-revalidate
Expires: Sun, 31 Jul 2022 14:44:32 GMT
oh: ip-10-13-47-54.eu-central-1.compute.internal
X-XSS-Protection: 1; mode=block
X-RR: D=349046
Vary: Cookie,User-Agent,Accept-Encoding
X-Cache: Miss from cloudfront
Via: 1.1 997f66fda0069dac50a85c7a4fa51b7e.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA53-C1
X-Amz-Cf-Id: 2o5Qqm1LTkTPe1ag4qEu2COhXknJ-jCuK2B3xxrVXYeUUaQWteUoFA==
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
ignoreredirects 1
loglevel 4
path /pollen?gid=x5210&lat=49.05&locationname=Weingarten%20(Baden)&lon=8.53
protocol https
redirects 0
timeout 2
url https://www.wetteronline.de/pollen?gid=x5210&lat=49.05&locationname=Weingarten%20(Baden)&lon=8.53
sslargs:
OLDREADINGS:
QUEUE:
READINGS:
2022-07-31 16:39:32 Ambrosia 1
2022-07-31 16:39:32 Ampfer 1
2022-07-31 16:39:32 Beifuss 2
2022-07-31 16:39:32 Birke 0
2022-07-31 16:39:32 Buche 0
2022-07-31 16:39:32 Erle 0
2022-07-31 16:39:32 Esche 0
2022-07-31 16:39:32 Gräser 1
2022-07-31 16:39:32 Hasel 0
2022-07-31 16:39:32 LAST_REQUEST update
2022-07-31 16:39:32 MATCHED_READINGS message Ambrosia Ampfer Beifuss Birke Buche Erle Esche Gräser Hasel Pappel Roggen Ulme Wegerich Weide
2022-07-31 16:39:32 Pappel 0
2022-07-31 16:39:32 Roggen 0
2022-07-31 16:39:32 UNMATCHED_READINGS
2022-07-31 16:39:32 Ulme 0
2022-07-31 16:39:32 Wegerich 1
2022-07-31 16:39:32 Weide 0
2022-07-31 16:39:32 message Heute mäßiger Kräuterpollenflug sowie schwacher Flug von Ambrosia- und Gräserpollen
REQUEST:
context reading
data
header
ignoreredirects 0
num unknown
retryCount 0
type update
url https://www.wetteronline.de/pollen?gid=x5210&lat=49.05&locationname=Weingarten%20(Baden)&lon=8.53
defptr:
readingBase:
Ambrosia reading
Ambrosia-1 reading
Ambrosia-2 reading
Ampfer reading
Beifuss reading
Birke reading
Buche reading
Erle reading
Esche reading
Gräser reading
Hasel reading
Pappel reading
Roggen reading
Ulme reading
Wegerich reading
Weide reading
message reading
readingNum:
Ambrosia 02
Ambrosia-1 02
Ambrosia-2 02
Ampfer 03
Beifuss 04
Birke 05
Buche 06
Erle 07
Esche 08
Gräser 09
Hasel 10
Pappel 11
Roggen 12
Ulme 13
Wegerich 14
Weide 15
message 01
readingOutdated:
readingSubNum:
Ambrosia-1 -1
Ambrosia-2 -2
requestReadings:
update:
Ambrosia reading 02
Ambrosia-1 reading 02-1
Ambrosia-2 reading 02-2
Ampfer reading 03
Beifuss reading 04
Birke reading 05
Buche reading 06
Erle reading 07
Esche reading 08
Gräser reading 09
Hasel reading 10
Pappel reading 11
Roggen reading 12
Ulme reading 13
Wegerich reading 14
Weide reading 15
message reading 01
Attributes:
babbleName Pollenflug
enableXPath-Strict 1
group Allergie
reading01Name message
reading01XPath //div[@id="pollenreport_catchline"]/text()
reading02Name Ambrosia
reading02XPath //div[@id="pollen_tabelle"]/div[1]/div[3]/@data-day0
reading03Name Ampfer
reading03XPath //div[@id="pollen_tabelle"]/div[1]/div[6]/@data-day0
reading04Name Beifuss
reading04XPath //div[@id="pollen_tabelle"]/div[1]/div[9]/@data-day0
reading05Name Birke
reading05XPath //div[@id="pollen_tabelle"]/div[1]/div[12]/@data-day0
reading06Name Buche
reading06XPath //div[@id="pollen_tabelle"]/div[1]/div[15]/@data-day0
reading07Name Erle
reading07XPath //div[@id="pollen_tabelle"]/div[1]/div[18]/@data-day0
reading08Name Esche
reading08XPath //div[@id="pollen_tabelle"]/div[1]/div[21]/@data-day0
reading09Name Gräser
reading09XPath //div[@id="pollen_tabelle"]/div[1]/div[24]/@data-day0
reading10Name Hasel
reading10XPath //div[@id="pollen_tabelle"]/div[1]/div[27]/@data-day0
reading11Name Pappel
reading11XPath //div[@id="pollen_tabelle"]/div[1]/div[30]/@data-day0
reading12Name Roggen
reading12XPath //div[@id="pollen_tabelle"]/div[1]/div[33]/@data-day0
reading13Name Ulme
reading13XPath //div[@id="pollen_tabelle"]/div[1]/div[36]/@data-day0
reading14Name Wegerich
reading14XPath //div[@id="pollen_tabelle"]/div[1]/div[39]/@data-day0
reading15Name Weide
reading15XPath //div[@id="pollen_tabelle"]/div[1]/div[42]/@data-day0
readingOMap noburden:0, weakburden:1, moderateburden:2, strongburden:3
room Aussenbereich
showBody 0
showError 0
showMatched 1
stateFormat message
LG
pah
Hallo pah,
das ist ja cool und ich würde mein allergy device dadurch ersetzen.
Kannst Du bitte von Deinem device eine raw Definition Posten?
VG
Torsten
Hallo Torsten,
man kann es auch abschreiben und ergänzen.
defmod PM HTTPMOD https://www.wetteronline.de/pollen?gid=10734&lat=49.42&locationname=Heidelberg&lon=8.70 43200
attr PM reading01Name message
attr PM reading01XPath //div[@id="pollenreport_catchline"]/text()
attr PM reading02Name Ambrosia
attr PM reading02XPath //div[@id="pollen_tabelle"]/div[1]/div[3]/@data-day0
attr PM reading03Name Ampfer
attr PM reading03XPath //div[@id="pollen_tabelle"]/div[1]/div[6]/@data-day0
attr PM reading04Name Beifuss
attr PM reading04XPath //div[@id="pollen_tabelle"]/div[1]/div[9]/@data-day0
attr PM reading05Name Birke
attr PM reading05XPath //div[@id="pollen_tabelle"]/div[1]/div[12]/@data-day0
attr PM reading06Name Buche
attr PM reading06XPath //div[@id="pollen_tabelle"]/div[1]/div[15]/@data-day0
attr PM reading07Name Erle
attr PM reading07XPath //div[@id="pollen_tabelle"]/div[1]/div[18]/@data-day0
attr PM reading08Name Esche
attr PM reading08XPath //div[@id="pollen_tabelle"]/div[1]/div[21]/@data-day0
attr PM reading09Name Gräser
attr PM reading09XPath //div[@id="pollen_tabelle"]/div[1]/div[24]/@data-day0
attr PM reading10Name Hasel
attr PM reading10XPath //div[@id="pollen_tabelle"]/div[1]/div[27]/@data-day0
attr PM reading11Name Pappel
attr PM reading11XPath //div[@id="pollen_tabelle"]/div[1]/div[30]/@data-day0
attr PM reading12Name Roggen
attr PM reading12XPath //div[@id="pollen_tabelle"]/div[1]/div[33]/@data-day0
attr PM reading13Name Ulme
attr PM reading13XPath //div[@id="pollen_tabelle"]/div[1]/div[36]/@data-day0
attr PM reading14Name Wegerich
attr PM reading14XPath //div[@id="pollen_tabelle"]/div[1]/div[39]/@data-day0
attr PM reading15Name Weide
attr PM reading15XPath //div[@id="pollen_tabelle"]/div[1]/div[42]/@data-day0
attr PM readingOMap noburden:0, weakburden:1, moderateburden:2, strongburden:3
attr PM room Test
attr PM showBody 0
attr PM showError 0
attr PM showMatched 1
attr PM stateFormat message
Hui, das bietet sich ja förmlich für ein HTTPMOD-Template (https://forum.fhem.de/index.php/topic,97694.0.html) an, man könnte, Stadt, lat und long durch userAttr ersetzen bzw dynamischer pflegen. :D
Danke pah,
Du weißt doch ITler sind faul ;)
VG
Torsten
Woran kann es liegen, dass ein Wert als unmatched angezeigt wird, obwohl der Wert auf der Webseite angezeigt wird?
UNMATCHED_READINGS Pappel
Muss ich prüfen. Habe nur 20 Minuten für die o.a.Lösung investiert - ist möglicherweise noch ein Fehler drin.
Edit: Nö. bei mir nicht. Aber in der "Abschreibelösung" von rabehd weiter oben ist aus Versehen in der XPath-Angabe von Pappel ein Leerzeichen hineingerutscht. Das kann er vielleicht noch korrigieren.
EditEdit: Selbstverständlich ist das via Babble auch in die Sprachsteuerung eingebunden - meine Chefin fragt also nur "Hallo Jeannie. Wie ist heute der Pollenflug?" und bekommt den Wert des message-Readings angesagt. Als Update-Intervall habe ich 10800 s angegeben, weil wetteronline.de alle 3 Stunden die Werte aktualisiert.
LG
pah
Hallo,
bei Pappel gibt es nur einen kleinen Tippfehler bei data- day0:
attr PM reading11Name Pappel
attr PM reading11XPath //div[@id="pollen_tabelle"]/div[1]/div[30]/@data- day0
richtig ist data-day0
attr PM reading11Name Pappel
attr PM reading11XPath //div[@id="pollen_tabelle"]/div[1]/div[30]/@data-day0
Grüße Jörg und Danke an pah
Super, vielen Dank.
Ich habe 5 Mal drauf geschaut und das blank war mir nicht aufgefallen 8)
Zitat von: JoWiemann am 01 August 2022, 22:02:37
bei Pappel gibt es nur einen kleinen Tippfehler bei data- day0:
Ich habe es korrigiert, danke für den Hinweis. Ich hatte noch keine Zeit das selbst zu kontrollieren.
Eigentlich habe ich den Code von pah nur kopiert, aber wenn man gleichzeitig eine Telefonkonferenz hat und die Katze über den Schreibtisch läuft...
Aus aktuellem Anlass habe ich nun auch von allergy auf diese Lösung umgestellt.
Danke auch von mir!
Eine Frage habe ich aber noch.
Das Modul allergy hat zusätzlich zu den einzelnen Readings auch ein Reading für den aktuellen Höchstwert (fc1_maximum) bereitgestellt.
Kann mir vielleicht jemand helfen wie ich mir ein solches Reading selbst erstellen kann?
Man könnte das über ein Userreading lösen, indem man das Maximum der einzelnen Werte bildet. Wobei die Frage ist, ob das so Sinn macht. Wenn eine Pflanze den höchsten Wert hat, auf die man gar nicht reagiert, ist das wenig aussagekräftig. Ob das bei den Werten von Hexal auch einfach immer der höchste der Einzelwerte war, hab ich mir nie angeschaut.
Ich hatte mir das auch aus "aktuellem Anlass" ;-) schon mal angeschaut, aber immer noch darauf gehofft, dass die vom Modul verwendete Seite wieder Daten liefert. Aktuell ist es ja nicht relevant. Auf der Wetteronline-Seite gibt es auch eine "Gesamtbelastung" als Wert, allerdings nur für das zugehörige Bundesland. Oder in der Karten einen entsprechenden Wert für einzelne Städte, falls was in der Nähe wäre.
Viele Grüße
Thomas
Hallo Tomcat.x
Der Hintergrund warum der Wert für mich sinnvollst ist folgender.
Meine Frau ist gegen so ziemlich alles was fliegt allergisch.
Ich nutze ein Tablet mit TabletUI um mir dort u.A. die Pollenflugwerte anzuzeigen.
Da ich mir aber noch andere Dinge anzeigen lasse reicht der Platz nicht aus daher ist die Pollenflugübersicht ein Popup.
Das Icon auf der Hauptseite ändert die Farbe je nach Pollenbelastung (Maxwert) und in dem Popup kann man dann sehen welcher Wert gerade hoch ist.
So das sie je nach Bedarf die Allergiemittel einsetzen und dosieren kann.
Rein logisch betrachtet ist die Ermittlung des Maximums schon der richtige Weg.
Ich weis nur leider nicht ob und wie man das in Fhem realisieren kann.
Gruß
Daniel
Es sieht so aus als ob ich es gelöst habe. ;D
Manchmal kommt man nicht auf das naheliegenste.
attr Pollen userReadings max { maxNum(ReadingsVal("Pollen", "Ambrosia", 0),ReadingsVal("Pollen", "Ampfer", 0),ReadingsVal("Pollen", "Beifuss", 0),ReadingsVal("Pollen", "Birke", 0),ReadingsVal("Pollen", "Buche", 0),ReadingsVal("Pollen", "Erle", 0),ReadingsVal("Pollen", "Esche", 0),ReadingsVal("Pollen", "Gräser", 0),ReadingsVal("Pollen", "Hasel", 0),ReadingsVal("Pollen", "Pappel", 0),ReadingsVal("Pollen", "Roggen", 0),ReadingsVal("Pollen", "Ulme", 0),ReadingsVal("Pollen", "Wegerich", 0),ReadingsVal("Pollen", "Weide", 0),);;;; }
Hallo Daniel,
das läuft bei Dir so ähnlich wie bei mir, nur habe ich statt TabletUI einen Floorplan.
Genau, so ein Userreading hatte ich gemeint. Man könnte als Trigger noch die Readings aufführen, sollte man generell tun, da man sie aber nicht alle mit einem RegEx erwischt und hier sowieso immer alle zusammen aktualisiert werden, macht das die ganze Sache nur unübersichtlicher.
Was mir hier noch fehlt, ist die Vorhersage für die nächsten Tage. Auf der Seite gibt es die. Das müsste man nur entsprechend erweitern. Und ich habe mir auch immer noch mal die Werte vom Vortag gespeichert. Aber momentan komme ich nicht dazu, mich darum zu kümmern.
Viele Grüße
Thomas
Einen kleinen Fehler hab ich allerdings noch.
Wenn ich ein "reread" ausführe erscheint folgende Fehlermeldung im Log.
2024.11.05 14:27:50 3: Pollen: MapConvert called from FormatReading did not find Heute kein Pollenflug mehr. Die Pollensaison ist beendet. ( Heute kein Pollenflug mehr. Die Pollensaison ist beendet. ) in map noburden:0, weakburden:1, moderateburden:2, strongburden:3
Das bezieht sich wohl auf dieses Attribut
attr PM readingOMap noburden:0, weakburden:1, moderateburden:2, strongburden:3
Ich denke er meckert weil in dem reading "message" keines der genannten Worte steht.