Quantcast
Channel: SmartHome Archive - Jürgen's Technik-Welt
Viewing all articles
Browse latest Browse all 43

Smarthome mit FHEM: Pollenflug aus Webseite auslesen und im Tablet UI anzeigen

$
0
0

Es wird Zeit, dass ich endlich mal wieder ein kleines Beispiel meines Smarthome Dashboards als Anregung für ähnliche Lösungen präsentiere. Heute möchte ich euch zeigen, wie ich meine Darstellung der Polleninfos in meinem Tablet UI eingebunden habe. Die entsprechenden Infos werden bei mir auf der Startseite rechts oben als „Kurzinfo“ angezeigt und dann gibt es nochmals eine Darstellung auf der Wetterseite. Auf der Startseite wird ein Symbol verwendet, welches sich in der Farbe ändert und auf der Wetterseite wird die Intensität zusätzlich mit der Anzeige der Stärke als „Warnziffer“ dargestellt. Nachfolgend die beiden Screenshots dazu.

Haussteuerung mit FHEM und FTUI Oberfläche

Haussteuerung mit FHEM und FTUI Oberfläche

Die Wetterseite mit der Pollenfluginfo

Die Wetterseite mit der Pollenfluginfo

Die Auswahl einer geeigneten Webseite

Zunächst habe ich im Internet nach geeigneten Seiten gesucht, die eine Polleninfo enthalten, welche möglichst einfach auszuwerten ist. Auswerten wollte ich hierbei nur die aktuelle Vorhersage für den Tag und keine Langzeitprognosen. Nach diversen Versuchen habe ich mich dann für die Seite donnerwetter.de entschieden. Diese Seite hat unter anderem den Vorteil, dass sie im Link für die Darstellung der Wetterprognose den Ort enthält. Dadurch kann dieser Link sehr einfach mit dem HTTPMOD Module von fhem verwendet werden und sieht zum Beispiel für Lohmar wie folgt aus:

http://www.donnerwetter.de/pollenflug/lohmar/DE20364.html

Man gelangt zu dem Link in dem man zunächst z.B. die PLZ in die Suchbox eingibt und dann auf der Vorhersageseite den Link „Pollenflug“ auswählt.

Pollenflug

Screenshot der Pollenfluginfo von der Webseite donnerwetter.de

Auswertung der Wetterseite mittels FHEM

Wie oben bereits erwähnt, erfolgt die Auswertung der Webseite wieder mittels HTTPMOD. Dieses Modul liest die Webseite ein und man kann dann mittels regulärer Ausdrücke die gewünschte Information ermitteln. Wichtig ist also, eine Webseite zu finden, deren Inhalt sich dann auch möglichst gut auswerten lässt. Hierzu schau ich mir immer den Quellcode der Webseite an und überlege, ob ich mit meinen (eingeschränkten) Kenntnissen einen geeigneten regulären Ausdruck entwickeln kann.

Im Fall von donnerwetter habe ich mir also die Stelle im Code angesehen, wo die Pollenfluginfos dargestellt werden. Dieser sieht zum Beispiel für Hasel und Löwenzahn wie folgt aus:

<tr bgcolor="#FFF384" valign="middle" align="left"> 
<td><img src="http://static.donnerwetter.de/images/pollgb.gif" align="middle" width="30" height="30"></td>
<td><font size="3"><b><font size="2">Hasel</font></b></font></td>
<td><img src="http://static.donnerwetter.de/images/poll1.gif" width="90" height="30" alt="schwach"> </td>
<td><font size="1"><a href="/pollenflug/verlauf.hts?lid=DE20364&Ort=LOHMAR&Allergen=Hasel&Staerke=1">Verlauf</a>
         <a href="/pollenflug/region.hts?lid=DE20364&Ort=LOHMAR&PTag=LF&Allergen=2">Langfrist</a></font>
        </td>
       </tr>
<tr bgcolor="#FFFBD6" valign="middle" align="left"> 
<td><img src="http://static.donnerwetter.de/images/pollgg.gif" align="middle" width="30" height="30"></td>
<td><font size="3"><b><font size="2">Löwenzahn</font></b></font></td>
<td><img src="http://static.donnerwetter.de/images/poll0.gif" width="90" height="30" alt="keine"> </td>
<td><font size="1">Verlauf</a>
         <a href="/pollenflug/region.hts?lid=DE20364&Ort=LOHMAR&PTag=LF&Allergen=3">Langfrist</a></font>
        </td>
       </tr>

Hasel hat hierbei die Stärke 1 und Löwenzahn die Stärke 0. Schaut man sich die Gif-Bilder hierzu an, erkennt man, dass für jede Stärke ein entsprechende Bild genutzt wird. Also für die Stärke 0 wird das Bild „poll0.gif“, für Stärke 1 das Bild „poll1.gif“ usw. angezeigt. Damit hätten wir einen sehr guten Indikator, der sich darüber hinaus auch noch als Ziffer auswerten lässt. Der reguläre Ausdruck für die Ermittlung der Stärke zum Beispiel von der Erle sieht wie folgt aus:

(?s)Erle.*?poll([\d])

Der Code für das HTTPMOD Modul sieht demnach wie folgt aus (Link „heute“ von donnerwetter.de):

