Pollenflug

Aus FHEMWiki
Version vom 16. Mai 2016, 09:26 Uhr von Fabian (Diskussion | Beiträge) (Kap. "Pollenkalender einbinden" eingefügt)

Genauso wie Wettervorhersagen, gibt es Pollenflug-Vorhersagen von verschiedensten Anbietern. Verschiedene Einbindungs- und Darstellungsmöglichkeiten sollen hier beschrieben werden.

Donnerwetter

Die Daten können mit HTTPMOD aus der Donnerwetterseite ausgelesen werden. Als Voraussetzung benötigt man die konkrete URL. Dazu geht man einfach auf die www.donnerwetter.de, sucht seine Stadt und wählt Pollenflug aus. Die URL dieser Seite wird nun ausgelesen.

Anfänger-Tip: Das hier aufgeführte Bsp. kann mit nur einer einzigen Anpassung übernommen werden - und wenn Du in Berlin wohnst, brauchst Du garnichts anzupassen... ;-).

Daten auslesen

Der folgende Code liest sämtliche von Donnerwetter bereitgestellten Pollen-Informationen für Berlin aus. Wenn man nicht alle benötigt, kann man einfach die entsprechenden readingXXName und readingXXRegex weglassen. Der Abruf erfolgt täglich (alle 86400 Sekunden).

Wichtig ist der Eintrag "attr Pollenflug requestHeader1 User-Agent: Mozilla/5.0 (Windows NT 6.0)", ohne den HTTPMOD nur eine Fehlermeldung wirft.

define Pollenflug HTTPMOD http://www.donnerwetter.de/pollenflug/berlin/DE14356.html 86400
attr Pollenflug userattr enableControlSet reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex reading07Name reading07Regex reading08Name reading08Regex reading09Name reading09Regex reading10Name reading10Regex reading11Name reading11Regex reading12Name reading12Regex reading13Name reading13Regex reading14Name reading14Regex reading15Name reading15Regex reading16Name reading16Regex reading17Name reading17Regex reading18Name reading18Regex reading19Name reading19Regex reading20Name reading20Regex reading21Name reading21Regex reading22Name reading22Regex reading23Name reading23Regex reading24Name reading24Regex reading25Name reading25Regex reading26Name reading26Regex reading27Name reading27Regex reading28Name reading28Regex reading29Name reading29Regex reading30Name reading30Regex reading31Name reading31Regex reading32Name reading32Regex reading33Name reading33Regex requestHeader1
attr Pollenflug group Pollenflug (Donnerwetter)
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 Löwenzahn
attr Pollenflug reading03Regex (?s)L.wenzahn.*?poll([\d])
attr Pollenflug reading04Name Gräser
attr Pollenflug reading04Regex (?s)Gr.ser.*?poll([\d])
attr Pollenflug reading05Name Gerste
attr Pollenflug reading05Regex (?s)Gerste.*?poll([\d])
attr Pollenflug reading06Name Linde
attr Pollenflug reading06Regex (?s)Linde.*?poll([\d])
attr Pollenflug reading07Name Beifuss
attr Pollenflug reading07Regex (?s)Beifu.*?poll([\d])
attr Pollenflug reading08Name Gansefuss
attr Pollenflug reading08Regex (?s)Gansefu.*?poll([\d])
attr Pollenflug reading09Name Mais
attr Pollenflug reading09Regex (?s)Mais.*?poll([\d])
attr Pollenflug reading10Name Brennessel
attr Pollenflug reading10Regex (?s)Brennessel.*?poll([\d])
attr Pollenflug reading11Name Hafer
attr Pollenflug reading11Regex (?s)Hafer.*?poll([\d])
attr Pollenflug reading12Name Roggen
attr Pollenflug reading12Regex (?s)Roggen.*?poll([\d])
attr Pollenflug reading13Name Weizen
attr Pollenflug reading13Regex (?s)Weizen.*?poll([\d])
attr Pollenflug reading14Name Spitzwegerich
attr Pollenflug reading14Regex (?s)Spitzwegerich.*?poll([\d])
attr Pollenflug reading15Name Raps
attr Pollenflug reading15Regex (?s)Raps.*?poll([\d])
attr Pollenflug reading16Name Hopfen
attr Pollenflug reading16Regex (?s)Hopfen.*?poll([\d])
attr Pollenflug reading17Name Holunder
attr Pollenflug reading17Regex (?s)Holunder.*?poll([\d])
attr Pollenflug reading18Name Ulme
attr Pollenflug reading18Regex (?s)Ulme.*?poll([\d])
attr Pollenflug reading19Name Pappel
attr Pollenflug reading19Regex (?s)Pappel.*?poll([\d])
attr Pollenflug reading20Name Weide
attr Pollenflug reading20Regex (?s)Weide.*?poll([\d])
attr Pollenflug reading21Name Birke
attr Pollenflug reading21Regex (?s)Birke.*?poll([\d])
attr Pollenflug reading22Name Eiche
attr Pollenflug reading22Regex (?s)Eiche.*?poll([\d])
attr Pollenflug reading23Name Esche
attr Pollenflug reading23Regex (?s)Esche.*?poll([\d])
attr Pollenflug reading24Name Platane
attr Pollenflug reading24Regex (?s)Platane.*?poll([\d])
attr Pollenflug reading25Name Flieder
attr Pollenflug reading25Regex (?s)Flieder.*?poll([\d])
attr Pollenflug reading26Name Ambrosia
attr Pollenflug reading26Regex (?s)Ambrosia.*?poll([\d])
attr Pollenflug reading27Name Buche
attr Pollenflug reading27Regex (?s)Buche.*?poll([\d])
attr Pollenflug reading28Name Rotbuche
attr Pollenflug reading28Regex (?s)Rotbuche.*?poll([\d])
attr Pollenflug reading29Name Ahorn
attr Pollenflug reading29Regex (?s)Ahorn.*?poll([\d])
attr Pollenflug reading30Name Nessel
attr Pollenflug reading30Regex (?s)Nessel.*?poll([\d])
attr Pollenflug reading31Name Kiefer
attr Pollenflug reading31Regex (?s)Kiefer.*?poll([\d])
attr Pollenflug reading32Name Tanne
attr Pollenflug reading32Regex (?s)Tanne.*?poll([\d])
attr Pollenflug reading33Name Fichte
attr Pollenflug reading33Regex (?s)Fichte.*?poll([\d])
attr Pollenflug requestHeader1 User-Agent: Mozilla/5.0 (Windows NT 6.0)
attr Pollenflug room Wetter-vorhersage

