Neuigkeiten:

Am Sonntag den 8.12.2024 kann es ab ca. 8:00 Uhr zu kurzzeitigen Einschränkungen / Ausfällen bei den Diensten des FHEM Vereines kommen.
Die Server müssen mal gewartet und dabei neu gestartet werden ;)

Hauptmenü

Pollenflugvorhersage mit HTTPMOD

Begonnen von Prof. Dr. Peter Henning, 31 Juli 2022, 16:59:19

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

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

ToKa

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
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

rabehd

#2
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
Auch funktionierende Lösungen kann man hinterfragen.

yersinia

Hui, das bietet sich ja förmlich für ein HTTPMOD-Template an, man könnte, Stadt, lat und long durch userAttr ersetzen bzw dynamischer pflegen. :D
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

ToKa

Danke pah,

Du weißt doch ITler sind faul ;)

VG
Torsten
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

ToKa

Woran kann es liegen, dass ein Wert als unmatched angezeigt wird, obwohl der Wert auf der Webseite angezeigt wird?


UNMATCHED_READINGS Pappel
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

Prof. Dr. Peter Henning

#6
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


JoWiemann

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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

ToKa

Super, vielen Dank.

Ich habe 5 Mal drauf geschaut und das blank war mir nicht aufgefallen    8)
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

rabehd

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...
Auch funktionierende Lösungen kann man hinterfragen.

WhyTea

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?

tomcat.x

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
FHEM: 6.3 auf Raspi 3B+, Raspbian (Buster), Perl v5.28.1
Sender/Empfänger: 2 x CULv3, Duofern Stick, HM-MOD-RPI-PCB
Gateways: FRITZ!Box 6591 (OS: 8.00), Trädfri, ConBee 2,  piVCCU, OpenMQTTGateway
Sensoren/Aktoren: FRITZ!DECT, FS20, FHT, HMS, HomeMatic, Trädfri, DuoFern, NetAtmo

WhyTea

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

WhyTea

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),);;;; }


tomcat.x

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
FHEM: 6.3 auf Raspi 3B+, Raspbian (Buster), Perl v5.28.1
Sender/Empfänger: 2 x CULv3, Duofern Stick, HM-MOD-RPI-PCB
Gateways: FRITZ!Box 6591 (OS: 8.00), Trädfri, ConBee 2,  piVCCU, OpenMQTTGateway
Sensoren/Aktoren: FRITZ!DECT, FS20, FHT, HMS, HomeMatic, Trädfri, DuoFern, NetAtmo