define Pollenflug HTTPMOD http://www.donnerwetter.de/pollenflug/region.hts?plz=53797&PTag=0 3600
attr Pollenflug reading01Name Erle
attr Pollenflug reading01Regex (?s)Erle.*?poll([\d])
attr Pollenflug reading02Name Hasel
attr Pollenflug reading02Regex (?s)Hasel.*?poll([\d])
attr Pollenflug reading03Name Birke
attr Pollenflug reading03Regex (?s)Birke.*?poll([\d])
attr Pollenflug reading04Name Graeser
attr Pollenflug reading04Regex (?s)Gr.ser.*?poll([\d])
attr Pollenflug reading05Name Ambrosia
attr Pollenflug reading05Regex (?s)Ambrosia.*?poll([\d])

Darstellung im Tablet UI

Die Darstellung der Pollenfluginfos im Tablet UI ist dann relativ einfach mittels des Konstrukt „Symbol“ umsetzbar. Mittels HTML-Tabelle wird dann auf der Startseite jeweils in einer Zeile die gewünschte Pollenstärke angezeigt. Als Beispiel ist nachfolgend der Code für eine Zeile abgebildet:

<tr>
<td>
<div data-type="label" class="thin">Ambrosia:</div>
</td>
<td>
<div data-type="symbol" data-device="Pollenflug" data-get="Ambrosia" data-icons='["fa-forumbee","fa-forumbee","fa-forumbee"]' data-get-on='["1","2","3"]' data-on-colors='["yellowgreen","yellow","red"]' style="font-size:1em"></div>
</td>
</tr>

Auf der Wetterseite habe ich auch eine HTML-Tabelle zur Darstellung genutzt, wobei die einzelnen Polleninfos aber in Spalten abgezeigt werden. Der komplette Code für die Tabelle sieht dann wie folgt aus:

<table style="width:100%">
<tr>
<td>
<div data-type="label" class="darker">Ambrosia</div>
</td>
<td>
<div data-type="label" class="darker">Birke</div>
</td>
<td>
<div data-type="label" class="darker">Erle</div>
</td>
<td>
<div data-type="label" class="darker">Gräser</div>
</td>
<td>
<div data-type="label" class="darker">Hasel</div>
</td>
</tr>
<tr>
<td>
<div data-type="symbol" data-device="Pollenflug" data-get="Ambrosia" data-icons='["oa-weather_pollen","oa-weather_pollen warn","oa-weather_pollen warn","oa-weather_pollen warn"]' data-get-on='["0","1","2","3"]' data-on-colors='["gray","yellowgreen","yellow","red"]' class="bigger narrow" style=""></div>
</td>
<td>
<div data-type="symbol" data-device="Pollenflug" data-get="Birke" data-icons='["oa-weather_pollen","oa-weather_pollen warn","oa-weather_pollen warn","oa-weather_pollen warn"]' data-get-on='["0","1","2","3"]' data-on-colors='["gray","yellowgreen","yellow","red"]' class="bigger narrow" style=""></div>
</td>
<td>
<div data-type="symbol" data-device="Pollenflug" data-get="Erle" data-icons='["oa-weather_pollen","oa-weather_pollen warn","oa-weather_pollen warn","oa-weather_pollen warn"]' data-get-on='["0","1","2","3"]' data-on-colors='["gray","yellowgreen","yellow","red"]' class="bigger narrow" style=""></div>
</td>
<td>
<div data-type="symbol" data-device="Pollenflug" data-get="Graeser" data-icons='["oa-weather_pollen","oa-weather_pollen warn","oa-weather_pollen warn","oa-weather_pollen warn"]' data-get-on='["0","1","2","3"]' data-on-colors='["gray","yellowgreen","yellow","red"]' class="bigger narrow" style=""></div>
</td>
<td>
<div data-type="symbol" data-device="Pollenflug" data-get="Hasel" data-icons='["oa-weather_pollen","oa-weather_pollen warn","oa-weather_pollen warn","oa-weather_pollen warn"]' data-get-on='["0","1","2","3"]' data-on-colors='["gray","yellowgreen","yellow","red"]' class="bigger narrow" style=""></div>
</td>
</tr>
</table>

[UPDATE: 19.01.16 / 24.01.16]
Es sieht so aus, dass donnerwetter.de aktuell nicht mehr funktioniert und man einen Fehlercode 403 bekommt. Für eine erste schnelle Lösung habe ich bei wetteronline.de eine Alternative gefunden, die sich beim ersten Test sehr schnell einbinden läßt.

Hierzu muß die URL für das HTTPMOD Module gegen http://www.wetteronline.de/pollen/lohmar ausgetauscht werden (natürlich mit eurem Ort).

Bei den regulären Ausdrücken muß jeweils nachfolgender Code eingegeben werden (Beispiel für Hasel) [UPDATE 24.01.16: besserer Regex von Sven übernommen (Danke!)]:

>Hasel.*?burden">([\w,. ]+)

Und in den FTUI html-Dateien muß der data-get-on Ausdruck wie folgt angepasst werden:

data-get-on='["schwach","mittel","stark"]'

Hier bin ich mir nur nicht ganz sicher, ob „mittel“ und „stark“ wirklich vorkommen oder ob andere Begriffe verwendet werden. Das müsste man dann nochmals testen.

Ich hoffe, dass hilft erst einmal als Zwischenlösung.

Der Beitrag Smarthome mit FHEM: Pollenflug aus Webseite auslesen und im Tablet UI anzeigen erschien zuerst auf Jürgen's Technik-Welt.


Viewing all articles
Browse latest Browse all 43


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>