Erläuterung der Regex:

HTTPMOD ruft einen riesigen Textblock ab. Darin sieht der relevante Abschnitt für "Hasel" wie folgt aus:

 Hasel</font></b></font></td> <td><img src="http://static.donnerwetter.de/images/poll0.gif" 

Der reguläre Ausdruck dazu

  • sucht mit evtl. vorangegangenem Leerzeichen (?s)
  • den Begriff Hasel,
  • lässt alles bis zum poll von poll0.gif aus und
  • liest die nachfolgende Dezimalzahl aus ([\d]) (bei poll0.gif also eine Null).
 (?s)Hasel.*?poll([\d]) 

Daten darstellen

Pollenflug balken.png

Man kann die ausgelesenen Daten auf verschiedenste Weisen darstellen (vgl. auch die Links unten). Im folgenden ist eine einfache tabellarische Darstellung mit Hilfe einer ReadingsGroup beschrieben. Als kleines Schmankerl werden die Werte als Balken dargestellt (vgl. auch ReadingsGroup#Einfache_Balkendiagramme) und nur die Werte >0 dargestellt (vgl. auch ReadingsGroup#Inhalte_filtern).

define rgPollenflug readingsGroup Pollenflug
attr rgPollenflug mapping %READING
attr rgPollenflug nolinks 1
attr rgPollenflug notime 1
attr rgPollenflug room Wetter-vorhersage
attr rgPollenflug valueFormat { return $VALUE if ( $VALUE > 0 );; return undef;; }
attr rgPollenflug valueStyle { BalkenPollen($VALUE) }

Kurze Erläuterung:

  • mapping %READING Es wird der readingXXName in der Tabelle angezeigt.
  • valueFormat { return $VALUE if ( $VALUE > 0 );; return undef;; } Werte = 0 (also kein Pollenflug) werden nicht dargestellt (vgl. auch ReadingsGroup#Inhalte_filtern).
  • valueStyle { BalkenPollen($VALUE) } Der Balken wird über die Funktion "BalkenPollen" erzeugt (s.u.).

Die notwendige Funktion für die 99_myUtils.pm sieht wie folgt aus:

# Balkenanzeige für Pollenflug
sub BalkenPollen($) 
{
	my ($pollen) = @_;
	
	my $maxValue = 3;
	
	my $percent = $pollen / $maxValue * 100;
	
	my $color = "red";
	if    ($pollen < 2) { $color = "yellow"; } 
	elsif ($pollen < 3) { $color = "orange"; }
	
	my $stylestring = 'style="
	width: 200px; 
	text-align:center; 
	border: 1px solid #ccc; 
	background-image: -webkit-linear-gradient(left,'.$color.' '.$percent.'%, rgba(0,0,0,0) '.$percent.'%); 
	background-image:    -moz-linear-gradient(left,'.$color.' '.$percent.'%, rgba(0,0,0,0) '.$percent.'%); 
	background-image:     -ms-linear-gradient(left,'.$color.' '.$percent.'%, rgba(0,0,0,0) '.$percent.'%); 
	background-image:      -o-linear-gradient(left,'.$color.' '.$percent.'%, rgba(0,0,0,0) '.$percent.'%); 
	background-image:         linear-gradient(left,'.$color.' '.$percent.'%, rgba(0,0,0,0) '.$percent.'%);
	"';
	
    return $stylestring;
}

Kurze Erläuterung (weitere Infos s. ReadingsGroup#Einfache_Balkendiagramme):

  • $maxValue = 3 Donnerwetter liefert als Maximalwert 3 zurück.
  • $color Der Balken ist rot bei 3, orange bei 2, gelb bei 1.
  • width: 200px; Der Balken ist 200px breit.


Pollenkalender einbinden

Einen statischen Pollenkalender als Grafik kann man bspw. wie folgt einbinden:

define Pollenflug_Grafik_WD weblink image http://www.wetterdienst.de/imgs/pollenflugkalendar.jpg
attr Pollenflug_Grafik_WD group Pollenflug (Wetterdienst)
attr Pollenflug_Grafik_WD htmlattr width="50%" height="50%" frameborder="0" marginheight="0" marginwidth="0"
attr Pollenflug_Grafik_WD room Wetter-vorhersage


Links

  • Foren-Diskussionen: [1]
  • Bsp. auf Jürgens Technikwelt [2]