In der Vergangenheit hatte ich ziemliche Probleme mit dem Yahoo Wetter. Aus diesem Grund habe ich mich entschieden, Yahoo Wetter gegen Proplanta – Wetter für die Landwirtschaft – zu ersetzen. Wie das funktioniert und welche Auswirkungen das auf meine Hausautomation hatte, möchte ich Dir in diesem Beitrag zeigen.
Update 29.01.2017: Fehler bei der Ermittlung des Wetter-Icons behoben.
Proplanta Wetter Modul
Die Einbindung des Proplanta Wetter-Moduls ist sehr einfach:
define proplanta PROPLANTA Schneverdingen de
attr proplanta event-on-update-reading temperature,humidity,pressure,wind,windDir
attr proplanta group Wetter
attr proplanta room System-Monitoring
Du musst nur Deinen Ort eingeben und fertig. Bei Yahoo musst Du aufwändig eine Wetter-ID suchen. Vorteil Proplanta.
Wenn sich Temperatur, Luftfeuchtigkeit, Druck, Windgeschwindigkeit oder -richtung ändern, wird ein Ereignis ausgelöst. Dies ist für das Schreiben der Logdateien (siehe weiter unten) wichtig.
Anpassung der FHEM Statusanzeige
Da ich mir über den Amazon Kindle Paperwhite 3 eine Statusanzeige u. a. für Wetter ausgeben lassen, musste dieses Modul natürlich auch abgeändert werden. Wie das mit der Statusauzeige geht, zeige ich Dir in dem Beitrag FHEM Status auf Kindle Paperwhite 3.
Damit Proplanta in meine Modul 99_dkHandleKindle.pm ausgegeben werden kann, habe ich das Modul um folgende Funktion erweitert:
sub dkGetProplantaWeatherIcon($) {
my ($icon_name) = @_;
my $weather_icon_name = dkGetReading('proplanta', $icon_name);
my %proplanta_meteoconsmap = (
"heiter", "H",
"wolkig", "N",
"Regenschauer", "Q",
"starkbewoelkt", "Y",
"Regen", "R",
"bedeckt", "N",
"sonnig", "B",
"Schnee", "U",
"Schneefall", "U",
"Schneeregen", "V",
"Schneeschauer", "\$",
"unterschiedlichbewoelktvereinzeltSchauerundGewitter", "Q",
"Nebel", "F",
"klar", "B",
"Spruehregen", "R",
"keine Daten", "H"
);
$weather_icon_name =~ s/(_|,| )//g;
return $proplanta_meteoconsmap{$weather_icon_name};
}
Hier werden die wichtigsten Begriffe (die ich auf die schnelle identifizieren konnte) in Metocons gewandelt. Die Funktion erwartet ein Attribut des Proplanta-Devices, beispielsweise „weather“ oder „fc1_weatherDay“. Der entsprechende Wert wird über meine Funktion dkGetReading() ermittelt und in dem Array „gesucht“ und entsprechend zurückgegeben.
In der Funktion dkKindleDashboard() habe ich die Yahoo-Werte durch Folgendes ersetzt:
# WETTER
my $weather_icon_code = dkGetProplantaWeatherIcon('weather');
$filedata =~ s/ICON1/$weather_icon_code/;
my $weather_icon_2_code = dkGetProplantaWeatherIcon('fc1_weatherDay');
$filedata =~ s/ICON2/$weather_icon_2_code/;
my $weather_icon_3_code = dkGetProplantaWeatherIcon('fc2_weatherDay');
$filedata =~ s/ICON3/$weather_icon_3_code/;
my $weather_temperature_today = dkGetReading('proplanta', 'temperature');
$filedata =~ s/TEMP/$weather_temperature_today/;
my $weather_temperature_today_min = dkGetReading('proplanta', 'fc0_tempMin');
$filedata =~ s/TMIN1/$weather_temperature_today_min/;
my $weather_temperature_today_max = dkGetReading('proplanta', 'fc0_tempMax');
$filedata =~ s/TMAX1/$weather_temperature_today_max/;
my $weather_temperature_2_min = dkGetReading('proplanta', 'fc1_tempMin');
$filedata =~ s/TMIN2/$weather_temperature_2_min/;
my $weather_temperature_2_max = dkGetReading('proplanta', 'fc1_tempMax');
$filedata =~ s/TMAX2/$weather_temperature_2_max/;
my $weather_temperature_3_min = dkGetReading('proplanta', 'fc2_tempMin');
$filedata =~ s/TMIN3/$weather_temperature_3_min/;
my $weather_temperature_3_max = dkGetReading('proplanta', 'fc2_tempMax');
$filedata =~ s/TMAX3/$weather_temperature_3_max/;
Nun werden die richtigen Werte wieder auf dem Kindle Paperwhite 3 angezeigt.
FileLog und Plot
Zum Schluss müssen die Wetterdaten noch in eine Logdatei geschrieben und über einen Plot ausgegeben werden. Hierfür werden die folgenden zwei Geräte angelegt:
define filelog_proplanta FileLog ./log/wetter/proplanta-%Y-%m.log proplanta
attr filelog_proplanta logtype text
attr filelog_proplanta room Logs
define plot_proplanta SVG filelog_proplanta:dkProplantaWeather:CURRENT
attr plot_proplanta group Wetter
attr plot_proplanta room System-Monitoring
attr plot_proplanta sortby 01
Für die Plot-Darstellung wird zusätzlich noch eine gplot-Datei benötigt, in der gesagt wird, welche Werte wie dargestellt werden sollen:
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set ytics nomirror
set y2tics
set title '<TL>'
set grid xtics y2tics
set y2label "Temperatur (°C)"
set ylabel "Luftfeuchtigkeit (%)"
set yrange [0:100]
#FileLog 4:temperature\x3a:4.5:
#FileLog 4:humidity\x3a:0:
plot "<IN>" using 1:2 axes x1y2 title 'Temperatur (°C)' ls l0 lw 1.5 with lines,\
"<IN>" using 1:2 axes x1y1 title 'Luftfeuchtigkeit (%)' ls l2fill lw 0.2 with lines
Fazit
Die komplette Umstellung hat ca. 45 Minuten gedauert, hat sich aber gelohnt. Jetzt erhalte ich zuverlässig Wetterdaten aus der Region. Nach einer Woche Einsatz hatte ich auch noch keine „blockierenden“ Serveranfragen, welche die Performance von FHEM maßgeblich beeinträchtig haben. Wer also keine Lust mehr auf Yahoo Wetter hat bzw. laufend mit Verbindungs- und Performance-Problemen und Serverausfällen zu tun hatte, der sollte definitiv auf Proplanta Wetter umstellen.
Kleiner Tipp noch: Andere Module wie Twilight nutzen auch Yahoo! Bei Twilight kannst Du zum Beispiel bei der Initialisierung des Gerätes Yahoo Wetter „deaktivieren“, wenn Du keine Wetter-ID angibst:
define twilight Twilight 53.xxxx 9.yyyyy 3