<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JensB</id>
	<title>FHEMWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JensB"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/JensB"/>
	<updated>2026-04-10T02:20:36Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=38892</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=38892"/>
		<updated>2024-01-10T21:43:39Z</updated>

		<summary type="html">&lt;p&gt;JensB: Modulname in 98_DWD_OpenData_Weblink.pm geändert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hinweis|Versionsänderung: Die Vorhersagedaten wurden Mitte September 2018 von CSV auf KML umgestellt. Diese Umstellung ist inkompatibel: das DWD_OpenData-Modul muss aktualisiert werden, einige Reading-Namen haben sich geändert und der Weblink muss deinstalliert und neu installiert werden (siehe diesen {{Link2Forum|Topic=83097|Message=840270|Linktext=Beitrag im Forum}}).}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB ({{Link2FU|14024|Forum}}/[[Benutzer Diskussion:JensB|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verfügung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls] oder hier: https://opendata.dwd.de/weather/lib/MetElementDefinition.xml.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage und die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
2. Weiterhin ist das Perl-Modul &#039;&#039; DateTime&#039;&#039; erforderlich. Dieses lässt sich mit &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install libdatetime-perl&amp;lt;/syntaxhighlight&amp;gt; installieren.&lt;br /&gt;
&lt;br /&gt;
3. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
3. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
4. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {$ENV{LANG}}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Dieser Befehl gilt für Debian-basierte Betriebssysteme - für andere Betriebssysteme ist eine analoge Funktion zu verwenden. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Sollte FHEM nach einem Neustart noch immer nicht die gewünschte Sprache verwenden, kann man auf einem System V Linux durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und erneutem Neustart von FHEM die Sprache für FHEM erzwingen. Bei einem Systemd Linux kann man die Einstellungen mit &#039;&#039;systemctl edit --full fhem.service&#039;&#039; bearbeiten. Spätestes jetzt muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
5. Nur für den Weblink erforderlich:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe {{Link2CmdRef|Anker=DWD_OpenDatadefine|Label=Commandref}}.&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
Siehe {{Link2CmdRef|Anker=DWD_OpenDataattr|Label=Commandref}}.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen (Spalte &#039;&#039;id&#039;&#039;). Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen. Den ermittelten Stationscode kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get forecast&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;forecastStation&#039;&#039; hinterlegen. Insgesamt werden vom DWD mehr als 70 Merkmale zur Verfügung gestellt. Eine Auflistung findet sich im Dokument [https://opendata.dwd.de/weather/lib/MetElementDefinition.xml MetElementDefinition]. Nur ein kleiner Teil der Merkmale wird in der Standardeinstellung des Moduls als Reading zur Verfügung gestellt. Wer andere Merkmale benötigt muss sie mit Komma getrennt dem Attribut &#039;&#039;forecastProperties&#039;&#039; zuweisen. Es empfiehlt sich zur Performance-Optimierung sowohl das Attribut &#039;&#039;forecastDays&#039;&#039; als auch das Attribut &#039;&#039;forecastProperties&#039;&#039; auf den tatsächlichen Bedarf einzustellen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warnzellen-ID Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Die Warnzellen-ID kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get alerts&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;alertArea&#039;&#039; hinterlegen. Die Warnzellen-ID ist ab der 2. Stelle identisch mit den ersten Ziffern des amtlichen Gemeindeschlüssels. Man kann z.B. den Namen von Gemeinde oder Landkreis bei den [https://www.statistik-bw.de/Statistik-Portal/gemeindeverz.asp Statistischen Ämtern des Bundes und der Länder] eingeben, den amtlichen Gemeindeschlüssel ermitteln und dann mit vorangestellter 1, 8 oder 9 im Warnzellen-ID Katalog des DWD nach einem Eintrag mit exakter oder weitgehender Übereinstimmung suchen. Wem das zu kompliziert vorkommt, der kann bei mehrdeutigen Gemeinde- bzw. Landkreisbezeichnungen auch versuchen auszuprobieren, welche die richtige Warnzellen-ID ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit automatisch Aktualisierung von Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Performance&lt;br /&gt;
Das DWD_OpenData-Modul ist ein Datenmodul mit relativ vielen Readings. In der Standardkonfiguration wird, wie bei jedem anderen FHEM Modul, bei jeder Änderung jedes Readings ein FHEM internes Ereignis erzeugt, damit andere FHEM Devices auf diese Änderungen reagieren können. Diese Ereignisse sorgen auch dafür, dass man Änderungen in der Weboberfläche sofort angezeigt bekommt, ohne die Webseite neu aufzurufen. Interessiert sich aber kein FHEM Device für die Änderungsbenachrichtigung bestimmter Readings, entsteht unnötiger Verarbeitungs-Overhead, der je nach FHEM Konfiguration und verfügbarer CPU-Leistung auch mehrere Sekunden benötigen kann und in dieser Zeit andere Abläufe blockiert. Um die Performance zu optimieren, empfiehlt es sich,  mit [[event-on-update-reading]] für eine angepasste und dadurch effizientere Verarbeitung zu sorgen, indem man nur für jene Readings Ereignisse zulässt, welche man für die Weiterverarbeitung braucht. Der DWD_OpenData_Weblink braucht z.B. gar keine Ereignisse, um zu funktionieren. Hier eine minimalistische Beispielkonfiguration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr DWD event-on-update-reading state,fc_state,a_state&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration des Moduls finden sich in der&lt;br /&gt;
{{Link2CmdRef|Anker=DWD_OpenData|Label=Commandref}}.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Meteogramms ===&lt;br /&gt;
Um den vorhergesagten Wetterverlauf als Meteogramm in Kurvenform mit [[SVG]] darzustellen, kann man wie folgt vorgehen:&lt;br /&gt;
&lt;br /&gt;
1. 99_myUtils.pm&lt;br /&gt;
&lt;br /&gt;
Für die Bestimmung der Werte für den SVG-Plot wird eine Perl-Funktion benötigt, die in die Datei 99_myUtils.pm vor dem Ende eingefügt wird. Wer diese FHEM-Datei noch nicht nutzt, legt sie einfach an (siehe [[99_myUtils_anlegen]]).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
 &lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# (c) mumpitzstuff 19.12.2018&lt;br /&gt;
#&lt;br /&gt;
# see https://forum.fhem.de/index.php/topic,83097.msg874150.html#msg874150&lt;br /&gt;
#&lt;br /&gt;
sub logProxy_dwd2Plot($$$$;$$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $fcValue, $from, $to, $fcHour, $expMode, $shiftTime) = @_;&lt;br /&gt;
  my $regex;&lt;br /&gt;
  my @rl;&lt;br /&gt;
&lt;br /&gt;
  return undef if(!$device);&lt;br /&gt;
&lt;br /&gt;
  if ($fcValue =~ s/_$//)&lt;br /&gt;
  {&lt;br /&gt;
    $regex = &amp;quot;^fc[\\d]+_[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $fcHour = 12 if(!defined($fcHour));&lt;br /&gt;
  $expMode = &amp;quot;point&amp;quot; if(!defined($expMode));&lt;br /&gt;
  #Log3 undef,2, &amp;quot;Regex: &amp;quot;.$regex;&lt;br /&gt;
&lt;br /&gt;
  # ermitteln aller relevanten Readings&lt;br /&gt;
  if ( defined($defs{$device}) )&lt;br /&gt;
  {&lt;br /&gt;
    if ( $defs{$device}{TYPE} eq &amp;quot;DWD_OpenData&amp;quot; )&lt;br /&gt;
    {&lt;br /&gt;
      @rl = sort&lt;br /&gt;
      {&lt;br /&gt;
        my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
        my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
        my ($ao) = ($a =~ m/fc\d+_(\d+).*/);&lt;br /&gt;
        my ($bo) = ($b =~ m/fc\d+_(\d+).*/);&lt;br /&gt;
        $an &amp;lt;=&amp;gt; $bn or $ao &amp;lt;=&amp;gt; $bo or $a cmp $b;&lt;br /&gt;
      } ( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
      return undef if ( !@rl );&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      Log3 undef, 2, &amp;quot;logProxy_dwd2Plot: $device is not a DWD_OpenData device&amp;quot;;&lt;br /&gt;
      return undef;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
  my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
  my $sec = $fromsec;&lt;br /&gt;
  my ($h, $hp, $fcDay, $mday, $mon, $year);&lt;br /&gt;
  my $timestamp;&lt;br /&gt;
&lt;br /&gt;
  my $reading;&lt;br /&gt;
  my $value;&lt;br /&gt;
  my $prev_value;&lt;br /&gt;
  my $min = 999999;&lt;br /&gt;
  my $max = -999999;&lt;br /&gt;
  my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  # while not end of plot range reached&lt;br /&gt;
  while (($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl)&lt;br /&gt;
  {&lt;br /&gt;
    #remember previous value for start of plot range&lt;br /&gt;
    $prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
    $reading = shift @rl;&lt;br /&gt;
    ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
    ($hp) = $reading =~ m/^fc\d+_(\d+).*/;&lt;br /&gt;
    #Log 1, &amp;quot;hp: &amp;quot;.$hp;&lt;br /&gt;
&lt;br /&gt;
    if ($hp)&lt;br /&gt;
    {&lt;br /&gt;
      $h = ReadingsVal($device, &amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_&amp;quot;.$hp.&amp;quot;_time&amp;quot;, $fcHour);&lt;br /&gt;
      if ($h =~ m/^(\d+):\d+/)&lt;br /&gt;
      {&lt;br /&gt;
        $h = $1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      $h = $fcHour;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    $value = ReadingsVal($device, $reading, undef);&lt;br /&gt;
&lt;br /&gt;
    # calculate minutes of sunshine per hour&lt;br /&gt;
    if ($fcValue =~ /^SunD(\d+)/)&lt;br /&gt;
    {&lt;br /&gt;
      if (defined($1))&lt;br /&gt;
      {&lt;br /&gt;
        $value = $value / ($1 * 36);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        $value = $value / (12 * 36);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # calculate amount of rain per hour&lt;br /&gt;
    if ($fcValue =~ /^RR(\d+)c$/)&lt;br /&gt;
    {&lt;br /&gt;
      if (defined($1))&lt;br /&gt;
      {&lt;br /&gt;
        $value /= $1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ($year, $mon, $mday) = split(&#039;\-&#039;,ReadingsVal($device, &amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
    $timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
    $sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
    if (defined($shiftTime))&lt;br /&gt;
    {&lt;br /&gt;
      $sec += $shiftTime;&lt;br /&gt;
      $timestamp = logProxy_shiftTime($timestamp, $shiftTime);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # skip all values before start of plot range&lt;br /&gt;
    next if ( $sec &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
    # add first value at start of plot range&lt;br /&gt;
    if ( !$ret &amp;amp;&amp;amp; $prev_value )&lt;br /&gt;
    {&lt;br /&gt;
      $min = $prev_value if ( $prev_value &amp;lt; $min );&lt;br /&gt;
      $max = $prev_value if ( $prev_value &amp;gt; $max );&lt;br /&gt;
      $ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # done if after end of plot range&lt;br /&gt;
    last if ($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
    $min = $value if ( $value &amp;lt; $min );&lt;br /&gt;
    $max = $value if ( $value &amp;gt; $max );&lt;br /&gt;
&lt;br /&gt;
    # add actual control point&lt;br /&gt;
    $ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    $timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    $_ = SVG_time_to_sec($timestamp);&lt;br /&gt;
    if (defined($shiftTime))&lt;br /&gt;
    {&lt;br /&gt;
      $_ += $shiftTime;&lt;br /&gt;
      $timestamp = logProxy_shiftTime($timestamp, $shiftTime);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ($_ &amp;lt; $tosec)&lt;br /&gt;
    {&lt;br /&gt;
      $ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      $ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  elsif (($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    $value = $prev_value + ($value - $prev_value) * (86400 + ($tosec - $sec)) / 86400;&lt;br /&gt;
    $ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return ($ret, $min, $max, $prev_value);&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. LogProxy&lt;br /&gt;
&lt;br /&gt;
Wer bereits ein [[logProxy]]-Device hat, muss den Namen seines logProxy-Devices in die weiter unter aufgeführte GPlot-Konfiguration eintragen. Ansonsten wird es wie folgt neu erstellt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. FileLog&lt;br /&gt;
&lt;br /&gt;
Das Meteogramm kennt anders als andere FHEM-Plots keine Vergangenheit außer heute. Trotzdem wird aus formalen Gründen ein [[FileLog]]-Device benötigt. Dazu kann ein beliebiges vorhandenes FileLog-Device verwendet werden. Wer will, kann hierfür aber auch ein neues FileLog Device für das DWD_OpenData-Device anlegen (Achtung: wird schnell umfangreich):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_DWD FileLog ./log/DWD-%Y-%m.log DWD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird für das FileLog-Device der Platzhalter &#039;&#039;FileLog_Dummy&#039;&#039; verwendet, der mit dem Namen des gewählten FileLog-Devices zu ersetzen ist.&lt;br /&gt;
&lt;br /&gt;
4. SVG Plot&lt;br /&gt;
&lt;br /&gt;
Das eigentliche Meteogramm ist ein SVG-Device. Will man mehrere Tage darstellen bietet sich die folgende Definition an:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_DWD SVG FileLog_Dummy:SVG_DWD:CURRENT&lt;br /&gt;
attr SVG_DWD fixedoffset 6&lt;br /&gt;
attr SVG_DWD fixedrange 7days&lt;br /&gt;
attr SVG_DWD nrAxis 1,2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei muss das SVG-Attribut &#039;&#039;fixedoffset&#039;&#039; entweder gleich oder kleiner als die Einstellung des DWD_OpenData-Attributs &#039;&#039;forecastDays&#039;&#039; (Standardwert: 6 Tage) gewählt werden und das SVG-Attribut &#039;&#039;fixedrange&#039;&#039; um eins größer als &#039;&#039;fixedoffset&#039;&#039; eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Will man stattdessen nur die nächsten 24 Stunden anzeigen, nimmt man folgende Einstellungen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_DWD SVG FileLog_Dummy:SVG_DWD:CURRENT&lt;br /&gt;
attr SVG_DWD endPlotNow 1&lt;br /&gt;
attr SVG_DWD fixedoffset 1&lt;br /&gt;
attr SVG_FileLog_WETTER_DWD_3 label &amp;quot;Tmin: $data{max1} °C, Tmax: $data{min1} °C&amp;quot;&lt;br /&gt;
attr SVG_DWD nrAxis 1,2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die DWD_OpenData-Readings mit dem Plot zu verknüpfen, muss man nun die GPlot-Konfigurationsdatei des SVG-Plots manuell bearbeiten. Dazu auf den Link klicken, der im SVG_DWD-Device am Internal &#039;&#039;GPLOTFILE&#039;&#039; steht. Die y-Wertebereiche für die Regenmenge und die Temperaturen sind im Beispiel auskommentiert (Autorange). Das kann man so lassen oder man stellt sie nach den eigenen Wetter-Gegebenheiten ein. Je nach Konfiguration des DWD_OpenData-Attributs &#039;&#039;forecastResolution&#039;&#039; sind aber noch einige weitere Einstellungen anzupassen. Das folgende Beispiel ist für die 3h-Auflösung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Wettervorhersage&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid ytics&lt;br /&gt;
set ylabel &amp;quot;Regen [mm]&amp;quot;&lt;br /&gt;
#set yrange [0:4]&lt;br /&gt;
set y2label &amp;quot;Temperatur [°C]&amp;quot;&lt;br /&gt;
#set y2range [-5:35]&lt;br /&gt;
set y3label &amp;quot;Wolken/Regen/Sonne [%]&amp;quot;&lt;br /&gt;
set y3range [0:100]&lt;br /&gt;
&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tx&amp;quot;,$from,$to,18,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tn&amp;quot;,$from,$to,6,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD3_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR3c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R600_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstX:TimeNow(),0,100&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;T&#039; ls l0 lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Tmax&#039; ls l0dot lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Tmin&#039; ls l0dot lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Sonne&#039; ls l4fill lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Regenmenge&#039; ls l2fill lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wind&#039; ls l1 lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Regen&#039; ls l5fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wolken&#039; ls l6fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 notitle ls l5 lw 4 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 notitle ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man dagegen eine Auflösung von 1 Stunde, sind folgende LogProxy-Einträge erforderlich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tx&amp;quot;,$from,$to,18,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tn&amp;quot;,$from,$to,6,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR1c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R101_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-0.5*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstX:TimeNow(),0,100&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Darstellung der nächsten 24 Stunden mit einer Auflösung von 1 Stunde nimmt man folgende GPlot-Konfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics&lt;br /&gt;
set y3tics&lt;br /&gt;
set grid xtics y2tics&lt;br /&gt;
set ylabel &amp;quot;Regen [mm]&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Temperatur [°C]&amp;quot;&lt;br /&gt;
set y3label &amp;quot;Wolken/Regen/Sonne [%]&amp;quot;&lt;br /&gt;
set y3range [0:100]&lt;br /&gt;
&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR1c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R101_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-0.5*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;T&#039; ls l0 lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Sonne&#039; ls l4fill lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Regenmenge&#039; ls l2fill lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wind&#039; ls l1 lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Regen&#039; ls l5fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wolken&#039; ls l6fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 notitle ls l2 lw 2 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nachdem, welche Auflösung man verwendet, werden unterschiedliche Readings des DWD_OpenData-Devices benötigt. Diese sind in den LogProxy-Zeilen in der GPlot-Konfigurationsdatei zu finden und müssen auf jeden Fall dem Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Device hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Viele Detaileinstellungen des Meteogramms lassen sich individualisieren. Man kann z.B. mehr oder weniger Daten anzeigen und zumindest für &#039;&#039;heute&#039;&#039; auch aktuelle Messwerte hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für ein Meteogramm über 4 Tage mit 3 Stunden Auflösung:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODmeteogram4d3h.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen mit [[FHEMWEB]] steht das Modul [https://raw.githubusercontent.com/jnsbyr/fhem/master/FHEM/98_DWD_OpenData_Weblink.pm 98_DWD_OpenData_Weblink.pm] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Moduldatei herunterladen und in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren. Entweder die Datei direkt auf den FHEM-Server herunterladen (z.B. mit &#039;&#039;wget&#039;&#039;) oder beim indirekten Herunterladen darauf achten, dass dabei das Encoding nicht verändert wird (also z.B. bei WinSCP den Binär-Modus und nicht den Text-Modus verwenden). Ansonsten werden später z.B. Sonderzeichen wie &#039;&#039;°C&#039;&#039; falsch angezeigt. &lt;br /&gt;
&lt;br /&gt;
Anschließend kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD_Weblink_Generator DWD_OpenData_Weblink&lt;br /&gt;
 attr DWD_Weblink_Generator IODev DWD&lt;br /&gt;
 attr DWD_Weblink_Generator forecastDays 4&lt;br /&gt;
 # refreshRate nur dann setzten, wenn der Browser Java-Script beherrscht:&lt;br /&gt;
 attr DWD_Weblink_Generator refreshRate 900&lt;br /&gt;
 &lt;br /&gt;
 define DWD_Weblink weblink htmlCode { DWD_OpenData_Weblink::AsHtmlH(&amp;quot;DWD_Weblink_Generator&amp;quot;) } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit legt man das Weblink-Generator-Device an und verknüpft es mit dem DWD_OpenData-Device. Außerdem wird der [[weblink ]] selbst angelegt, der seinerseits mit dem Weblink-Generator-Device verknüpft wird. Der Weblink benötigt für seine Funktion eine bestimmte Auswahl der Vorhersage-Merkmale. Wer das Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Moduls anpassen will, muss diese Merkmale auf jeden Fall mit berücksichtigen. &lt;br /&gt;
&lt;br /&gt;
Wenn vom Weblink nichts im Browser zu sehen ist, kann das daran liegen, dass der Browser kein aktuelles JavaScript verwendet oder JavaScript deaktiviert ist. Dann sollte das Attribut &#039;&#039;refreshRate&#039;&#039; auf 0 Sekunden eingestellt oder gelöscht werden. Mit aktiviertem Refresh werden die Daten auch ohne Seitenneuaufbau regelmäßig und bei Tab-Wechsel aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Liste der erforderlichen Vorhersage-Merkmale finden sich zusammen mit allen weiteren Details zur Installation und Konfiguration in der Modulhilfe von &#039;&#039;98_DWD_OpenData_Weblink.pm&#039;&#039;, die man z.B. nach dem Anlegen des Weblink-Generator-Devices über die Weboberfläche abrufen kann.&lt;br /&gt;
&lt;br /&gt;
Hier ein Ausschnitt aus der Darstellung des Weblinks mit [[FHEMWEB]]:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODweblink.png|500px]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=37057</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=37057"/>
		<updated>2022-01-09T18:34:16Z</updated>

		<summary type="html">&lt;p&gt;JensB: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hinweis|Versionsänderung: Die Vorhersagedaten wurden Mitte September 2018 von CSV auf KML umgestellt. Diese Umstellung ist inkompatibel: das DWD_OpenData-Modul muss aktualisiert werden, einige Reading-Namen haben sich geändert und der Weblink muss deinstalliert und neu installiert werden (siehe diesen {{Link2Forum|Topic=83097|Message=840270|Linktext=Beitrag im Forum}}).}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB ({{Link2FU|14024|Forum}}/[[Benutzer Diskussion:JensB|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verfügung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage und die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
2. Weiterhin ist das Perl-Modul &#039;&#039; DateTime&#039;&#039; erforderlich. Dieses lässt sich mit &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt-get install libdatetime-perl&amp;lt;/source&amp;gt; installieren.&lt;br /&gt;
&lt;br /&gt;
3. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
3. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
4. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {$ENV{LANG}}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Dieser Befehl gilt für Debian-basierte Betriebssysteme - für andere Betriebssysteme ist eine analoge Funktion zu verwenden. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Sollte FHEM nach einem Neustart noch immer nicht die gewünschte Sprache verwenden, kann man auf einem System V Linux durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und erneutem Neustart von FHEM die Sprache für FHEM erzwingen. Bei einem Systemd Linux kann man die Einstellungen mit &#039;&#039;systemctl edit --full fhem.service&#039;&#039; bearbeiten. Spätestes jetzt muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
5. Nur für den Weblink erforderlich:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
Siehe {{Link2CmdRef|Anker=DWD_OpenDatadefine|Label=Commandref}}.&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
Siehe {{Link2CmdRef|Anker=DWD_OpenDataattr|Label=Commandref}}.&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen (Spalte &#039;&#039;id&#039;&#039;). Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen. Den ermittelten Stationscode kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get forecast&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;forecastStation&#039;&#039; hinterlegen. Insgesamt werden vom DWD mehr als 70 Merkmale zur Verfügung gestellt. Eine Auflistung findet sich im Dokument [https://opendata.dwd.de/weather/lib/MetElementDefinition.xml MetElementDefinition]. Nur ein kleiner Teil der Merkmale wird in der Standardeinstellung des Moduls als Reading zur Verfügung gestellt. Wer andere Merkmale benötigt muss sie mit Komma getrennt dem Attribut &#039;&#039;forecastProperties&#039;&#039; zuweisen. Es empfiehlt sich zur Performance-Optimierung sowohl das Attribut &#039;&#039;forecastDays&#039;&#039; als auch das Attribut &#039;&#039;forecastProperties&#039;&#039; auf den tatsächlichen Bedarf einzustellen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warnzellen-ID Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Die Warnzellen-ID kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get alerts&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;alertArea&#039;&#039; hinterlegen. Die Warnzellen-ID ist ab der 2. Stelle identisch mit den ersten Ziffern des amtlichen Gemeindeschlüssels. Man kann z.B. den Namen von Gemeinde oder Landkreis bei den [https://www.statistik-bw.de/Statistik-Portal/gemeindeverz.asp Statistischen Ämtern des Bundes und der Länder] eingeben, den amtlichen Gemeindeschlüssel ermitteln und dann mit vorangestellter 1, 8 oder 9 im Warnzellen-ID Katalog des DWD nach einem Eintrag mit exakter oder weitgehender Übereinstimmung suchen. Wem das zu kompliziert vorkommt, der kann bei mehrdeutigen Gemeinde- bzw. Landkreisbezeichnungen auch versuchen auszuprobieren, welche die richtige Warnzellen-ID ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit automatisch Aktualisierung von Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Performance&lt;br /&gt;
Das DWD_OpenData-Modul ist ein Datenmodul mit relativ vielen Readings. In der Standardkonfiguration wird, wie bei jedem anderen FHEM Modul, bei jeder Änderung jedes Readings ein FHEM internes Ereignis erzeugt, damit andere FHEM Devices auf diese Änderungen reagieren können. Diese Ereignisse sorgen auch dafür, dass man Änderungen in der Weboberfläche sofort angezeigt bekommt, ohne die Webseite neu aufzurufen. Interessiert sich aber kein FHEM Device für die Änderungsbenachrichtigung bestimmter Readings, entsteht unnötiger Verarbeitungs-Overhead, der je nach FHEM Konfiguration und verfügbarer CPU-Leistung auch mehrere Sekunden benötigen kann und in dieser Zeit andere Abläufe blockiert. Um die Performance zu optimieren, empfiehlt es sich,  mit [[event-on-update-reading]] für eine angepasste und dadurch effizientere Verarbeitung zu sorgen, indem man nur für jene Readings Ereignisse zulässt, welche man für die Weiterverarbeitung braucht. Der DWD_OpenData_Weblink braucht z.B. gar keine Ereignisse, um zu funktionieren. Hier eine minimalistische Beispielkonfiguration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr DWD event-on-update-reading state,fc_state,a_state&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration des Moduls finden sich in der&lt;br /&gt;
{{Link2CmdRef|Anker=DWD_OpenData|Label=Commandref}}.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Meteogramms ===&lt;br /&gt;
Um den vorhergesagten Wetterverlauf als Meteogramm in Kurvenform mit [[SVG]] darzustellen, kann man wie folgt vorgehen:&lt;br /&gt;
&lt;br /&gt;
1. 99_myUtils.pm&lt;br /&gt;
&lt;br /&gt;
Für die Bestimmung der Werte für den SVG-Plot wird eine Perl-Funktion benötigt, die in die Datei 99_myUtils.pm vor dem Ende eingefügt wird. Wer diese FHEM-Datei noch nicht nutzt, legt sie einfach an (siehe [[99_myUtils_anlegen]]).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
 &lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# (c) mumpitzstuff 19.12.2018&lt;br /&gt;
#&lt;br /&gt;
# see https://forum.fhem.de/index.php/topic,83097.msg874150.html#msg874150&lt;br /&gt;
#&lt;br /&gt;
sub logProxy_dwd2Plot($$$$;$$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $fcValue, $from, $to, $fcHour, $expMode, $shiftTime) = @_;&lt;br /&gt;
  my $regex;&lt;br /&gt;
  my @rl;&lt;br /&gt;
&lt;br /&gt;
  return undef if(!$device);&lt;br /&gt;
&lt;br /&gt;
  if ($fcValue =~ s/_$//)&lt;br /&gt;
  {&lt;br /&gt;
    $regex = &amp;quot;^fc[\\d]+_[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $fcHour = 12 if(!defined($fcHour));&lt;br /&gt;
  $expMode = &amp;quot;point&amp;quot; if(!defined($expMode));&lt;br /&gt;
  #Log3 undef,2, &amp;quot;Regex: &amp;quot;.$regex;&lt;br /&gt;
&lt;br /&gt;
  # ermitteln aller relevanten Readings&lt;br /&gt;
  if ( defined($defs{$device}) )&lt;br /&gt;
  {&lt;br /&gt;
    if ( $defs{$device}{TYPE} eq &amp;quot;DWD_OpenData&amp;quot; )&lt;br /&gt;
    {&lt;br /&gt;
      @rl = sort&lt;br /&gt;
      {&lt;br /&gt;
        my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
        my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
        my ($ao) = ($a =~ m/fc\d+_(\d+).*/);&lt;br /&gt;
        my ($bo) = ($b =~ m/fc\d+_(\d+).*/);&lt;br /&gt;
        $an &amp;lt;=&amp;gt; $bn or $ao &amp;lt;=&amp;gt; $bo or $a cmp $b;&lt;br /&gt;
      } ( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
      return undef if ( !@rl );&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      Log3 undef, 2, &amp;quot;logProxy_dwd2Plot: $device is not a DWD_OpenData device&amp;quot;;&lt;br /&gt;
      return undef;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
  my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
  my $sec = $fromsec;&lt;br /&gt;
  my ($h, $hp, $fcDay, $mday, $mon, $year);&lt;br /&gt;
  my $timestamp;&lt;br /&gt;
&lt;br /&gt;
  my $reading;&lt;br /&gt;
  my $value;&lt;br /&gt;
  my $prev_value;&lt;br /&gt;
  my $min = 999999;&lt;br /&gt;
  my $max = -999999;&lt;br /&gt;
  my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  # while not end of plot range reached&lt;br /&gt;
  while (($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl)&lt;br /&gt;
  {&lt;br /&gt;
    #remember previous value for start of plot range&lt;br /&gt;
    $prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
    $reading = shift @rl;&lt;br /&gt;
    ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
    ($hp) = $reading =~ m/^fc\d+_(\d+).*/;&lt;br /&gt;
    #Log 1, &amp;quot;hp: &amp;quot;.$hp;&lt;br /&gt;
&lt;br /&gt;
    if ($hp)&lt;br /&gt;
    {&lt;br /&gt;
      $h = ReadingsVal($device, &amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_&amp;quot;.$hp.&amp;quot;_time&amp;quot;, $fcHour);&lt;br /&gt;
      if ($h =~ m/^(\d+):\d+/)&lt;br /&gt;
      {&lt;br /&gt;
        $h = $1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      $h = $fcHour;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    $value = ReadingsVal($device, $reading, undef);&lt;br /&gt;
&lt;br /&gt;
    # calculate minutes of sunshine per hour&lt;br /&gt;
    if ($fcValue =~ /^SunD(\d+)/)&lt;br /&gt;
    {&lt;br /&gt;
      if (defined($1))&lt;br /&gt;
      {&lt;br /&gt;
        $value = $value / ($1 * 36);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        $value = $value / (12 * 36);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # calculate amount of rain per hour&lt;br /&gt;
    if ($fcValue =~ /^RR(\d+)c$/)&lt;br /&gt;
    {&lt;br /&gt;
      if (defined($1))&lt;br /&gt;
      {&lt;br /&gt;
        $value /= $1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ($year, $mon, $mday) = split(&#039;\-&#039;,ReadingsVal($device, &amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
    $timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
    $sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
    if (defined($shiftTime))&lt;br /&gt;
    {&lt;br /&gt;
      $sec += $shiftTime;&lt;br /&gt;
      $timestamp = logProxy_shiftTime($timestamp, $shiftTime);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # skip all values before start of plot range&lt;br /&gt;
    next if ( $sec &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
    # add first value at start of plot range&lt;br /&gt;
    if ( !$ret &amp;amp;&amp;amp; $prev_value )&lt;br /&gt;
    {&lt;br /&gt;
      $min = $prev_value if ( $prev_value &amp;lt; $min );&lt;br /&gt;
      $max = $prev_value if ( $prev_value &amp;gt; $max );&lt;br /&gt;
      $ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # done if after end of plot range&lt;br /&gt;
    last if ($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
    $min = $value if ( $value &amp;lt; $min );&lt;br /&gt;
    $max = $value if ( $value &amp;gt; $max );&lt;br /&gt;
&lt;br /&gt;
    # add actual control point&lt;br /&gt;
    $ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    $timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    $_ = SVG_time_to_sec($timestamp);&lt;br /&gt;
    if (defined($shiftTime))&lt;br /&gt;
    {&lt;br /&gt;
      $_ += $shiftTime;&lt;br /&gt;
      $timestamp = logProxy_shiftTime($timestamp, $shiftTime);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ($_ &amp;lt; $tosec)&lt;br /&gt;
    {&lt;br /&gt;
      $ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      $ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  elsif (($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    $value = $prev_value + ($value - $prev_value) * (86400 + ($tosec - $sec)) / 86400;&lt;br /&gt;
    $ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return ($ret, $min, $max, $prev_value);&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. LogProxy&lt;br /&gt;
&lt;br /&gt;
Wer bereits ein [[logProxy]]-Device hat, muss den Namen seines logProxy-Devices in die weiter unter aufgeführte GPlot-Konfiguration eintragen. Ansonsten wird es wie folgt neu erstellt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. FileLog&lt;br /&gt;
&lt;br /&gt;
Das Meteogramm kennt anders als andere FHEM-Plots keine Vergangenheit außer heute. Trotzdem wird aus formalen Gründen ein [[FileLog]]-Device benötigt. Dazu kann ein beliebiges vorhandenes FileLog-Device verwendet werden. Wer will, kann hierfür aber auch ein neues FileLog Device für das DWD_OpenData-Device anlegen (Achtung: wird schnell umfangreich):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_DWD FileLog ./log/DWD-%Y-%m.log DWD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird für das FileLog-Device der Platzhalter &#039;&#039;FileLog_Dummy&#039;&#039; verwendet, der mit dem Namen des gewählten FileLog-Devices zu ersetzen ist.&lt;br /&gt;
&lt;br /&gt;
4. SVG Plot&lt;br /&gt;
&lt;br /&gt;
Das eigentliche Meteogramm ist ein SVG-Device. Will man mehrere Tage darstellen bietet sich die folgende Definition an:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_DWD SVG FileLog_Dummy:SVG_DWD:CURRENT&lt;br /&gt;
attr SVG_DWD fixedoffset 6&lt;br /&gt;
attr SVG_DWD fixedrange 7days&lt;br /&gt;
attr SVG_DWD nrAxis 1,2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei muss das SVG-Attribut &#039;&#039;fixedoffset&#039;&#039; entweder gleich oder kleiner als die Einstellung des DWD_OpenData-Attributs &#039;&#039;forecastDays&#039;&#039; (Standardwert: 6 Tage) gewählt werden und das SVG-Attribut &#039;&#039;fixedrange&#039;&#039; um eins größer als &#039;&#039;fixedoffset&#039;&#039; eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Will man stattdessen nur die nächsten 24 Stunden anzeigen, nimmt man folgende Einstellungen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_DWD SVG FileLog_Dummy:SVG_DWD:CURRENT&lt;br /&gt;
attr SVG_DWD endPlotNow 1&lt;br /&gt;
attr SVG_DWD fixedoffset 1&lt;br /&gt;
attr SVG_FileLog_WETTER_DWD_3 label &amp;quot;Tmin: $data{max1} °C, Tmax: $data{min1} °C&amp;quot;&lt;br /&gt;
attr SVG_DWD nrAxis 1,2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die DWD_OpenData-Readings mit dem Plot zu verknüpfen, muss man nun die GPlot-Konfigurationsdatei des SVG-Plots manuell bearbeiten. Dazu auf den Link klicken, der im SVG_DWD-Device am Internal &#039;&#039;GPLOTFILE&#039;&#039; steht. Die y-Wertebereiche für die Regenmenge und die Temperaturen sind im Beispiel auskommentiert (Autorange). Das kann man so lassen oder man stellt sie nach den eigenen Wetter-Gegebenheiten ein. Je nach Konfiguration des DWD_OpenData-Attributs &#039;&#039;forecastResolution&#039;&#039; sind aber noch einige weitere Einstellungen anzupassen. Das folgende Beispiel ist für die 3h-Auflösung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Wettervorhersage&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid ytics&lt;br /&gt;
set ylabel &amp;quot;Regen [mm]&amp;quot;&lt;br /&gt;
#set yrange [0:4]&lt;br /&gt;
set y2label &amp;quot;Temperatur [°C]&amp;quot;&lt;br /&gt;
#set y2range [-5:35]&lt;br /&gt;
set y3label &amp;quot;Wolken/Regen/Sonne [%]&amp;quot;&lt;br /&gt;
set y3range [0:100]&lt;br /&gt;
&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tx&amp;quot;,$from,$to,18,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tn&amp;quot;,$from,$to,6,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD3_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR3c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R600_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstX:TimeNow(),0,100&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;T&#039; ls l0 lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Tmax&#039; ls l0dot lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Tmin&#039; ls l0dot lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Sonne&#039; ls l4fill lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Regenmenge&#039; ls l2fill lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wind&#039; ls l1 lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Regen&#039; ls l5fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wolken&#039; ls l6fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 notitle ls l5 lw 4 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 notitle ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man dagegen eine Auflösung von 1 Stunde, sind folgende LogProxy-Einträge erforderlich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tx&amp;quot;,$from,$to,18,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tn&amp;quot;,$from,$to,6,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR1c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R101_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-0.5*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstX:TimeNow(),0,100&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Darstellung der nächsten 24 Stunden mit einer Auflösung von 1 Stunde nimmt man folgende GPlot-Konfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics&lt;br /&gt;
set y3tics&lt;br /&gt;
set grid xtics y2tics&lt;br /&gt;
set ylabel &amp;quot;Regen [mm]&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Temperatur [°C]&amp;quot;&lt;br /&gt;
set y3label &amp;quot;Wolken/Regen/Sonne [%]&amp;quot;&lt;br /&gt;
set y3range [0:100]&lt;br /&gt;
&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR1c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R101_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-0.5*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;T&#039; ls l0 lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Sonne&#039; ls l4fill lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Regenmenge&#039; ls l2fill lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wind&#039; ls l1 lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Regen&#039; ls l5fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wolken&#039; ls l6fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 notitle ls l2 lw 2 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nachdem, welche Auflösung man verwendet, werden unterschiedliche Readings des DWD_OpenData-Devices benötigt. Diese sind in den LogProxy-Zeilen in der GPlot-Konfigurationsdatei zu finden und müssen auf jeden Fall dem Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Device hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Viele Detaileinstellungen des Meteogramms lassen sich individualisieren. Man kann z.B. mehr oder weniger Daten anzeigen und zumindest für &#039;&#039;heute&#039;&#039; auch aktuelle Messwerte hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für ein Meteogramm über 4 Tage mit 3 Stunden Auflösung:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODmeteogram4d3h.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen mit [[FHEMWEB]] steht das Modul [https://raw.githubusercontent.com/jnsbyr/fhem/master/FHEM/99_DWD_OpenData_Weblink.pm 99_DWD_OpenData_Weblink.pm] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Moduldatei herunterladen und in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren. Entweder die Datei direkt auf den FHEM-Server herunterladen (z.B. mit &#039;&#039;wget&#039;&#039;) oder beim indirekten Herunterladen darauf achten, dass dabei das Encoding nicht verändert wird (also z.B. bei WinSCP den Binär-Modus und nicht den Text-Modus verwenden). Ansonsten werden später z.B. Sonderzeichen wie &#039;&#039;°C&#039;&#039; falsch angezeigt. &lt;br /&gt;
&lt;br /&gt;
Anschließend kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD_Weblink_Generator DWD_OpenData_Weblink&lt;br /&gt;
 attr DWD_Weblink_Generator IODev DWD&lt;br /&gt;
 attr DWD_Weblink_Generator forecastDays 4&lt;br /&gt;
 # refreshRate nur dann setzten, wenn der Browser Java-Script beherrscht:&lt;br /&gt;
 attr DWD_Weblink_Generator refreshRate 900&lt;br /&gt;
 &lt;br /&gt;
 define DWD_Weblink weblink htmlCode { DWD_OpenData_Weblink::AsHtmlH(&amp;quot;DWD_Weblink_Generator&amp;quot;) } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit legt man das Weblink-Generator-Device an und verknüpft es mit dem DWD_OpenData-Device. Außerdem wird der [[weblink ]] selbst angelegt, der seinerseits mit dem Weblink-Generator-Device verknüpft wird. Der Weblink benötigt für seine Funktion eine bestimmte Auswahl der Vorhersage-Merkmale. Wer das Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Moduls anpassen will, muss diese Merkmale auf jeden Fall mit berücksichtigen. &lt;br /&gt;
&lt;br /&gt;
Wenn vom Weblink nichts im Browser zu sehen ist, kann das daran liegen, dass der Browser kein aktuelles JavaScript verwendet oder JavaScript deaktiviert ist. Dann sollte das Attribut &#039;&#039;refreshRate&#039;&#039; auf 0 Sekunden eingestellt oder gelöscht werden. Mit aktiviertem Refresh werden die Daten auch ohne Seitenneuaufbau regelmäßig und bei Tab-Wechsel aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Liste der erforderlichen Vorhersage-Merkmale finden sich zusammen mit allen weiteren Details zur Installation und Konfiguration in der Modulhilfe von &#039;&#039;99_DWD_OpenData_Weblink.pm&#039;&#039;, die man z.B. nach dem Anlegen des Weblink-Generator-Devices über die Weboberfläche abrufen kann.&lt;br /&gt;
&lt;br /&gt;
Hier ein Ausschnitt aus der Darstellung des Weblinks mit [[FHEMWEB]]:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODweblink.png|500px]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Arduino_Firmata&amp;diff=34120</id>
		<title>Arduino Firmata</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Arduino_Firmata&amp;diff=34120"/>
		<updated>2020-10-25T19:28:02Z</updated>

		<summary type="html">&lt;p&gt;JensB: Umstellung von Device::Firmata von FHEM auf CPAN, Liste der FRM-Client-Module vervollständigt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hinweis|Device::Firmata Updates: Bis Oktober 2020 wurde eine Kopie des Perl-Moduls &#039;&#039;Device::Firmata&#039;&#039; als Teil von FHEM zur Verfügung gestellt, zuletzt die Version 0.64 aus 05/2018. In neueren Installation von FHEM ist das Modul nicht mehr enthalten. Die aktuelle Version des Moduls gibt es über [[#CPAN|CPAN]]. Bei bestehenden Installationen sollte die vorhandene Kopie des Moduls gelöscht und auf die aktuelle Version umgestellt werden (siehe Punkt 1 dieses {{Link2Forum|Topic=114552|Message=1087982|Linktext=Beitrag}}s im Forum).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Schnittstelle für Firmata-Devices (USB, LAN, WiFi)&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=FRM&lt;br /&gt;
|ModForumArea=Sonstige Systeme&lt;br /&gt;
|ModTechName=10_FRM.pm&lt;br /&gt;
|ModOwner=JensB ({{Link2FU|14024|Forum}}/[[Benutzer Diskussion:JensB|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Firmata-Devices ==&lt;br /&gt;
&lt;br /&gt;
Für Arduinos (und diverse kompatible Boards) gibt es eine Standardimplementierung des Kommunikationsprotokolls &#039;&#039;Firmata&#039;&#039; [https://github.com/firmata/protocol]. Mit Hilfe des Perl-Moduls &#039;&#039;Device::Firmata&#039;&#039;, auch bekannt als perl-firmata [https://github.com/ntruchsess/perl-firmata], kann das Firmata-Protokoll in Perl genutzt werden und mit dem Modul [[#FRM|FRM]] auch in FHEM.&lt;br /&gt;
&lt;br /&gt;
Für die Kommunikation zwischen FHEM (Master) und Firmata-Device (Slave) stehen mehrere Schnittstellen zur Auswahl: RS-232, USB, Ethernet und WiFi. Insbesondere Ethernet und WiFi erlauben die Integration dezentraler IO-Periperie mit FHEM.&lt;br /&gt;
&lt;br /&gt;
Firmata möglich es, mit nur geringen Arduino-Kenntnissen digitale und analoge Signale aus eigenen Schaltungen in FHEM zu verarbeiten. Dabei können Signale sowohl eingelesen als auch ausgegeben werden. Ein Verständnis der Bedienung der Arduino-IDE und elektronische Kenntnisse zum Anschluss von Sensoren und Aktoren sind natürlich erforderlich.&lt;br /&gt;
&lt;br /&gt;
=== Arduino IDE ===&lt;br /&gt;
&lt;br /&gt;
Zur Installation von Firmware auf dem Firmata-Device wird natürlich erst mal die Arduino-IDE (Version 1.8 oder höher) benötigt [https://www.arduino.cc/en/main/software]. Die gibt es für die Betriebssysteme Windows, Mac OS X und Linux.&lt;br /&gt;
&lt;br /&gt;
Über die Bibliotheksverwaltung der Arduino-IDE (Menü &#039;Sketch&#039;-&amp;amp;gt;&#039;Bibliothek einbinden&#039;-&amp;amp;gt;&#039;Bibliotheken verwalten...&#039;) stehen verschiedene Firmware-Versionen von Firmata zur Auswahl. Im folgenden wird auf die Version &amp;quot;Firmata by Firmata Developers&amp;quot; und &amp;quot;ConfigurableFirmata by Firmata Developers&amp;quot; eingegangen. Diese beiden Versionen unterscheiden sich in den unterstützten Hardware-Funktionen:&lt;br /&gt;
&lt;br /&gt;
* Firmata: digitale und analoge I/Os, Servos, I2C&lt;br /&gt;
* ConfigurableFirmata: zusätzlich 1-Wire und Schrittmotoren&lt;br /&gt;
&lt;br /&gt;
Bei ConfigurableFirmata ist es auch außerdem einfacher, nicht benötigte Funktionen zu deaktivieren, damit die Firmware möglichst wenig Speicher belegt. Wenn man den zusätzlichen Funktionsumfang von ConfigurableFirmata nicht benötigt, kann man mit etwas Geschick durch Auskommentieren von nicht benötigtem Code aus Firmata z.T. ein noch kompakteres Ergebnis erzielen (das ist aber nur etwas für Fortgeschrittene).&lt;br /&gt;
&lt;br /&gt;
Bei Firmata ist zwischen der Firmata-Protokoll-Version (z.B. 2.6.0) und der Version der jeweiligen Firmware (Firmata: z.B. 2.5.7, ConfigurableFirmata: z.B. 2.10.0) zu unterscheiden, die insbesondere bei ConfigurableFirmata voneinander unabhängig sind.&lt;br /&gt;
&lt;br /&gt;
Nach Installation der gewünschten Firmata-Firmware wählt man eines der funktionsfertigen Beispiele über das Arduino-IDE Menü &#039;Datei&#039;-&amp;amp;gt;&#039;Beispiele&#039;-&amp;amp;gt;&#039;Firmata&#039; bzw. &#039;Datei&#039;-&amp;amp;gt;&#039;Beispiele&#039;-&amp;amp;gt;&#039;ConfigurableFirmata&#039; aus. Je nach ausgewähltem Beispielprojekt sind noch Anpassungen direkt im Sketch oder in einer zusätzlichen Konfigurationsdatei erforderlich (z.B. um für Ethernet- und WiFi-Schnittstellen die Netzwerkparameter einzustellen).&lt;br /&gt;
&lt;br /&gt;
Über das Arduino-IDE Menü &#039;Werkzeuge&#039;-&amp;amp;gt;&#039;Bords&#039; wählt man das Board aus, das dem eigenen Firmata-Device entspricht. Fehlt das Board in der Auswahl, kann die erforderliche Unterstützung oft über das Menü &#039;Werkzeuge&#039;-&amp;amp;gt;&#039;Bords&#039;-&amp;amp;gt;&#039;Boardverwalter...&#039; nachinstalliert werden. Ansonsten hilft ein Blick auf die Hersteller-Webseiten des Boards.&lt;br /&gt;
&lt;br /&gt;
Ist das Firmata-Device korrekt angeschlossen, drückt man den &#039;Upload&#039;-Knopf (der mit dem Rechspfeil oben links), um den Arduino-Sketch zu kompilieren und auf das Board hochzuladen. Die Vorgehensweise zum Hochladen ist sehr stark davon abhängig, welches Board man verwendet und mit welcher Technik es angeschlossen ist. Bitte die jeweiligen Angaben des Board-Herstellers beachten.&lt;br /&gt;
&lt;br /&gt;
Wer zum ersten mal mit der Arduino-IDE arbeitet, sollte statt Firmata zunächst das Standard Arduino Beispielprojekt &#039;Blink&#039; auswählen und es auf dem Firmata-Device installieren. Sobald das klappt, kann man mit Firmata weiter machen.&lt;br /&gt;
&lt;br /&gt;
=== Firmata mit Ethernet oder WiFi ===&lt;br /&gt;
&lt;br /&gt;
Vor dem Kompilieren muss man unbedingt die Netzwerkparameter anpassen, d.h. die IP-Adresse des FHEM-Servers und den Port des FRM-Moduls eintragen (ggf. auch eine neue eindeutige MAC-Adresse), bei WiFi auch die SSID und den PSK. In älteren Firmata-Versionen und bei ConfigurableFirmata geschieht das direkt im Sketch. Aktuelle Firmata-Versionen haben dazu eine getrennte Konfigurationsdatei (ethernetConfig.h bzw. wifiConfig.h), so dass keine Änderungen am Sketch erforderlich sind.&lt;br /&gt;
&lt;br /&gt;
Falls der Speicherbedarf der kompilierten Firmware die Möglichkeiten des Boards übersteigt (insbesondere bei Verwendung eines ENC28J60-Ethernet-Shields [https://github.com/ntruchsess/arduino_uip] in Kombination mit einem &amp;quot;kleinen&amp;quot; Arduiono wie den Uno oder Nano) kann man bei Verwendung von ConfigurableFirmata nicht benötigten Features im Sketch auskommentieren. Wenn der Speicherbedarf nur &amp;quot;knapp&amp;quot; ausreicht, läuft die Firmware u.U. trotzdem nicht zuverlässig.&lt;br /&gt;
&lt;br /&gt;
Als ersten Funktionstest für die Netzwerkverbindung empfiehlt sich ein Ping von FHEM zum Firmata-Device.&lt;br /&gt;
&lt;br /&gt;
=== Sonderfälle ===&lt;br /&gt;
&lt;br /&gt;
Je nach verwendetem Board sind u.U. individuelle Besonderheiten zu berücksichtigen. Hier ein paar Beispiele:&lt;br /&gt;
&lt;br /&gt;
Ein MEGA256 z.B. benutzt einen anderen Pin als SS (Slave select) zur Kommunikation mit dem Ethernetmodul. Man muss der Firmata im Setup mitteilen, welche Pins zu ignorieren sind, damit es keine Wechselwirkungen zwischen Firmata und Ethernet Library gibt. Das ist im ConfigurableFirmata-Sketch [https://github.com/firmata/arduino/blob/configurable/examples/ConfigurableFirmata/ConfigurableFirmata.ino] vorbereitet und muss (wenn man etwas anderes als ein Standard-Ethernetshield am Uno verwendet) geeignet angepasst werden (Beim Mega muss man z.B. den Pin 10 ignorieren und Pin 53 als hardcodiert auf Output stellen). Das gleiche gilt, wenn man eine andere Hardware (z.B. mit ENC28J60 anstelle des WizNet W5100 des Ethernetshields) benutzen möchte, die einen anderen Pin als CS/SS benutzt.&lt;br /&gt;
&lt;br /&gt;
== FHEM FRM-Device ==&lt;br /&gt;
&lt;br /&gt;
Bei FHEM stellt ein FRM-Device (Modul 10_FRM.pm) für die FRM-Client-Devices die Schnittstelle (das IODev) zum Firmata-Device zur Verfügung. Jeder FRM-Client erlaubt die Konfiguration eines oder mehrerer Pins eines Firmata-Devices z.B. als analoger Eingang, digitaler Ausang oder I2C-Bus. Es können so viele FRM-Clients für ein FRM-Device definiert werden, bis alle Pins zugeordnet sind. Dabei muss man darauf achten, dass nicht alle Pins alle Ein-/Ausgabemöglichkeiten besitzen. Konfiguriert man einen Pin für einen nicht unterstützen Modus so gibt es bei aktuellen Firmata-Versionen eine Fehlermeldung. Ältere Versionen (vor 2.3) schlucken Fehlkonfigurationen aber der betreffende Pin funktioniert dann nicht.&lt;br /&gt;
&lt;br /&gt;
Vor dem Anlegen des FRM-Devices muss das Perl-Modul &#039;&#039;Device::Firmata&#039;&#039; installiert werden. Dies kann abhänig von den vorhandenen Voraussetzung und Vorlieben auf unterschiedliche Weise erfolgen, Details zur Installation und zum Update von Perl-Modulen finden sich im [[#CPAN|Artikel über CPAN]]. Eine mögliche Installationsvariante auf einem Raspberry Pi ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  sudo cpan install Device::Firmata&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Beispiele für das Anlegen eines FRM-Devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;# definiere FRM mit USB-Schnittstelle /dev/ttyUSB0, Baudrate 57600 ist Default für StandardFirmata&lt;br /&gt;
  define FIRMATA FRM /dev/ttyUSB0@57600&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;# definiere FRM mit TCP/IP-Schnittstelle auf Port 3030&lt;br /&gt;
  define FIRMATA FRM 3030 global&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FRM öffnet bei Netzwerkverbindungen FHEM-seitig einen Serverport (dieser wird in der define-Zeile angegeben). &#039;global&#039; muss zusätzlich angegeben werden, damit der Serversocket an alle IP-Adressen gebunden wird. Ohne &#039;global&#039; sind nur Verbindungen für &#039;localhost&#039; möglich. Das Firmata-Device verbindet sich aktiv zu diesem Port, sonst gilt im Prinzip alles was auch für den über USB angebunden Firmata-Device gilt.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;# für alle analogen Eingangs-Pins&lt;br /&gt;
  attr FIRMATA sampling-interval 1000 # [ms] - maximal 16384 setzbar&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM}} FRM&lt;br /&gt;
&lt;br /&gt;
Hat man mehrere FRM-Devices definiert, muss man nach dem Anlegen eines FRM-Client-Devices dessen Attribut &#039;&#039;IODev&#039;&#039; überprüfen und ggf. ändern, wenn das gewünschte FRM-Device nicht automatisch erkannt wurde.&lt;br /&gt;
&lt;br /&gt;
Es folgt eine Auflistung der generischen FRM-Client-Devices. Darüber hinaus gibe es noch mehrere spezialisierte FRM-Client-Devices, vor allem für I2C-Bus-Devices (siehe {{Link2CmdRef}}):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 20_FRM_IN.pm ===&lt;br /&gt;
&lt;br /&gt;
Macht einen Pin als digitalen Eingang nutzbar.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;define Firmata_IN FRM_IN 12 # definiert Pin 12 als digitalen Eingang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_IN}} FRM_IN&lt;br /&gt;
&lt;br /&gt;
=== 20_FRM_OUT.pm ===&lt;br /&gt;
&lt;br /&gt;
Macht einen Pin als digitalen Ausgang nutzbar.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;define Firmata_OUT FRM_OUT 11 # definiert Pin 11 als digitalen Ausgang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_OUT}} FRM_OUT&lt;br /&gt;
&lt;br /&gt;
=== 20_FRM_AD.pm ===&lt;br /&gt;
&lt;br /&gt;
Macht einen Pin als analogen Eingang nutzbar.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;define Firmata_ANALOG FRM_AD 17 # definiert Pin 17 als analogen Eingang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_AD}} FRM_AD&lt;br /&gt;
&lt;br /&gt;
=== 20_FRM_PWM.pm ===&lt;br /&gt;
&lt;br /&gt;
Macht einen Pin als analogen Ausgang nutzbar. Es wird ein pulsweitenmoduliertes Signal ausgegeben.&lt;br /&gt;
&lt;br /&gt;
  define Firmata_ANALOG FRM_PWM 10 # definiert Pin 10 als PWM-Ausgang&lt;br /&gt;
&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_PWM}} FRM_PWM&lt;br /&gt;
&lt;br /&gt;
=== 20_FRM_SERVO.pm ===&lt;br /&gt;
&lt;br /&gt;
Erlaubt die Ansteuerung eines analogen Modelbauservos über einen Pin per PWM.&lt;br /&gt;
&lt;br /&gt;
  define Firmata_ANALOG FRM_SERVO 9 # definiert Pin 9 als Servo-Ausgang&lt;br /&gt;
&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_SERVO}} FRM_SERVO&lt;br /&gt;
&lt;br /&gt;
=== 20_FRM_I2C.pm ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Erlaubt das Lesen und Schreiben über den I2C-Bus am Firmata-Device.&amp;lt;/p&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_I2C}}FRM_I2C&lt;br /&gt;
&lt;br /&gt;
=== 20_FRM_RGB.pm ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Erlaubt das Ansteuern eines RGB-LED-Controller per PWM.&amp;lt;/p&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_RGB}}FRM_RGB&lt;br /&gt;
&lt;br /&gt;
=== 20_FRM_ROTENC.pm ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Erlaubt das Auswerten eines Drehgebers.&amp;lt;/p&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_ROTENC}}FRM_ROTENC&lt;br /&gt;
&lt;br /&gt;
=== 20_FRM_STEPPER.pm ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Erlaubt das Ansteuern eines Schrittmotors.&amp;lt;/p&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_STEPPER}}FRM_STEPPER&lt;br /&gt;
&lt;br /&gt;
=== OneWire-Firmata ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Der Artikel [[Arduino mit OneWireFirmata]] beschreibt, wie man am Firmata-Device angeschlossene 1-Wire Devices in FHEM einzubindet.&amp;lt;/p&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=OWX}} OWX&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other_Components]]&lt;br /&gt;
[[Kategorie:Arduino]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Arduino_Firmata&amp;diff=33146</id>
		<title>Arduino Firmata</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Arduino_Firmata&amp;diff=33146"/>
		<updated>2020-05-03T08:53:36Z</updated>

		<summary type="html">&lt;p&gt;JensB: Beschreibung von FRM_PWM und FRM_SERVO korrigiert.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Arduino mit Firmata ==&lt;br /&gt;
Für Arduinos (und diverse Arduino kompatible Boards) gibt es eine Standardimplementierung des Kommunikationsprotokolls &#039;&#039;Firmata&#039;&#039; [https://github.com/firmata/protocol]. Mit Hilfe des Perl-Moduls &#039;&#039;Device::Firmata&#039;&#039;, auch bekannt als perl-firmata [https://github.com/ntruchsess/perl-firmata], kann das Firmata-Protokoll in Perl genutzt werden und mit dem Modul [[#FRM|FRM]] auch in FHEM.&lt;br /&gt;
&lt;br /&gt;
Für die Kommunikation zwischen FHEM (Master) und Arduino (Slave) stehen mehrere Schnittstellen zur Auswahl: RS-232, USB, Ethernet und WiFi. Insbesondere Ethernet und WiFi erlauben die Integration dezentraler IO-Periperie mit FHEM.&lt;br /&gt;
&lt;br /&gt;
Firmata möglich es, mit nur geringen Arduino-Kenntnissen digitale und analoge Signale aus eigenen Schaltungen in FHEM zu verarbeiten. Dabei können Signale sowohl eingelesen als auch ausgegeben werden. Ein Verständnis der Bedienung der Arduino-IDE und elektronische Kenntnisse zum Anschluss von Sensoren und Aktoren sind natürlich erforderlich.&lt;br /&gt;
&lt;br /&gt;
=== Arduino IDE ===&lt;br /&gt;
Zur Installation von Firmware auf den Arduino wird natürlich erst mal die Arduino-IDE (Version 1.8 oder höher) benötigt [https://www.arduino.cc/en/main/software]. Die gibt es für die Betriebssysteme Windows, Mac OS X und Linux.&lt;br /&gt;
&lt;br /&gt;
Über die Bibliotheksverwaltung der Arduino-IDE (Menü &#039;Sketch&#039;-&amp;amp;gt;&#039;Bibliothek einbinden&#039;-&amp;amp;gt;&#039;Bibliotheken verwalten...&#039;) stehen verschiedene Firmware-Versionen von Firmata zur Auswahl. Im folgenden wird auf die Version &amp;quot;Firmata by Firmata Developers&amp;quot; und &amp;quot;ConfigurableFirmata by Firmata Developers&amp;quot; eingegangen. Diese beiden Versionen unterscheiden sich in den unterstützten Hardware-Funktionen:&lt;br /&gt;
&lt;br /&gt;
* Firmata: digitale und analoge I/Os, Servos, I2C&lt;br /&gt;
* ConfigurableFirmata: zusätzlich 1-Wire und Schrittmotoren&lt;br /&gt;
&lt;br /&gt;
Bei ConfigurableFirmata ist es auch außerdem einfacher, nicht benötigte Funktionen zu deaktivieren, damit die Arduino-Firmware möglichst wenig Speicher belegt. Wenn man den zusätzlichen Funktionsumfang von ConfigurableFirmata nicht benötigt, kann man mit etwas Geschick durch Auskommentieren von nicht benötigtem Code aus Firmata z.T. ein noch kompakteres Ergebnis erzielen (das ist aber nur etwas für Fortgeschrittene).&lt;br /&gt;
&lt;br /&gt;
Bei Firmata ist zwischen der Firmata-Protokoll-Version (aktuell 2.6.0) und der Version der jeweiligen Firmware (Firmata: aktuell 2.5.7, ConfigurableFirmata: aktuell 2.10.0) zu unterscheiden, die insbesondere bei ConfigurableFirmata voneinander unabhängig sind.&lt;br /&gt;
&lt;br /&gt;
Nach Installation der gewünschten Firmata-Firmware wählt man eines der funktionsfertigen Beispiele über das Arduino-IDE Menü &#039;Datei&#039;-&amp;amp;gt;&#039;Beispiele&#039;-&amp;amp;gt;&#039;Firmata&#039; bzw. &#039;Datei&#039;-&amp;amp;gt;&#039;Beispiele&#039;-&amp;amp;gt;&#039;ConfigurableFirmata&#039; aus. Je nach ausgewähltem Beispielprojekt sind noch Anpassungen direkt im Sketch oder in einer zusätzlichen Konfigurationsdatei erforderlich (z.B. um für Ethernet- und WiFi-Schnittstellen die Netzwerkparameter einzustellen).&lt;br /&gt;
&lt;br /&gt;
Über das Arduino-IDE Menü &#039;Werkzeuge&#039;-&amp;amp;gt;&#039;Bords&#039; wählt man das Board aus, das dem eigenen Arduino entspricht. Fehlt das Board in der Auswahl, kann die erforderliche Unterstützung oft über das Menü &#039;Werkzeuge&#039;-&amp;amp;gt;&#039;Bords&#039;-&amp;amp;gt;&#039;Boardverwalter...&#039; nachinstalliert werden. Ansonsten hilft ein Blick auf die Hersteller-Webseiten des Boards.&lt;br /&gt;
&lt;br /&gt;
Ist der Arduino korrekt angeschlossen, drückt man den &#039;Upload&#039;-Knopf (der mit dem Rechspfeil oben links), um den Arduino-Sketch zu kompilieren und auf das Board hochzuladen. Die Vorgehensweise zum Hochladen ist sehr stark davon abhängig, welches Board man verwendet und mit welcher Technik es angeschlossen ist. Bitte die jeweiligen Angaben des Board-Herstellers beachten.&lt;br /&gt;
&lt;br /&gt;
Wer zum ersten mal mit der Arduino-IDE arbeitet, sollte statt Firmata zunächst das Standard Arduino Beispielprojekt &#039;Blink&#039; auswählen und es auf dem Arduino installieren. Sobald das klappt, kann man mit Firmata weiter machen.&lt;br /&gt;
&lt;br /&gt;
=== Firmata mit Ethernet oder WiFi ===&lt;br /&gt;
&lt;br /&gt;
Vor dem Kompilieren muss man unbedingt die Netzwerkparameter anpassen, d.h. die IP-Adresse des FHEM-Servers und den Port des FRM-Moduls eintragen (ggf. auch eine neue eindeutige MAC-Adresse), bei WiFi auch die SSID und den PSK. In älteren Firmata-Versionen und bei ConfigurableFirmata geschieht das direkt im Sketch. Aktuelle Firmata-Versionen haben dazu eine getrennte Konfigurationsdatei (ethernetConfig.h bzw. wifiConfig.h), so dass keine Änderungen am Sketch erforderlich sind.&lt;br /&gt;
&lt;br /&gt;
Falls der Speicherbedarf der kompilierten Arduino-Firmware die Möglichkeiten des Boards übersteigt (insbesondere bei Verwendung eines ENC28J60-Ethernet-Shields [https://github.com/ntruchsess/arduino_uip] in Kombination mit einem &amp;quot;kleinen&amp;quot; Arduiono wie den Uno oder Nano) kann man bei Verwendung von ConfigurableFirmata nicht benötigten Features im Sketch auskommentieren. Wenn der Speicherbedarf nur &amp;quot;knapp&amp;quot; ausreicht, läuft die Firmware u.U. trotzdem nicht zuverlässig.&lt;br /&gt;
&lt;br /&gt;
Als ersten Funktionstest für die Netzwerkverbindung empfiehlt sich ein Ping von FHEM zum Arduino.&lt;br /&gt;
&lt;br /&gt;
=== Sonderfälle ===&lt;br /&gt;
&lt;br /&gt;
Je nach verwendetem Board sind u.U. individuelle Besonderheiten zu berücksichtigen. Hier ein paar Beispiele:&lt;br /&gt;
&lt;br /&gt;
Ein MEGA256 z.B. benutzt einen anderen Pin als SS (Slave select) zur Kommunikation mit dem Ethernetmodul. Man muss der Firmata im Setup mitteilen, welche Pins zu ignorieren sind, damit es keine Wechselwirkungen zwischen Firmata und Ethernet Library gibt. Das ist im ConfigurableFirmata-Sketch [https://github.com/firmata/arduino/blob/configurable/examples/ConfigurableFirmata/ConfigurableFirmata.ino] vorbereitet und muss (wenn man etwas anderes als ein Standard-Ethernetshield am Uno verwendet) geeignet angepasst werden (Beim Mega muss man z.B. den Pin 10 ignorieren und Pin 53 als hardcodiert auf Output stellen). Das gleiche gilt, wenn man eine andere Hardware (z.B. mit ENC28J60 anstelle des WizNet W5100 des Ethernetshields) benutzen möchte, die einen anderen Pin als CS/SS benutzt.&lt;br /&gt;
&lt;br /&gt;
== FRM ==&lt;br /&gt;
Der Arduino wird in FHEM über das Modul 10_FRM.pm angesprochen. 10_FRM ist für andere FHEM-Module die Schnittstelle (das IODev) zum Arduino. Es lassen sich jeweils so viele Ein/Ausgabe Devices pro Arduino konfigurieren, wie dieser physikalisch besitzt (natürlich muss man darauf achten, dass nicht alle Arduino-Pins alle Ein-/Ausgabemöglichkeiten besitzen). Konfiguriert man einen Pin für einen nicht unterstützen Modus so gibt es mit der aktuellen Firmata-Version direkt einen Fehler - ältere Versionen (vor 2.3) schlucken Fehlkonfigurationen einfach so, der betreffende Pin funktioniert dann aber nicht.&lt;br /&gt;
&lt;br /&gt;
Hier ein kurzer Ausschnitt aus der fhem.cfg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# definiere FRM mit USB-Schnittstelle /dev/ttyUSB0, Baudrate 57600 ist Default für StandardFirmata&lt;br /&gt;
 define FIRMATA FRM /dev/ttyUSB0@57600&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# definiere FRM mit TCP/IP-Schnittstelle auf Port 3030&lt;br /&gt;
 define FIRMATA FRM 3030 global&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
FRM macht bei Netzwerkverbindungen FHEM-seitig einen Serverport auf (dieser wird in der define-Zeile angegeben). &#039;global&#039; muss zusätzlich angegeben werden, damit der Serversocket an alle IP-addressen gebunden wird. (Sonst wird nur &#039;localhost&#039; verwendet, was nicht funktionieren würde). Der Arduino verbindet sich aktiv zu diesem Port, sonst gilt im Prinzip alles was auch für den über USB angebunden Arduino gilt.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# für alle analogen Eingangs-Pins&lt;br /&gt;
 attr FIRMATA sampling-interval 1000 # [ms] - maximal 16384 setzbar&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM}} FRM&lt;br /&gt;
=== 20_FRM_IN.pm ===&lt;br /&gt;
Macht einen Arduino-pin als digitalen Eingang nutzbar.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Firmata_IN FRM_IN 12 # definiert Arduino Pin 12 als digitalen Eingang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_IN}} FRM_IN&lt;br /&gt;
=== 20_FRM_OUT.pm ===&lt;br /&gt;
Macht einen Arduino-pin als digitalen Ausgang nutzbar.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Firmata_OUT FRM_OUT 11 # definiert Arduino Pin 11 als digitalen Ausgang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_OUT}} FRM_OUT&lt;br /&gt;
=== 20_FRM_AD.pm ===&lt;br /&gt;
Macht einen Arduino-pin als analogen Eingang nutzbar.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Firmata_ANALOG FRM_AD 17 # definiert Arduino Pin 17 als analogen Eingang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_AD}} FRM_AD&lt;br /&gt;
=== 20_FRM_PWM.pm ===&lt;br /&gt;
Macht einen Arduino-pin als analogen Ausgang nutzbar. Es wird ein pulsweitenmoduliertes Signal ausgegeben.&lt;br /&gt;
 define Firmata_ANALOG FRM_PWM 10 # definiert Arduino Pin 10 als PWM-Ausgang&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_PWM}} FRM_PWM&lt;br /&gt;
=== 20_FRM_SERVO.pm ===&lt;br /&gt;
Erlaubt die Ansteuerung von analogen Modelbauservos (Ansteuerung über PWM) am Arduino.&lt;br /&gt;
 define Firmata_ANALOG FRM_SERVO 9 # definiert Arduino Pin 9 als Servo-Ausgang&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_SERVO}} FRM_SERVO&lt;br /&gt;
=== 20_FRM_I2C.pm ===&lt;br /&gt;
&amp;lt;p&amp;gt;Erlaubt das Auslesen von über I2C angeschlossenen ICs&amp;lt;/p&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_I2C}}FRM_I2C&lt;br /&gt;
=== Arduino mit OneWireFirmata ===&lt;br /&gt;
&amp;lt;p&amp;gt;die Seite [[Arduino mit OneWireFirmata]] beschreibt, wie es möglich ist, mit einer um OneWire erweiterten Version der Standard Firmata an den Arduino angeschlossene 1-Wire Devices in FHEM einzubinden.&amp;lt;/p&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=OWX}} OWX&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other_Components]]&lt;br /&gt;
[[Kategorie:Arduino]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=29985</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=29985"/>
		<updated>2019-03-26T19:04:46Z</updated>

		<summary type="html">&lt;p&gt;JensB: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Versionsänderung: Die Vorhersagedaten wurden Mitte September 2018 von CSV auf KML umgestellt. Diese Umstellung ist inkompatibel: das DWD_OpenData-Modul muss aktualisiert werden, einige Reading-Namen haben sich geändert und der Weblink muss deinstalliert und neu installiert werden (siehe diesen {{Link2Forum|Topic=83097|Message=840270}} im Forum).}}&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB ({{Link2FU|14024|Forum}}/[[Benutzer Diskussion:JensB|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage und die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Dieser Befehl gilt für Debian-basierte Betriebssysteme - für andere Betriebssysteme ist eine analoge Funktion zu verwenden. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Sollte FHEM nach einem Neustart noch immer nicht die gewünschte Sprache verwenden, kann man auf einem System V Linux durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und erneutem Neustart von FHEM die Sprache für FHEM erzwingen. Bei einem Systemd Linux kann man die Einstellungen mit &#039;&#039;systemctl edit --full fhem.service&#039;&#039; bearbeiten. Spätestes jetzt muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Nur für den Weblink erforderlich:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschten Station heraussuchen (Spalte &#039;&#039;id&#039;&#039;). Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen. Den ermittelten Stationscode kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get forecast&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;forecastStation&#039;&#039; hinterlegen. Insgesamt werden vom DWD mehr als 70 Merkmale zur Verfügung gestellt. Eine Auflistung findet sich im Dokument [https://opendata.dwd.de/weather/lib/MetElementDefinition.xml MetElementDefinition]. Nur ein kleiner Teil der Merkmale wird in der Standardeinstellung des Moduls als Reading zur Verfügung gestellt. Wer andere Merkmale benötigt muss sie mit Komma getrennt dem Attribut &#039;&#039;forecastProperties&#039;&#039; zuweisen. Es empfiehlt sich zur Performance-Optimierung sowohl das Attribut &#039;&#039;forecastDays&#039;&#039; als auch das Attribut &#039;&#039;forecastProperties&#039;&#039; auf den tatsächlichen Bedarf einzustellen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warnzellen-ID Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Die Warnzellen-ID kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get alerts&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;alertArea&#039;&#039; hinterlegen. Die Warnzellen-ID ist ab der 2. Stelle identisch mit den ersten Ziffern des amtlichen Gemeindeschlüssels. Man kann z.B. den Namen von Gemeinde oder Landkreis bei den [https://www.statistik-bw.de/Statistik-Portal/gemeindeverz.asp Statistischen Ämtern des Bundes und der Länder] eingeben, den amtlichen Gemeindeschlüssels ermitteln und dann mit vorangestellter 1, 8 oder 9 im Warnzellen-ID Katalog des DWD nach einem Eintrag mit exakter oder weitgehender Übereinstimmung suchen. Wem das zu kompliziert vorkommt, kann bei mehrdeutigen Gemeinde- bzw. Landkreisbezeichnungen auch versuchen auszuprobieren, welche die richtige Wanrzellen-ID ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit automatisch Aktualisierung von Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Performance&lt;br /&gt;
Das DWD_OpenData-Modul ist ein Datenmodul mit relativ vielen Readings. In der Standardkonfiguration wird, wie bei jedem anderen FHEM Modul, bei jeder Änderung jedes Readings ein FHEM internes Ereignis erzeugt, damit andere FHEM Devices auf diese Änderungen reagieren können. Diese Ereignisse sorgen auch dafür, dass man Änderungen in der Weboberfläche sofort angezeigt bekommt, ohne die Webseite neu aufzurufen. Interessiert sich aber kein FHEM Device für die Änderungsbenachrichtung bestimmter Readings, entsteht unnötiger Verarbeitsoverhead, der je nach FHEM Konfiguration und verfügbarer CPU-Leistung auch mehrere Sekunden benötigen kann und in dieser Zeit andere Abläufe blockiert. Um die Performance zu optimieren, empfiehlt es sich,  mit [[event-on-update-reading]] für eine angepasste und dadurch effizientere Verarbeitung sorgen, indem man nur für die Readings Ereignisse zulässt, die man für die Weiterverarbeitung braucht. Der DWD_OpenData_Weblink braucht z.B. gar keine Ereignisse, um zu funktionieren. Hier eine minimalistische Beispielkonfiguration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr DWD event-on-update-reading state,fc_state,a_state&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration des Moduls finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Meteogramms ===&lt;br /&gt;
Um den vorhergesagten Wetterverlauf als Meteogramm in Kurvenfrom mit [[SVG]] darzustellen, kann man wie folgt vorgehen:&lt;br /&gt;
&lt;br /&gt;
1. 99_myUtils.pm&lt;br /&gt;
&lt;br /&gt;
Für die Bestimmung der Werte für den SVG-Plot wird eine Perl-Funktion benötigt, die in die Datei 99_myUtils.pm vor dem Ende eingefügt wird. Wer diese FHEM-Datei noch nicht nutzt, legt sie einfach an (siehe [[99_myUtils_anlegen]]).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
 &lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# (c) mumpitzstuff 19.12.2018&lt;br /&gt;
#&lt;br /&gt;
# see https://forum.fhem.de/index.php/topic,83097.msg874150.html#msg874150&lt;br /&gt;
#&lt;br /&gt;
sub logProxy_dwd2Plot($$$$;$$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $fcValue, $from, $to, $fcHour, $expMode, $shiftTime) = @_;&lt;br /&gt;
  my $regex;&lt;br /&gt;
  my @rl;&lt;br /&gt;
&lt;br /&gt;
  return undef if(!$device);&lt;br /&gt;
&lt;br /&gt;
  if ($fcValue =~ s/_$//)&lt;br /&gt;
  {&lt;br /&gt;
    $regex = &amp;quot;^fc[\\d]+_[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $fcHour = 12 if(!defined($fcHour));&lt;br /&gt;
  $expMode = &amp;quot;point&amp;quot; if(!defined($expMode));&lt;br /&gt;
  #Log3 undef,2, &amp;quot;Regex: &amp;quot;.$regex;&lt;br /&gt;
&lt;br /&gt;
  # ermitteln aller relevanten Readings&lt;br /&gt;
  if ( defined($defs{$device}) )&lt;br /&gt;
  {&lt;br /&gt;
    if ( $defs{$device}{TYPE} eq &amp;quot;DWD_OpenData&amp;quot; )&lt;br /&gt;
    {&lt;br /&gt;
      @rl = sort&lt;br /&gt;
      {&lt;br /&gt;
        my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
        my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
        my ($ao) = ($a =~ m/fc\d+_(\d+).*/);&lt;br /&gt;
        my ($bo) = ($b =~ m/fc\d+_(\d+).*/);&lt;br /&gt;
        $an &amp;lt;=&amp;gt; $bn or $ao &amp;lt;=&amp;gt; $bo or $a cmp $b;&lt;br /&gt;
      } ( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
      return undef if ( !@rl );&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      Log3 undef, 2, &amp;quot;logProxy_dwd2Plot: $device is not a DWD_OpenData device&amp;quot;;&lt;br /&gt;
      return undef;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
  my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
  my $sec = $fromsec;&lt;br /&gt;
  my ($h, $hp, $fcDay, $mday, $mon, $year);&lt;br /&gt;
  my $timestamp;&lt;br /&gt;
&lt;br /&gt;
  my $reading;&lt;br /&gt;
  my $value;&lt;br /&gt;
  my $prev_value;&lt;br /&gt;
  my $min = 999999;&lt;br /&gt;
  my $max = -999999;&lt;br /&gt;
  my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  # while not end of plot range reached&lt;br /&gt;
  while (($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl)&lt;br /&gt;
  {&lt;br /&gt;
    #remember previous value for start of plot range&lt;br /&gt;
    $prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
    $reading = shift @rl;&lt;br /&gt;
    ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
    ($hp) = $reading =~ m/^fc\d+_(\d+).*/;&lt;br /&gt;
    #Log 1, &amp;quot;hp: &amp;quot;.$hp;&lt;br /&gt;
&lt;br /&gt;
    if ($hp)&lt;br /&gt;
    {&lt;br /&gt;
      $h = ReadingsVal($device, &amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_&amp;quot;.$hp.&amp;quot;_time&amp;quot;, $fcHour);&lt;br /&gt;
      if ($h =~ m/^(\d+):\d+/)&lt;br /&gt;
      {&lt;br /&gt;
        $h = $1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      $h = $fcHour;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    $value = ReadingsVal($device, $reading, undef);&lt;br /&gt;
&lt;br /&gt;
    # calculate minutes of sunshine per hour&lt;br /&gt;
    if ($fcValue =~ /^SunD(\d+)/)&lt;br /&gt;
    {&lt;br /&gt;
      if (defined($1))&lt;br /&gt;
      {&lt;br /&gt;
        $value = $value / ($1 * 36);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        $value = $value / (12 * 36);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # calculate amount of rain per hour&lt;br /&gt;
    if ($fcValue =~ /^RR(\d+)c$/)&lt;br /&gt;
    {&lt;br /&gt;
      if (defined($1))&lt;br /&gt;
      {&lt;br /&gt;
        $value /= $1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ($year, $mon, $mday) = split(&#039;\-&#039;,ReadingsVal($device, &amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
    $timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
    $sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
    if (defined($shiftTime))&lt;br /&gt;
    {&lt;br /&gt;
      $sec += $shiftTime;&lt;br /&gt;
      $timestamp = logProxy_shiftTime($timestamp, $shiftTime);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # skip all values before start of plot range&lt;br /&gt;
    next if ( $sec &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
    # add first value at start of plot range&lt;br /&gt;
    if ( !$ret &amp;amp;&amp;amp; $prev_value )&lt;br /&gt;
    {&lt;br /&gt;
      $min = $prev_value if ( $prev_value &amp;lt; $min );&lt;br /&gt;
      $max = $prev_value if ( $prev_value &amp;gt; $max );&lt;br /&gt;
      $ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # done if after end of plot range&lt;br /&gt;
    last if ($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
    $min = $value if ( $value &amp;lt; $min );&lt;br /&gt;
    $max = $value if ( $value &amp;gt; $max );&lt;br /&gt;
&lt;br /&gt;
    # add actual control point&lt;br /&gt;
    $ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    $timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    $_ = SVG_time_to_sec($timestamp);&lt;br /&gt;
    if (defined($shiftTime))&lt;br /&gt;
    {&lt;br /&gt;
      $_ += $shiftTime;&lt;br /&gt;
      $timestamp = logProxy_shiftTime($timestamp, $shiftTime);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ($_ &amp;lt; $tosec)&lt;br /&gt;
    {&lt;br /&gt;
      $ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      $ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  elsif (($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    $value = $prev_value + ($value - $prev_value) * (86400 + ($tosec - $sec)) / 86400;&lt;br /&gt;
    $ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return ($ret, $min, $max, $prev_value);&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. LogProxy&lt;br /&gt;
&lt;br /&gt;
Wer bereits ein [[logProxy]]-Device hat, muss den Namen seines logProxy-Devices in die weiter unter aufgeführte GPlot-Konfiguration eintragen. Ansonsten wird es wie folgt neu erstellt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. FileLog&lt;br /&gt;
&lt;br /&gt;
Das Meteogramm kennt anders als andere FHEM-Plots keine Vergangenheit außer heute. Trotzdem wird aus formalen Gründen eine [[FileLog]]-Device benötigt. Dazu kann ein beliebiges vorhandenes FileLog-Device verwendet werden. Wer will, kann hierfür aber auch ein neues FileLog Device für das DWD_OpenData-Device anlegen (Achtung: wird schnell umfangreich):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_DWD FileLog ./log/DWD-%Y-%m.log DWD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird für das FileLog-Device der Platzhalter &#039;&#039;FileLog_Dummy&#039;&#039; verwendet, der mit dem Namen des gewählten FileLog-Devices zu ersetzen ist.&lt;br /&gt;
&lt;br /&gt;
4. SVG Plot&lt;br /&gt;
&lt;br /&gt;
Das eigentliche Meteogramm ist ein SVG-Device. Will man mehrere Tage darstellen bietet sich die folgende Definition an:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_DWD SVG FileLog_Dummy:SVG_DWD:CURRENT&lt;br /&gt;
attr SVG_DWD fixedoffset 6&lt;br /&gt;
attr SVG_DWD fixedrange 7days&lt;br /&gt;
attr SVG_DWD nrAxis 1,2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei muss das SVG-Attribut &#039;&#039;fixedoffset&#039;&#039; entweder gleich oder kleiner als die Einstellung des DWD_OpenData-Attributs &#039;&#039;forecastDays&#039;&#039; (Standardwert: 6 Tage) gewählt werden und das SVG-Attribut &#039;&#039;fixedrange&#039;&#039; um eins größer als &#039;&#039;fixedoffset&#039;&#039; eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Will man statt dessen nur die nächsten 24 Stunden anzeigen, nimmt man folgende Einstellungen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_DWD SVG FileLog_Dummy:SVG_DWD:CURRENT&lt;br /&gt;
attr SVG_DWD endPlotNow 1&lt;br /&gt;
attr SVG_DWD fixedoffset 1&lt;br /&gt;
attr SVG_FileLog_WETTER_DWD_3 label &amp;quot;Tmin: $data{max1} °C, Tmax: $data{min1} °C&amp;quot;&lt;br /&gt;
attr SVG_DWD nrAxis 1,2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die DWD_OpenData-Readings mit dem Plot zu verknüpfen, muss man nun die GPlot-Konfigurationsdatei des SVG-Plots manuell bearbeiten. Dazu auf den Link klicken, der im SVG_DWD-Device am Internal &#039;&#039;GPLOTFILE&#039;&#039; steht. Die y-Wertebereiche für die Regenmenge und die Temperaturen sind im Beispiel auskommentiert (Autorange). Das kann man so lassen oder man stellt sie nach den eigenen Wettergegebenheiten ein. Je nach Konfiguration des DWD_OpenData-Attributs &#039;&#039;forecastResolution&#039;&#039; sind aber noch einige weitere Einstellungen anzupassen. Das folgende Beispiel ist für die 3h-Auflösung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Wettervorhersage&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid ytics&lt;br /&gt;
set ylabel &amp;quot;Regen [mm]&amp;quot;&lt;br /&gt;
#set yrange [0:4]&lt;br /&gt;
set y2label &amp;quot;Temperatur [°C]&amp;quot;&lt;br /&gt;
#set y2range [-5:35]&lt;br /&gt;
set y3label &amp;quot;Wolken/Regen/Sonne [%]&amp;quot;&lt;br /&gt;
set y3range [0:100]&lt;br /&gt;
&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tx&amp;quot;,$from,$to,18,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tn&amp;quot;,$from,$to,6,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD3_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR3c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R600_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstX:TimeNow(),0,100&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;T&#039; ls l0 lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Tmax&#039; ls l0dot lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Tmin&#039; ls l0dot lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Sonne&#039; ls l4fill lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Regenmenge&#039; ls l2fill lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wind&#039; ls l1 lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Regen&#039; ls l5fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wolken&#039; ls l6fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 notitle ls l5 lw 4 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 notitle ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man dagegen eine Auflösung von 1 Stunde, sind folgende LogProxy-Einträge erforderlich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tx&amp;quot;,$from,$to,18,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tn&amp;quot;,$from,$to,6,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR1c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R101_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-0.5*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstX:TimeNow(),0,100&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Darstellung der nächsten 24 Stunden mit einer Auflösung von 1 Stunde nimmt man folgende GPlot-Konfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics&lt;br /&gt;
set y3tics&lt;br /&gt;
set grid xtics y2tics&lt;br /&gt;
set ylabel &amp;quot;Regen [mm]&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Temperatur [°C]&amp;quot;&lt;br /&gt;
set y3label &amp;quot;Wolken/Regen/Sonne [%]&amp;quot;&lt;br /&gt;
set y3range [0:100]&lt;br /&gt;
&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR1c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R101_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-0.5*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;T&#039; ls l0 lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Sonne&#039; ls l4fill lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Regenmenge&#039; ls l2fill lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wind&#039; ls l1 lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Regen&#039; ls l5fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wolken&#039; ls l6fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 notitle ls l2 lw 2 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nachdem, welche Auflösung man verwendet, werden unterschiedliche Readings des DWD_OpenData-Devices benötigt. Diese sind in den LogProxy-Zeilen in der GPlot-Konfigurationsdatei zu finden und müssen auf jeden Fall dem Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Device hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Viele Detaileinstellungen des Meteogramms lassen sich individualisieren. Man kann z.B. mehr oder weniger Daten anzeigen und zumindest für &#039;&#039;heute&#039;&#039; auch aktuelle Messwerte hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für ein Meteogramm über 4 Tage mit 3 Stunden Auflösung:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODmeteogram4d3h.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen mit [[FHEMWEB]] steht das Modul [https://raw.githubusercontent.com/jnsbyr/fhem/master/FHEM/99_DWD_OpenData_Weblink.pm 99_DWD_OpenData_Weblink.pm] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Moduldatei herunterladen und in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren. Entweder die Datei direkt auf den FHEM-Server herunterladen (z.B. mit &#039;&#039;wget&#039;&#039;) oder beim indirekten Herunterladen darauf achten, dass dabei das Encoding nicht verändert wird (also z.B. bei WinSCP den Binär-Modus und nicht den Text-Modus verwenden). Ansonsten werden später z.B. Sonderzeichen wie &#039;&#039;°C&#039;&#039; falsch angezeigt. &lt;br /&gt;
&lt;br /&gt;
Anschließend kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD_Weblink_Generator DWD_OpenData_Weblink&lt;br /&gt;
 attr DWD_Weblink_Generator IODev DWD&lt;br /&gt;
 attr DWD_Weblink_Generator forecastDays 4&lt;br /&gt;
 # refreshRate nur dann setzten, wenn der Browser Java-Script beherrscht:&lt;br /&gt;
 attr DWD_Weblink_Generator refreshRate 900&lt;br /&gt;
 &lt;br /&gt;
 define DWD_Weblink weblink htmlCode { DWD_OpenData_Weblink::AsHtmlH(&amp;quot;DWD_Weblink_Generator&amp;quot;) } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit legt man das Weblink-Generator-Device an und verknüpft es mit dem DWD_OpenData-Device. Außerdem wird der [[weblink ]] selbst angelegt, der seinerseits mit dem Weblink-Generator-Device verknüpft wird. Der Weblink benötigt für seine Funktion eine bestimmte Auswahl der Vorhersage-Merkmale. Wer das Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Moduls anpassen will, muss diese Merkmale auf jeden Fall mit berücksichtigen. &lt;br /&gt;
&lt;br /&gt;
Wenn vom Weblink nichts im Browser zu sehen ist, kann das daran liegen, dass der Browser kein aktuelles JavaScript verwendet oder JavaScript deaktiviert ist. Dann sollte das Attribut &#039;&#039;refreshRate&#039;&#039; auf 0 Sekunden eingestellt oder gelöscht werden. Mit aktiviertem Refresh werden die Daten auch ohne Seitenneuaufbau regelmäßig und bei Tab-Wechsel aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Liste der erforderlichen Vorhersage-Merkmale finden sich zusammen mit allen weitere Details zur Installation und Konfiguration in der Modulhilfe von &#039;&#039;99_DWD_OpenData_Weblink.pm&#039;&#039;, die man z.B. nach dem Anlegen des Weblink-Generator-Devices über die Weboberfläche abrufen kann.&lt;br /&gt;
&lt;br /&gt;
Hier ein Ausschnitt aus der Darstellung des Weblinks mit [[FHEMWEB]]:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODweblink.png|500px]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=29928</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=29928"/>
		<updated>2019-03-17T10:38:07Z</updated>

		<summary type="html">&lt;p&gt;JensB: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Versionsänderung: Die Vorhersagedaten wurden Mitte September 2018 von CSV auf KML umgestellt. Diese Umstellung ist inkompatibel: das DWD_OpenData-Modul muss aktualisiert werden, einige Reading-Namen haben sich geändert und der Weblink muss deinstalliert und neu installiert werden (siehe diesen {{Link2Forum|Topic=83097|Message=840270}} im Forum).}}&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB ({{Link2FU|14024|Forum}}/[[Benutzer Diskussion:JensB|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage und die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Dieser Befehl gilt für Debian-basierte Betriebssysteme - für andere Betriebssysteme ist eine analoge Funktion zu verwenden. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Sollte FHEM nach einem Neustart noch immer nicht die gewünschte Sprache verwenden, kann man auf einem System V Linux durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und erneutem Neustart von FHEM die Sprache für FHEM erzwingen. Bei einem Systemd Linux kann man die Einstellungen mit &#039;&#039;systemctl edit --full fhem.service&#039;&#039; bearbeiten. Spätestes jetzt muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Nur für den Weblink erforderlich:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen. Den ermittelten Stationscode kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get forecast&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;forecastStation&#039;&#039; hinterlegen. Insgesamt werden vom DWD mehr als 70 Merkmale zur Verfügung gestellt. Eine Auflistung findet sich im Dokument [https://opendata.dwd.de/weather/lib/MetElementDefinition.xml MetElementDefinition]. Nur ein kleiner Teil der Merkmale wird in der Standardeinstellung des Moduls als Reading zur Verfügung gestellt. Wer andere Merkmale benötigt muss sie mit Komma getrennt dem Attribut &#039;&#039;forecastProperties&#039;&#039; zuweisen. Es empfiehlt sich zur Performance-Optimierung sowohl das Attribut &#039;&#039;forecastDays&#039;&#039; als auch das Attribut &#039;&#039;forecastProperties&#039;&#039; auf den tatsächlichen Bedarf einzustellen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warnzellen-ID Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Die Warnzellen-ID kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get alerts&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;alertArea&#039;&#039; hinterlegen. Die Warnzellen-ID ist ab der 2. Stelle identisch mit den ersten Ziffern des amtlichen Gemeindeschlüssels. Man kann z.B. den Namen von Gemeinde oder Landkreis bei den [https://www.statistik-bw.de/Statistik-Portal/gemeindeverz.asp Statistischen Ämtern des Bundes und der Länder] eingeben, den amtlichen Gemeindeschlüssels ermitteln und dann mit vorangestellter 1, 8 oder 9 im Warnzellen-ID Katalog des DWD nach einem Eintrag mit exakter oder weitgehender Übereinstimmung suchen. Wem das zu kompliziert vorkommt, kann bei mehrdeutigen Gemeinde- bzw. Landkreisbezeichnungen auch versuchen auszuprobieren, welche die richtige Wanrzellen-ID ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit automatisch Aktualisierung von Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Performance&lt;br /&gt;
Das DWD_OpenData-Modul ist ein Datenmodul mit relativ vielen Readings. In der Standardkonfiguration wird, wie bei jedem anderen FHEM Modul, bei jeder Änderung jedes Readings ein FHEM internes Ereignis erzeugt, damit andere FHEM Devices auf diese Änderungen reagieren können. Diese Ereignisse sorgen auch dafür, dass man Änderungen in der Weboberfläche sofort angezeigt bekommt, ohne die Webseite neu aufzurufen. Interessiert sich aber kein FHEM Device für die Änderungsbenachrichtung bestimmter Readings, entsteht unnötiger Verarbeitsoverhead, der je nach FHEM Konfiguration und verfügbarer CPU-Leistung auch mehrere Sekunden benötigen kann und in dieser Zeit andere Abläufe blockiert. Um die Performance zu optimieren, empfiehlt es sich,  mit [[event-on-update-reading]] für eine angepasste und dadurch effizientere Verarbeitung sorgen, indem man nur für die Readings Ereignisse zulässt, die man für die Weiterverarbeitung braucht. Der DWD_OpenData_Weblink braucht z.B. gar keine Ereignisse, um zu funktionieren. Hier eine minimalistische Beispielkonfiguration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr DWD event-on-update-reading state,fc_state,a_state&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration des Moduls finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Meteogramms ===&lt;br /&gt;
Um den vorhergesagten Wetterverlauf als Meteogramm in Kurvenfrom mit [[SVG]] darzustellen, kann man wie folgt vorgehen:&lt;br /&gt;
&lt;br /&gt;
1. 99_myUtils.pm&lt;br /&gt;
&lt;br /&gt;
Für die Bestimmung der Werte für den SVG-Plot wird eine Perl-Funktion benötigt, die in die Datei 99_myUtils.pm vor dem Ende eingefügt wird. Wer diese FHEM-Datei noch nicht nutzt, legt sie einfach an (siehe [[99_myUtils_anlegen]]).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
 &lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# (c) mumpitzstuff 19.12.2018&lt;br /&gt;
#&lt;br /&gt;
# see https://forum.fhem.de/index.php/topic,83097.msg874150.html#msg874150&lt;br /&gt;
#&lt;br /&gt;
sub logProxy_dwd2Plot($$$$;$$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $fcValue, $from, $to, $fcHour, $expMode, $shiftTime) = @_;&lt;br /&gt;
  my $regex;&lt;br /&gt;
  my @rl;&lt;br /&gt;
&lt;br /&gt;
  return undef if(!$device);&lt;br /&gt;
&lt;br /&gt;
  if ($fcValue =~ s/_$//)&lt;br /&gt;
  {&lt;br /&gt;
    $regex = &amp;quot;^fc[\\d]+_[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $fcHour = 12 if(!defined($fcHour));&lt;br /&gt;
  $expMode = &amp;quot;point&amp;quot; if(!defined($expMode));&lt;br /&gt;
  #Log3 undef,2, &amp;quot;Regex: &amp;quot;.$regex;&lt;br /&gt;
&lt;br /&gt;
  # ermitteln aller relevanten Readings&lt;br /&gt;
  if ( defined($defs{$device}) )&lt;br /&gt;
  {&lt;br /&gt;
    if ( $defs{$device}{TYPE} eq &amp;quot;DWD_OpenData&amp;quot; )&lt;br /&gt;
    {&lt;br /&gt;
      @rl = sort&lt;br /&gt;
      {&lt;br /&gt;
        my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
        my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
        my ($ao) = ($a =~ m/fc\d+_(\d+).*/);&lt;br /&gt;
        my ($bo) = ($b =~ m/fc\d+_(\d+).*/);&lt;br /&gt;
        $an &amp;lt;=&amp;gt; $bn or $ao &amp;lt;=&amp;gt; $bo or $a cmp $b;&lt;br /&gt;
      } ( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
      return undef if ( !@rl );&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      Log3 undef, 2, &amp;quot;logProxy_dwd2Plot: $device is not a DWD_OpenData device&amp;quot;;&lt;br /&gt;
      return undef;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
  my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
  my $sec = $fromsec;&lt;br /&gt;
  my ($h, $hp, $fcDay, $mday, $mon, $year);&lt;br /&gt;
  my $timestamp;&lt;br /&gt;
&lt;br /&gt;
  my $reading;&lt;br /&gt;
  my $value;&lt;br /&gt;
  my $prev_value;&lt;br /&gt;
  my $min = 999999;&lt;br /&gt;
  my $max = -999999;&lt;br /&gt;
  my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  # while not end of plot range reached&lt;br /&gt;
  while (($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl)&lt;br /&gt;
  {&lt;br /&gt;
    #remember previous value for start of plot range&lt;br /&gt;
    $prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
    $reading = shift @rl;&lt;br /&gt;
    ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
    ($hp) = $reading =~ m/^fc\d+_(\d+).*/;&lt;br /&gt;
    #Log 1, &amp;quot;hp: &amp;quot;.$hp;&lt;br /&gt;
&lt;br /&gt;
    if ($hp)&lt;br /&gt;
    {&lt;br /&gt;
      $h = ReadingsVal($device, &amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_&amp;quot;.$hp.&amp;quot;_time&amp;quot;, $fcHour);&lt;br /&gt;
      if ($h =~ m/^(\d+):\d+/)&lt;br /&gt;
      {&lt;br /&gt;
        $h = $1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      $h = $fcHour;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    $value = ReadingsVal($device, $reading, undef);&lt;br /&gt;
&lt;br /&gt;
    # calculate minutes of sunshine per hour&lt;br /&gt;
    if ($fcValue =~ /^SunD(\d+)/)&lt;br /&gt;
    {&lt;br /&gt;
      if (defined($1))&lt;br /&gt;
      {&lt;br /&gt;
        $value = $value / ($1 * 36);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        $value = $value / (12 * 36);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # calculate amount of rain per hour&lt;br /&gt;
    if ($fcValue =~ /^RR(\d+)c$/)&lt;br /&gt;
    {&lt;br /&gt;
      if (defined($1))&lt;br /&gt;
      {&lt;br /&gt;
        $value /= $1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ($year, $mon, $mday) = split(&#039;\-&#039;,ReadingsVal($device, &amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
    $timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
    $sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
    if (defined($shiftTime))&lt;br /&gt;
    {&lt;br /&gt;
      $sec += $shiftTime;&lt;br /&gt;
      $timestamp = logProxy_shiftTime($timestamp, $shiftTime);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # skip all values before start of plot range&lt;br /&gt;
    next if ( $sec &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
    # add first value at start of plot range&lt;br /&gt;
    if ( !$ret &amp;amp;&amp;amp; $prev_value )&lt;br /&gt;
    {&lt;br /&gt;
      $min = $prev_value if ( $prev_value &amp;lt; $min );&lt;br /&gt;
      $max = $prev_value if ( $prev_value &amp;gt; $max );&lt;br /&gt;
      $ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # done if after end of plot range&lt;br /&gt;
    last if ($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
    $min = $value if ( $value &amp;lt; $min );&lt;br /&gt;
    $max = $value if ( $value &amp;gt; $max );&lt;br /&gt;
&lt;br /&gt;
    # add actual control point&lt;br /&gt;
    $ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    $timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    $_ = SVG_time_to_sec($timestamp);&lt;br /&gt;
    if (defined($shiftTime))&lt;br /&gt;
    {&lt;br /&gt;
      $_ += $shiftTime;&lt;br /&gt;
      $timestamp = logProxy_shiftTime($timestamp, $shiftTime);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ($_ &amp;lt; $tosec)&lt;br /&gt;
    {&lt;br /&gt;
      $ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      $ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  elsif (($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    $value = $prev_value + ($value - $prev_value) * (86400 + ($tosec - $sec)) / 86400;&lt;br /&gt;
    $ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return ($ret, $min, $max, $prev_value);&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. LogProxy&lt;br /&gt;
&lt;br /&gt;
Wer bereits ein [[logProxy]]-Device hat, muss den Namen seines logProxy-Devices in die weiter unter aufgeführte GPlot-Konfiguration eintragen. Ansonsten wird es wie folgt neu erstellt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. FileLog&lt;br /&gt;
&lt;br /&gt;
Das Meteogramm kennt anders als andere FHEM-Plots keine Vergangenheit außer heute. Trotzdem wird aus formalen Gründen eine [[FileLog]]-Device benötigt. Dazu kann ein beliebiges vorhandenes FileLog-Device verwendet werden. Wer will, kann hierfür aber auch ein neues FileLog Device für das DWD_OpenData-Device anlegen (Achtung: wird schnell umfangreich):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_DWD FileLog ./log/DWD-%Y-%m.log DWD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird für das FileLog-Device der Platzhalter &#039;&#039;FileLog_Dummy&#039;&#039; verwendet, der mit dem Namen des gewählten FileLog-Devices zu ersetzen ist.&lt;br /&gt;
&lt;br /&gt;
4. SVG Plot&lt;br /&gt;
&lt;br /&gt;
Das eigentliche Meteogramm ist ein SVG-Device. Will man mehrere Tage darstellen bietet sich die folgende Definition an:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_DWD SVG FileLog_Dummy:SVG_DWD:CURRENT&lt;br /&gt;
attr SVG_DWD fixedoffset 6&lt;br /&gt;
attr SVG_DWD fixedrange 7days&lt;br /&gt;
attr SVG_DWD nrAxis 1,2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei muss das SVG-Attribut &#039;&#039;fixedoffset&#039;&#039; entweder gleich oder kleiner als die Einstellung des DWD_OpenData-Attributs &#039;&#039;forecastDays&#039;&#039; (Standardwert: 6 Tage) gewählt werden und das SVG-Attribut &#039;&#039;fixedrange&#039;&#039; um eins größer als &#039;&#039;fixedoffset&#039;&#039; eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Will man statt dessen nur die nächsten 24 Stunden anzeigen, nimmt man folgende Einstellungen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_DWD SVG FileLog_Dummy:SVG_DWD:CURRENT&lt;br /&gt;
attr SVG_DWD endPlotNow 1&lt;br /&gt;
attr SVG_DWD fixedoffset 1&lt;br /&gt;
attr SVG_FileLog_WETTER_DWD_3 label &amp;quot;Tmin: $data{max1} °C, Tmax: $data{min1} °C&amp;quot;&lt;br /&gt;
attr SVG_DWD nrAxis 1,2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die DWD_OpenData-Readings mit dem Plot zu verknüpfen, muss man nun die GPlot-Konfigurationsdatei des SVG-Plots manuell bearbeiten. Dazu auf den Link klicken, der im SVG_DWD-Device am Internal &#039;&#039;GPLOTFILE&#039;&#039; steht. Die y-Wertebereiche für die Regenmenge und die Temperaturen sind im Beispiel auskommentiert (Autorange). Das kann man so lassen oder man stellt sie nach den eigenen Wettergegebenheiten ein. Je nach Konfiguration des DWD_OpenData-Attributs &#039;&#039;forecastResolution&#039;&#039; sind aber noch einige weitere Einstellungen anzupassen. Das folgende Beispiel ist für die 3h-Auflösung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Wettervorhersage&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid ytics&lt;br /&gt;
set ylabel &amp;quot;Regen [mm]&amp;quot;&lt;br /&gt;
#set yrange [0:4]&lt;br /&gt;
set y2label &amp;quot;Temperatur [°C]&amp;quot;&lt;br /&gt;
#set y2range [-5:35]&lt;br /&gt;
set y3label &amp;quot;Wolken/Regen/Sonne [%]&amp;quot;&lt;br /&gt;
set y3range [0:100]&lt;br /&gt;
&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tx&amp;quot;,$from,$to,18,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tn&amp;quot;,$from,$to,6,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD3_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR3c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R600_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstX:TimeNow(),0,100&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;T&#039; ls l0 lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Tmax&#039; ls l0dot lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Tmin&#039; ls l0dot lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Sonne&#039; ls l4fill lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Regenmenge&#039; ls l2fill lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wind&#039; ls l1 lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Regen&#039; ls l5fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wolken&#039; ls l6fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 notitle ls l5 lw 4 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 notitle ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man dagegen eine Auflösung von 1 Stunde, sind folgende LogProxy-Einträge erforderlich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tx&amp;quot;,$from,$to,18,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tn&amp;quot;,$from,$to,6,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR1c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R101_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-0.5*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstX:TimeNow(),0,100&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Darstellung der nächsten 24 Stunden mit einer Auflösung von 1 Stunde nimmt man folgende GPlot-Konfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics&lt;br /&gt;
set y3tics&lt;br /&gt;
set grid xtics y2tics&lt;br /&gt;
set ylabel &amp;quot;Regen [mm]&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Temperatur [°C]&amp;quot;&lt;br /&gt;
set y3label &amp;quot;Wolken/Regen/Sonne [%]&amp;quot;&lt;br /&gt;
set y3range [0:100]&lt;br /&gt;
&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR1c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R101_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-0.5*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;T&#039; ls l0 lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Sonne&#039; ls l4fill lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Regenmenge&#039; ls l2fill lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wind&#039; ls l1 lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Regen&#039; ls l5fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wolken&#039; ls l6fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 notitle ls l2 lw 2 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nachdem, welche Auflösung man verwendet, werden unterschiedliche Readings des DWD_OpenData-Devices benötigt. Diese sind in den LogProxy-Zeilen in der GPlot-Konfigurationsdatei zu finden und müssen auf jeden Fall dem Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Device hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Viele Detaileinstellungen des Meteogramms lassen sich individualisieren. Man kann z.B. mehr oder weniger Daten anzeigen und zumindest für &#039;&#039;heute&#039;&#039; auch aktuelle Messwerte hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für ein Meteogramm über 4 Tage mit 3 Stunden Auflösung:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODmeteogram4d3h.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen mit [[FHEMWEB]] steht das Modul [https://raw.githubusercontent.com/jnsbyr/fhem/master/FHEM/99_DWD_OpenData_Weblink.pm 99_DWD_OpenData_Weblink.pm] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Moduldatei herunterladen und in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren. Entweder die Datei direkt auf den FHEM-Server herunterladen (z.B. mit &#039;&#039;wget&#039;&#039;) oder beim indirekten Herunterladen darauf achten, dass dabei das Encoding nicht verändert wird (also z.B. bei WinSCP den Binär-Modus und nicht den Text-Modus verwenden). Ansonsten werden später z.B. Sonderzeichen wie &#039;&#039;°C&#039;&#039; falsch angezeigt. &lt;br /&gt;
&lt;br /&gt;
Anschließend kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD_Weblink_Generator DWD_OpenData_Weblink&lt;br /&gt;
 attr DWD_Weblink_Generator IODev DWD&lt;br /&gt;
 attr DWD_Weblink_Generator forecastDays 4&lt;br /&gt;
 # refreshRate nur dann setzten, wenn der Browser Java-Script beherrscht:&lt;br /&gt;
 attr DWD_Weblink_Generator refreshRate 900&lt;br /&gt;
 &lt;br /&gt;
 define DWD_Weblink weblink htmlCode { DWD_OpenData_Weblink::AsHtmlH(&amp;quot;DWD_Weblink_Generator&amp;quot;) } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit legt man das Weblink-Generator-Device an und verknüpft es mit dem DWD_OpenData-Device. Außerdem wird der [[weblink ]] selbst angelegt, der seinerseits mit dem Weblink-Generator-Device verknüpft wird. Der Weblink benötigt für seine Funktion eine bestimmte Auswahl der Vorhersage-Merkmale. Wer das Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Moduls anpassen will, muss diese Merkmale auf jeden Fall mit berücksichtigen. &lt;br /&gt;
&lt;br /&gt;
Wenn vom Weblink nichts im Browser zu sehen ist, kann das daran liegen, dass der Browser kein aktuelles JavaScript verwendet oder JavaScript deaktiviert ist. Dann sollte das Attribut &#039;&#039;refreshRate&#039;&#039; auf 0 Sekunden eingestellt oder gelöscht werden. Mit aktiviertem Refresh werden die Daten auch ohne Seitenneuaufbau regelmäßig und bei Tab-Wechsel aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Liste der erforderlichen Vorhersage-Merkmale finden sich zusammen mit allen weitere Details zur Installation und Konfiguration in der Modulhilfe von &#039;&#039;99_DWD_OpenData_Weblink.pm&#039;&#039;, die man z.B. nach dem Anlegen des Weblink-Generator-Devices über die Weboberfläche abrufen kann.&lt;br /&gt;
&lt;br /&gt;
Hier ein Ausschnitt aus der Darstellung des Weblinks mit [[FHEMWEB]]:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODweblink.png|500px]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=29922</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=29922"/>
		<updated>2019-03-16T19:25:18Z</updated>

		<summary type="html">&lt;p&gt;JensB: Beispiel für die Einrichtung eines Meteogramms&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Versionsänderung: Die Vorhersagedaten wurden Mitte September 2018 von CSV auf KML umgestellt. Diese Umstellung ist inkompatibel: das DWD_OpenData-Modul muss aktualisiert werden, einige Reading-Namen haben sich geändert und der Weblink muss deinstalliert und neu installiert werden (siehe diesen {{Link2Forum|Topic=83097|Message=840270}} im Forum).}}&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB ({{Link2FU|14024|Forum}}/[[Benutzer Diskussion:JensB|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage und die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Dieser Befehl gilt für Debian-basierte Betriebssysteme - für andere Betriebssysteme ist eine analoge Funktion zu verwenden. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Sollte FHEM nach einem Neustart noch immer nicht die gewünschte Sprache verwenden, kann man auf einem System V Linux durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und erneutem Neustart von FHEM die Sprache für FHEM erzwingen. Bei einem Systemd Linux kann man die Einstellungen mit &#039;&#039;systemctl edit --full fhem.service&#039;&#039; bearbeiten. Spätestes jetzt muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Nur für den Weblink erforderlich:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen. Den ermittelten Stationscode kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get forecast&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;forecastStation&#039;&#039; hinterlegen. Insgesamt werden vom DWD mehr als 70 Merkmale zur Verfügung gestellt. Eine Auflistung findet sich im Dokument [https://opendata.dwd.de/weather/lib/MetElementDefinition.xml MetElementDefinition]. Nur ein kleiner Teil der Merkmale wird in der Standardeinstellung des Moduls als Reading zur Verfügung gestellt. Wer andere Merkmale benötigt muss sie mit Komma getrennt dem Attribut &#039;&#039;forecastProperties&#039;&#039; zuweisen. Es empfiehlt sich zur Performance-Optimierung sowohl das Attribut &#039;&#039;forecastDays&#039;&#039; als auch das Attribut &#039;&#039;forecastProperties&#039;&#039; auf den tatsächlichen Bedarf einzustellen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warnzellen-ID Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Die Warnzellen-ID kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get alerts&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;alertArea&#039;&#039; hinterlegen. Die Warnzellen-ID ist ab der 2. Stelle identisch mit den ersten Ziffern des amtlichen Gemeindeschlüssels. Man kann z.B. den Namen von Gemeinde oder Landkreis bei den [https://www.statistik-bw.de/Statistik-Portal/gemeindeverz.asp Statistischen Ämtern des Bundes und der Länder] eingeben, den amtlichen Gemeindeschlüssels ermitteln und dann mit vorangestellter 1, 8 oder 9 im Warnzellen-ID Katalog des DWD nach einem Eintrag mit exakter oder weitgehender Übereinstimmung suchen. Wem das zu kompliziert vorkommt, kann bei mehrdeutigen Gemeinde- bzw. Landkreisbezeichnungen auch versuchen auszuprobieren, welche die richtige Wanrzellen-ID ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit automatisch Aktualisierung von Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Performance&lt;br /&gt;
Das DWD_OpenData-Modul ist ein Datenmodul mit relativ vielen Readings. In der Standardkonfiguration wird, wie bei jedem anderen FHEM Modul, bei jeder Änderung jedes Readings ein FHEM internes Ereignis erzeugt, damit andere FHEM Devices auf diese Änderungen reagieren können. Diese Ereignisse sorgen auch dafür, dass man Änderungen in der Weboberfläche sofort angezeigt bekommt, ohne die Webseite neu aufzurufen. Interessiert sich aber kein FHEM Device für die Änderungsbenachrichtung bestimmter Readings, entsteht unnötiger Verarbeitsoverhead, der je nach FHEM Konfiguration und verfügbarer CPU-Leistung auch mehrere Sekunden benötigen kann und in dieser Zeit andere Abläufe blockiert. Um die Performance zu optimieren, empfiehlt es sich,  mit [[event-on-update-reading]] für eine angepasste und dadurch effizientere Verarbeitung sorgen, indem man nur für die Readings Ereignisse zulässt, die man für die Weiterverarbeitung braucht. Der DWD_OpenData_Weblink braucht z.B. gar keine Ereignisse, um zu funktionieren. Hier eine minimalistische Beispielkonfiguration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr DWD event-on-update-reading state,fc_state,a_state&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration des Moduls finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Meteogramms ===&lt;br /&gt;
Um den vorhergesagten Wetterverlauf als Meteogramm in Kurvenfrom mit [[SVG]] darzustellen, kann man wie folgt vorgehen:&lt;br /&gt;
&lt;br /&gt;
1. 99_myUtils.pm&lt;br /&gt;
&lt;br /&gt;
Für die Bestimmung der Werte für den SVG-Plot wird eine Perl-Funktion benötigt, die in die Datei 99_myUtils.pm vor dem Ende eingefügt wird. Wer diese FHEM-Datei noch nicht nutzt, legt sie einfach an (siehe [[99_myUtils_anlegen]]).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
 &lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# (c) mumpitzstuff 19.12.2018&lt;br /&gt;
#&lt;br /&gt;
# see https://forum.fhem.de/index.php/topic,83097.msg874150.html#msg874150&lt;br /&gt;
#&lt;br /&gt;
sub logProxy_dwd2Plot($$$$;$$$)&lt;br /&gt;
{&lt;br /&gt;
  my ($device, $fcValue, $from, $to, $fcHour, $expMode, $shiftTime) = @_;&lt;br /&gt;
  my $regex;&lt;br /&gt;
  my @rl;&lt;br /&gt;
&lt;br /&gt;
  return undef if(!$device);&lt;br /&gt;
&lt;br /&gt;
  if ($fcValue =~ s/_$//)&lt;br /&gt;
  {&lt;br /&gt;
    $regex = &amp;quot;^fc[\\d]+_[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    $regex = &amp;quot;^fc[\\d]+_&amp;quot;.$fcValue.&amp;quot;\$&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  $fcHour = 12 if(!defined($fcHour));&lt;br /&gt;
  $expMode = &amp;quot;point&amp;quot; if(!defined($expMode));&lt;br /&gt;
  #Log3 undef,2, &amp;quot;Regex: &amp;quot;.$regex;&lt;br /&gt;
&lt;br /&gt;
  # ermitteln aller relevanten Readings&lt;br /&gt;
  if ( defined($defs{$device}) )&lt;br /&gt;
  {&lt;br /&gt;
    if ( $defs{$device}{TYPE} eq &amp;quot;DWD_OpenData&amp;quot; )&lt;br /&gt;
    {&lt;br /&gt;
      @rl = sort&lt;br /&gt;
      {&lt;br /&gt;
        my ($an) = ($a =~ m/fc(\d+)_.*/);&lt;br /&gt;
        my ($bn) = ($b =~ m/fc(\d+)_.*/);&lt;br /&gt;
        my ($ao) = ($a =~ m/fc\d+_(\d+).*/);&lt;br /&gt;
        my ($bo) = ($b =~ m/fc\d+_(\d+).*/);&lt;br /&gt;
        $an &amp;lt;=&amp;gt; $bn or $ao &amp;lt;=&amp;gt; $bo or $a cmp $b;&lt;br /&gt;
      } ( grep /${regex}/,keys %{$defs{$device}{READINGS}} );&lt;br /&gt;
      return undef if ( !@rl );&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      Log3 undef, 2, &amp;quot;logProxy_dwd2Plot: $device is not a DWD_OpenData device&amp;quot;;&lt;br /&gt;
      return undef;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  my $fromsec = SVG_time_to_sec($from);&lt;br /&gt;
  my $tosec   = SVG_time_to_sec($to);&lt;br /&gt;
  my $sec = $fromsec;&lt;br /&gt;
  my ($h, $hp, $fcDay, $mday, $mon, $year);&lt;br /&gt;
  my $timestamp;&lt;br /&gt;
&lt;br /&gt;
  my $reading;&lt;br /&gt;
  my $value;&lt;br /&gt;
  my $prev_value;&lt;br /&gt;
  my $min = 999999;&lt;br /&gt;
  my $max = -999999;&lt;br /&gt;
  my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  # while not end of plot range reached&lt;br /&gt;
  while (($sec &amp;lt; $tosec) &amp;amp;&amp;amp; @rl)&lt;br /&gt;
  {&lt;br /&gt;
    #remember previous value for start of plot range&lt;br /&gt;
    $prev_value = $value;&lt;br /&gt;
&lt;br /&gt;
    $reading = shift @rl;&lt;br /&gt;
    ($fcDay) = $reading =~ m/^fc(\d+).*/;&lt;br /&gt;
    ($hp) = $reading =~ m/^fc\d+_(\d+).*/;&lt;br /&gt;
    #Log 1, &amp;quot;hp: &amp;quot;.$hp;&lt;br /&gt;
&lt;br /&gt;
    if ($hp)&lt;br /&gt;
    {&lt;br /&gt;
      $h = ReadingsVal($device, &amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_&amp;quot;.$hp.&amp;quot;_time&amp;quot;, $fcHour);&lt;br /&gt;
      if ($h =~ m/^(\d+):\d+/)&lt;br /&gt;
      {&lt;br /&gt;
        $h = $1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      $h = $fcHour;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    $value = ReadingsVal($device, $reading, undef);&lt;br /&gt;
&lt;br /&gt;
    # calculate minutes of sunshine per hour&lt;br /&gt;
    if ($fcValue =~ /^SunD(\d+)/)&lt;br /&gt;
    {&lt;br /&gt;
      if (defined($1))&lt;br /&gt;
      {&lt;br /&gt;
        $value = $value / ($1 * 36);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        $value = $value / (12 * 36);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # calculate amount of rain per hour&lt;br /&gt;
    if ($fcValue =~ /^RR(\d+)c$/)&lt;br /&gt;
    {&lt;br /&gt;
      if (defined($1))&lt;br /&gt;
      {&lt;br /&gt;
        $value /= $1;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ($year, $mon, $mday) = split(&#039;\-&#039;,ReadingsVal($device, &amp;quot;fc&amp;quot;.$fcDay.&amp;quot;_date&amp;quot;,undef));&lt;br /&gt;
    $timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, $h, 0, 0);&lt;br /&gt;
    $sec = SVG_time_to_sec($timestamp);&lt;br /&gt;
    if (defined($shiftTime))&lt;br /&gt;
    {&lt;br /&gt;
      $sec += $shiftTime;&lt;br /&gt;
      $timestamp = logProxy_shiftTime($timestamp, $shiftTime);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # skip all values before start of plot range&lt;br /&gt;
    next if ( $sec &amp;lt; $fromsec );&lt;br /&gt;
&lt;br /&gt;
    # add first value at start of plot range&lt;br /&gt;
    if ( !$ret &amp;amp;&amp;amp; $prev_value )&lt;br /&gt;
    {&lt;br /&gt;
      $min = $prev_value if ( $prev_value &amp;lt; $min );&lt;br /&gt;
      $max = $prev_value if ( $prev_value &amp;gt; $max );&lt;br /&gt;
      $ret .= &amp;quot;$from $prev_value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # done if after end of plot range&lt;br /&gt;
    last if ($sec &amp;gt; $tosec);&lt;br /&gt;
&lt;br /&gt;
    $min = $value if ( $value &amp;lt; $min );&lt;br /&gt;
    $max = $value if ( $value &amp;gt; $max );&lt;br /&gt;
&lt;br /&gt;
    # add actual control point&lt;br /&gt;
    $ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (($sec &amp;lt; $tosec) &amp;amp;&amp;amp; !@rl &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    $timestamp = sprintf(&amp;quot;%04d-%02d-%02d_%02d:%02d:%02d&amp;quot;, $year, $mon, $mday, 23, 59, 59);&lt;br /&gt;
    $_ = SVG_time_to_sec($timestamp);&lt;br /&gt;
    if (defined($shiftTime))&lt;br /&gt;
    {&lt;br /&gt;
      $_ += $shiftTime;&lt;br /&gt;
      $timestamp = logProxy_shiftTime($timestamp, $shiftTime);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ($_ &amp;lt; $tosec)&lt;br /&gt;
    {&lt;br /&gt;
      $ret .= &amp;quot;$timestamp $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      $ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  elsif (($sec &amp;gt; $tosec) &amp;amp;&amp;amp; ($expMode eq &amp;quot;day&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    $value = $prev_value + ($value - $prev_value) * (86400 + ($tosec - $sec)) / 86400;&lt;br /&gt;
    $ret .= &amp;quot;$to $value\n&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return ($ret, $min, $max, $prev_value);&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. LogProxy&lt;br /&gt;
&lt;br /&gt;
Wer bereits ein [[logProxy]]-Device hat, muss den Namen seines logProxy-Devices in die weiter unter aufgeführte GPlot-Konfiguration eintragen. Ansonsten wird es wie folgt neu erstellt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define LogProxy logProxy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. FileLog&lt;br /&gt;
&lt;br /&gt;
Das Meteogramm kennt anders als andere FHEM-Plots keine Vergangenheit außer heute. Trotzdem wird aus formalen Gründen eine [[FileLog]]-Device benötigt. Dazu kann ein beliebiges vorhandenes FileLog-Device verwendet werden. Wer will, kann hierfür aber auch ein neues FileLog Device für das DWD_OpenData-Device anlegen (Achtung: wird schnell umfangreich):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_DWD FileLog ./log/DWD-%Y-%m.log DWD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird für das FileLog-Device der Platzhalter &#039;&#039;FileLog_Dummy&#039;&#039; verwendet, der mit dem Namen des gewählten FileLog-Devices zu ersetzen ist.&lt;br /&gt;
&lt;br /&gt;
4. SVG Plot&lt;br /&gt;
&lt;br /&gt;
Das eigentliche Meteogramm ist ein SVG-Device. Will man mehrere Tage darstellen bietet sich die folgende Definition an:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_DWD SVG FileLog_Dummy:SVG_DWD:CURRENT&lt;br /&gt;
attr SVG_DWD fixedoffset 6&lt;br /&gt;
attr SVG_DWD fixedrange 7days&lt;br /&gt;
attr SVG_DWD nrAxis 1,2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei muss das SVG-Attribut &#039;&#039;fixedoffset&#039;&#039; entweder gleich oder kleiner als die Einstellung des DWD_OpenData-Attributs &#039;&#039;forecastDays&#039;&#039; (Standardwert: 6 Tage) gewählt werden und das SVG-Attribut &#039;&#039;fixedrange&#039;&#039; um eins größer als &#039;&#039;fixedoffset&#039;&#039; eingestellt werden.&lt;br /&gt;
&lt;br /&gt;
Will man statt dessen nur die nächsten 24 Stunden anzeigen, nimmt man folgende Einstellungen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define SVG_DWD SVG FileLog_Dummy:SVG_DWD:CURRENT&lt;br /&gt;
attr SVG_DWD endPlotNow 1&lt;br /&gt;
attr SVG_DWD fixedoffset 1&lt;br /&gt;
attr SVG_DWD nrAxis 1,2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die DWD_OpenData-Readings mit dem Plot zu verknüpfen, muss man nun die GPlot-Konfigurationsdatei des SVG-Plots manuell bearbeiten. Dazu auf den Link klicken, der im SVG_DWD-Device am Internal &#039;&#039;GPLOTFILE&#039;&#039; steht. Für die y-Wertebereiche sollte man die eigenen Wettergegebenheiten zu Grunde legen. Je nach Konfiguration des DWD_OpenData-Attributs &#039;&#039;forecastResolution&#039;&#039; sind aber noch einige weitere Einstellungen anzupassen. Das folgende Beispiel ist für die 3h-Auflösung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Wettervorhersage&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid ytics&lt;br /&gt;
set ylabel &amp;quot;Regen [mm]&amp;quot;&lt;br /&gt;
set yrange [0:4]&lt;br /&gt;
set y2label &amp;quot;Temperatur [°C]&amp;quot;&lt;br /&gt;
set y2range [-5:35]&lt;br /&gt;
set y3label &amp;quot;Wolken/Regen/Sonne [%]&amp;quot;&lt;br /&gt;
set y3range [0:100]&lt;br /&gt;
&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tx&amp;quot;,$from,$to,18,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tn&amp;quot;,$from,$to,6,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD3_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR3c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R600_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-3*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstX:TimeNow(),0,100&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;T&#039; ls l0 lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Tmax&#039; ls l0dot lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Tmin&#039; ls l0dot lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Sonne&#039; ls l4fill lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Regenmenge&#039; ls l2fill lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wind&#039; ls l1 lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Regen&#039; ls l5fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wolken&#039; ls l6fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 notitle ls l5 lw 4 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 notitle ls l5 lw 1 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwendet man dagegen eine Auflösung von 1 Stunde, sind folgende LogProxy-Einträge erforderlich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tx&amp;quot;,$from,$to,18,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Tn&amp;quot;,$from,$to,6,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR1c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R101_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-0.5*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstX:TimeNow(),0,100&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für die Darstellung der nächsten 24 Stunden mit einer Auflösung von 1 Stunde nimmt man folgende GPlot-Konfiguration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
set title &#039;Wettervorhersage&#039;&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics&lt;br /&gt;
set y3tics&lt;br /&gt;
set grid xtics y2tics&lt;br /&gt;
set ylabel &amp;quot;Regen [mm]&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Temperatur [°C]&amp;quot;&lt;br /&gt;
set y3label &amp;quot;Wolken/Regen/Sonne [%]&amp;quot;&lt;br /&gt;
set y3range [0:100]&lt;br /&gt;
&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;TTT_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;SunD1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;RR1c_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-1*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;FX1_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;R101_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;,(-0.5*3600))&lt;br /&gt;
#LogProxy Func:logProxy_dwd2Plot(&amp;quot;DWD&amp;quot;,&amp;quot;Neff_&amp;quot;,$from,$to,0,&amp;quot;day&amp;quot;)&lt;br /&gt;
#LogProxy ConstX:TimeNow(),0,100&lt;br /&gt;
#LogProxy ConstY:0&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;T&#039; ls l0 lw 2 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Sonne&#039; ls l4fill lw 1 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Regenmenge&#039; ls l2fill lw 1 with steps,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wind&#039; ls l1 lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Regen&#039; ls l5fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 title &#039;Wolken&#039; ls l6fill lw 1 with quadraticSmooth,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y3 notitle ls l5 lw 4 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 notitle ls l2 lw 2 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nachdem, welche Auflösung man verwendet, werden unterschiedliche Readings des DWD_OpenData-Devices benötigt. Diese sind in den LogProxy-Zeilen in der GPlot-Konfigurationsdatei zu finden und müssen auf jeden Fall dem Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Device hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Viele Detaileinstellungen des Meteogramms lassen sich individualisieren. Man kann z.B. mehr oder weniger Daten anzeigen und zumindest für &#039;&#039;heute&#039;&#039; auch aktuelle Messwerte hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für ein Meteogramm über 4 Tage mit 3 Stunden Auflösung:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODmeteogram4d3h.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen mit [[FHEMWEB]] steht das Modul [https://raw.githubusercontent.com/jnsbyr/fhem/master/FHEM/99_DWD_OpenData_Weblink.pm 99_DWD_OpenData_Weblink.pm] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Moduldatei herunterladen und in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren. Entweder die Datei direkt auf den FHEM-Server herunterladen (z.B. mit &#039;&#039;wget&#039;&#039;) oder beim indirekten Herunterladen darauf achten, dass dabei das Encoding nicht verändert wird (also z.B. bei WinSCP den Binär-Modus und nicht den Text-Modus verwenden). Ansonsten werden später z.B. Sonderzeichen wie &#039;&#039;°C&#039;&#039; falsch angezeigt. &lt;br /&gt;
&lt;br /&gt;
Anschließend kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD_Weblink_Generator DWD_OpenData_Weblink&lt;br /&gt;
 attr DWD_Weblink_Generator IODev DWD&lt;br /&gt;
 attr DWD_Weblink_Generator forecastDays 4&lt;br /&gt;
 # refreshRate nur dann setzten, wenn der Browser Java-Script beherrscht:&lt;br /&gt;
 attr DWD_Weblink_Generator refreshRate 900&lt;br /&gt;
 &lt;br /&gt;
 define DWD_Weblink weblink htmlCode { DWD_OpenData_Weblink::AsHtmlH(&amp;quot;DWD_Weblink_Generator&amp;quot;) } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit legt man das Weblink-Generator-Device an und verknüpft es mit dem DWD_OpenData-Device. Außerdem wird der [[weblink ]] selbst angelegt, der seinerseits mit dem Weblink-Generator-Device verknüpft wird. Der Weblink benötigt für seine Funktion eine bestimmte Auswahl der Vorhersage-Merkmale. Wer das Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Moduls anpassen will, muss diese Merkmale auf jeden Fall mit berücksichtigen. &lt;br /&gt;
&lt;br /&gt;
Wenn vom Weblink nichts im Browser zu sehen ist, kann das daran liegen, dass der Browser kein aktuelles JavaScript verwendet oder JavaScript deaktiviert ist. Dann sollte das Attribut &#039;&#039;refreshRate&#039;&#039; auf 0 Sekunden eingestellt oder gelöscht werden. Mit aktiviertem Refresh werden die Daten auch ohne Seitenneuaufbau regelmäßig und bei Tab-Wechsel aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Liste der erforderlichen Vorhersage-Merkmale finden sich zusammen mit allen weitere Details zur Installation und Konfiguration in der Modulhilfe von &#039;&#039;99_DWD_OpenData_Weblink.pm&#039;&#039;, die man z.B. nach dem Anlegen des Weblink-Generator-Devices über die Weboberfläche abrufen kann.&lt;br /&gt;
&lt;br /&gt;
Hier ein Ausschnitt aus der Darstellung des Weblinks mit [[FHEMWEB]]:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODweblink.png|500px]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:DWDODmeteogram4d3h.png&amp;diff=29921</id>
		<title>Datei:DWDODmeteogram4d3h.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:DWDODmeteogram4d3h.png&amp;diff=29921"/>
		<updated>2019-03-16T18:13:03Z</updated>

		<summary type="html">&lt;p&gt;JensB: Meteogramm für DWD_OpenData-Device über 4 Tage mit 3 Stunden Auflösung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beschreibung ==&lt;br /&gt;
Meteogramm für DWD_OpenData-Device über 4 Tage mit 3 Stunden Auflösung&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=28960</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=28960"/>
		<updated>2019-01-05T17:51:59Z</updated>

		<summary type="html">&lt;p&gt;JensB: Link auf FHEMWEB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Versionsänderung: Die Vorhersagedaten wurden Mitte September 2018 von CSV auf KML umgestellt. Diese Umstellung ist inkompatibel: das DWD_OpenData-Modul muss aktualisiert werden, einige Reading-Namen haben sich geändert und der Weblink muss deinstalliert und neu installiert werden (siehe diesen {{Link2Forum|Topic=83097|Message=840270}} im Forum).}}&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB ({{Link2FU|14024|Forum}}/[[Benutzer Diskussion:JensB|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage und die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Dieser Befehl gilt für Debian-basierte Betriebssysteme - für andere Betriebssysteme ist eine analoge Funktion zu verwenden. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und anschließendem Neustart von FHEM wird die Sprache für FHEM eingestellt. Nun muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Nur für den Weblink erforderlich:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen. Den ermittelten Stationscode kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get forecast&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;forecastStation&#039;&#039; hinterlegen. Insgesamt werden vom DWD mehr als 70 Merkmale zur Verfügung gestellt. Eine Auflistung findet sich im Dokument [https://opendata.dwd.de/weather/lib/MetElementDefinition.xml MetElementDefinition]. Nur ein kleiner Teil der Merkmale wird in der Standardeinstellung des Moduls als Reading zur Verfügung gestellt. Wer andere Merkmale benötigt muss sie mit Komma getrennt dem Attribut &#039;&#039;forecastProperties&#039;&#039; zuweisen. Es empfiehlt sich zur Performance-Optimierung sowohl das Attribut &#039;&#039;forecastDays&#039;&#039; als auch das Attribut &#039;&#039;forecastProperties&#039;&#039; auf den tatsächlichen Bedarf einzustellen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warnzellen-ID Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Die Warnzellen-ID kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get alerts&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;alertArea&#039;&#039; hinterlegen. Die Warnzellen-ID ist ab der 2. Stelle identisch mit den ersten Ziffern des amtlichen Gemeindeschlüssels. Man kann z.B. den Namen von Gemeinde oder Landkreis bei den [https://www.statistik-bw.de/Statistik-Portal/gemeindeverz.asp Statistischen Ämtern des Bundes und der Länder] eingeben, den amtlichen Gemeindeschlüssels ermitteln und dann mit vorangestellter 1, 8 oder 9 im Warnzellen-ID Katalog des DWD nach einem Eintrag mit exakter oder weitgehender Übereinstimmung suchen. Wem das zu kompliziert vorkommt, kann bei mehrdeutigen Gemeinde- bzw. Landkreisbezeichnungen auch versuchen auszuprobieren, welche die richtige Wanrzellen-ID ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit automatisch Aktualisierung von Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Performance&lt;br /&gt;
Das DWD_OpenData-Modul ist ein Datenmodul mit relativ vielen Readings. In der Standardkonfiguration wird, wie bei jedem anderen FHEM Modul, bei jeder Änderung jedes Readings ein FHEM internes Ereignis erzeugt, damit andere FHEM Devices auf diese Änderungen reagieren können. Diese Ereignisse sorgen auch dafür, dass man Änderungen in der Weboberfläche sofort angezeigt bekommt, ohne die Webseite neu aufzurufen. Interessiert sich aber kein FHEM Device für die Änderungsbenachrichtung bestimmter Readings, entsteht unnötiger Verarbeitsoverhead, der je nach FHEM Konfiguration und verfügbarer CPU-Leistung auch mehrere Sekunden benötigen kann und in dieser Zeit andere Abläufe blockiert. Um die Performance zu optimieren, empfiehlt es sich,  mit [[event-on-update-reading]] für eine angepasste und dadurch effizientere Verarbeitung sorgen, indem man nur für die Readings Ereignisse zulässt, die man für die Weiterverarbeitung braucht. Der DWD_OpenData_Weblink braucht z.B. gar keine Ereignisse, um zu funktionieren. Hier eine minimalistische Beispielkonfiguration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr DWD event-on-update-reading state,fc_state,a_state&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration des Moduls finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen mit [[FHEMWEB]] steht das Modul [https://raw.githubusercontent.com/jnsbyr/fhem/master/FHEM/99_DWD_OpenData_Weblink.pm 99_DWD_OpenData_Weblink.pm] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Moduldatei herunterladen und in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren. Entweder die Datei direkt auf den FHEM-Server herunterladen (z.B. mit &#039;&#039;wget&#039;&#039;) oder beim indirekten Herunterladen darauf achten, dass dabei das Encoding nicht verändert wird (also z.B. bei WinSCP den Binär-Modus und nicht den Text-Modus verwenden). Ansonsten werden später z.B. Sonderzeichen wie &#039;&#039;°C&#039;&#039; falsch angezeigt. &lt;br /&gt;
&lt;br /&gt;
Anschließend kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD_Weblink_Generator DWD_OpenData_Weblink&lt;br /&gt;
 attr DWD_Weblink_Generator IODev DWD&lt;br /&gt;
 attr DWD_Weblink_Generator forecastDays 4&lt;br /&gt;
 # refreshRate nur dann setzten, wenn der Browser Java-Script beherrscht:&lt;br /&gt;
 attr DWD_Weblink_Generator refreshRate 900&lt;br /&gt;
 &lt;br /&gt;
 define DWD_Weblink weblink htmlCode { DWD_OpenData_Weblink::AsHtmlH(&amp;quot;DWD_Weblink_Generator&amp;quot;) } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit legt man das Weblink-Generator-Device an und verknüpft es mit dem DWD_OpenData-Device. Außerdem wird der [[weblink ]] selbst angelegt, der seinerseits mit dem Weblink-Generator-Device verknüpft wird. Der Weblink benötigt für seine Funktion eine bestimmte Auswahl der Vorhersage-Merkmale. Wer das Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Moduls anpassen will, muss diese Merkmale auf jeden Fall mit berücksichtigen. &lt;br /&gt;
&lt;br /&gt;
Wenn vom Weblink nichts im Browser zu sehen ist, kann das daran liegen, dass der Browser kein aktuelles JavaScript verwendet oder JavaScript deaktiviert ist. Dann sollte das Attribut &#039;&#039;refreshRate&#039;&#039; auf 0 Sekunden eingestellt oder gelöscht werden. Mit aktiviertem Refresh werden die Daten auch ohne Seitenneuaufbau regelmäßig und bei Tab-Wechsel aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Liste der erforderlichen Vorhersage-Merkmale finden sich zusammen mit allen weitere Details zur Installation und Konfiguration in der Modulhilfe von &#039;&#039;99_DWD_OpenData_Weblink.pm&#039;&#039;, die man z.B. nach dem Anlegen des Weblink-Generator-Devices über die Weboberfläche abrufen kann.&lt;br /&gt;
&lt;br /&gt;
Hier ein Ausschnitt aus der Darstellung des Weblinks mit [[FHEMWEB]]:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODweblink.png|500px]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=28959</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=28959"/>
		<updated>2019-01-05T17:47:00Z</updated>

		<summary type="html">&lt;p&gt;JensB: falschen Link korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Versionsänderung: Die Vorhersagedaten wurden Mitte September 2018 von CSV auf KML umgestellt. Diese Umstellung ist inkompatibel: das DWD_OpenData-Modul muss aktualisiert werden, einige Reading-Namen haben sich geändert und der Weblink muss deinstalliert und neu installiert werden (siehe diesen {{Link2Forum|Topic=83097|Message=840270}} im Forum).}}&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB ({{Link2FU|14024|Forum}}/[[Benutzer Diskussion:JensB|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage und die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Dieser Befehl gilt für Debian-basierte Betriebssysteme - für andere Betriebssysteme ist eine analoge Funktion zu verwenden. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und anschließendem Neustart von FHEM wird die Sprache für FHEM eingestellt. Nun muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Nur für den Weblink erforderlich:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen. Den ermittelten Stationscode kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get forecast&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;forecastStation&#039;&#039; hinterlegen. Insgesamt werden vom DWD mehr als 70 Merkmale zur Verfügung gestellt. Eine Auflistung findet sich im Dokument [https://opendata.dwd.de/weather/lib/MetElementDefinition.xml MetElementDefinition]. Nur ein kleiner Teil der Merkmale wird in der Standardeinstellung des Moduls als Reading zur Verfügung gestellt. Wer andere Merkmale benötigt muss sie mit Komma getrennt dem Attribut &#039;&#039;forecastProperties&#039;&#039; zuweisen. Es empfiehlt sich zur Performance-Optimierung sowohl das Attribut &#039;&#039;forecastDays&#039;&#039; als auch das Attribut &#039;&#039;forecastProperties&#039;&#039; auf den tatsächlichen Bedarf einzustellen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warnzellen-ID Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Die Warnzellen-ID kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get alerts&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;alertArea&#039;&#039; hinterlegen. Die Warnzellen-ID ist ab der 2. Stelle identisch mit den ersten Ziffern des amtlichen Gemeindeschlüssels. Man kann z.B. den Namen von Gemeinde oder Landkreis bei den [https://www.statistik-bw.de/Statistik-Portal/gemeindeverz.asp Statistischen Ämtern des Bundes und der Länder] eingeben, den amtlichen Gemeindeschlüssels ermitteln und dann mit vorangestellter 1, 8 oder 9 im Warnzellen-ID Katalog des DWD nach einem Eintrag mit exakter oder weitgehender Übereinstimmung suchen. Wem das zu kompliziert vorkommt, kann bei mehrdeutigen Gemeinde- bzw. Landkreisbezeichnungen auch versuchen auszuprobieren, welche die richtige Wanrzellen-ID ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit automatisch Aktualisierung von Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Performance&lt;br /&gt;
Das DWD_OpenData-Modul ist ein Datenmodul mit relativ vielen Readings. In der Standardkonfiguration wird, wie bei jedem anderen FHEM Modul, bei jeder Änderung jedes Readings ein FHEM internes Ereignis erzeugt, damit andere FHEM Devices auf diese Änderungen reagieren können. Diese Ereignisse sorgen auch dafür, dass man Änderungen in der Weboberfläche sofort angezeigt bekommt, ohne die Webseite neu aufzurufen. Interessiert sich aber kein FHEM Device für die Änderungsbenachrichtung bestimmter Readings, entsteht unnötiger Verarbeitsoverhead, der je nach FHEM Konfiguration und verfügbarer CPU-Leistung auch mehrere Sekunden benötigen kann und in dieser Zeit andere Abläufe blockiert. Um die Performance zu optimieren, empfiehlt es sich,  mit [[event-on-update-reading]] für eine angepasste und dadurch effizientere Verarbeitung sorgen, indem man nur für die Readings Ereignisse zulässt, die man für die Weiterverarbeitung braucht. Der DWD_OpenData_Weblink braucht z.B. gar keine Ereignisse, um zu funktionieren. Hier eine minimalistische Beispielkonfiguration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr DWD event-on-update-reading state,fc_state,a_state&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration des Moduls finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen steht das Modul [https://raw.githubusercontent.com/jnsbyr/fhem/master/FHEM/99_DWD_OpenData_Weblink.pm 99_DWD_OpenData_Weblink.pm] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Moduldatei herunterladen und in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren. Entweder die Datei direkt auf den FHEM-Server herunterladen (z.B. mit &#039;&#039;wget&#039;&#039;) oder beim indirekten Herunterladen darauf achten, dass dabei das Encoding nicht verändert wird (also z.B. bei WinSCP den Binär-Modus und nicht den Text-Modus verwenden). Ansonsten werden später z.B. Sonderzeichen wie &#039;&#039;°C&#039;&#039; falsch angezeigt. &lt;br /&gt;
&lt;br /&gt;
Anschließend kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD_Weblink_Generator DWD_OpenData_Weblink&lt;br /&gt;
 attr DWD_Weblink_Generator IODev DWD&lt;br /&gt;
 attr DWD_Weblink_Generator forecastDays 4&lt;br /&gt;
 # refreshRate nur dann setzten, wenn der Browser Java-Script beherrscht:&lt;br /&gt;
 attr DWD_Weblink_Generator refreshRate 900&lt;br /&gt;
 &lt;br /&gt;
 define DWD_Weblink weblink htmlCode { DWD_OpenData_Weblink::AsHtmlH(&amp;quot;DWD_Weblink_Generator&amp;quot;) } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit legt man das Weblink-Generator-Device an und verknüpft es mit dem DWD_OpenData-Device. Außerdem wird der [[weblink ]] selbst angelegt, der seinerseits mit dem Weblink-Generator-Device verknüpft wird. Der Weblink benötigt für seine Funktion eine bestimmte Auswahl der Vorhersage-Merkmale. Wer das Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Moduls anpassen will, muss diese Merkmale auf jeden Fall mit berücksichtigen. &lt;br /&gt;
&lt;br /&gt;
Wenn vom Weblink nichts im Browser zu sehen ist, kann das daran liegen, dass der Browser kein aktuelles JavaScript verwendet oder JavaScript deaktiviert ist. Dann sollte das Attribut &#039;&#039;refreshRate&#039;&#039; auf 0 Sekunden eingestellt oder gelöscht werden. Mit aktiviertem Refresh werden die Daten auch ohne Seitenneuaufbau regelmäßig und bei Tab-Wechsel aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Liste der erforderlichen Vorhersage-Merkmale finden sich zusammen mit allen weitere Details zur Installation und Konfiguration in der Modulhilfe von &#039;&#039;99_DWD_OpenData_Weblink.pm&#039;&#039;, die man z.B. nach dem Anlegen des Weblink-Generator-Devices über die Weboberfläche abrufen kann.&lt;br /&gt;
&lt;br /&gt;
Hier ein Ausschnitt aus der Darstellung des Weblinks mit [[FHEMWEB]]:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODweblink.png|500px]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=28695</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=28695"/>
		<updated>2018-12-16T20:18:10Z</updated>

		<summary type="html">&lt;p&gt;JensB: Hinweis zur Performance-Optimierung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Versionänderung: Die Vorhersagedaten wurden Mitte September 2018 von CSV auf KML umgestellt. Diese Umstellung ist inkompatibel: das DWD_OpenData-Modul muss aktualisiert werden, einige Reading-Namen haben sich geändert und der Weblink muss deinstalliert und neu installiert werden (siehe {{Link2Forum|Topic=83097|Message=840270}}).}}&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage und die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Dieser Befehl gilt für Debian-basierte Betriebssysteme - für andere Betriebssysteme ist eine analoge Funktion zu verwenden. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und anschließendem Neustart von FHEM wird die Sprache für FHEM eingestellt. Nun muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Nur für den Weblink erforderlich:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen. Den ermittelten Stationscode kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get forecast&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;forecastStation&#039;&#039; hinterlegen. Insgesamt werden vom DWD mehr als 70 Merkmale zur Verfügung gestellt. Eine Auflistung findet sich im Dokument [https://opendata.dwd.de/weather/lib/MetElementDefinition.xml MetElementDefinition]. Nur ein kleiner Teil der Merkmale wird in der Standardeinstellung des Moduls als Reading zur Verfügung gestellt. Wer andere Merkmale benötigt muss sie mit Komma getrennt dem Attribut &#039;&#039;forecastProperties&#039;&#039; zuweisen. Es empfiehlt sich zur Performance-Optimierung sowohl das Attribut &#039;&#039;forecastDays&#039;&#039; als auch das Attribut &#039;&#039;forecastProperties&#039;&#039; auf den tatsächlichen Bedarf einzustellen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warnzellen-ID Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Die Warnzellen-ID kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get alerts&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;alertArea&#039;&#039; hinterlegen. Die Warnzellen-ID ist ab der 2. Stelle identisch mit den ersten Ziffern des amtlichen Gemeindeschlüssels. Man kann z.B. den Namen von Gemeinde oder Landkreis bei den [https://www.statistik-bw.de/Statistik-Portal/gemeindeverz.asp Statistischen Ämtern des Bundes und der Länder] eingeben, den amtlichen Gemeindeschlüssels ermitteln und dann mit vorangestellter 1, 8 oder 9 im Warnzellen-ID Katalog des DWD nach einem Eintrag mit exakter oder weitgehender Übereinstimmung suchen. Wem das zu kompliziert vorkommt, kann bei mehrdeutigen Gemeinde- bzw. Landkreisbezeichnungen auch versuchen auszuprobieren, welche die richtige Wanrzellen-ID ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit automatisch Aktualisierung von Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Performance&lt;br /&gt;
Das DWD_OpenData-Modul ist ein Datenmodul mit relativ vielen Readings. In der Standardkonfiguration wird, wie bei jedem anderen FHEM Modul, bei jeder Änderung jedes Readings ein FHEM internes Ereignis erzeugt, damit andere FHEM Devices auf diese Änderungen reagieren können. Diese Ereignisse sorgen auch dafür, dass man Änderungen in der Weboberfläche sofort angezeigt bekommt, ohne die Webseite neu aufzurufen. Interessiert sich aber kein FHEM Device für die Änderungsbenachrichtung bestimmter Readings, entsteht unnötiger Verarbeitsoverhead, der je nach FHEM Konfiguration und verfügbarer CPU-Leistung auch mehrere Sekunden benötigen kann und in dieser Zeit andere Abläufe blockiert. Um die Performance zu optimieren, empfiehlt es sich,  mit [[event-on-update-reading]] für eine angepasste und dadurch effizientere Verarbeitung sorgen, indem man nur für die Readings Ereignisse zulässt, die man für die Weiterverarbeitung braucht. Der DWD_OpenData_Weblink braucht z.B. gar keine Ereignisse, um zu funktionieren. Hier eine minimalistische Beispielkonfiguration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr DWD event-on-update-reading state,fc_state,a_state&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration des Moduls finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen steht das Modul [https://raw.githubusercontent.com/jnsbyr/fhem/master/FHEM/55_DWD_OpenData.pm 99_DWD_OpenData_Weblink.pm] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Moduldatei herunterladen und in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren. Entweder die Datei direkt auf den FHEM-Server herunterladen (z.B. mit &#039;&#039;wget&#039;&#039;) oder beim indirekten Herunterladen darauf achten, dass dabei das Encoding nicht verändert wird (also z.B. bei WinSCP den Binär-Modus und nicht den Text-Modus verwenden). Ansonsten werden später z.B. Sonderzeichen wie &#039;&#039;°C&#039;&#039; falsch angezeigt. &lt;br /&gt;
&lt;br /&gt;
Anschließend kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD_Weblink_Generator DWD_OpenData_Weblink&lt;br /&gt;
 attr DWD_Weblink_Generator IODev DWD&lt;br /&gt;
 attr DWD_Weblink_Generator forecastDays 4&lt;br /&gt;
 # refreshRate nur dann setzten, wenn der Browser Java-Script beherrscht:&lt;br /&gt;
 attr DWD_Weblink_Generator refreshRate 900&lt;br /&gt;
 &lt;br /&gt;
 define DWD_Weblink weblink htmlCode { DWD_OpenData_Weblink::AsHtmlH(&amp;quot;DWD_Weblink_Generator&amp;quot;) } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit legt man das Weblink-Generator-Device an und verknüpft es mit dem DWD_OpenData-Device. Außerdem wird der [[weblink ]] selbst angelegt, der seinerseits mit dem Weblink-Generator-Device verknüpft wird. Der Weblink benötigt für seine Funktion eine bestimmte Auswahl der Vorhersage-Merkmale. Wer das Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Moduls anpassen will, muss diese Merkmale auf jeden Fall mit berücksichtigen. &lt;br /&gt;
&lt;br /&gt;
Wenn vom Weblink nichts im Browser zu sehen ist, kann das daran liegen, dass der Browser kein aktuelles JavaScript verwendet oder JavaScript deaktiviert ist. Dann sollte das Attribut &#039;&#039;refreshRate&#039;&#039; auf 0 Sekunden eingestellt oder gelöscht werden. Mit aktiviertem Refresh werden die Daten auch ohne Seitenneuaufbau regelmäßig und bei Tab-Wechsel aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Liste der erforderlichen Vorhersage-Merkmale finden sich zusammen mit allen weitere Details zur Installation und Konfiguration in der Modulhilfe von &#039;&#039;99_DWD_OpenData_Weblink.pm&#039;&#039;, die man z.B. nach dem Anlegen des Weblink-Generator-Devices über die Weboberfläche abrufen kann.&lt;br /&gt;
&lt;br /&gt;
Hier ein Ausschnitt aus der Darstellung des Weblinks mit [[FHEMWEB]]:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODweblink.png|500px]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=27958</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=27958"/>
		<updated>2018-10-03T15:26:09Z</updated>

		<summary type="html">&lt;p&gt;JensB: Installationshinweise ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Versionänderung: Die Vorhersagedaten wurden Mitte September 2018 von CSV auf KML umgestellt. Diese Umstellung ist inkompatibel: das DWD_OpenData-Modul muss aktualisiert werden, einige Reading-Namen haben sich geändert und der Weblink muss deinstalliert und neu installiert werden (siehe {{Link2Forum|Topic=83097|Message=840270}}).}}&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage und die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Dieser Befehl gilt für Debian-basierte Betriebssysteme - für andere Betriebssysteme ist eine analoge Funktion zu verwenden. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und anschließendem Neustart von FHEM wird die Sprache für FHEM eingestellt. Nun muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Nur für den Weblink erforderlich:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen. Den ermittelten Stationscode kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get forecast&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;forecastStation&#039;&#039; hinterlegen. Insgesamt werden vom DWD mehr als 70 Merkmale zur Verfügung gestellt. Eine Auflistung findet sich im Dokument [https://opendata.dwd.de/weather/lib/MetElementDefinition.xml MetElementDefinition]. Nur ein kleiner Teil der Merkmale wird in der Standardeinstellung des Moduls als Reading zur Verfügung gestellt. Wer andere Merkmale benötigt muss sie mit Komma getrennt dem Attribut &#039;&#039;forecastProperties&#039;&#039; zuweisen. Es empfiehlt sich zur Performance-Optimierung sowohl das Attribut &#039;&#039;forecastDays&#039;&#039; als auch das Attribut &#039;&#039;forecastProperties&#039;&#039; auf den tatsächlichen Bedarf einzustellen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warnzellen-ID Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Die Warnzellen-ID kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get alerts&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;alertArea&#039;&#039; hinterlegen. Die Warnzellen-ID ist ab der 2. Stelle identisch mit den ersten Ziffern des amtlichen Gemeindeschlüssels. Man kann z.B. den Namen von Gemeinde oder Landkreis bei den [https://www.statistik-bw.de/Statistik-Portal/gemeindeverz.asp Statistischen Ämtern des Bundes und der Länder] eingeben, den amtlichen Gemeindeschlüssels ermitteln und dann mit vorangestellter 1, 8 oder 9 im Warnzellen-ID Katalog des DWD nach einem Eintrag mit exakter oder weitgehender Übereinstimmung suchen. Wem das zu kompliziert vorkommt, kann bei mehrdeutigen Gemeinde- bzw. Landkreisbezeichnungen auch versuchen auszuprobieren, welche die richtige Wanrzellen-ID ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit automatisch Aktualisierung von Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen steht das Modul [https://raw.githubusercontent.com/jnsbyr/fhem/master/FHEM/55_DWD_OpenData.pm 99_DWD_OpenData_Weblink.pm] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Moduldatei herunterladen und in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren. Entweder die Datei direkt auf den FHEM-Server herunterladen (z.B. mit &#039;&#039;wget&#039;&#039;) oder beim indirekten Herunterladen darauf achten, dass dabei das Encoding nicht verändert wird (also z.B. bei WinSCP den Binär-Modus und nicht den Text-Modus verwenden). Ansonsten werden später z.B. Sonderzeichen wie &#039;&#039;°C&#039;&#039; falsch angezeigt. &lt;br /&gt;
&lt;br /&gt;
Anschließend kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD_Weblink_Generator DWD_OpenData_Weblink&lt;br /&gt;
 attr DWD_Weblink_Generator IODev DWD&lt;br /&gt;
 attr DWD_Weblink_Generator forecastDays 4&lt;br /&gt;
 # refreshRate nur dann setzten, wenn der Browser Java-Script beherrscht:&lt;br /&gt;
 attr DWD_Weblink_Generator refreshRate 900&lt;br /&gt;
 &lt;br /&gt;
 define DWD_Weblink weblink htmlCode { DWD_OpenData_Weblink::AsHtmlH(&amp;quot;DWD_Weblink_Generator&amp;quot;) } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit legt man das Weblink-Generator-Device an und verknüpft es mit dem DWD_OpenData-Device. Außerdem wird der [[weblink ]] selbst angelegt, der seinerseits mit dem Weblink-Generator-Device verknüpft wird. Der Weblink benötigt für seine Funktion eine bestimmte Auswahl der Vorhersage-Merkmale. Wer das Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Moduls anpassen will, muss diese Merkmale auf jeden Fall mit berücksichtigen. &lt;br /&gt;
&lt;br /&gt;
Wenn vom Weblink nichts im Browser zu sehen ist, kann das daran liegen, dass der Browser kein aktuelles JavaScript verwendet oder JavaScript deaktiviert ist. Dann sollte das Attribut &#039;&#039;refreshRate&#039;&#039; auf 0 Sekunden eingestellt oder gelöscht werden. Mit aktiviertem Refresh werden die Daten auch ohne Seitenneuaufbau regelmäßig und bei Tab-Wechsel aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Liste der erforderlichen Vorhersage-Merkmale finden sich zusammen mit allen weitere Details zur Installation und Konfiguration in der Modulhilfe von &#039;&#039;99_DWD_OpenData_Weblink.pm&#039;&#039;, die man z.B. nach dem Anlegen des Weblink-Generator-Devices über die Weboberfläche abrufen kann.&lt;br /&gt;
&lt;br /&gt;
Hier ein Ausschnitt aus der Darstellung des Weblinks mit [[FHEMWEB]]:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODweblink.png|500px]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=27943</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=27943"/>
		<updated>2018-09-28T18:31:16Z</updated>

		<summary type="html">&lt;p&gt;JensB: Installationsbeschreibung aktualisiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Versionänderung: Die Vorhersagedaten wurden Mitte September 2018 von CSV auf KML umgestellt. Diese Umstellung ist inkompatibel: das DWD_OpenData-Modul muss aktualisiert werden, einige Reading-Namen haben sich geändert und der Weblink muss deinstalliert und neu installiert werden (siehe {{Link2Forum|Topic=83097|Message=840270}}).}}&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage und die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und anschließendem Neustart von FHEM wird die Sprache für FHEM eingestellt. Nun muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Nur für den Weblink erforderlich:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen. Den ermittelten Stationscode kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get forecast&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;forecastStation&#039;&#039; hinterlegen. Insgesamt werden vom DWD mehr als 70 Merkmale zur Verfügung gestellt. Eine Auflistung findet sich im Dokument [https://opendata.dwd.de/weather/lib/MetElementDefinition.xml MetElementDefinition]. Nur ein kleiner Teil der Merkmale wird in der Standardeinstellung des Moduls als Reading zur Verfügung gestellt. Wer andere Merkmale benötigt muss sie mit Komma getrennt dem Attribut &#039;&#039;forecastProperties&#039;&#039; zuweisen. Es empfiehlt sich zur Performance-Optimierung sowohl das Attribut &#039;&#039;forecastDays&#039;&#039; als auch das Attribut &#039;&#039;forecastProperties&#039;&#039; auf den tatsächlichen Bedarf einzustellen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warnzellen-ID Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Die Warnzellen-ID kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get alerts&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;alertArea&#039;&#039; hinterlegen. Die Warnzellen-ID ist ab der 2. Stelle identisch mit den ersten Ziffern des amtlichen Gemeindeschlüssels. Man kann z.B. den Namen von Gemeinde oder Landkreis bei den [https://www.statistik-bw.de/Statistik-Portal/gemeindeverz.asp Statistischen Ämtern des Bundes und der Länder] eingeben, den amtlichen Gemeindeschlüssels ermitteln und dann mit vorangestellter 1, 8 oder 9 im Warnzellen-ID Katalog des DWD nach einem Eintrag mit exakter oder weitgehender Übereinstimmung suchen. Wem das zu kompliziert vorkommt, kann bei mehrdeutigen Gemeinde- bzw. Landkreisbezeichnungen auch versuchen auszuprobieren, welche die richtige Wanrzellen-ID ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit automatisch Aktualisierung von Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen steht das Modul [https://github.com/jnsbyr/fhem/blob/master/FHEM/99_DWD_OpenData_Weblink.pm 99_DWD_OpenData_Weblink.pm] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Zunächst die Moduldatei herunterladen und in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren. Dann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD_Weblink_Generator DWD_OpenData_Weblink&lt;br /&gt;
 attr DWD_Weblink_Generator IODev DWD&lt;br /&gt;
 attr DWD_Weblink_Generator forecastDays 4&lt;br /&gt;
 attr DWD_Weblink_Generator refreshRate 900&lt;br /&gt;
 &lt;br /&gt;
 define DWD_Weblink weblink htmlCode { DWD_OpenData_Weblink::AsHtmlH(&amp;quot;DWD_Weblink_Generator&amp;quot;) } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit legt man das Weblink-Generator-Device an und verknüpft es mit dem DWD_OpenData-Device. Außerdem wird der [[weblink ]] selbst angelegt, der seinerseits mit dem Weblink-Generator-Device verknüpft wird. Der Weblink benötigt für seine Funktion eine bestimmte Auswahl der Vorhersage-Merkmale. Wer das Attribut &#039;&#039;forecastProperties&#039;&#039; des DWD_OpenData-Moduls anpassen will, muss diese Merkmale auf jeden Fall mit berücksichtigen. &lt;br /&gt;
&lt;br /&gt;
Wer einen Browser ohne aktuelles JavaScript verwendet, sollte das Attribut &#039;&#039;refreshRate&#039;&#039; auf 0 Sekunden eingestellt lassen oder löschen. Mit aktiviertem Refresh werden die Daten auch ohne Seitenneuaufbau regelmäßig und bei Tab-Wechsel aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Liste der erforderlichen Vorhersage-Merkmale finden sich zusammen mit allen weitere Details zur Installation und Konfiguration in der Modulhilfe von &#039;&#039;99_DWD_OpenData_Weblink.pm&#039;&#039;, die man z.B. nach dem Anlegen des Weblink-Generator-Devices über die Weboberfläche abrufen kann.&lt;br /&gt;
&lt;br /&gt;
Hier ein Ausschnitt aus der Darstellung des Weblinks mit [[FHEMWEB]]:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODweblink.png|500px]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Wetter_und_Wettervorhersagen&amp;diff=27942</id>
		<title>Wetter und Wettervorhersagen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Wetter_und_Wettervorhersagen&amp;diff=27942"/>
		<updated>2018-09-28T17:21:37Z</updated>

		<summary type="html">&lt;p&gt;JensB: Vorhersagezeitraum von DWD_OpenData an neue Datenlage angepasst&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wetterdaten und Wettervorhersagen können auf verschiedene Weise in FHEM eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
== Yahoo-Wetter ==&lt;br /&gt;
Für die einfache Einbindung des Yahoo-Wetters gibt es das spezielle Modul [[Weather]].&lt;br /&gt;
&lt;br /&gt;
== Unwetterzentrale ==&lt;br /&gt;
Informationen der Seite(n) Unwetterzentrale.de können mit Hilfe des Moduls [[UWZ]] eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
== Modul OPENWEATHER ==&lt;br /&gt;
Das Modul [[OPENWEATHER]] extrahiert Wetterdaten über die &amp;quot;openweather&amp;quot;-Schnittstelle (API) von www.wetter.com. &lt;br /&gt;
*Vorschau-Zeitraum: 3 Tage&lt;br /&gt;
*Vorschau-Interval: 6:00, 11:00, 17:00, 23:00&lt;br /&gt;
*Aktuelle Daten: keine&lt;br /&gt;
&lt;br /&gt;
== Modul PROPLANTA ==&lt;br /&gt;
Das Modul [[PROPLANTA]] extrahiert Wetterdaten von der Website www.proplanta.de. (keine API)&lt;br /&gt;
*Vorschau-Zeitraum: 12 Tage&lt;br /&gt;
*Vorschau-Interval: 3 h&lt;br /&gt;
*Aktuelle Daten: jede volle Stunde&lt;br /&gt;
&lt;br /&gt;
== Modul WWO ==&lt;br /&gt;
Das Modul extrahiert Wetterdaten über die (alte) API von worldweatheronline.com&lt;br /&gt;
*Vorschau-Zeitraum: ?? Tage&amp;lt;BR&amp;gt;&lt;br /&gt;
*Vorschau-Interval: ??&amp;lt;br&amp;gt;&lt;br /&gt;
*Aktuelle Daten: ??&lt;br /&gt;
&lt;br /&gt;
== Deutscher Wetterdienst (DWD) ==&lt;br /&gt;
&lt;br /&gt;
=== Modul DWD_OpenData ===&lt;br /&gt;
Das Modul [[DWD_OpenData]] stellt einen Teil der frei verfügbaren Daten des Deutschen Wetterdienstes (DWD) bereit, die über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] abgerufen werden können (diverse Datenformate, keine API). &lt;br /&gt;
*Vorschau-Zeitraum: 10 Tage&lt;br /&gt;
*Vorschau-Interval: datenabhängig, viele mit 3 h&lt;br /&gt;
*Vorschau-Orte: national und international&lt;br /&gt;
*Aktuelle Daten: nicht implementiert&lt;br /&gt;
*Wetterwarnungen: für Landkreise und Gemeinden in deutsch oder englisch&lt;br /&gt;
&lt;br /&gt;
Es gibt zum Modul auch einen Weblink für [[FHEMWEB]], der 2 Icons pro Tag in horizontaler Form darstellt. Die Anzahl der insgesamt dargestellten Icons ist konfigurierbar. Liegen Wetterwarnungen vor, wird zusätzlich ein Warnsymbol angezeigt, über das man per Klick weitere Details zur Wetterwarnung abrufen kann.&lt;br /&gt;
&lt;br /&gt;
[[DWD_OpenData|Weitere Details und Installationsbeschreibung]]&lt;br /&gt;
&lt;br /&gt;
=== Wetterwarnungen als Karte ===&lt;br /&gt;
Der Deutsche Wetterdienst [http://www.dwd.de DWD] stellt neben diversen Wetterdaten auch Wetterwarnungen in Bildform bereit. Diese können sehr einfach via [http://fhem.de/commandref_DE.html#weblink weblink iframe] in FHEM eingebunden werden - das ist zwar nicht die schönste Form, aber die schnellste.&lt;br /&gt;
&lt;br /&gt;
Dazu sucht man sich zuerst auf der [http://www.dwd.de/bvbw/appmanager/bvbw/dwdwwwDesktop?_nfpb=true&amp;amp;_pageLabel=_dwdwww_wetter_warnungen_warnungen&amp;amp;T92053gsbDocumentPath=BEA__Navigation%2FWetter__Warnungen%2FWarnungen.html%3F__nnn%3Dtrue&amp;amp;lastPageLabel=dwdwww_wetter_warnungen Warnungsseite des DWD] die eigene Region heraus (in der Karte durchklicken). Die gewünschte URL für Berlin Stadt ist z.B. &amp;lt;code&amp;gt;http://www.dwd.de/dyn/app/ws/html/reports/BXX_warning_de.html#WS_ANCHOR_0&amp;lt;/code&amp;gt;. Das Anhängsel &amp;lt;code&amp;gt;#WS_ANCHOR_0&amp;lt;/code&amp;gt; kann man in der Konfiguration auch weglassen.&lt;br /&gt;
&lt;br /&gt;
Die Einbindung in FHEM sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define dwd_warnmeldung weblink iframe http://www.dwd.de/dyn/app/ws/html/reports/BXX_warning_de.html&lt;br /&gt;
attr dwd_warnmeldung group Wetterwarnungen (DWD)&lt;br /&gt;
attr dwd_warnmeldung htmlattr width=&amp;quot;100%&amp;quot; height=&amp;quot;300&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
attr dwd_warnmeldung room Wettervorhersage,Startseite&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorhersage-Diagramm von YR ==&lt;br /&gt;
[http://www.yr.no YR] ist die Seite des norwegischen Wetterdiensts. Er ist zwar nur in Teilen auf Englisch (und gar nicht auf Deutsch) verfügbar, bietet aber sehr gute Wettervorhersagen - auch mit eigenen Vorhersagen für kleine Dörfer. Neben etlichen Detailinfos bietet YR eine sehr schicke 48h-Vorhersage-Grafik. Diese kann sehr einfach via [http://fhem.de/commandref_DE.html#weblink weblink iframe] in FHEM eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Dazu geht man auf die [http://www.yr.no Startseite von YR] und gibt in das Suchfeld den Namen seines Dörfchens ein - die Ergebnissliste kann ziemlich lang werden, sodass man evtl. sehr genau schauen muss, welches das eigene Kaff ist - bei mir war es an 29. Stelle... ;-) Auf der gewünschten Seite gibt es einen Unterpunkt &amp;quot;Hour by hour&amp;quot;, wo sich die besagte Grafik findet. Hier kopiert man sich einfach die URL der Grafik.&lt;br /&gt;
&lt;br /&gt;
Die Einbindung in FHEM sieht dann bspw. wie folgt aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Wetter_yr_Vorhersage weblink iframe http://www.yr.no/place/Germany/Berlin/Berlin/meteogram.png&lt;br /&gt;
attr Wetter_yr_Vorhersage group Wettervorhersage (yr)&lt;br /&gt;
attr Wetter_yr_Vorhersage htmlattr width=&amp;quot;100%&amp;quot; height=&amp;quot;300&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
attr Wetter_yr_Vorhersage room Wettervorhersage,Start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wetter von Weather Underground ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Neben dem hier vorgestellten Abruf der Weather Underground-Daten mit [[HTTPMOD]] kann auf Weather Underground-Daten auch mit dem darauf spezialisierten Modul [http://fhem.de/commandref.html#Wunderground Wunderground] zugegriffen werden.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Dieses Vorgehen ist etwas anspruchsvoller und somit eher für erfahrene FHEM-User geeignet.&lt;br /&gt;
&lt;br /&gt;
[http://www.wunderground.com/ Weather Underground] ist bietet eine sehr umfassende Sammlung aller möglichen offiziellen und privaten (aber teils sehr professionellen) Wetterstationen weltweit. Es besteht eine recht hohe Wahrscheinlichkeit, dass es in der eigenen Umgebung schon eine Wetterstation gibt. Anstatt nun selbst eine komplette Wetterstation aufzubauen, kann man alternativ auf die Daten der Nachbarstation zugreifen.&lt;br /&gt;
&lt;br /&gt;
Dazu sind grundsätzlich die folgenden Schritte notwendig:&lt;br /&gt;
* Finden der geeigneten Station&lt;br /&gt;
* Auswerten der XML-Daten&lt;br /&gt;
* Erstellen passender gplot-Dateien&lt;br /&gt;
&lt;br /&gt;
=== Finden der geeigneten Station ===&lt;br /&gt;
Als erstes geht man auf die [http://www.wunderground.com Startseite von Weather Underground] und gibt in das Suchfeld den Namen seines Dörfchens oder der nächsten Stadt ein - für Berlin landet man bspw. auf Seite für &amp;quot;Berlin Alexanderplatz&amp;quot;. Es gibt aber manchmal sehr viele Wetterstationen in der direkten Umgebung. Diese findet man indem am auf &amp;quot;Change Station&amp;quot; klickt und sich eine passende Station aussucht. Nähere Infos (zB. zur verwendeten Hard- und Software) zu der gewählten Wetterstation erhält man, wenn man auf den Namen der Station klickt und dann auf &amp;quot;About this PWS&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Weather Underground stellt die Daten der Wetterstation auch über eine API als XML bereit, die wir auswerten können. Die entsprechende URL findet sich ebenfalls unter &amp;quot;About this PWS&amp;quot; unter &amp;quot;Download current conditions XML&amp;quot;. Für Berlin Prenzlauer Berg wäre dies bspw. &lt;br /&gt;
&amp;lt;code&amp;gt;http://api.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBERLIN15&amp;amp;format=XML&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entscheidend für die jeweilige Station ist der Teil nach &amp;quot;?=ID&amp;quot;, also in diesem Fall &amp;quot;IBERLIN15&amp;quot;. Dieser Teil des Links lässt sich leicht durch die ID einer anderen Station ersetzen und die Suche nach dem entsprechenden Link auf der Seite der Station bleibt erspart.&lt;br /&gt;
&lt;br /&gt;
=== Auswerten der XML-Daten ===&lt;br /&gt;
Die Auswertung der XML-Daten erfolgt via [[HTTPMOD]]. Da dies nicht ganz trivial ist, sind im Folgenden zuerst die wesentlichen Konfigurationsschritte exemplarisch beschrieben. Weiter unten findet sich dann die fertige vollständige Konfiguration.&lt;br /&gt;
&lt;br /&gt;
Es erstes wird das Device HTTPMOD definiert (die 600 am Schluss ist der Aktualisierungszyklus in Sekunden, also alle 10 min):&lt;br /&gt;
:&amp;lt;code&amp;gt;define wetter_prenzelberg HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IBERLIN15 600 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann werden Attribute für alle Readings definiert:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr wetter_prenzelberg userattr readingsName_cloudiness readingsName_date ... &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann wird jedem Attribut ein Name zugewiesen (unter diesem Namen wird der Wert ins Log geschrieben):&lt;br /&gt;
:&amp;lt;code&amp;gt;attr wetter_prenzelberg readingsName_cloudiness cloudiness &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Schluss wird das Reading selbst definiert:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr wetter_prenzelberg readingsRegex_cloudiness cloudiness id=&amp;quot;NN&amp;quot; percent=&amp;quot;([\d\.]+) &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die gesamte Konfiguration für alle von der API angebotenen Wetterwerte sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define wetter_prenzelberg HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IBERLIN15 600&lt;br /&gt;
attr wetter_prenzelberg userattr readingsName_cloudiness readingsName_date readingsName_dewpointTemperature readingsName_fog readingsName_heatindex readingsName_humidity readingsName_pressure readingsName_solarRadiation readingsName_solarUV readingsName_temperature readingsName_time readingsName_windChill readingsName_windDegrees readingsName_windDirection readingsName_windGust readingsName_windSpeed readingsRegex_cloudiness readingsRegex_date readingsRegex_dewpointTemperature readingsRegex_fog readingsRegex_heatindex readingsRegex_humidity readingsRegex_pressure readingsRegex_solarRadiation readingsRegex_solarUV readingsRegex_temperature readingsRegex_time readingsRegex_windChill readingsRegex_windDegrees readingsRegex_windDirection readingsRegex_windGust readingsRegex_windSpeed&lt;br /&gt;
attr wetter_prenzelberg readingsName_cloudiness cloudiness&lt;br /&gt;
attr wetter_prenzelberg readingsName_date date&lt;br /&gt;
attr wetter_prenzelberg readingsName_dewpointTemperature dewpointTemperature&lt;br /&gt;
attr wetter_prenzelberg readingsName_fog fog&lt;br /&gt;
attr wetter_prenzelberg readingsName_heatindex heatindex&lt;br /&gt;
attr wetter_prenzelberg readingsName_humidity humidity&lt;br /&gt;
attr wetter_prenzelberg readingsName_pressure pressure&lt;br /&gt;
attr wetter_prenzelberg readingsName_solarRadiation solarRadiation&lt;br /&gt;
attr wetter_prenzelberg readingsName_solarUV solarUV&lt;br /&gt;
attr wetter_prenzelberg readingsName_temperature temperature&lt;br /&gt;
attr wetter_prenzelberg readingsName_time time&lt;br /&gt;
attr wetter_prenzelberg readingsName_windChill windChill&lt;br /&gt;
attr wetter_prenzelberg readingsName_windDegrees windDegrees&lt;br /&gt;
attr wetter_prenzelberg readingsName_windDirection windDirection&lt;br /&gt;
attr wetter_prenzelberg readingsName_windGust windGust&lt;br /&gt;
attr wetter_prenzelberg readingsName_windSpeed windSpeed&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_cloudiness cloudiness id=&amp;quot;NN&amp;quot; percent=&amp;quot;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_date date date&amp;quot; content=&amp;quot;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_dewpointTemperature &amp;lt;dewpoint_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_fog fog id=&amp;quot;FOG&amp;quot; percent=&amp;quot;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_heatindex &amp;lt;heat_index_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_humidity &amp;lt;relative_humidity&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_pressure &amp;lt;pressure_mb&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_solarRadiation &amp;lt;solar_radiation&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_solarUV &amp;lt;UV&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_temperature &amp;lt;temp_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_time time Zeit([\d\:]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windChill &amp;lt;windchill_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windDegrees &amp;lt;wind_degrees&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windDirection &amp;lt;wind_dir&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windGust &amp;lt;wind_gust_mph&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windSpeed &amp;lt;wind_mph&amp;gt;([\d\.]+)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweis: Nicht immer werden alle Werte geliefert (wenn keine Sonne, dann kein UV-Wert...). Im System-Log kann das als Fehler auftauchen, ist aber kein Problem.&lt;br /&gt;
&lt;br /&gt;
=== Erstellen passender gplot-Dateien ===&lt;br /&gt;
Um die ausgelesenen Werte als Graphen darstellen zu können müssen eigene gplot-Dateien erstellt werden. Eine grundsätzliche Anleitung dazu findet sich unter [[Creating Plots]]. Deshalb sollen hier nur Beispiele für die eigentlichen gplot-Dateien vorgestellt werden. Beispiele sollten sowohl für [[FileLog]] wie [[DbLog]] funktionieren.&lt;br /&gt;
&lt;br /&gt;
Temperatur und Luftfeuchte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
#set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set title &#039;&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid ytics&lt;br /&gt;
set ylabel &amp;quot;Temperature in C&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Humidity (%)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:temperature\x3a::&lt;br /&gt;
#FileLog 4:windChill\x3a::&lt;br /&gt;
#FileLog 4:humidity\x3a::&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:temperature::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windChill::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:humidity::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Temperatur (C)&#039; ls l0 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Gefühlte Temperatur (C)&#039; ls l1 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Luftfeuchtigkeit (%)&#039; ls l2fill lw 0.2 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wind und Windrichtung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics (&amp;quot;Nord&amp;quot; 0, &amp;quot;Ost&amp;quot; 80, &amp;quot;S&amp;amp;#252;d&amp;quot; 180, &amp;quot;West&amp;quot; 270, &amp;quot;Nord&amp;quot; 360)&lt;br /&gt;
&lt;br /&gt;
#set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set title &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
set grid xtics ytics&lt;br /&gt;
&lt;br /&gt;
set yrange [0:20]&lt;br /&gt;
set y2range [0:360]&lt;br /&gt;
&lt;br /&gt;
set ylabel &amp;quot;Wind (mph)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Richtung&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:windSpeed:0:&lt;br /&gt;
#FileLog 4:windGust:0:&lt;br /&gt;
#FileLog 4:windDegrees:0:&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windSpeed::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windGust::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windDegrees::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Wind (mph)&#039; ls l0 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Böen (mph)&#039; ls l1 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Windrichtung (°)&#039; ls l2fill lw 0.2 with points&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sonnenintensität und UV-Werte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics&lt;br /&gt;
&lt;br /&gt;
#set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set title &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
set grid xtics ytics&lt;br /&gt;
&lt;br /&gt;
set ylabel &amp;quot;Sonnenstrahlung (W/qm)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;UV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:solarRadiation:0:&lt;br /&gt;
#FileLog 4:solarUV:0:&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:solarRadiation::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:solarUV::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Strahlung&#039; ls l0 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;UV&#039; ls l1 lw 1.5 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weitere TBD&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Vergangene Daten abfragen ===&lt;br /&gt;
Ein konkretes vergangenes Datum der Wetterstation kann man übrigens auch abrufen - für den 28.11.2014 wäre dies bspw. &lt;br /&gt;
&amp;lt;code&amp;gt;http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBERLIN15&amp;amp;day=28&amp;amp;month=11&amp;amp;year=2014&amp;amp;graphspan=day&amp;amp;format=1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Wetterdaten hochladen ===&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Unterstützung für das Modul gibt es im dazugehörigen {{Link2Forum|Topic=65587|LinkText=Forumsthread }}.}}&lt;br /&gt;
&lt;br /&gt;
Wer eigene Wetterdaten hochladen will, kann hierzu das Modul [http://fhem.de/commandref.html#WUup WUup] verwenden. Dazu benötigt man die Zugangsdaten (stationID und Paßwort) für eine eigene Wetterstation. Mit dem Modul können die meisten vom [http://wiki.wunderground.com/index.php/PWS_-_Upload_Protocol PWS Upload Protocol] unterstützten Daten hochgeladen werden:&lt;br /&gt;
* Winddir - [0-360 momentane Windrichtung]&lt;br /&gt;
* Windspeedmph - [mph momentane Windgeschwindigkeit]&lt;br /&gt;
* Windgustmph - [mph aktuellen Böe, mit Software-spezifischem Zeitraum]&lt;br /&gt;
* Windgustdir - [0-360 mit Software-spezifischer Zeit]&lt;br /&gt;
* Windspdmph_avg2m - [mph durchschnittliche Windgeschwindigkeit innerhalb 2 Minuten]&lt;br /&gt;
* Winddir_avg2m - [0-360 durchschnittliche Windrichtung innerhalb 2 Minuten]&lt;br /&gt;
* Windgustmph_10m - [mph Böen der vergangenen 10 Minuten]&lt;br /&gt;
* Windgustdir_10m - [0-360 Richtung der Böen der letzten 10 Minuten]&lt;br /&gt;
* Feuchtigkeit - [% Außenfeuchtigkeit 0-100%]&lt;br /&gt;
* Dewptf- [F Taupunkt im Freien]&lt;br /&gt;
* Tempf - [F Außentemperatur]&lt;br /&gt;
* Rainin - [in Regen in der vergangenen Stunde]&lt;br /&gt;
* Dailyrainin - [in Regenmenge bisher heute]&lt;br /&gt;
* Baromin - [inHg barometrischer Druck]&lt;br /&gt;
* Soiltempf - [F Bodentemperatur]&lt;br /&gt;
* Bodenfeuchtigkeit - [%]&lt;br /&gt;
* Solarradiation - [W/m²]&lt;br /&gt;
* UV - [Index]&lt;br /&gt;
&lt;br /&gt;
Die Werte werden im Modul für Wunderground ins anglo-amerikanische System umgerechnet. Temperaturen werden also automatisch von °Celsius in Fahrenheit, Windgeschwindigkeiten von km/h in mph, mm in Inch und der barometrische Druck von hPa in inHg umgerechnet.&lt;br /&gt;
&lt;br /&gt;
== Wetternetzwerk auf wetter.com ==&lt;br /&gt;
Ein vollständiges Beispiel zur Nutzung der Informationen über die Regenmenge (Station 1445, Weinheim) von wetter.com ist in {{Link2Forum|Topic=39600|Message=332837|LinkText=diesem Forenbeitrag}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Wetter von netatmo ==&lt;br /&gt;
Das FHEM-Modul [[netatmo]] ermöglicht den Datenimport von privaten und öffentlichen netatmo Wetterstationen sowie den Abruf der in der Netatmo App verfügbaren Wettervorhersage. Eine Übersicht über die verfügbaren öffentlichen Stationen findet sich auf der Seite [http://www.netatmo.com/de-DE/weathermap Weathermap]. Die meisten öffentlichen Stationen liefern Temperatur, Luftfeuchte und Luftdruck, einige auch Wind, Regen und Daten zur Luftqualität (CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=33610}} mit Sammlung und Beipielen von Internet-Links für die Anzeige von teilweise animierten Wetterbildern&lt;br /&gt;
* [http://bloglich.de/art/rpi/wetterdaten-auf-dem-raspberry-pi-in-fhem/ Beispiel in Blog(de)]&lt;br /&gt;
* [[HTTPMOD]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Wetterstationen]] &amp;lt;!-- eigentlich eine &amp;quot;Hardware-Kategorie&amp;quot;, passt aber trotzdem --&amp;gt;&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26702</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26702"/>
		<updated>2018-05-13T09:27:07Z</updated>

		<summary type="html">&lt;p&gt;JensB: Bezug zum amtlichen Gemeindeschlüssel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;Text::CSV_XS&#039;&#039; in Version 0.40 oder höher über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libtext-csv-xs-perl &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Für die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und anschließendem Neustart von FHEM wird die Sprache für FHEM eingestellt. Nun muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Für den Weblink:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen. Den ermittelten Stationscode kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get forecast&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;forecastStation&#039;&#039; hinterlegen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warnzellen-ID Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Die Warnzellen-ID kann man dann entweder für eine Einzelabfrage als Parameter für das Kommando &#039;&#039;get alerts&#039;&#039; verwenden oder für die automatische Aktualisierung als Attribut &#039;&#039;alertArea&#039;&#039; hinterlegen. Die Warnzellen-ID ist ab der 2. Stelle identisch mit den ersten Ziffern des amtlichen Gemeindeschlüssels. Man kann z.B. den Namen von Gemeinde oder Landkreis bei den [https://www.statistik-bw.de/Statistik-Portal/gemeindeverz.asp Statistischen Ämtern des Bundes und der Länder] eingeben, den amtlichen Gemeindeschlüssels ermitteln und dann mit vorangestellter 1, 8 oder 9 im Warnzellen-ID Katalog des DWD nach einem Eintrag mit exakter oder weitgehender Übereinstimmung suchen. Wem das zu kompliziert vorkommt, kann bei mehrdeutigen Gemeinde- bzw. Landkreisbezeichnungen auch versuchen auszuprobieren, welche die richtige Wanrzellen-ID ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit automatisch Aktualisierung von Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen steht ein {{Link2Forum|Topic=83097|Message=753155|LinkText=Weblink}} zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Die Datei DWDODweblink.pm herunterladen, in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren, irgendwo hinter &#039;&#039;package main&#039;&#039; in die Datei [[99_myUtils_anlegen|99_myUtils.pm]] (nicht verwechseln mit 99_Utils.pm!) den Eintrag&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 eval &amp;quot;use DWDODweblink;&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; hinzufügen und FHEM neu starten. Nun kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWDweblink weblink htmlCode { DWDOD_AsHtmlH(&amp;quot;DWD&amp;quot;, 4, 0) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich am Ende der Datei &#039;&#039;DWDODweblink.pm&#039;&#039;, die man dazu mit einem Texteditor öffnen sollte, da Weblinks nicht in der Commandref aufgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Hier ein Ausschnitt aus der Darstellung des Weblinks mit [[FHEMWEB]]:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODweblink.png|500px]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26699</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26699"/>
		<updated>2018-05-12T17:42:51Z</updated>

		<summary type="html">&lt;p&gt;JensB: Abbildung Weblink&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;Text::CSV_XS&#039;&#039; in Version 0.40 oder höher über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libtext-csv-xs-perl &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Für die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und anschließendem Neustart von FHEM wird die Sprache für FHEM eingestellt. Nun muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Für den Weblink:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warncell-IDs Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Da zur Orientierung nur die Bezeichnungen zur Verfügung stehen, ist die Auswahl u.U. mehrdeutig und man muss ausprobieren, welche die gewünschte Warnzelle ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen steht ein {{Link2Forum|Topic=83097|Message=753155|LinkText=Weblink}} zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Die Datei DWDODweblink.pm herunterladen, in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren, irgendwo hinter &#039;&#039;package main&#039;&#039; in die Datei [[99_myUtils_anlegen|99_myUtils.pm]] (nicht verwechseln mit 99_Utils.pm!) den Eintrag&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 eval &amp;quot;use DWDODweblink;&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; hinzufügen und FHEM neu starten. Nun kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWDweblink weblink htmlCode { DWDOD_AsHtmlH(&amp;quot;DWD&amp;quot;, 4, 0) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich am Ende der Datei &#039;&#039;DWDODweblink.pm&#039;&#039;, die man dazu mit einem Texteditor öffnen sollte, da Weblinks nicht in der Commandref aufgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Hier ein Ausschnitt aus der Darstellung des Weblinks mit [[FHEMWEB]]:&lt;br /&gt;
&lt;br /&gt;
[[File:DWDODweblink.png|500px]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:DWDODweblink.png&amp;diff=26698</id>
		<title>Datei:DWDODweblink.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:DWDODweblink.png&amp;diff=26698"/>
		<updated>2018-05-12T17:36:52Z</updated>

		<summary type="html">&lt;p&gt;JensB: Ausschnitt aus der Darstellung des DWD OpenData Weblinks mit FHEMWEB mit hohen Temperaturen, Niederschlag und Wetterwarnungen.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ausschnitt aus der Darstellung des DWD OpenData Weblinks mit FHEMWEB mit hohen Temperaturen, Niederschlag und Wetterwarnungen.&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26697</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26697"/>
		<updated>2018-05-12T17:26:20Z</updated>

		<summary type="html">&lt;p&gt;JensB: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschtem Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;Text::CSV_XS&#039;&#039; in Version 0.40 oder höher über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libtext-csv-xs-perl &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Für die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und anschließendem Neustart von FHEM wird die Sprache für FHEM eingestellt. Nun muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Für den Weblink:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Wettervorhersage muss der Stationscode ermittelt werden. Dazu den [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warncell-IDs Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Da zur Orientierung nur die Bezeichnungen zur Verfügung stehen, ist die Auswahl u.U. mehrdeutig und man muss ausprobieren, welche die gewünschte Warnzelle ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen steht ein {{Link2Forum|Topic=83097|Message=753155|LinkText=Weblink}} zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Die Datei DWDODweblink.pm herunterladen, in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren, irgendwo hinter &#039;&#039;package main&#039;&#039; in die Datei [[99_myUtils_anlegen|99_myUtils.pm]] (nicht verwechseln mit 99_Utils.pm!) den Eintrag&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 eval &amp;quot;use DWDODweblink;&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; hinzufügen und FHEM neu starten. Nun kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWDweblink weblink htmlCode { DWDOD_AsHtmlH(&amp;quot;DWD&amp;quot;, 4, 0) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich am Ende der Datei &#039;&#039;DWDODweblink.pm&#039;&#039;, die man dazu mit einem Texteditor öffnen sollte, da Weblinks nicht in der Commandref aufgeführt werden.&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26696</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26696"/>
		<updated>2018-05-12T17:19:49Z</updated>

		<summary type="html">&lt;p&gt;JensB: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschten Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;Text::CSV_XS&#039;&#039; in Version 0.40 oder höher über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libtext-csv-xs-perl &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Für die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Falls man einen eigenen Internet-Proxy nutzt:&lt;br /&gt;
Die Konfiguration des Proxies für FHEM erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. FHEM Uhrzeit und Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. FHEM Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und anschließendem Neustart von FHEM wird die Sprache für FHEM eingestellt. Nun muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Für den Weblink:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Werttervorhersage muss der Stationscode ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warncell-IDs Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Da zur Orientierung nur die Bezeichnungen zur Verfügung stehen, ist die Auswahl u.U. mehrdeutig und man muss ausprobieren, welche die gewünschte Warnzelle ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen steht ein {{Link2Forum|Topic=83097|Message=753155|LinkText=Weblink}} zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Die Datei DWDODweblink.pm herunterladen, in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren, irgendwo hinter &#039;&#039;package main&#039;&#039; in die Datei [[99_myUtils_anlegen|99_myUtils.pm]] (nicht verwechseln mit 99_Utils.pm!) den Eintrag&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 eval &amp;quot;use DWDODweblink;&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; hinzufügen und FHEM neu starten. Nun kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWDweblink weblink htmlCode { DWDOD_AsHtmlH(&amp;quot;DWD&amp;quot;, 4, 0) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich am Ende der Datei &#039;&#039;DWDODweblink.pm&#039;&#039;, die man dazu mit einem Texteditor öffnen sollte, da Weblinks nicht in der Commandref aufgeführt werden.&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26678</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26678"/>
		<updated>2018-05-11T20:12:57Z</updated>

		<summary type="html">&lt;p&gt;JensB: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschten Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;Text::CSV_XS&#039;&#039; in Version 0.40 oder höher über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libtext-csv-xs-perl &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Für die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Eigener Internet-Proxy:&lt;br /&gt;
Die Konfiguration des Proxies erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Eigene Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Eigene Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und anschließendem Neustart von FHEM wird die Sprache für FHEM eingestellt. Nun muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Für Weblink:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Werttervorhersage muss der Stationscode ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warncell-IDs Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Da zur Orientierung nur die Bezeichnungen zur Verfügung stehen, ist die Auswahl u.U. mehrdeutig und man muss ausprobieren, welche die gewünschte Warnzelle ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen steht ein [https://forum.fhem.de/index.php/topic,83097.msg753155.html#msg753155 Weblink] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Die Datei DWDODweblink.pm herunterladen, in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren, irgendwo hinter &#039;&#039;package main&#039;&#039; in die Datei [[99_myUtils_anlegen|99_myUtils.pm]] den Eintrag&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 eval &amp;quot;use DWDODweblink;&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; hinzufügen und FHEM neu starten. Nun kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWDweblink weblink htmlCode { DWDOD_AsHtmlH(&amp;quot;DWD&amp;quot;, 4, 0) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich am Ende der Datei &#039;&#039;DWDODweblink.pm&#039;&#039;, die man dazu mit einem Texteditor öffnen sollte, da Weblinks nicht in der Commandref aufgeführt werden.&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Wetter_und_Wettervorhersagen&amp;diff=26677</id>
		<title>Wetter und Wettervorhersagen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Wetter_und_Wettervorhersagen&amp;diff=26677"/>
		<updated>2018-05-11T19:48:07Z</updated>

		<summary type="html">&lt;p&gt;JensB: Gliederung der DWD-Abschnitte&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wetterdaten und Wettervorhersagen können auf verschiedene Weise in FHEM eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
== Yahoo-Wetter ==&lt;br /&gt;
Für die einfache Einbindung des Yahoo-Wetters gibt es das spezielle Modul [[Weather]].&lt;br /&gt;
&lt;br /&gt;
== Unwetterzentrale ==&lt;br /&gt;
Informationen der Seite(n) Unwetterzentrale.de können mit Hilfe des Moduls [[UWZ]] eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
== Modul OPENWEATHER ==&lt;br /&gt;
Das Modul [[OPENWEATHER]] extrahiert Wetterdaten über die &amp;quot;openweather&amp;quot;-Schnittstelle (API) von www.wetter.com. &lt;br /&gt;
*Vorschau-Zeitraum: 3 Tage&lt;br /&gt;
*Vorschau-Interval: 6:00, 11:00, 17:00, 23:00&lt;br /&gt;
*Aktuelle Daten: keine&lt;br /&gt;
&lt;br /&gt;
== Modul PROPLANTA ==&lt;br /&gt;
Das Modul [[PROPLANTA]] extrahiert Wetterdaten von der Website www.proplanta.de. (keine API)&lt;br /&gt;
*Vorschau-Zeitraum: 12 Tage&lt;br /&gt;
*Vorschau-Interval: 3 h&lt;br /&gt;
*Aktuelle Daten: jede volle Stunde&lt;br /&gt;
&lt;br /&gt;
== Modul WWO ==&lt;br /&gt;
Das Modul extrahiert Wetterdaten über die (alte) API von worldweatheronline.com&lt;br /&gt;
*Vorschau-Zeitraum: ?? Tage&amp;lt;BR&amp;gt;&lt;br /&gt;
*Vorschau-Interval: ??&amp;lt;br&amp;gt;&lt;br /&gt;
*Aktuelle Daten: ??&lt;br /&gt;
&lt;br /&gt;
== Deutscher Wetterdienst (DWD) ==&lt;br /&gt;
&lt;br /&gt;
=== Modul DWD_OpenData ===&lt;br /&gt;
Das Modul [[DWD_OpenData]] stellt einen Teil der frei verfügbaren Daten des Deutschen Wetterdienstes (DWD) bereit, die über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] abgerufen werden können (diverse Datenformate, keine API). &lt;br /&gt;
*Vorschau-Zeitraum: 7 Tage&lt;br /&gt;
*Vorschau-Interval: datenabhängig, viele mit 3 h&lt;br /&gt;
*Vorschau-Orte: national und international&lt;br /&gt;
*Aktuelle Daten: nicht implementiert&lt;br /&gt;
*Wetterwarnungen: für Landkreise und Gemeinden in deutsch oder englisch&lt;br /&gt;
&lt;br /&gt;
Es gibt zum Modul auch einen passenden [https://forum.fhem.de/index.php/topic,83097.msg753155.html#msg753155 Weblink], der 2 Icons pro Tag in horizontaler Form darstellt. Die Anzahl der insgesamt dargestellten Icons ist konfigurierbar. Liegen Wetterwarnungen vor, wird zusätzlich ein Warnsymbol angezeigt, über das man per Klick weitere Details zur Wetterwarnung abrufen kann.&lt;br /&gt;
&lt;br /&gt;
[[DWD_OpenData|Weitere Details und Installationsbeschreibung]]&lt;br /&gt;
&lt;br /&gt;
=== Wetterwarnungen als Karte ===&lt;br /&gt;
Der Deutsche Wetterdienst [http://www.dwd.de DWD] stellt neben diversen Wetterdaten auch Wetterwarnungen in Bildform bereit. Diese können sehr einfach via [http://fhem.de/commandref_DE.html#weblink weblink iframe] in FHEM eingebunden werden - das ist zwar nicht die schönste Form, aber die schnellste.&lt;br /&gt;
&lt;br /&gt;
Dazu sucht man sich zuerst auf der [http://www.dwd.de/bvbw/appmanager/bvbw/dwdwwwDesktop?_nfpb=true&amp;amp;_pageLabel=_dwdwww_wetter_warnungen_warnungen&amp;amp;T92053gsbDocumentPath=BEA__Navigation%2FWetter__Warnungen%2FWarnungen.html%3F__nnn%3Dtrue&amp;amp;lastPageLabel=dwdwww_wetter_warnungen Warnungsseite des DWD] die eigene Region heraus (in der Karte durchklicken). Die gewünschte URL für Berlin Stadt ist z.B. &amp;lt;code&amp;gt;http://www.dwd.de/dyn/app/ws/html/reports/BXX_warning_de.html#WS_ANCHOR_0&amp;lt;/code&amp;gt;. Das Anhängsel &amp;lt;code&amp;gt;#WS_ANCHOR_0&amp;lt;/code&amp;gt; kann man in der Konfiguration auch weglassen.&lt;br /&gt;
&lt;br /&gt;
Die Einbindung in FHEM sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define dwd_warnmeldung weblink iframe http://www.dwd.de/dyn/app/ws/html/reports/BXX_warning_de.html&lt;br /&gt;
attr dwd_warnmeldung group Wetterwarnungen (DWD)&lt;br /&gt;
attr dwd_warnmeldung htmlattr width=&amp;quot;100%&amp;quot; height=&amp;quot;300&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
attr dwd_warnmeldung room Wettervorhersage,Startseite&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorhersage-Diagramm von YR ==&lt;br /&gt;
[http://www.yr.no YR] ist die Seite des norwegischen Wetterdiensts. Er ist zwar nur in Teilen auf Englisch (und gar nicht auf Deutsch) verfügbar, bietet aber sehr gute Wettervorhersagen - auch mit eigenen Vorhersagen für kleine Dörfer. Neben etlichen Detailinfos bietet YR eine sehr schicke 48h-Vorhersage-Grafik. Diese kann sehr einfach via [http://fhem.de/commandref_DE.html#weblink weblink iframe] in FHEM eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Dazu geht man auf die [http://www.yr.no Startseite von YR] und gibt in das Suchfeld den Namen seines Dörfchens ein - die Ergebnissliste kann ziemlich lang werden, sodass man evtl. sehr genau schauen muss, welches das eigene Kaff ist - bei mir war es an 29. Stelle... ;-) Auf der gewünschten Seite gibt es einen Unterpunkt &amp;quot;Hour by hour&amp;quot;, wo sich die besagte Grafik findet. Hier kopiert man sich einfach die URL der Grafik.&lt;br /&gt;
&lt;br /&gt;
Die Einbindung in FHEM sieht dann bspw. wie folgt aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Wetter_yr_Vorhersage weblink iframe http://www.yr.no/place/Germany/Berlin/Berlin/meteogram.png&lt;br /&gt;
attr Wetter_yr_Vorhersage group Wettervorhersage (yr)&lt;br /&gt;
attr Wetter_yr_Vorhersage htmlattr width=&amp;quot;100%&amp;quot; height=&amp;quot;300&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
attr Wetter_yr_Vorhersage room Wettervorhersage,Start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wetter von Weather Underground ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Neben dem hier vorgestellten Abruf der Weather Underground-Daten mit [[HTTPMOD]] kann auf Weather Underground-Daten auch mit dem darauf spezialisierten Modul [http://fhem.de/commandref.html#Wunderground Wunderground] zugegriffen werden.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Dieses Vorgehen ist etwas anspruchsvoller und somit eher für erfahrene FHEM-User geeignet.&lt;br /&gt;
&lt;br /&gt;
[http://www.wunderground.com/ Weather Underground] ist bietet eine sehr umfassende Sammlung aller möglichen offiziellen und privaten (aber teils sehr professionellen) Wetterstationen weltweit. Es besteht eine recht hohe Wahrscheinlichkeit, dass es in der eigenen Umgebung schon eine Wetterstation gibt. Anstatt nun selbst eine komplette Wetterstation aufzubauen, kann man alternativ auf die Daten der Nachbarstation zugreifen.&lt;br /&gt;
&lt;br /&gt;
Dazu sind grundsätzlich die folgenden Schritte notwendig:&lt;br /&gt;
* Finden der geeigneten Station&lt;br /&gt;
* Auswerten der XML-Daten&lt;br /&gt;
* Erstellen passender gplot-Dateien&lt;br /&gt;
&lt;br /&gt;
=== Finden der geeigneten Station ===&lt;br /&gt;
Als erstes geht man auf die [http://www.wunderground.com Startseite von Weather Underground] und gibt in das Suchfeld den Namen seines Dörfchens oder der nächsten Stadt ein - für Berlin landet man bspw. auf Seite für &amp;quot;Berlin Alexanderplatz&amp;quot;. Es gibt aber manchmal sehr viele Wetterstationen in der direkten Umgebung. Diese findet man indem am auf &amp;quot;Change Station&amp;quot; klickt und sich eine passende Station aussucht. Nähere Infos (zB. zur verwendeten Hard- und Software) zu der gewählten Wetterstation erhält man, wenn man auf den Namen der Station klickt und dann auf &amp;quot;About this PWS&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Weather Underground stellt die Daten der Wetterstation auch über eine API als XML bereit, die wir auswerten können. Die entsprechende URL findet sich ebenfalls unter &amp;quot;About this PWS&amp;quot; unter &amp;quot;Download current conditions XML&amp;quot;. Für Berlin Prenzlauer Berg wäre dies bspw. &lt;br /&gt;
&amp;lt;code&amp;gt;http://api.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBERLIN15&amp;amp;format=XML&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entscheidend für die jeweilige Station ist der Teil nach &amp;quot;?=ID&amp;quot;, also in diesem Fall &amp;quot;IBERLIN15&amp;quot;. Dieser Teil des Links lässt sich leicht durch die ID einer anderen Station ersetzen und die Suche nach dem entsprechenden Link auf der Seite der Station bleibt erspart.&lt;br /&gt;
&lt;br /&gt;
=== Auswerten der XML-Daten ===&lt;br /&gt;
Die Auswertung der XML-Daten erfolgt via [[HTTPMOD]]. Da dies nicht ganz trivial ist, sind im Folgenden zuerst die wesentlichen Konfigurationsschritte exemplarisch beschrieben. Weiter unten findet sich dann die fertige vollständige Konfiguration.&lt;br /&gt;
&lt;br /&gt;
Es erstes wird das Device HTTPMOD definiert (die 600 am Schluss ist der Aktualisierungszyklus in Sekunden, also alle 10 min):&lt;br /&gt;
:&amp;lt;code&amp;gt;define wetter_prenzelberg HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IBERLIN15 600 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann werden Attribute für alle Readings definiert:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr wetter_prenzelberg userattr readingsName_cloudiness readingsName_date ... &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann wird jedem Attribut ein Name zugewiesen (unter diesem Namen wird der Wert ins Log geschrieben):&lt;br /&gt;
:&amp;lt;code&amp;gt;attr wetter_prenzelberg readingsName_cloudiness cloudiness &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Schluss wird das Reading selbst definiert:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr wetter_prenzelberg readingsRegex_cloudiness cloudiness id=&amp;quot;NN&amp;quot; percent=&amp;quot;([\d\.]+) &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die gesamte Konfiguration für alle von der API angebotenen Wetterwerte sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define wetter_prenzelberg HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IBERLIN15 600&lt;br /&gt;
attr wetter_prenzelberg userattr readingsName_cloudiness readingsName_date readingsName_dewpointTemperature readingsName_fog readingsName_heatindex readingsName_humidity readingsName_pressure readingsName_solarRadiation readingsName_solarUV readingsName_temperature readingsName_time readingsName_windChill readingsName_windDegrees readingsName_windDirection readingsName_windGust readingsName_windSpeed readingsRegex_cloudiness readingsRegex_date readingsRegex_dewpointTemperature readingsRegex_fog readingsRegex_heatindex readingsRegex_humidity readingsRegex_pressure readingsRegex_solarRadiation readingsRegex_solarUV readingsRegex_temperature readingsRegex_time readingsRegex_windChill readingsRegex_windDegrees readingsRegex_windDirection readingsRegex_windGust readingsRegex_windSpeed&lt;br /&gt;
attr wetter_prenzelberg readingsName_cloudiness cloudiness&lt;br /&gt;
attr wetter_prenzelberg readingsName_date date&lt;br /&gt;
attr wetter_prenzelberg readingsName_dewpointTemperature dewpointTemperature&lt;br /&gt;
attr wetter_prenzelberg readingsName_fog fog&lt;br /&gt;
attr wetter_prenzelberg readingsName_heatindex heatindex&lt;br /&gt;
attr wetter_prenzelberg readingsName_humidity humidity&lt;br /&gt;
attr wetter_prenzelberg readingsName_pressure pressure&lt;br /&gt;
attr wetter_prenzelberg readingsName_solarRadiation solarRadiation&lt;br /&gt;
attr wetter_prenzelberg readingsName_solarUV solarUV&lt;br /&gt;
attr wetter_prenzelberg readingsName_temperature temperature&lt;br /&gt;
attr wetter_prenzelberg readingsName_time time&lt;br /&gt;
attr wetter_prenzelberg readingsName_windChill windChill&lt;br /&gt;
attr wetter_prenzelberg readingsName_windDegrees windDegrees&lt;br /&gt;
attr wetter_prenzelberg readingsName_windDirection windDirection&lt;br /&gt;
attr wetter_prenzelberg readingsName_windGust windGust&lt;br /&gt;
attr wetter_prenzelberg readingsName_windSpeed windSpeed&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_cloudiness cloudiness id=&amp;quot;NN&amp;quot; percent=&amp;quot;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_date date date&amp;quot; content=&amp;quot;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_dewpointTemperature &amp;lt;dewpoint_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_fog fog id=&amp;quot;FOG&amp;quot; percent=&amp;quot;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_heatindex &amp;lt;heat_index_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_humidity &amp;lt;relative_humidity&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_pressure &amp;lt;pressure_mb&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_solarRadiation &amp;lt;solar_radiation&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_solarUV &amp;lt;UV&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_temperature &amp;lt;temp_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_time time Zeit([\d\:]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windChill &amp;lt;windchill_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windDegrees &amp;lt;wind_degrees&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windDirection &amp;lt;wind_dir&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windGust &amp;lt;wind_gust_mph&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windSpeed &amp;lt;wind_mph&amp;gt;([\d\.]+)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweis: Nicht immer werden alle Werte geliefert (wenn keine Sonne, dann kein UV-Wert...). Im System-Log kann das als Fehler auftauchen, ist aber kein Problem.&lt;br /&gt;
&lt;br /&gt;
=== Erstellen passender gplot-Dateien ===&lt;br /&gt;
Um die ausgelesenen Werte als Graphen darstellen zu können müssen eigene gplot-Dateien erstellt werden. Eine grundsätzliche Anleitung dazu findet sich unter [[Creating Plots]]. Deshalb sollen hier nur Beispiele für die eigentlichen gplot-Dateien vorgestellt werden. Beispiele sollten sowohl für [[FileLog]] wie [[DbLog]] funktionieren.&lt;br /&gt;
&lt;br /&gt;
Temperatur und Luftfeuchte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
#set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set title &#039;&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid ytics&lt;br /&gt;
set ylabel &amp;quot;Temperature in C&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Humidity (%)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:temperature\x3a::&lt;br /&gt;
#FileLog 4:windChill\x3a::&lt;br /&gt;
#FileLog 4:humidity\x3a::&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:temperature::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windChill::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:humidity::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Temperatur (C)&#039; ls l0 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Gefühlte Temperatur (C)&#039; ls l1 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Luftfeuchtigkeit (%)&#039; ls l2fill lw 0.2 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wind und Windrichtung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics (&amp;quot;Nord&amp;quot; 0, &amp;quot;Ost&amp;quot; 80, &amp;quot;S&amp;amp;#252;d&amp;quot; 180, &amp;quot;West&amp;quot; 270, &amp;quot;Nord&amp;quot; 360)&lt;br /&gt;
&lt;br /&gt;
#set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set title &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
set grid xtics ytics&lt;br /&gt;
&lt;br /&gt;
set yrange [0:20]&lt;br /&gt;
set y2range [0:360]&lt;br /&gt;
&lt;br /&gt;
set ylabel &amp;quot;Wind (mph)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Richtung&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:windSpeed:0:&lt;br /&gt;
#FileLog 4:windGust:0:&lt;br /&gt;
#FileLog 4:windDegrees:0:&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windSpeed::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windGust::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windDegrees::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Wind (mph)&#039; ls l0 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Böen (mph)&#039; ls l1 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Windrichtung (°)&#039; ls l2fill lw 0.2 with points&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sonnenintensität und UV-Werte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics&lt;br /&gt;
&lt;br /&gt;
#set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set title &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
set grid xtics ytics&lt;br /&gt;
&lt;br /&gt;
set ylabel &amp;quot;Sonnenstrahlung (W/qm)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;UV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:solarRadiation:0:&lt;br /&gt;
#FileLog 4:solarUV:0:&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:solarRadiation::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:solarUV::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Strahlung&#039; ls l0 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;UV&#039; ls l1 lw 1.5 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weitere TBD&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Vergangene Daten abfragen ===&lt;br /&gt;
Ein konkretes vergangenes Datum der Wetterstation kann man übrigens auch abrufen - für den 28.11.2014 wäre dies bspw. &lt;br /&gt;
&amp;lt;code&amp;gt;http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBERLIN15&amp;amp;day=28&amp;amp;month=11&amp;amp;year=2014&amp;amp;graphspan=day&amp;amp;format=1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Wetterdaten hochladen ===&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Unterstützung für das Modul gibt es im dazugehörigen {{Link2Forum|Topic=65587|LinkText=Forumsthread }}.}}&lt;br /&gt;
&lt;br /&gt;
Wer eigene Wetterdaten hochladen will, kann hierzu das Modul [http://fhem.de/commandref.html#WUup WUup] verwenden. Dazu benötigt man die Zugangsdaten (stationID und Paßwort) für eine eigene Wetterstation. Mit dem Modul können die meisten vom [http://wiki.wunderground.com/index.php/PWS_-_Upload_Protocol PWS Upload Protocol] unterstützten Daten hochgeladen werden:&lt;br /&gt;
* Winddir - [0-360 momentane Windrichtung]&lt;br /&gt;
* Windspeedmph - [mph momentane Windgeschwindigkeit]&lt;br /&gt;
* Windgustmph - [mph aktuellen Böe, mit Software-spezifischem Zeitraum]&lt;br /&gt;
* Windgustdir - [0-360 mit Software-spezifischer Zeit]&lt;br /&gt;
* Windspdmph_avg2m - [mph durchschnittliche Windgeschwindigkeit innerhalb 2 Minuten]&lt;br /&gt;
* Winddir_avg2m - [0-360 durchschnittliche Windrichtung innerhalb 2 Minuten]&lt;br /&gt;
* Windgustmph_10m - [mph Böen der vergangenen 10 Minuten]&lt;br /&gt;
* Windgustdir_10m - [0-360 Richtung der Böen der letzten 10 Minuten]&lt;br /&gt;
* Feuchtigkeit - [% Außenfeuchtigkeit 0-100%]&lt;br /&gt;
* Dewptf- [F Taupunkt im Freien]&lt;br /&gt;
* Tempf - [F Außentemperatur]&lt;br /&gt;
* Rainin - [in Regen in der vergangenen Stunde]&lt;br /&gt;
* Dailyrainin - [in Regenmenge bisher heute]&lt;br /&gt;
* Baromin - [inHg barometrischer Druck]&lt;br /&gt;
* Soiltempf - [F Bodentemperatur]&lt;br /&gt;
* Bodenfeuchtigkeit - [%]&lt;br /&gt;
* Solarradiation - [W/m²]&lt;br /&gt;
* UV - [Index]&lt;br /&gt;
&lt;br /&gt;
Die Werte werden im Modul für Wunderground ins anglo-amerikanische System umgerechnet. Temperaturen werden also automatisch von °Celsius in Fahrenheit, Windgeschwindigkeiten von km/h in mph, mm in Inch und der barometrische Druck von hPa in inHg umgerechnet.&lt;br /&gt;
&lt;br /&gt;
== Wetternetzwerk auf wetter.com ==&lt;br /&gt;
Ein vollständiges Beispiel zur Nutzung der Informationen über die Regenmenge (Station 1445, Weinheim) von wetter.com ist in {{Link2Forum|Topic=39600|Message=332837|LinkText=diesem Forenbeitrag}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Wetter von netatmo ==&lt;br /&gt;
Das FHEM-Modul [[netatmo]] ermöglicht den Datenimport von privaten und öffentlichen netatmo Wetterstationen. Eine Übersicht über die verfügbaren öffentlichen Stationen findet sich auf der Seite [http://www.netatmo.com/de-DE/weathermap Weathermap]. Die meisten öffentlichen Stationen liefern Temperatur, Luftfeuchte und Luftdruck, einige auch Wind, Regen und Daten zur Luftqualität (CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=33610}} mit Sammlung und Beipielen von Internet-Links für die Anzeige von teilweise animierten Wetterbildern&lt;br /&gt;
* [http://bloglich.de/art/rpi/wetterdaten-auf-dem-raspberry-pi-in-fhem/ Beispiel in Blog(de)]&lt;br /&gt;
* [[HTTPMOD]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Wetterstationen]] &amp;lt;!-- eigentlich eine &amp;quot;Hardware-Kategorie&amp;quot;, passt aber trotzdem --&amp;gt;&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26674</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26674"/>
		<updated>2018-05-11T12:58:52Z</updated>

		<summary type="html">&lt;p&gt;JensB: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschten Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;Text::CSV_XS&#039;&#039; in Version 0.40 oder höher über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libtext-csv-xs-perl &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Für die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Eigener Internet-Proxy:&lt;br /&gt;
Die Konfiguration des Proxies erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Eigene Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Eigene Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und anschließendem Neustart von FHEM wird die Sprache für FHEM eingestellt. Nun muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Für Weblink:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;DateTime&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libdatetime-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Werttervorhersage muss der Stationscode ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warncell-IDs Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Da zur Orientierung nur die Bezeichnungen zur Verfügung stehen, ist die Auswahl u.U. mehrdeutig und man muss ausprobieren, welche die gewünschte Warnzelle ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen steht ein [https://forum.fhem.de/index.php/topic,83097.msg753155.html#msg753155 Weblink] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Die Datei DWDODweblink.pm herunterladen, in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren, irgendwo hinter &#039;&#039;package main&#039;&#039; in die Datei [[99_myUtils_anlegen|99_myUtils.pm]] den Eintrag&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 use DWDODweblink;&lt;br /&gt;
&amp;lt;/pre&amp;gt; hinzufügen und FHEM neu starten. Nun kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWDweblink weblink htmlCode { DWDOD_AsHtmlH(&amp;quot;DWD&amp;quot;, 4, 0) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich am Ende der Datei &#039;&#039;DWDODweblink.pm&#039;&#039;, die man dazu mit einem Texteditor öffnen sollte, da Weblinks nicht in der Commandref aufgeführt werden.&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26659</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26659"/>
		<updated>2018-05-10T20:53:34Z</updated>

		<summary type="html">&lt;p&gt;JensB: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der OpenData Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschten Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;Text::CSV_XS&#039;&#039; in Version 0.40 oder höher über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libtext-csv-xs-perl &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Für die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Eigener Internet-Proxy:&lt;br /&gt;
Die Konfiguration des Proxies erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Eigene Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Eigene Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und anschließendem Neustart von FHEM wird die Sprache für FHEM eingestellt. Nun muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Werttervorhersage muss der Stationscode ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warncell-IDs Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Da zur Orientierung nur die Bezeichnungen zur Verfügung stehen, ist die Auswahl u.U. mehrdeutig und man muss ausprobieren, welche die gewünschte Warnzelle ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen steht ein [https://forum.fhem.de/index.php/topic,83097.msg753155.html#msg753155 Weblink] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Die Datei DWDODweblink.pm herunterladen, in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren, irgendwo hinter &#039;&#039;package main&#039;&#039; in die Datei [[99_myUtils_anlegen|99_myUtils.pm]] den Eintrag&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 use DWDODweblink;&lt;br /&gt;
&amp;lt;/pre&amp;gt; hinzufügen und FHEM neu starten. Nun kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWDweblink weblink htmlCode { DWDOD_AsHtmlH(&amp;quot;DWD&amp;quot;, 4, 0) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich am Ende der Datei &#039;&#039;DWDODweblink.pm&#039;&#039;, die man dazu mit einem Texteditor öffnen sollte, da Weblinks nicht in der Commandref aufgeführt werden.&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26658</id>
		<title>DWD OpenData</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=DWD_OpenData&amp;diff=26658"/>
		<updated>2018-05-10T20:02:46Z</updated>

		<summary type="html">&lt;p&gt;JensB: DWD OpenData Installationsbeschreibung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SEITENTITEL:DWD_OpenData}}&lt;br /&gt;
{{&lt;br /&gt;
Infobox Modul&lt;br /&gt;
|ModPurpose=Daten vom DWD OpenData Server abrufen&lt;br /&gt;
|ModType=d&lt;br /&gt;
&amp;lt;!-- |ModCategory= (noch?) nicht verwendet --&amp;gt;&lt;br /&gt;
|ModCmdRef=DWD_OpenData&lt;br /&gt;
|ModForumArea=Unterstützende Dienste/Wettermodule&lt;br /&gt;
|ModTechName=55_DWD_OpenData.pm&lt;br /&gt;
|ModOwner=JensB&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der Deutsche Wetterdienst (DWD) stellt Wetterdaten über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] zur Verfügung. Die Verwendung dieses Dienstes und der vom DWD zur Verf&amp;amp;uuml;gung gestellten Daten unterliegt den auf der Webseite beschriebenen Bedingungen. Einen Überblick über die verfügbaren Daten findet man in der Tabelle [https://www.dwd.de/DE/leistungen/opendata/help/inhalt_allgemein/opendata_content_de_en_xls.xls OpenData_weather_content.xls].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der unterschiedlichen vom DWD bereitgestellten Datenformate benötigt das Modul zur Dekodierung je nach gewünschten Funktionsumfang zusätzliche Perl-Module, die nicht standardmäßig vorinstalliert sind und je nach Systemkonfiguration nachinstalliert werden müssen. Außerdem unterstützt das Modul Zeitzonen, um z.B. die Wettervorhersage internationaler Stationen in Ortszeit darstellen zu können. Hierfür sind je nach Systemkonfiguration weitere Einstellungen erforderlich. Auch die Sprache der Wochentage für die Wettervorhersage ist frei wählbar. Je nach Systemkonfiguration ist aber die Standardsprache u.U. auf Englisch eingestellt, was weitere Anpassungen der Systemkonfiguration erforderlich macht.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung ===&lt;br /&gt;
Im folgenden wird z.T. von einem System mit Rasbian oder Debian mit System-V Startsystem ausgegangen. Auf anderen Betriebssystemen und auf Systemen mit System-D müssen die Installationsschritte ggf. angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Für die Wettervorhersage:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;Text::CSV_XS&#039;&#039; in Version 0.40 oder höher über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libtext-csv-xs-perl &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Für die Wetterwarnungen:&lt;br /&gt;
Installation des Perl-Moduls &#039;&#039;XML::LibXML&#039;&#039; über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install libxml-libxml-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
oder mit CPAN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Eigener Internet-Proxy:&lt;br /&gt;
Die Konfiguration des Proxies erfolgt z.B. durch Eintrag von&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 attr global proxy &amp;lt;myProxyHost&amp;gt;:&amp;lt;myProxyPort&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
in die [[Konfiguration]], wobei &#039;&#039;myProxyHost&#039;&#039; durch den Namen oder die IP-Adresse des Proxy-Servers ersetzt werden muss und für &#039;&#039;myProxyPort&#039;&#039; der Port des Proxy-Servers eingetragen werden muss (oft 3128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Eigene Zeitzone:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die FHEM-Kommandozeile überprüfen, ob die FHEM-Uhrzeit plausibel ist. Ist dies nicht der Fall sollten die Uhrzeit auf Systemebene überprüft werden und ggf. die Systemeinstellungen angepasst werden.&lt;br /&gt;
Ermitteln der Bezeichnung der eigenen Zeitzone über die System-Kommandozeile mit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  tzselect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
und diese Bezeichnung in die Datei &#039;&#039;/etc/timezone&#039;&#039; eintragen und &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export TZ=`cat /etc/timezone`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
der Datei &#039;&#039;/etc/profile&#039;&#039; hinzufügen und dann das System neu starten. Nun muss die Zeitanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Eigene Sprache:&lt;br /&gt;
Durch Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {localtime()}&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die FHEM-Kommandozeile überprüfen, in welcher Sprache der Wochentag angezeigt wird. Stimmt die Sprache nicht, dann auf der System-Kommandozeile&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
&amp;lt;/pre&amp;gt; eingeben und aus der Liste z.B. &#039;&#039;de_DE.UTF-8&#039;&#039; zusätzlich auswählen. Mit Eingabe von &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 locale -a&lt;br /&gt;
&amp;lt;/pre&amp;gt; auf der System-Kommandozeile überprüfen, ob die ausgewählte Sprache nun zur Verfügung steht. Durch Hinzufügen von z.B.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export LANG=de_DE.UTF-8&lt;br /&gt;
&amp;lt;/pre&amp;gt; in die Datei &#039;&#039;/etc/init.d/fhem&#039;&#039; (irgendwo zwischen &#039;&#039;start&#039;&#039; und &#039;&#039;perl&#039;&#039;) und anschließendem Neustart von FHEM wird die Sprache für FHEM eingestellt. Nun muss die Wochentagsanzeige in FHEM korrekt sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Define ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDatadefine Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Attributes ===&lt;br /&gt;
siehe [https://fhem.de/commandref.html#DWD_OpenDataattr Commandref].&lt;br /&gt;
&lt;br /&gt;
== Anwendungsbeispiele ==&lt;br /&gt;
=== Beispiel zur Modul-Einrichtung ===&lt;br /&gt;
&lt;br /&gt;
* Wettervorhersage&lt;br /&gt;
Für die Werttervorhersage muss der Stationscode ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/met_verfahren_mosmix/mosmix_stationskatalog.pdf MOSMIX Stationskatalog] herunterladen, öffnen und die gewünschte Station heraussuchen. Einen Teil der deutschen Stationen kann man auch der [https://www.dwd.de/DE/derdwd/messnetz/bodenbeobachtung/messnetzkarte_boden.pdf Bodenmessnetzkarte] entnehmen.&lt;br /&gt;
&lt;br /&gt;
* Wetterwarnungen&lt;br /&gt;
Für die Wetterwarnungen muss die Warnzelle ermittelt werden. Dazu [https://www.dwd.de/DE/leistungen/opendata/help/warnungen/cap_warncellids_csv.csv Warncell-IDs Katalog] herunterladen, öffnen und die gewünschte Warnzelle heraussuchen. Unterstützt werden Gemeinden (beginnen mit 8), Landkreise (beginnen mit 1 oder 9) oder Küste (beginnen mit 5). Da zur Orientierung nur die Bezeichnungen zur Verfügung stehen, ist die Auswahl u.U. mehrdeutig und man muss ausprobieren, welche die gewünschte Warnzelle ist.&lt;br /&gt;
&lt;br /&gt;
Um das Modul mit Vorhersage und Wetterwarnungen zu nutzen, kann z.B. folgendes in die [[Konfiguration]] eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWD DWD_OpenData&lt;br /&gt;
 attr DWD alertArea 111000000&lt;br /&gt;
 attr DWD forecastStation 99810&lt;br /&gt;
 attr DWD forecastDays 3&lt;br /&gt;
 attr DWD forecastWW2Text 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich in der [https://fhem.de/commandref.html#DWD_OpenData Commandref].&lt;br /&gt;
&lt;br /&gt;
=== Beispiel für die Einrichtung eines Weblinks ===&lt;br /&gt;
Zur graphischen Darstellung der Vorhersage und der Wetterwarnungen steht ein [https://forum.fhem.de/index.php/topic,83097.msg753155.html#msg753155 Weblink] zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Die Datei DWDODweblink.pm herunterladen, in das Modulverzeichnis &#039;&#039;fhem/FHEM&#039;&#039; kopieren, irgendwo hinter &#039;&#039;package main&#039;&#039; in die Datei [[99_myUtils_anlegen|99_myUtils.pm]] den Eintrag&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 use DWDODweblink;&lt;br /&gt;
&amp;lt;/pre&amp;gt; hinzufügen und FHEM neu starten. Nun kann in die [[Konfiguration]] z.B. folgendes eingetragen werden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 define DWDweblink weblink htmlCode { DWDOD_AsHtmlH(&amp;quot;DWD&amp;quot;, 4, 0) }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Details zur Installation und Konfiguration finden sich am Ende der Datei &#039;&#039;DWDODweblink.pm&#039;&#039;, die man dazu mit einem Texteditor öffnen sollte, da Weblinks nicht in der Commandref aufgeführt werden.&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Wetter_und_Wettervorhersagen&amp;diff=26657</id>
		<title>Wetter und Wettervorhersagen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Wetter_und_Wettervorhersagen&amp;diff=26657"/>
		<updated>2018-05-10T19:32:48Z</updated>

		<summary type="html">&lt;p&gt;JensB: Wetterwarnungen und Verweise auf Installationsbeschreibung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wetterdaten und Wettervorhersagen können auf verschiedene Weise in FHEM eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
== Yahoo-Wetter ==&lt;br /&gt;
Für die einfache Einbindung des Yahoo-Wetters gibt es das spezielle Modul [[Weather]].&lt;br /&gt;
&lt;br /&gt;
== Unwetterzentrale ==&lt;br /&gt;
Informationen der Seite(n) Unwetterzentrale.de können mit Hilfe des Moduls [[UWZ]] eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
== Modul OPENWEATHER ==&lt;br /&gt;
Das Modul [[OPENWEATHER]] extrahiert Wetterdaten über die &amp;quot;openweather&amp;quot;-Schnittstelle (API) von www.wetter.com. &lt;br /&gt;
*Vorschau-Zeitraum: 3 Tage&lt;br /&gt;
*Vorschau-Interval: 6:00, 11:00, 17:00, 23:00&lt;br /&gt;
*Aktuelle Daten: keine&lt;br /&gt;
&lt;br /&gt;
== Modul PROPLANTA ==&lt;br /&gt;
Das Modul [[PROPLANTA]] extrahiert Wetterdaten von der Website www.proplanta.de. (keine API)&lt;br /&gt;
*Vorschau-Zeitraum: 12 Tage&lt;br /&gt;
*Vorschau-Interval: 3 h&lt;br /&gt;
*Aktuelle Daten: jede volle Stunde&lt;br /&gt;
&lt;br /&gt;
== Modul WWO ==&lt;br /&gt;
Das Modul extrahiert Wetterdaten über die (alte) API von worldweatheronline.com&lt;br /&gt;
*Vorschau-Zeitraum: ?? Tage&amp;lt;BR&amp;gt;&lt;br /&gt;
*Vorschau-Interval: ??&amp;lt;br&amp;gt;&lt;br /&gt;
*Aktuelle Daten: ??&lt;br /&gt;
&lt;br /&gt;
== Modul DWD_OpenData ==&lt;br /&gt;
Das Modul [https://forum.fhem.de/index.php/topic,83097.msg753155.html#msg753155 DWD_OpenData] stellt einen Teil der frei verfügbaren Daten des Deutschen Wetterdienstes (DWD) bereit, die über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] abgerufen werden können (diverse Datenformate, keine API). &lt;br /&gt;
*Vorschau-Zeitraum: 7 Tage&lt;br /&gt;
*Vorschau-Interval: datenabhängig, viele mit 3 h&lt;br /&gt;
*Vorschau-Orte: national und international&lt;br /&gt;
*Aktuelle Daten: nicht implementiert&lt;br /&gt;
*Wetterwarnungen: für Landkreise und Gemeinden in deutsch oder englisch&lt;br /&gt;
&lt;br /&gt;
Es gibt zum Modul auch einen passenden [https://forum.fhem.de/index.php/topic,83097.msg753155.html#msg753155 Weblink], der 2 Icons pro Tag in horizontaler Form darstellt. Die Anzahl der insgesamt dargestellten Icons ist konfigurierbar. Liegen Wetterwarnungen vor, wird zusätzlich ein Warnsymbol angezeigt, über das man per Klick weitere Details zur Wetterwarnung abrufen kann.&lt;br /&gt;
&lt;br /&gt;
[[DWD_OpenData|Weitere Details und Installationsbeschreibung]]&lt;br /&gt;
&lt;br /&gt;
== Wetterwarnungen des DWD ==&lt;br /&gt;
Der Deutsche Wetterdienst [http://www.dwd.de DWD] stellt neben diversen Wetterdaten auch Wetterwarnungen in Bildform bereit. Diese können sehr einfach via [http://fhem.de/commandref_DE.html#weblink weblink iframe] in FHEM eingebunden werden - das ist zwar nicht die schönste Form, aber die schnellste.&lt;br /&gt;
&lt;br /&gt;
Dazu sucht man sich zuerst auf der [http://www.dwd.de/bvbw/appmanager/bvbw/dwdwwwDesktop?_nfpb=true&amp;amp;_pageLabel=_dwdwww_wetter_warnungen_warnungen&amp;amp;T92053gsbDocumentPath=BEA__Navigation%2FWetter__Warnungen%2FWarnungen.html%3F__nnn%3Dtrue&amp;amp;lastPageLabel=dwdwww_wetter_warnungen Warnungsseite des DWD] die eigene Region heraus (in der Karte durchklicken). Die gewünschte URL für Berlin Stadt ist z.B. &amp;lt;code&amp;gt;http://www.dwd.de/dyn/app/ws/html/reports/BXX_warning_de.html#WS_ANCHOR_0&amp;lt;/code&amp;gt;. Das Anhängsel &amp;lt;code&amp;gt;#WS_ANCHOR_0&amp;lt;/code&amp;gt; kann man in der Konfiguration auch weglassen.&lt;br /&gt;
&lt;br /&gt;
Die Einbindung in FHEM sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define dwd_warnmeldung weblink iframe http://www.dwd.de/dyn/app/ws/html/reports/BXX_warning_de.html&lt;br /&gt;
attr dwd_warnmeldung group Wetterwarnungen (DWD)&lt;br /&gt;
attr dwd_warnmeldung htmlattr width=&amp;quot;100%&amp;quot; height=&amp;quot;300&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
attr dwd_warnmeldung room Wettervorhersage,Startseite&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorhersage-Diagramm von YR ==&lt;br /&gt;
[http://www.yr.no YR] ist die Seite des norwegischen Wetterdiensts. Er ist zwar nur in Teilen auf Englisch (und gar nicht auf Deutsch) verfügbar, bietet aber sehr gute Wettervorhersagen - auch mit eigenen Vorhersagen für kleine Dörfer. Neben etlichen Detailinfos bietet YR eine sehr schicke 48h-Vorhersage-Grafik. Diese kann sehr einfach via [http://fhem.de/commandref_DE.html#weblink weblink iframe] in FHEM eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Dazu geht man auf die [http://www.yr.no Startseite von YR] und gibt in das Suchfeld den Namen seines Dörfchens ein - die Ergebnissliste kann ziemlich lang werden, sodass man evtl. sehr genau schauen muss, welches das eigene Kaff ist - bei mir war es an 29. Stelle... ;-) Auf der gewünschten Seite gibt es einen Unterpunkt &amp;quot;Hour by hour&amp;quot;, wo sich die besagte Grafik findet. Hier kopiert man sich einfach die URL der Grafik.&lt;br /&gt;
&lt;br /&gt;
Die Einbindung in FHEM sieht dann bspw. wie folgt aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Wetter_yr_Vorhersage weblink iframe http://www.yr.no/place/Germany/Berlin/Berlin/meteogram.png&lt;br /&gt;
attr Wetter_yr_Vorhersage group Wettervorhersage (yr)&lt;br /&gt;
attr Wetter_yr_Vorhersage htmlattr width=&amp;quot;100%&amp;quot; height=&amp;quot;300&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
attr Wetter_yr_Vorhersage room Wettervorhersage,Start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wetter von Weather Underground ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Neben dem hier vorgestellten Abruf der Weather Underground-Daten mit [[HTTPMOD]] kann auf Weather Underground-Daten auch mit dem darauf spezialisierten Modul [http://fhem.de/commandref.html#Wunderground Wunderground] zugegriffen werden.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Dieses Vorgehen ist etwas anspruchsvoller und somit eher für erfahrene FHEM-User geeignet.&lt;br /&gt;
&lt;br /&gt;
[http://www.wunderground.com/ Weather Underground] ist bietet eine sehr umfassende Sammlung aller möglichen offiziellen und privaten (aber teils sehr professionellen) Wetterstationen weltweit. Es besteht eine recht hohe Wahrscheinlichkeit, dass es in der eigenen Umgebung schon eine Wetterstation gibt. Anstatt nun selbst eine komplette Wetterstation aufzubauen, kann man alternativ auf die Daten der Nachbarstation zugreifen.&lt;br /&gt;
&lt;br /&gt;
Dazu sind grundsätzlich die folgenden Schritte notwendig:&lt;br /&gt;
* Finden der geeigneten Station&lt;br /&gt;
* Auswerten der XML-Daten&lt;br /&gt;
* Erstellen passender gplot-Dateien&lt;br /&gt;
&lt;br /&gt;
=== Finden der geeigneten Station ===&lt;br /&gt;
Als erstes geht man auf die [http://www.wunderground.com Startseite von Weather Underground] und gibt in das Suchfeld den Namen seines Dörfchens oder der nächsten Stadt ein - für Berlin landet man bspw. auf Seite für &amp;quot;Berlin Alexanderplatz&amp;quot;. Es gibt aber manchmal sehr viele Wetterstationen in der direkten Umgebung. Diese findet man indem am auf &amp;quot;Change Station&amp;quot; klickt und sich eine passende Station aussucht. Nähere Infos (zB. zur verwendeten Hard- und Software) zu der gewählten Wetterstation erhält man, wenn man auf den Namen der Station klickt und dann auf &amp;quot;About this PWS&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Weather Underground stellt die Daten der Wetterstation auch über eine API als XML bereit, die wir auswerten können. Die entsprechende URL findet sich ebenfalls unter &amp;quot;About this PWS&amp;quot; unter &amp;quot;Download current conditions XML&amp;quot;. Für Berlin Prenzlauer Berg wäre dies bspw. &lt;br /&gt;
&amp;lt;code&amp;gt;http://api.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBERLIN15&amp;amp;format=XML&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entscheidend für die jeweilige Station ist der Teil nach &amp;quot;?=ID&amp;quot;, also in diesem Fall &amp;quot;IBERLIN15&amp;quot;. Dieser Teil des Links lässt sich leicht durch die ID einer anderen Station ersetzen und die Suche nach dem entsprechenden Link auf der Seite der Station bleibt erspart.&lt;br /&gt;
&lt;br /&gt;
=== Auswerten der XML-Daten ===&lt;br /&gt;
Die Auswertung der XML-Daten erfolgt via [[HTTPMOD]]. Da dies nicht ganz trivial ist, sind im Folgenden zuerst die wesentlichen Konfigurationsschritte exemplarisch beschrieben. Weiter unten findet sich dann die fertige vollständige Konfiguration.&lt;br /&gt;
&lt;br /&gt;
Es erstes wird das Device HTTPMOD definiert (die 600 am Schluss ist der Aktualisierungszyklus in Sekunden, also alle 10 min):&lt;br /&gt;
:&amp;lt;code&amp;gt;define wetter_prenzelberg HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IBERLIN15 600 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann werden Attribute für alle Readings definiert:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr wetter_prenzelberg userattr readingsName_cloudiness readingsName_date ... &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann wird jedem Attribut ein Name zugewiesen (unter diesem Namen wird der Wert ins Log geschrieben):&lt;br /&gt;
:&amp;lt;code&amp;gt;attr wetter_prenzelberg readingsName_cloudiness cloudiness &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Schluss wird das Reading selbst definiert:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr wetter_prenzelberg readingsRegex_cloudiness cloudiness id=&amp;quot;NN&amp;quot; percent=&amp;quot;([\d\.]+) &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die gesamte Konfiguration für alle von der API angebotenen Wetterwerte sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define wetter_prenzelberg HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IBERLIN15 600&lt;br /&gt;
attr wetter_prenzelberg userattr readingsName_cloudiness readingsName_date readingsName_dewpointTemperature readingsName_fog readingsName_heatindex readingsName_humidity readingsName_pressure readingsName_solarRadiation readingsName_solarUV readingsName_temperature readingsName_time readingsName_windChill readingsName_windDegrees readingsName_windDirection readingsName_windGust readingsName_windSpeed readingsRegex_cloudiness readingsRegex_date readingsRegex_dewpointTemperature readingsRegex_fog readingsRegex_heatindex readingsRegex_humidity readingsRegex_pressure readingsRegex_solarRadiation readingsRegex_solarUV readingsRegex_temperature readingsRegex_time readingsRegex_windChill readingsRegex_windDegrees readingsRegex_windDirection readingsRegex_windGust readingsRegex_windSpeed&lt;br /&gt;
attr wetter_prenzelberg readingsName_cloudiness cloudiness&lt;br /&gt;
attr wetter_prenzelberg readingsName_date date&lt;br /&gt;
attr wetter_prenzelberg readingsName_dewpointTemperature dewpointTemperature&lt;br /&gt;
attr wetter_prenzelberg readingsName_fog fog&lt;br /&gt;
attr wetter_prenzelberg readingsName_heatindex heatindex&lt;br /&gt;
attr wetter_prenzelberg readingsName_humidity humidity&lt;br /&gt;
attr wetter_prenzelberg readingsName_pressure pressure&lt;br /&gt;
attr wetter_prenzelberg readingsName_solarRadiation solarRadiation&lt;br /&gt;
attr wetter_prenzelberg readingsName_solarUV solarUV&lt;br /&gt;
attr wetter_prenzelberg readingsName_temperature temperature&lt;br /&gt;
attr wetter_prenzelberg readingsName_time time&lt;br /&gt;
attr wetter_prenzelberg readingsName_windChill windChill&lt;br /&gt;
attr wetter_prenzelberg readingsName_windDegrees windDegrees&lt;br /&gt;
attr wetter_prenzelberg readingsName_windDirection windDirection&lt;br /&gt;
attr wetter_prenzelberg readingsName_windGust windGust&lt;br /&gt;
attr wetter_prenzelberg readingsName_windSpeed windSpeed&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_cloudiness cloudiness id=&amp;quot;NN&amp;quot; percent=&amp;quot;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_date date date&amp;quot; content=&amp;quot;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_dewpointTemperature &amp;lt;dewpoint_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_fog fog id=&amp;quot;FOG&amp;quot; percent=&amp;quot;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_heatindex &amp;lt;heat_index_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_humidity &amp;lt;relative_humidity&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_pressure &amp;lt;pressure_mb&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_solarRadiation &amp;lt;solar_radiation&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_solarUV &amp;lt;UV&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_temperature &amp;lt;temp_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_time time Zeit([\d\:]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windChill &amp;lt;windchill_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windDegrees &amp;lt;wind_degrees&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windDirection &amp;lt;wind_dir&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windGust &amp;lt;wind_gust_mph&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windSpeed &amp;lt;wind_mph&amp;gt;([\d\.]+)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweis: Nicht immer werden alle Werte geliefert (wenn keine Sonne, dann kein UV-Wert...). Im System-Log kann das als Fehler auftauchen, ist aber kein Problem.&lt;br /&gt;
&lt;br /&gt;
=== Erstellen passender gplot-Dateien ===&lt;br /&gt;
Um die ausgelesenen Werte als Graphen darstellen zu können müssen eigene gplot-Dateien erstellt werden. Eine grundsätzliche Anleitung dazu findet sich unter [[Creating Plots]]. Deshalb sollen hier nur Beispiele für die eigentlichen gplot-Dateien vorgestellt werden. Beispiele sollten sowohl für [[FileLog]] wie [[DbLog]] funktionieren.&lt;br /&gt;
&lt;br /&gt;
Temperatur und Luftfeuchte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
#set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set title &#039;&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid ytics&lt;br /&gt;
set ylabel &amp;quot;Temperature in C&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Humidity (%)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:temperature\x3a::&lt;br /&gt;
#FileLog 4:windChill\x3a::&lt;br /&gt;
#FileLog 4:humidity\x3a::&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:temperature::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windChill::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:humidity::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Temperatur (C)&#039; ls l0 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Gefühlte Temperatur (C)&#039; ls l1 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Luftfeuchtigkeit (%)&#039; ls l2fill lw 0.2 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wind und Windrichtung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics (&amp;quot;Nord&amp;quot; 0, &amp;quot;Ost&amp;quot; 80, &amp;quot;S&amp;amp;#252;d&amp;quot; 180, &amp;quot;West&amp;quot; 270, &amp;quot;Nord&amp;quot; 360)&lt;br /&gt;
&lt;br /&gt;
#set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set title &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
set grid xtics ytics&lt;br /&gt;
&lt;br /&gt;
set yrange [0:20]&lt;br /&gt;
set y2range [0:360]&lt;br /&gt;
&lt;br /&gt;
set ylabel &amp;quot;Wind (mph)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Richtung&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:windSpeed:0:&lt;br /&gt;
#FileLog 4:windGust:0:&lt;br /&gt;
#FileLog 4:windDegrees:0:&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windSpeed::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windGust::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windDegrees::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Wind (mph)&#039; ls l0 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Böen (mph)&#039; ls l1 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Windrichtung (°)&#039; ls l2fill lw 0.2 with points&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sonnenintensität und UV-Werte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics&lt;br /&gt;
&lt;br /&gt;
#set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set title &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
set grid xtics ytics&lt;br /&gt;
&lt;br /&gt;
set ylabel &amp;quot;Sonnenstrahlung (W/qm)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;UV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:solarRadiation:0:&lt;br /&gt;
#FileLog 4:solarUV:0:&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:solarRadiation::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:solarUV::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Strahlung&#039; ls l0 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;UV&#039; ls l1 lw 1.5 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weitere TBD&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Vergangene Daten abfragen ===&lt;br /&gt;
Ein konkretes vergangenes Datum der Wetterstation kann man übrigens auch abrufen - für den 28.11.2014 wäre dies bspw. &lt;br /&gt;
&amp;lt;code&amp;gt;http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBERLIN15&amp;amp;day=28&amp;amp;month=11&amp;amp;year=2014&amp;amp;graphspan=day&amp;amp;format=1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Wetterdaten hochladen ===&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Unterstützung für das Modul gibt es im dazugehörigen {{Link2Forum|Topic=65587|LinkText=Forumsthread }}.}}&lt;br /&gt;
&lt;br /&gt;
Wer eigene Wetterdaten hochladen will, kann hierzu das Modul [http://fhem.de/commandref.html#WUup WUup] verwenden. Dazu benötigt man die Zugangsdaten (stationID und Paßwort) für eine eigene Wetterstation. Mit dem Modul können die meisten vom [http://wiki.wunderground.com/index.php/PWS_-_Upload_Protocol PWS Upload Protocol] unterstützten Daten hochgeladen werden:&lt;br /&gt;
* Winddir - [0-360 momentane Windrichtung]&lt;br /&gt;
* Windspeedmph - [mph momentane Windgeschwindigkeit]&lt;br /&gt;
* Windgustmph - [mph aktuellen Böe, mit Software-spezifischem Zeitraum]&lt;br /&gt;
* Windgustdir - [0-360 mit Software-spezifischer Zeit]&lt;br /&gt;
* Windspdmph_avg2m - [mph durchschnittliche Windgeschwindigkeit innerhalb 2 Minuten]&lt;br /&gt;
* Winddir_avg2m - [0-360 durchschnittliche Windrichtung innerhalb 2 Minuten]&lt;br /&gt;
* Windgustmph_10m - [mph Böen der vergangenen 10 Minuten]&lt;br /&gt;
* Windgustdir_10m - [0-360 Richtung der Böen der letzten 10 Minuten]&lt;br /&gt;
* Feuchtigkeit - [% Außenfeuchtigkeit 0-100%]&lt;br /&gt;
* Dewptf- [F Taupunkt im Freien]&lt;br /&gt;
* Tempf - [F Außentemperatur]&lt;br /&gt;
* Rainin - [in Regen in der vergangenen Stunde]&lt;br /&gt;
* Dailyrainin - [in Regenmenge bisher heute]&lt;br /&gt;
* Baromin - [inHg barometrischer Druck]&lt;br /&gt;
* Soiltempf - [F Bodentemperatur]&lt;br /&gt;
* Bodenfeuchtigkeit - [%]&lt;br /&gt;
* Solarradiation - [W/m²]&lt;br /&gt;
* UV - [Index]&lt;br /&gt;
&lt;br /&gt;
Die Werte werden im Modul für Wunderground ins anglo-amerikanische System umgerechnet. Temperaturen werden also automatisch von °Celsius in Fahrenheit, Windgeschwindigkeiten von km/h in mph, mm in Inch und der barometrische Druck von hPa in inHg umgerechnet.&lt;br /&gt;
&lt;br /&gt;
== Wetternetzwerk auf wetter.com ==&lt;br /&gt;
Ein vollständiges Beispiel zur Nutzung der Informationen über die Regenmenge (Station 1445, Weinheim) von wetter.com ist in {{Link2Forum|Topic=39600|Message=332837|LinkText=diesem Forenbeitrag}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Wetter von netatmo ==&lt;br /&gt;
Das FHEM-Modul [[netatmo]] ermöglicht den Datenimport von privaten und öffentlichen netatmo Wetterstationen. Eine Übersicht über die verfügbaren öffentlichen Stationen findet sich auf der Seite [http://www.netatmo.com/de-DE/weathermap Weathermap]. Die meisten öffentlichen Stationen liefern Temperatur, Luftfeuchte und Luftdruck, einige auch Wind, Regen und Daten zur Luftqualität (CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=33610}} mit Sammlung und Beipielen von Internet-Links für die Anzeige von teilweise animierten Wetterbildern&lt;br /&gt;
* [http://bloglich.de/art/rpi/wetterdaten-auf-dem-raspberry-pi-in-fhem/ Beispiel in Blog(de)]&lt;br /&gt;
* [[HTTPMOD]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Wetterstationen]] &amp;lt;!-- eigentlich eine &amp;quot;Hardware-Kategorie&amp;quot;, passt aber trotzdem --&amp;gt;&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Wetter_und_Wettervorhersagen&amp;diff=25886</id>
		<title>Wetter und Wettervorhersagen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Wetter_und_Wettervorhersagen&amp;diff=25886"/>
		<updated>2018-03-10T21:58:40Z</updated>

		<summary type="html">&lt;p&gt;JensB: Modul für DWD Open Data Server hinzugefügt, Verweis auf GDS Modul entfernt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wetterdaten und Wettervorhersagen können auf verschiedene Weise in FHEM eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
== Yahoo-Wetter ==&lt;br /&gt;
Für die einfache Einbindung des Yahoo-Wetters gibt es das spezielle Modul [[Weather]].&lt;br /&gt;
&lt;br /&gt;
== Unwetterzentrale ==&lt;br /&gt;
Informationen der Seite(n) Unwetterzentrale.de können mit Hilfe des Moduls [[UWZ]] eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
== Modul OPENWEATHER ==&lt;br /&gt;
Das Modul [[OPENWEATHER]] extrahiert Wetterdaten über die &amp;quot;openweather&amp;quot;-Schnittstelle (API) von www.wetter.com. &lt;br /&gt;
*Vorschau-Zeitraum: 3 Tage&lt;br /&gt;
*Vorschau-Interval: 6:00, 11:00, 17:00, 23:00&lt;br /&gt;
*Aktuelle Daten: keine&lt;br /&gt;
&lt;br /&gt;
== Modul PROPLANTA ==&lt;br /&gt;
Das Modul [[PROPLANTA]] extrahiert Wetterdaten von der Website www.proplanta.de. (keine API)&lt;br /&gt;
*Vorschau-Zeitraum: 12 Tage&lt;br /&gt;
*Vorschau-Interval: 3 h&lt;br /&gt;
*Aktuelle Daten: jede volle Stunde&lt;br /&gt;
&lt;br /&gt;
== Modul WWO ==&lt;br /&gt;
Das Modul extrahiert Wetterdaten über die (alte) API von worldweatheronline.com&lt;br /&gt;
*Vorschau-Zeitraum: ?? Tage&amp;lt;BR&amp;gt;&lt;br /&gt;
*Vorschau-Interval: ??&amp;lt;br&amp;gt;&lt;br /&gt;
*Aktuelle Daten: ??&lt;br /&gt;
&lt;br /&gt;
== Modul DWD_OpenData ==&lt;br /&gt;
Das Modul [https://forum.fhem.de/index.php/topic,83097.msg753155.html#msg753155 DWD_OpenData] bereitet Wetterdaten des DWD auf, die über den [https://www.dwd.de/DE/leistungen/opendata/opendata.html Open Data Server] bereitgestellt werden (diverse Datenformate, keine API). &lt;br /&gt;
*Vorschau-Zeitraum: 7 Tage&lt;br /&gt;
*Vorschau-Interval: datenabhängig, viele mit 3 h&lt;br /&gt;
*Vorschau-Orte: national und international&lt;br /&gt;
*Aktuelle Daten: nicht implementiert&lt;br /&gt;
&lt;br /&gt;
Das Modul unterstützt Zeitzonen, um z.B. internationale Stationen in Ortszeit darstellen zu können. &lt;br /&gt;
&lt;br /&gt;
Die Installation wird in der Modulhilfe beschrieben. Zum Lesen der Modulhilfe nach dem Download des Moduls in das Unterverzeichnis &#039;&#039;FHEM&#039;&#039; im Verzeichnis &#039;&#039;fhem&#039;&#039; auf der Kommandozeile &amp;quot;contrib/commandref_join.pl&amp;quot; ausführen. &lt;br /&gt;
&lt;br /&gt;
Es gibt zum Modul auch einen passenden Weblink, der 2 Icons pro Tag in horizontaler Form darstellt. Die Anzahl der dargestellten Icons ist konfigurierbar. Zur Installation des Weblinks die Datei [https://forum.fhem.de/index.php/topic,83097.msg753155.html#msg753155 DWDODweblink.pm] mit einem Texteditor öffnen und die Beschreibung am Ende der Datei lesen.&lt;br /&gt;
&lt;br /&gt;
== Wetterwarnungen des DWD ==&lt;br /&gt;
Der Deutsche Wetterdienst [http://www.dwd.de DWD] stellt neben diversen Wetterdaten auch Wetterwarnungen in Bildform bereit. Diese können sehr einfach via [http://fhem.de/commandref_DE.html#weblink weblink iframe] in FHEM eingebunden werden - das ist zwar nicht die schönste Form, aber die schnellste.&lt;br /&gt;
&lt;br /&gt;
Dazu sucht man sich zuerst auf der [http://www.dwd.de/bvbw/appmanager/bvbw/dwdwwwDesktop?_nfpb=true&amp;amp;_pageLabel=_dwdwww_wetter_warnungen_warnungen&amp;amp;T92053gsbDocumentPath=BEA__Navigation%2FWetter__Warnungen%2FWarnungen.html%3F__nnn%3Dtrue&amp;amp;lastPageLabel=dwdwww_wetter_warnungen Warnungsseite des DWD] die eigene Region heraus (in der Karte durchklicken). Die gewünschte URL für Berlin Stadt ist z.B. &amp;lt;code&amp;gt;http://www.dwd.de/dyn/app/ws/html/reports/BXX_warning_de.html#WS_ANCHOR_0&amp;lt;/code&amp;gt;. Das Anhängsel &amp;lt;code&amp;gt;#WS_ANCHOR_0&amp;lt;/code&amp;gt; kann man in der Konfiguration auch weglassen.&lt;br /&gt;
&lt;br /&gt;
Die Einbindung in FHEM sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define dwd_warnmeldung weblink iframe http://www.dwd.de/dyn/app/ws/html/reports/BXX_warning_de.html&lt;br /&gt;
attr dwd_warnmeldung group Wetterwarnungen (DWD)&lt;br /&gt;
attr dwd_warnmeldung htmlattr width=&amp;quot;100%&amp;quot; height=&amp;quot;300&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
attr dwd_warnmeldung room Wettervorhersage,Startseite&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vorhersage-Diagramm von YR ==&lt;br /&gt;
[http://www.yr.no YR] ist die Seite des norwegischen Wetterdiensts. Er ist zwar nur in Teilen auf Englisch (und gar nicht auf Deutsch) verfügbar, bietet aber sehr gute Wettervorhersagen - auch mit eigenen Vorhersagen für kleine Dörfer. Neben etlichen Detailinfos bietet YR eine sehr schicke 48h-Vorhersage-Grafik. Diese kann sehr einfach via [http://fhem.de/commandref_DE.html#weblink weblink iframe] in FHEM eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Dazu geht man auf die [http://www.yr.no Startseite von YR] und gibt in das Suchfeld den Namen seines Dörfchens ein - die Ergebnissliste kann ziemlich lang werden, sodass man evtl. sehr genau schauen muss, welches das eigene Kaff ist - bei mir war es an 29. Stelle... ;-) Auf der gewünschten Seite gibt es einen Unterpunkt &amp;quot;Hour by hour&amp;quot;, wo sich die besagte Grafik findet. Hier kopiert man sich einfach die URL der Grafik.&lt;br /&gt;
&lt;br /&gt;
Die Einbindung in FHEM sieht dann bspw. wie folgt aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Wetter_yr_Vorhersage weblink iframe http://www.yr.no/place/Germany/Berlin/Berlin/meteogram.png&lt;br /&gt;
attr Wetter_yr_Vorhersage group Wettervorhersage (yr)&lt;br /&gt;
attr Wetter_yr_Vorhersage htmlattr width=&amp;quot;100%&amp;quot; height=&amp;quot;300&amp;quot; frameborder=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; marginwidth=&amp;quot;0&amp;quot;&lt;br /&gt;
attr Wetter_yr_Vorhersage room Wettervorhersage,Start&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wetter von Weather Underground ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Neben dem hier vorgestellten Abruf der Weather Underground-Daten mit [[HTTPMOD]] kann auf Weather Underground-Daten auch mit dem darauf spezialisierten Modul [http://fhem.de/commandref.html#Wunderground Wunderground] zugegriffen werden.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Dieses Vorgehen ist etwas anspruchsvoller und somit eher für erfahrene FHEM-User geeignet.&lt;br /&gt;
&lt;br /&gt;
[http://www.wunderground.com/ Weather Underground] ist bietet eine sehr umfassende Sammlung aller möglichen offiziellen und privaten (aber teils sehr professionellen) Wetterstationen weltweit. Es besteht eine recht hohe Wahrscheinlichkeit, dass es in der eigenen Umgebung schon eine Wetterstation gibt. Anstatt nun selbst eine komplette Wetterstation aufzubauen, kann man alternativ auf die Daten der Nachbarstation zugreifen.&lt;br /&gt;
&lt;br /&gt;
Dazu sind grundsätzlich die folgenden Schritte notwendig:&lt;br /&gt;
* Finden der geeigneten Station&lt;br /&gt;
* Auswerten der XML-Daten&lt;br /&gt;
* Erstellen passender gplot-Dateien&lt;br /&gt;
&lt;br /&gt;
=== Finden der geeigneten Station ===&lt;br /&gt;
Als erstes geht man auf die [http://www.wunderground.com Startseite von Weather Underground] und gibt in das Suchfeld den Namen seines Dörfchens oder der nächsten Stadt ein - für Berlin landet man bspw. auf Seite für &amp;quot;Berlin Alexanderplatz&amp;quot;. Es gibt aber manchmal sehr viele Wetterstationen in der direkten Umgebung. Diese findet man indem am auf &amp;quot;Change Station&amp;quot; klickt und sich eine passende Station aussucht. Nähere Infos (zB. zur verwendeten Hard- und Software) zu der gewählten Wetterstation erhält man, wenn man auf den Namen der Station klickt und dann auf &amp;quot;About this PWS&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Weather Underground stellt die Daten der Wetterstation auch über eine API als XML bereit, die wir auswerten können. Die entsprechende URL findet sich ebenfalls unter &amp;quot;About this PWS&amp;quot; unter &amp;quot;Download current conditions XML&amp;quot;. Für Berlin Prenzlauer Berg wäre dies bspw. &lt;br /&gt;
&amp;lt;code&amp;gt;http://api.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBERLIN15&amp;amp;format=XML&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Entscheidend für die jeweilige Station ist der Teil nach &amp;quot;?=ID&amp;quot;, also in diesem Fall &amp;quot;IBERLIN15&amp;quot;. Dieser Teil des Links lässt sich leicht durch die ID einer anderen Station ersetzen und die Suche nach dem entsprechenden Link auf der Seite der Station bleibt erspart.&lt;br /&gt;
&lt;br /&gt;
=== Auswerten der XML-Daten ===&lt;br /&gt;
Die Auswertung der XML-Daten erfolgt via [[HTTPMOD]]. Da dies nicht ganz trivial ist, sind im Folgenden zuerst die wesentlichen Konfigurationsschritte exemplarisch beschrieben. Weiter unten findet sich dann die fertige vollständige Konfiguration.&lt;br /&gt;
&lt;br /&gt;
Es erstes wird das Device HTTPMOD definiert (die 600 am Schluss ist der Aktualisierungszyklus in Sekunden, also alle 10 min):&lt;br /&gt;
:&amp;lt;code&amp;gt;define wetter_prenzelberg HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IBERLIN15 600 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann werden Attribute für alle Readings definiert:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr wetter_prenzelberg userattr readingsName_cloudiness readingsName_date ... &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann wird jedem Attribut ein Name zugewiesen (unter diesem Namen wird der Wert ins Log geschrieben):&lt;br /&gt;
:&amp;lt;code&amp;gt;attr wetter_prenzelberg readingsName_cloudiness cloudiness &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Schluss wird das Reading selbst definiert:&lt;br /&gt;
:&amp;lt;code&amp;gt;attr wetter_prenzelberg readingsRegex_cloudiness cloudiness id=&amp;quot;NN&amp;quot; percent=&amp;quot;([\d\.]+) &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die gesamte Konfiguration für alle von der API angebotenen Wetterwerte sieht dann wie folgt aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define wetter_prenzelberg HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IBERLIN15 600&lt;br /&gt;
attr wetter_prenzelberg userattr readingsName_cloudiness readingsName_date readingsName_dewpointTemperature readingsName_fog readingsName_heatindex readingsName_humidity readingsName_pressure readingsName_solarRadiation readingsName_solarUV readingsName_temperature readingsName_time readingsName_windChill readingsName_windDegrees readingsName_windDirection readingsName_windGust readingsName_windSpeed readingsRegex_cloudiness readingsRegex_date readingsRegex_dewpointTemperature readingsRegex_fog readingsRegex_heatindex readingsRegex_humidity readingsRegex_pressure readingsRegex_solarRadiation readingsRegex_solarUV readingsRegex_temperature readingsRegex_time readingsRegex_windChill readingsRegex_windDegrees readingsRegex_windDirection readingsRegex_windGust readingsRegex_windSpeed&lt;br /&gt;
attr wetter_prenzelberg readingsName_cloudiness cloudiness&lt;br /&gt;
attr wetter_prenzelberg readingsName_date date&lt;br /&gt;
attr wetter_prenzelberg readingsName_dewpointTemperature dewpointTemperature&lt;br /&gt;
attr wetter_prenzelberg readingsName_fog fog&lt;br /&gt;
attr wetter_prenzelberg readingsName_heatindex heatindex&lt;br /&gt;
attr wetter_prenzelberg readingsName_humidity humidity&lt;br /&gt;
attr wetter_prenzelberg readingsName_pressure pressure&lt;br /&gt;
attr wetter_prenzelberg readingsName_solarRadiation solarRadiation&lt;br /&gt;
attr wetter_prenzelberg readingsName_solarUV solarUV&lt;br /&gt;
attr wetter_prenzelberg readingsName_temperature temperature&lt;br /&gt;
attr wetter_prenzelberg readingsName_time time&lt;br /&gt;
attr wetter_prenzelberg readingsName_windChill windChill&lt;br /&gt;
attr wetter_prenzelberg readingsName_windDegrees windDegrees&lt;br /&gt;
attr wetter_prenzelberg readingsName_windDirection windDirection&lt;br /&gt;
attr wetter_prenzelberg readingsName_windGust windGust&lt;br /&gt;
attr wetter_prenzelberg readingsName_windSpeed windSpeed&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_cloudiness cloudiness id=&amp;quot;NN&amp;quot; percent=&amp;quot;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_date date date&amp;quot; content=&amp;quot;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_dewpointTemperature &amp;lt;dewpoint_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_fog fog id=&amp;quot;FOG&amp;quot; percent=&amp;quot;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_heatindex &amp;lt;heat_index_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_humidity &amp;lt;relative_humidity&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_pressure &amp;lt;pressure_mb&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_solarRadiation &amp;lt;solar_radiation&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_solarUV &amp;lt;UV&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_temperature &amp;lt;temp_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_time time Zeit([\d\:]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windChill &amp;lt;windchill_c&amp;gt;(\+|-?[\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windDegrees &amp;lt;wind_degrees&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windDirection &amp;lt;wind_dir&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windGust &amp;lt;wind_gust_mph&amp;gt;([\d\.]+)&lt;br /&gt;
attr wetter_prenzelberg readingsRegex_windSpeed &amp;lt;wind_mph&amp;gt;([\d\.]+)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hinweis: Nicht immer werden alle Werte geliefert (wenn keine Sonne, dann kein UV-Wert...). Im System-Log kann das als Fehler auftauchen, ist aber kein Problem.&lt;br /&gt;
&lt;br /&gt;
=== Erstellen passender gplot-Dateien ===&lt;br /&gt;
Um die ausgelesenen Werte als Graphen darstellen zu können müssen eigene gplot-Dateien erstellt werden. Eine grundsätzliche Anleitung dazu findet sich unter [[Creating Plots]]. Deshalb sollen hier nur Beispiele für die eigentlichen gplot-Dateien vorgestellt werden. Beispiele sollten sowohl für [[FileLog]] wie [[DbLog]] funktionieren.&lt;br /&gt;
&lt;br /&gt;
Temperatur und Luftfeuchte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
#set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set title &#039;&#039;&lt;br /&gt;
set ytics &lt;br /&gt;
set y2tics &lt;br /&gt;
set grid ytics&lt;br /&gt;
set ylabel &amp;quot;Temperature in C&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Humidity (%)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:temperature\x3a::&lt;br /&gt;
#FileLog 4:windChill\x3a::&lt;br /&gt;
#FileLog 4:humidity\x3a::&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:temperature::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windChill::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:humidity::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Temperatur (C)&#039; ls l0 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Gefühlte Temperatur (C)&#039; ls l1 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Luftfeuchtigkeit (%)&#039; ls l2fill lw 0.2 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wind und Windrichtung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics (&amp;quot;Nord&amp;quot; 0, &amp;quot;Ost&amp;quot; 80, &amp;quot;S&amp;amp;#252;d&amp;quot; 180, &amp;quot;West&amp;quot; 270, &amp;quot;Nord&amp;quot; 360)&lt;br /&gt;
&lt;br /&gt;
#set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set title &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
set grid xtics ytics&lt;br /&gt;
&lt;br /&gt;
set yrange [0:20]&lt;br /&gt;
set y2range [0:360]&lt;br /&gt;
&lt;br /&gt;
set ylabel &amp;quot;Wind (mph)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;Richtung&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:windSpeed:0:&lt;br /&gt;
#FileLog 4:windGust:0:&lt;br /&gt;
#FileLog 4:windDegrees:0:&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windSpeed::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windGust::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:windDegrees::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Wind (mph)&#039; ls l0 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Böen (mph)&#039; ls l1 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y2 title &#039;Windrichtung (°)&#039; ls l2fill lw 0.2 with points&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sonnenintensität und UV-Werte:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set terminal png transparent size &amp;lt;SIZE&amp;gt; crop&lt;br /&gt;
&lt;br /&gt;
set output &#039;&amp;lt;OUT&amp;gt;.png&#039;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%Y-%m-%d_%H:%M:%S&amp;quot;&lt;br /&gt;
set xlabel &amp;quot; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
set ytics&lt;br /&gt;
set y2tics&lt;br /&gt;
&lt;br /&gt;
#set title &#039;&amp;lt;L1&amp;gt;&#039;&lt;br /&gt;
set title &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
set grid xtics ytics&lt;br /&gt;
&lt;br /&gt;
set ylabel &amp;quot;Sonnenstrahlung (W/qm)&amp;quot;&lt;br /&gt;
set y2label &amp;quot;UV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#FileLog 4:solarRadiation:0:&lt;br /&gt;
#FileLog 4:solarUV:0:&lt;br /&gt;
&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:solarRadiation::&lt;br /&gt;
#DbLog &amp;lt;SPEC1&amp;gt;:solarUV::&lt;br /&gt;
&lt;br /&gt;
plot &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;Strahlung&#039; ls l0 lw 1.5 with lines,\&lt;br /&gt;
     &amp;quot;&amp;lt;IN&amp;gt;&amp;quot; using 1:2 axes x1y1 title &#039;UV&#039; ls l1 lw 1.5 with lines&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Weitere TBD&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Vergangene Daten abfragen ===&lt;br /&gt;
Ein konkretes vergangenes Datum der Wetterstation kann man übrigens auch abrufen - für den 28.11.2014 wäre dies bspw. &lt;br /&gt;
&amp;lt;code&amp;gt;http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBERLIN15&amp;amp;day=28&amp;amp;month=11&amp;amp;year=2014&amp;amp;graphspan=day&amp;amp;format=1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Eigene Wetterdaten hochladen ===&lt;br /&gt;
{{Randnotiz|RNTyp=g|RNText=Unterstützung für das Modul gibt es im dazugehörigen {{Link2Forum|Topic=65587|LinkText=Forumsthread }}.}}&lt;br /&gt;
&lt;br /&gt;
Wer eigene Wetterdaten hochladen will, kann hierzu das Modul [http://fhem.de/commandref.html#WUup WUup] verwenden. Dazu benötigt man die Zugangsdaten (stationID und Paßwort) für eine eigene Wetterstation. Mit dem Modul können die meisten vom [http://wiki.wunderground.com/index.php/PWS_-_Upload_Protocol PWS Upload Protocol] unterstützten Daten hochgeladen werden:&lt;br /&gt;
* Winddir - [0-360 momentane Windrichtung]&lt;br /&gt;
* Windspeedmph - [mph momentane Windgeschwindigkeit]&lt;br /&gt;
* Windgustmph - [mph aktuellen Böe, mit Software-spezifischem Zeitraum]&lt;br /&gt;
* Windgustdir - [0-360 mit Software-spezifischer Zeit]&lt;br /&gt;
* Windspdmph_avg2m - [mph durchschnittliche Windgeschwindigkeit innerhalb 2 Minuten]&lt;br /&gt;
* Winddir_avg2m - [0-360 durchschnittliche Windrichtung innerhalb 2 Minuten]&lt;br /&gt;
* Windgustmph_10m - [mph Böen der vergangenen 10 Minuten]&lt;br /&gt;
* Windgustdir_10m - [0-360 Richtung der Böen der letzten 10 Minuten]&lt;br /&gt;
* Feuchtigkeit - [% Außenfeuchtigkeit 0-100%]&lt;br /&gt;
* Dewptf- [F Taupunkt im Freien]&lt;br /&gt;
* Tempf - [F Außentemperatur]&lt;br /&gt;
* Rainin - [in Regen in der vergangenen Stunde]&lt;br /&gt;
* Dailyrainin - [in Regenmenge bisher heute]&lt;br /&gt;
* Baromin - [inHg barometrischer Druck]&lt;br /&gt;
* Soiltempf - [F Bodentemperatur]&lt;br /&gt;
* Bodenfeuchtigkeit - [%]&lt;br /&gt;
* Solarradiation - [W/m²]&lt;br /&gt;
* UV - [Index]&lt;br /&gt;
&lt;br /&gt;
Die Werte werden im Modul für Wunderground ins anglo-amerikanische System umgerechnet. Temperaturen werden also automatisch von °Celsius in Fahrenheit, Windgeschwindigkeiten von km/h in mph, mm in Inch und der barometrische Druck von hPa in inHg umgerechnet.&lt;br /&gt;
&lt;br /&gt;
== Wetternetzwerk auf wetter.com ==&lt;br /&gt;
Ein vollständiges Beispiel zur Nutzung der Informationen über die Regenmenge (Station 1445, Weinheim) von wetter.com ist in {{Link2Forum|Topic=39600|Message=332837|LinkText=diesem Forenbeitrag}} beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Wetter von netatmo ==&lt;br /&gt;
Das FHEM-Modul [[netatmo]] ermöglicht den Datenimport von privaten und öffentlichen netatmo Wetterstationen. Eine Übersicht über die verfügbaren öffentlichen Stationen findet sich auf der Seite [http://www.netatmo.com/de-DE/weathermap Weathermap]. Die meisten öffentlichen Stationen liefern Temperatur, Luftfeuchte und Luftdruck, einige auch Wind, Regen und Daten zur Luftqualität (CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=33610}} mit Sammlung und Beipielen von Internet-Links für die Anzeige von teilweise animierten Wetterbildern&lt;br /&gt;
* [http://bloglich.de/art/rpi/wetterdaten-auf-dem-raspberry-pi-in-fhem/ Beispiel in Blog(de)]&lt;br /&gt;
* [[HTTPMOD]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Code Snippets]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Wetterstationen]] &amp;lt;!-- eigentlich eine &amp;quot;Hardware-Kategorie&amp;quot;, passt aber trotzdem --&amp;gt;&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Arduino_mit_OneWireFirmata&amp;diff=25662</id>
		<title>Arduino mit OneWireFirmata</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Arduino_mit_OneWireFirmata&amp;diff=25662"/>
		<updated>2018-03-03T19:03:57Z</updated>

		<summary type="html">&lt;p&gt;JensB: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
Ein Adruino mit der Firmware ConfigurableFirmata kann als 1-Wire-Busmaster eingesetzt werden. Dafür kommen fast alle Arduino-Boards in Frage. Bei Boards mit wenig Speicher (z.B. MEGA168P) bzw. beim Einbinden großer Programmbibliotheken (z.B. für den ENC28J60) muss man jedoch einige Features von ConfigurableFirmata deaktivieren, um die Firmware installieren zu können.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man auch einen DS2482 als 1-Wire-Busmaster an den I2C-Bus eines Arduinos anschließen. Ein ConfigurableFirmata-Sketch mit DS2482-Unterstützung findet sich [https://github.com/ntruchsess/arduino/tree/DS2482/examples/ConfigurableFirmata hier] bzw kann man sich [https://github.com/ntruchsess/arduino/archive/DS2482.zip hier als zip] herunterladen.&lt;br /&gt;
&lt;br /&gt;
ConfigurableFirmata kann, abhängig von den Möglichkeiten des Boards, mit FHEM wahlweise seriell (z.B. über den USB-Anschluss), über Ethernet (sowohl über Ethernet Shields mit W5100 oder ENC28J60 Chip, letztere unter Verwendung der [https://github.com/ntruchsess/arduino_uip UIPEthernet Library]) oder über WiFi kommunizieren.&lt;br /&gt;
&lt;br /&gt;
In FHEM ist ein Firmata-Device vom Typ FRM anzulegen, das dann als IODev für ein Device vom Typ OWX oder OWX_ASYNC dient.&lt;br /&gt;
&lt;br /&gt;
= Allgemeine Funktionsweise =&lt;br /&gt;
ConfigurableFirmata führt auf dem Arduino bestimmte 1-Wire-Kommandofolgen selbstständig aus. Der Firmata-Client OWX(_ASYNC) fordert z.B. von Firmata an: &#039;mache eine 1-Wire-Bussuche&#039;. Die wird auf dem Arduino ausgeführt und der schickt das Ergebniss (alle gefundenen Devices) an den Firmata-Client zurück. Oder es wird angefordert: &#039;mache einen Bus-Reset, sprich ein bestimmtest Device mit der Adresse XXX an, schicke folgende Bytes dorthin und lese anschließend YY Bytes&#039;. Der Arduino tut das und wenn er fertig ist, schickt er die YY Bytes an den Firmata-Client zurück. Nach dem Abarbeiten einer 1-Wire-Kommandfolge und dem Verschicken des Ergebnisses vergisst er, was er getan hat, weiß also z.B. nicht, welche 1-Wire Devices am Bus gefunden wurden. Solche Funktionen wären bei der Speicherknappheit einiger Arduinos auch nicht realisierbar. Dieser Funktionsumfang ist aber schon deutlich höher als der von anderen Busmasterchips (wie z.B. DS2480 oder DS2482). Denen muss man jedes Kommando in der Abfolge einzeln vorgeben und dabei noch auf das korrekte Timing achten. Bei ConfigurableFirmata bedeutet das Starten einer Bussuche, dass OWX nur 4 Bytes versendet und dann auf das Ergebnis wartet. Das FHEM Modul OWX wartet dabei und blockiert solange FHEM, das Modul OWX_ASYNC wartet dagegen in einem Protothread während FHEM weiter arbeitet und der Arduino parallel dazu über den 1-Wire Bus kommuniziert.&lt;br /&gt;
&lt;br /&gt;
Wenn man zusätzlich einen DS2482 als Busmaster an den Arduino anschließt, dann ändert sich am oben Gesagtem nichts. Mit dem DS2482 hat der Arduino ein elektrisch etwas besser an 1-Wire angepasstes Interface und muss weniger Timing per Software machen. Dies erlaubt z.T. mehr Devices bei längerem 1-Wire Bus als es ohne zusätzlichen Busmaster möglich ist.&lt;br /&gt;
&lt;br /&gt;
= Mögliche Funktionserweiterung =&lt;br /&gt;
Die Funktion &amp;quot;FirmataScheduler&amp;quot; von ConfigurableFirmata wird zur Zeit von den FHEM-Modulen FRM und OWX nicht unterstützt. Damit könnte man z.B. iButtons über OWID mit einer schnellen, arduinoseitig getriggerten Bussuche versorgen. Der Scheduler ist in der Lage Firmata-Kommandoabfolgen zu speichern und zeitversetzt (auch zyklisch) abzuspielen. Damit könnte man sich auch das Senden der genannten 4 Bytes zum Starten der Bussuche ersparen. Der Arduino würde die Ergebnisse selbstständig im vorgegebenen Interval verschicken. Je nach Arduino kann man wegen des begrenzten Speichers jedoch keine komplexeren Aufgaben im FirmataScheduler unterbringen, insbesondere kann man nicht die Kommandofolgen für mehrere Devices unterbringen (eine DS18B20 Abfrage braucht z.B. ca. 30 Bytes pro Device. Das klingt nach wenig, ist aber eine ganze Menge, wenn nur wenige 100kb verfügbar sind). Ist der Speicher zu Ende stürzt der Arduino einfach ab bzw. resettet sich.&lt;br /&gt;
&lt;br /&gt;
= Arduino IDE und ConfigurableFirmata =&lt;br /&gt;
Die Installation der Arduino-IDE sowie das Auswählen und das prinzipielle Kompilieren von ConfigurableFirmata wird auf der Seite [[Arduino Firmata]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Will man den DS2482 als Busmaster einsetzen, verwendet man statt eines der Standardbeispiele von ConfigurableFirmata die oben aufgeführte DS2482-ConfigurableFirmata als Sketch. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Dieser Sketch basiert auf einer älteren Version von ConfigurableFirmata. Sollte er mit der aktuellen Version von ConfigurableFirmata nicht mehr kompatibel sein, müsste man die relevanten Teile für den DS2482 manuell in die neue Version übertragen.&lt;br /&gt;
&lt;br /&gt;
= ConfigurableFirmata Features =&lt;br /&gt;
Wenn man die Features von ConfigurableFirmata reduzieren möchte (z.B. weil man einen MEGA168P verwenden will und gar keine Servos ansteuern möchte), muss man im ConfigurableFirmata-Sketch die entsprechenden includes mit zwei vorgestellen Schrägstrichen auskommentieren. &lt;br /&gt;
&lt;br /&gt;
Kommt es nach dem Auskommentiert zu Fehlern bei der ersten Kompilierung, sollte man den Sketch zunächst mit allen Features kompilieren und anschließend schrittweise wieder reduzieren. &lt;br /&gt;
&lt;br /&gt;
Für 1-Wire muss neben OneWireFirmata auf jeden Fall auch FirmataExt aktiviert werden, denn ohne FirmataExt ist nur Digital- und Analog-I/O möglich.&lt;br /&gt;
&lt;br /&gt;
Es wird empfohlen nur die erforderlichen Features zu aktivieren. Beispielsweise passen I2C und 1Wire nicht gleichzeitig mit UIPEthernet ins RAM eines ATMega328. Das lässt sich zwar flashen, es stürzt aber mangels ausreichend Heap-Speichers sofort ab.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man eine feste IP-Adresse vergeben statt DHCP zu verwenden. Bei UIPEthernet kann man dann UDP in der uipethernet-conf.h abstellen und das spart ca. 5kb Flash und einige 100 Bytes RAM.&lt;br /&gt;
&lt;br /&gt;
= Arduino Firmware Flashen =&lt;br /&gt;
Ist das Kompilieren erfolgreich, muss man noch unter &#039;Tools&#039;-&amp;amp;gt;&#039;Programmer&#039; den verwendeten Programmieradapter sowie unter &#039;Tools&#039;-&amp;amp;gt;&#039;serieller Port&#039; den korrekten Port auswählen und mit dem &#039;Upload&#039;-Knopf (der mit dem Rechspfeil oben link in der Arduino IDE) den geladenen Sketch auf das Board hochladen. Je nach Arduino Board sind andere Einstellungen als die hier aufgeführten und ggf. auch zusätzliche Aktionen erforderlich (z.B. zu einem bestimmten Zeitpunkt bestimmte Buttons auf dem Board drücken oder bestimmte Pins verbinden).&lt;br /&gt;
&lt;br /&gt;
Falls man unter Windows Probleme hat, den Arduino über USB zu verbinden, finden sich z.B. hier weitere Informationen: [http://arduino.cc/en/Guide/Windows#toc2 http://arduino.cc/en/Guide/Windows#toc2]&lt;br /&gt;
&lt;br /&gt;
= Einbinden eines Arduinos mit Firmata in FHEM =&lt;br /&gt;
Ein Arduino mit Firmata wird in FHEM über das Modul 10_FRM.pm angesprochen. Dazu sollte mindestens die FRM Modul in der Version 15941 vom 20.01.2018 verwendet werden (ggf. FHEM update durchführen).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# definiere FRM mit USB-Schnittstelle /dev/ttyUSB0, Baudrate 57600 ist Default für StandardFirmata&lt;br /&gt;
define FIRMATA FRM /dev/ttyUSB0@57600&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# definiere FRM mit TCP/IP-Schnittstelle auf Port 3030&lt;br /&gt;
define FIRMATA FRM 3030 global&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
FRM macht bei Netzwerkverbindungen FHEM-seitig einen Serverport auf (dieser wird in der define-Zeile angegeben). &#039;global&#039; muss zusätzlich angegeben werden, damit der Serversocket an alle IP-addressen gebunden wird. (Sonst wird nur &#039;localhost&#039; verwendet, was nicht funktionieren würde). Der Arduino verbindet sich aktiv zu diesem Port, sonst gilt im Prinzip alles was auch für den über USB angebunden Arduino gilt.&lt;br /&gt;
&lt;br /&gt;
Siehe dazu auch die {{Link2CmdRef|Anker=FRM}}.&lt;br /&gt;
&lt;br /&gt;
= Einbinden der 1-Wire Devices in FHEM =&lt;br /&gt;
Nachdem das FRM Device angelegt wurde, kann ein danach definiertes OWX Device einen der Arduino-Pins als 1-Wire-Busmaster nutzen. Das funktioniert bei den meisten Boards an allen Pins, die Digital-IO unterstützen. Wenn sich das Firmata Device schon verbunden hat, findet man im laufenden FHEM bei den Internals des FRM Devices den Eintrag: &#039;onewire-pins&#039;. Dieser listet alle Pins auf, die 1-Wire unterstützen. Damit kann das OWX-Device angelegt werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;device-name&amp;amp;gt; OWX &amp;lt;Firmata-Device&amp;gt;:&amp;amp;lt;arduino-pin&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z.B. ist beim Arduino Mini Pro der D9 = Pin 9 gut geeignet.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define OWio1 OWX Arduino:9&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Definieren des OWX Devices fängt dieses selbsttätig an über den Arduino-Pin nach 1-Wire Devices zu suchen und im Raum &#039;OWX&#039; automatisch anzulegen.&lt;br /&gt;
&lt;br /&gt;
Wenn man die [https://github.com/ntruchsess/arduino/tree/DS2482/examples/ConfigurableFirmata DS2482-ConfigurableFirmata] benutzt, dann findet man beim FRM-Device unter &#039;onewire-pins&#039; nur die I2C-Pins. Das sind z.B. bei einem Uno bzw. Nano die Pins 18 und 19 (das entspricht den Analogpins 4 und 5). Einen der beiden muss man dann bei der Definition des OWX-Moduls angeben um die DS2482-Unterstützung zu aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;device-name&amp;amp;gt; OWX 18&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;br /&gt;
[[Kategorie:Arduino]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Arduino_mit_OneWireFirmata&amp;diff=25661</id>
		<title>Arduino mit OneWireFirmata</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Arduino_mit_OneWireFirmata&amp;diff=25661"/>
		<updated>2018-03-03T19:03:20Z</updated>

		<summary type="html">&lt;p&gt;JensB: WiFi als Schnittstelle ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
Ein Adruino mit der Firmware ConfigurableFirmata kann als 1-Wire-Busmaster eingesetzt werden. Dafür kommen fast alle Arduino-Boards in Frage. Bei Boards mit wenig Speicher (z.B. MEGA168P) bzw. beim Einbinden großer Programmbibliotheken (z.B. für den ENC28J60) muss man jedoch einige Features von ConfigurableFirmata deaktivieren, um die Firmware installieren zu können.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man auch einen DS2482 als 1-Wire-Busmaster an den I2C-Bus eines Arduinos anschließen. Ein ConfigurableFirmata-Sketch mit DS2482-Unterstützung findet sich [https://github.com/ntruchsess/arduino/tree/DS2482/examples/ConfigurableFirmata hier] bzw kann man sich [https://github.com/ntruchsess/arduino/archive/DS2482.zip hier als zip] herunterladen.&lt;br /&gt;
&lt;br /&gt;
ConfigurableFirmata kann, abhängig von den Möglichkeiten des Board, mit FHEM wahlweise seriell (z.B. über den USB-Anschluss), über Ethernet (sowohl über Ethernet Shields mit W5100 oder ENC28J60 Chip, letztere unter Verwendung der [https://github.com/ntruchsess/arduino_uip UIPEthernet Library]) oder über WiFi kommunizieren.&lt;br /&gt;
&lt;br /&gt;
In FHEM ist ein Firmata-Device vom Typ FRM anzulegen, das dann als IODev für ein Device vom Typ OWX oder OWX_ASYNC dient.&lt;br /&gt;
&lt;br /&gt;
= Allgemeine Funktionsweise =&lt;br /&gt;
ConfigurableFirmata führt auf dem Arduino bestimmte 1-Wire-Kommandofolgen selbstständig aus. Der Firmata-Client OWX(_ASYNC) fordert z.B. von Firmata an: &#039;mache eine 1-Wire-Bussuche&#039;. Die wird auf dem Arduino ausgeführt und der schickt das Ergebniss (alle gefundenen Devices) an den Firmata-Client zurück. Oder es wird angefordert: &#039;mache einen Bus-Reset, sprich ein bestimmtest Device mit der Adresse XXX an, schicke folgende Bytes dorthin und lese anschließend YY Bytes&#039;. Der Arduino tut das und wenn er fertig ist, schickt er die YY Bytes an den Firmata-Client zurück. Nach dem Abarbeiten einer 1-Wire-Kommandfolge und dem Verschicken des Ergebnisses vergisst er, was er getan hat, weiß also z.B. nicht, welche 1-Wire Devices am Bus gefunden wurden. Solche Funktionen wären bei der Speicherknappheit einiger Arduinos auch nicht realisierbar. Dieser Funktionsumfang ist aber schon deutlich höher als der von anderen Busmasterchips (wie z.B. DS2480 oder DS2482). Denen muss man jedes Kommando in der Abfolge einzeln vorgeben und dabei noch auf das korrekte Timing achten. Bei ConfigurableFirmata bedeutet das Starten einer Bussuche, dass OWX nur 4 Bytes versendet und dann auf das Ergebnis wartet. Das FHEM Modul OWX wartet dabei und blockiert solange FHEM, das Modul OWX_ASYNC wartet dagegen in einem Protothread während FHEM weiter arbeitet und der Arduino parallel dazu über den 1-Wire Bus kommuniziert.&lt;br /&gt;
&lt;br /&gt;
Wenn man zusätzlich einen DS2482 als Busmaster an den Arduino anschließt, dann ändert sich am oben Gesagtem nichts. Mit dem DS2482 hat der Arduino ein elektrisch etwas besser an 1-Wire angepasstes Interface und muss weniger Timing per Software machen. Dies erlaubt z.T. mehr Devices bei längerem 1-Wire Bus als es ohne zusätzlichen Busmaster möglich ist.&lt;br /&gt;
&lt;br /&gt;
= Mögliche Funktionserweiterung =&lt;br /&gt;
Die Funktion &amp;quot;FirmataScheduler&amp;quot; von ConfigurableFirmata wird zur Zeit von den FHEM-Modulen FRM und OWX nicht unterstützt. Damit könnte man z.B. iButtons über OWID mit einer schnellen, arduinoseitig getriggerten Bussuche versorgen. Der Scheduler ist in der Lage Firmata-Kommandoabfolgen zu speichern und zeitversetzt (auch zyklisch) abzuspielen. Damit könnte man sich auch das Senden der genannten 4 Bytes zum Starten der Bussuche ersparen. Der Arduino würde die Ergebnisse selbstständig im vorgegebenen Interval verschicken. Je nach Arduino kann man wegen des begrenzten Speichers jedoch keine komplexeren Aufgaben im FirmataScheduler unterbringen, insbesondere kann man nicht die Kommandofolgen für mehrere Devices unterbringen (eine DS18B20 Abfrage braucht z.B. ca. 30 Bytes pro Device. Das klingt nach wenig, ist aber eine ganze Menge, wenn nur wenige 100kb verfügbar sind). Ist der Speicher zu Ende stürzt der Arduino einfach ab bzw. resettet sich.&lt;br /&gt;
&lt;br /&gt;
= Arduino IDE und ConfigurableFirmata =&lt;br /&gt;
Die Installation der Arduino-IDE sowie das Auswählen und das prinzipielle Kompilieren von ConfigurableFirmata wird auf der Seite [[Arduino Firmata]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Will man den DS2482 als Busmaster einsetzen, verwendet man statt eines der Standardbeispiele von ConfigurableFirmata die oben aufgeführte DS2482-ConfigurableFirmata als Sketch. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Dieser Sketch basiert auf einer älteren Version von ConfigurableFirmata. Sollte er mit der aktuellen Version von ConfigurableFirmata nicht mehr kompatibel sein, müsste man die relevanten Teile für den DS2482 manuell in die neue Version übertragen.&lt;br /&gt;
&lt;br /&gt;
= ConfigurableFirmata Features =&lt;br /&gt;
Wenn man die Features von ConfigurableFirmata reduzieren möchte (z.B. weil man einen MEGA168P verwenden will und gar keine Servos ansteuern möchte), muss man im ConfigurableFirmata-Sketch die entsprechenden includes mit zwei vorgestellen Schrägstrichen auskommentieren. &lt;br /&gt;
&lt;br /&gt;
Kommt es nach dem Auskommentiert zu Fehlern bei der ersten Kompilierung, sollte man den Sketch zunächst mit allen Features kompilieren und anschließend schrittweise wieder reduzieren. &lt;br /&gt;
&lt;br /&gt;
Für 1-Wire muss neben OneWireFirmata auf jeden Fall auch FirmataExt aktiviert werden, denn ohne FirmataExt ist nur Digital- und Analog-I/O möglich.&lt;br /&gt;
&lt;br /&gt;
Es wird empfohlen nur die erforderlichen Features zu aktivieren. Beispielsweise passen I2C und 1Wire nicht gleichzeitig mit UIPEthernet ins RAM eines ATMega328. Das lässt sich zwar flashen, es stürzt aber mangels ausreichend Heap-Speichers sofort ab.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man eine feste IP-Adresse vergeben statt DHCP zu verwenden. Bei UIPEthernet kann man dann UDP in der uipethernet-conf.h abstellen und das spart ca. 5kb Flash und einige 100 Bytes RAM.&lt;br /&gt;
&lt;br /&gt;
= Arduino Firmware Flashen =&lt;br /&gt;
Ist das Kompilieren erfolgreich, muss man noch unter &#039;Tools&#039;-&amp;amp;gt;&#039;Programmer&#039; den verwendeten Programmieradapter sowie unter &#039;Tools&#039;-&amp;amp;gt;&#039;serieller Port&#039; den korrekten Port auswählen und mit dem &#039;Upload&#039;-Knopf (der mit dem Rechspfeil oben link in der Arduino IDE) den geladenen Sketch auf das Board hochladen. Je nach Arduino Board sind andere Einstellungen als die hier aufgeführten und ggf. auch zusätzliche Aktionen erforderlich (z.B. zu einem bestimmten Zeitpunkt bestimmte Buttons auf dem Board drücken oder bestimmte Pins verbinden).&lt;br /&gt;
&lt;br /&gt;
Falls man unter Windows Probleme hat, den Arduino über USB zu verbinden, finden sich z.B. hier weitere Informationen: [http://arduino.cc/en/Guide/Windows#toc2 http://arduino.cc/en/Guide/Windows#toc2]&lt;br /&gt;
&lt;br /&gt;
= Einbinden eines Arduinos mit Firmata in FHEM =&lt;br /&gt;
Ein Arduino mit Firmata wird in FHEM über das Modul 10_FRM.pm angesprochen. Dazu sollte mindestens die FRM Modul in der Version 15941 vom 20.01.2018 verwendet werden (ggf. FHEM update durchführen).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# definiere FRM mit USB-Schnittstelle /dev/ttyUSB0, Baudrate 57600 ist Default für StandardFirmata&lt;br /&gt;
define FIRMATA FRM /dev/ttyUSB0@57600&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# definiere FRM mit TCP/IP-Schnittstelle auf Port 3030&lt;br /&gt;
define FIRMATA FRM 3030 global&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
FRM macht bei Netzwerkverbindungen FHEM-seitig einen Serverport auf (dieser wird in der define-Zeile angegeben). &#039;global&#039; muss zusätzlich angegeben werden, damit der Serversocket an alle IP-addressen gebunden wird. (Sonst wird nur &#039;localhost&#039; verwendet, was nicht funktionieren würde). Der Arduino verbindet sich aktiv zu diesem Port, sonst gilt im Prinzip alles was auch für den über USB angebunden Arduino gilt.&lt;br /&gt;
&lt;br /&gt;
Siehe dazu auch die {{Link2CmdRef|Anker=FRM}}.&lt;br /&gt;
&lt;br /&gt;
= Einbinden der 1-Wire Devices in FHEM =&lt;br /&gt;
Nachdem das FRM Device angelegt wurde, kann ein danach definiertes OWX Device einen der Arduino-Pins als 1-Wire-Busmaster nutzen. Das funktioniert bei den meisten Boards an allen Pins, die Digital-IO unterstützen. Wenn sich das Firmata Device schon verbunden hat, findet man im laufenden FHEM bei den Internals des FRM Devices den Eintrag: &#039;onewire-pins&#039;. Dieser listet alle Pins auf, die 1-Wire unterstützen. Damit kann das OWX-Device angelegt werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;device-name&amp;amp;gt; OWX &amp;lt;Firmata-Device&amp;gt;:&amp;amp;lt;arduino-pin&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z.B. ist beim Arduino Mini Pro der D9 = Pin 9 gut geeignet.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define OWio1 OWX Arduino:9&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Definieren des OWX Devices fängt dieses selbsttätig an über den Arduino-Pin nach 1-Wire Devices zu suchen und im Raum &#039;OWX&#039; automatisch anzulegen.&lt;br /&gt;
&lt;br /&gt;
Wenn man die [https://github.com/ntruchsess/arduino/tree/DS2482/examples/ConfigurableFirmata DS2482-ConfigurableFirmata] benutzt, dann findet man beim FRM-Device unter &#039;onewire-pins&#039; nur die I2C-Pins. Das sind z.B. bei einem Uno bzw. Nano die Pins 18 und 19 (das entspricht den Analogpins 4 und 5). Einen der beiden muss man dann bei der Definition des OWX-Moduls angeben um die DS2482-Unterstützung zu aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;device-name&amp;amp;gt; OWX 18&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;br /&gt;
[[Kategorie:Arduino]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Arduino_Firmata&amp;diff=25660</id>
		<title>Arduino Firmata</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Arduino_Firmata&amp;diff=25660"/>
		<updated>2018-03-03T18:57:01Z</updated>

		<summary type="html">&lt;p&gt;JensB: Rechtschreibung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Arduino mit Firmata ==&lt;br /&gt;
Für Arduinos (und diverse Arduino kompatible Boards) gibt es eine Standardimplementierung des Kommunikationsprotokolls &#039;&#039;Firmata&#039;&#039; [https://github.com/firmata/protocol]. Mit Hilfe des Perl-Moduls &#039;&#039;Device::Firmata&#039;&#039;, auch bekannt als perl-firmata [https://github.com/ntruchsess/perl-firmata], kann das Firmata-Protokoll in Perl genutzt werden und mit dem Modul [[#FRM|FRM]] auch in FHEM.&lt;br /&gt;
&lt;br /&gt;
Für die Kommunikation zwischen FHEM (Master) und Arduino (Slave) stehen mehrere Schnittstellen zur Auswahl: RS-232, USB, Ethernet und WiFi. Insbesondere Ethernet und WiFi erlauben die Integration dezentraler IO-Periperie mit FHEM.&lt;br /&gt;
&lt;br /&gt;
Firmata möglich es, mit nur geringen Arduino-Kenntnissen digitale und analoge Signale aus eigenen Schaltungen in FHEM zu verarbeiten. Dabei können Signale sowohl eingelesen als auch ausgegeben werden. Ein Verständnis der Bedienung der Arduino-IDE und elektronische Kenntnisse zum Anschluss von Sensoren und Aktoren sind natürlich erforderlich.&lt;br /&gt;
&lt;br /&gt;
=== Arduino IDE ===&lt;br /&gt;
Zur Installation von Firmware auf den Arduino wird natürlich erst mal die Arduino-IDE (Version 1.8 oder höher) benötigt [https://www.arduino.cc/en/main/software]. Die gibt es für die Betriebssysteme Windows, Mac OS X und Linux.&lt;br /&gt;
&lt;br /&gt;
Über die Bibliotheksverwaltung der Arduino-IDE (Menü &#039;Sketch&#039;-&amp;amp;gt;&#039;Bibliothek einbinden&#039;-&amp;amp;gt;&#039;Bibliotheken verwalten...&#039;) stehen verschiedene Firmware-Versionen von Firmata zur Auswahl. Im folgenden wird auf die Version &amp;quot;Firmata by Firmata Developers&amp;quot; und &amp;quot;ConfigurableFirmata by Firmata Developers&amp;quot; eingegangen. Diese beiden Versionen unterscheiden sich in den unterstützten Hardware-Funktionen:&lt;br /&gt;
&lt;br /&gt;
* Firmata: digitale und analoge I/Os, Servos, I2C&lt;br /&gt;
* ConfigurableFirmata: zusätzlich 1-Wire und Schrittmotoren&lt;br /&gt;
&lt;br /&gt;
Bei ConfigurableFirmata ist es auch außerdem einfacher, nicht benötigte Funktionen zu deaktivieren, damit die Arduino-Firmware möglichst wenig Speicher belegt. Wenn man den zusätzlichen Funktionsumfang von ConfigurableFirmata nicht benötigt, kann man mit etwas Geschick durch Auskommentieren von nicht benötigtem Code aus Firmata z.T. ein noch kompakteres Ergebnis erzielen (das ist aber nur etwas für Fortgeschrittene).&lt;br /&gt;
&lt;br /&gt;
Bei Firmata ist zwischen der Firmata-Protokoll-Version (aktuell 2.6.0) und der Version der jeweiligen Firmware (Firmata: aktuell 2.5.7, ConfigurableFirmata: aktuell 2.10.0) zu unterscheiden, die insbesondere bei ConfigurableFirmata voneinander unabhängig sind.&lt;br /&gt;
&lt;br /&gt;
Nach Installation der gewünschten Firmata-Firmware wählt man eines der funktionsfertigen Beispiele über das Arduino-IDE Menü &#039;Datei&#039;-&amp;amp;gt;&#039;Beispiele&#039;-&amp;amp;gt;&#039;Firmata&#039; bzw. &#039;Datei&#039;-&amp;amp;gt;&#039;Beispiele&#039;-&amp;amp;gt;&#039;ConfigurableFirmata&#039; aus. Je nach ausgewähltem Beispielprojekt sind noch Anpassungen direkt im Sketch oder in einer zusätzlichen Konfigurationsdatei erforderlich (z.B. um für Ethernet- und WiFi-Schnittstellen die Netzwerkparameter einzustellen).&lt;br /&gt;
&lt;br /&gt;
Über das Arduino-IDE Menü &#039;Werkzeuge&#039;-&amp;amp;gt;&#039;Bords&#039; wählt man das Board aus, das dem eigenen Arduino entspricht. Fehlt das Board in der Auswahl, kann die erforderliche Unterstützung oft über das Menü &#039;Werkzeuge&#039;-&amp;amp;gt;&#039;Bords&#039;-&amp;amp;gt;&#039;Boardverwalter...&#039; nachinstalliert werden. Ansonsten hilft ein Blick auf die Hersteller-Webseiten des Boards.&lt;br /&gt;
&lt;br /&gt;
Ist der Arduino korrekt angeschlossen, drückt man den &#039;Upload&#039;-Knopf (der mit dem Rechspfeil oben links), um den Arduino-Sketch zu kompilieren und auf das Board hochzuladen. Die Vorgehensweise zum Hochladen ist sehr stark davon abhängig, welches Board man verwendet und mit welcher Technik es angeschlossen ist. Bitte die jeweiligen Angaben des Board-Herstellers beachten.&lt;br /&gt;
&lt;br /&gt;
Wer zum ersten mal mit der Arduino-IDE arbeitet, sollte statt Firmata zunächst das Standard Arduino Beispielprojekt &#039;Blink&#039; auswählen und es auf dem Arduino installieren. Sobald das klappt, kann man mit Firmata weiter machen.&lt;br /&gt;
&lt;br /&gt;
=== Firmata mit Ethernet oder WiFi ===&lt;br /&gt;
&lt;br /&gt;
Vor dem Kompilieren muss man unbedingt die Netzwerkparameter anpassen, d.h. die IP-Adresse des FHEM-Servers und den Port des FRM-Moduls eintragen (ggf. auch eine neue eindeutige MAC-Adresse), bei WiFi auch die SSID und den PSK. In älteren Firmata-Versionen und bei ConfigurableFirmata geschieht das direkt im Sketch. Aktuelle Firmata-Versionen haben dazu eine getrennte Konfigurationsdatei (ethernetConfig.h bzw. wifiConfig.h), so dass keine Änderungen am Sketch erforderlich sind.&lt;br /&gt;
&lt;br /&gt;
Falls der Speicherbedarf der kompilierten Arduino-Firmware die Möglichkeiten des Boards übersteigt (insbesondere bei Verwendung eines ENC28J60-Ethernet-Shields [https://github.com/ntruchsess/arduino_uip] in Kombination mit einem &amp;quot;kleinen&amp;quot; Arduiono wie den Uno oder Nano) kann man bei Verwendung von ConfigurableFirmata nicht benötigten Features im Sketch auskommentieren. Wenn der Speicherbedarf nur &amp;quot;knapp&amp;quot; ausreicht, läuft die Firmware u.U. trotzdem nicht zuverlässig.&lt;br /&gt;
&lt;br /&gt;
Als ersten Funktionstest für die Netzwerkverbindung empfiehlt sich ein Ping von FHEM zum Arduino.&lt;br /&gt;
&lt;br /&gt;
=== Sonderfälle ===&lt;br /&gt;
&lt;br /&gt;
Je nach verwendetem Board sind u.U. individuelle Besonderheiten zu berücksichtigen. Hier ein paar Beispiele:&lt;br /&gt;
&lt;br /&gt;
Ein MEGA256 z.B. benutzt einen anderen Pin als SS (Slave select) zur Kommunikation mit dem Ethernetmodul. Man muss der Firmata im Setup mitteilen, welche Pins zu ignorieren sind, damit es keine Wechselwirkungen zwischen Firmata und Ethernet Library gibt. Das ist im ConfigurableFirmata-Sketch [https://github.com/firmata/arduino/blob/configurable/examples/ConfigurableFirmata/ConfigurableFirmata.ino] vorbereitet und muss (wenn man etwas anderes als ein Standard-Ethernetshield am Uno verwendet) geeignet angepasst werden (Beim Mega muss man z.B. den Pin 10 ignorieren und Pin 53 als hardcodiert auf Output stellen). Das gleiche gilt, wenn man eine andere Hardware (z.B. mit ENC28J60 anstelle des WizNet W5100 des Ethernetshields) benutzen möchte, die einen anderen Pin als CS/SS benutzt.&lt;br /&gt;
&lt;br /&gt;
== FRM ==&lt;br /&gt;
Der Arduino wird in FHEM über das Modul 10_FRM.pm angesprochen. 10_FRM ist für andere FHEM-Module die Schnittstelle (das IODev) zum Arduino. Es lassen sich jeweils so viele Ein/Ausgabe Devices pro Arduino konfigurieren, wie dieser physikalisch besitzt (natürlich muss man darauf achten, dass nicht alle Arduino-Pins alle Ein-/Ausgabemöglichkeiten besitzen). Konfiguriert man einen Pin für einen nicht unterstützen Modus so gibt es mit der aktuellen Firmata-Version direkt einen Fehler - ältere Versionen (vor 2.3) schlucken Fehlkonfigurationen einfach so, der betreffende Pin funktioniert dann aber nicht.&lt;br /&gt;
&lt;br /&gt;
Hier ein kurzer Ausschnitt aus der fhem.cfg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# definiere FRM mit USB-Schnittstelle /dev/ttyUSB0, Baudrate 57600 ist Default für StandardFirmata&lt;br /&gt;
define FIRMATA FRM /dev/ttyUSB0@57600&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# definiere FRM mit TCP/IP-Schnittstelle auf Port 3030&lt;br /&gt;
define FIRMATA FRM 3030 global&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
FRM macht bei Netzwerkverbindungen FHEM-seitig einen Serverport auf (dieser wird in der define-Zeile angegeben). &#039;global&#039; muss zusätzlich angegeben werden, damit der Serversocket an alle IP-addressen gebunden wird. (Sonst wird nur &#039;localhost&#039; verwendet, was nicht funktionieren würde). Der Arduino verbindet sich aktiv zu diesem Port, sonst gilt im Prinzip alles was auch für den über USB angebunden Arduino gilt.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# für alle analogen Eingangs-Pins&lt;br /&gt;
attr FIRMATA sampling-interval 1000 # [ms] - maximal 16384 setzbar&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM}} FRM&lt;br /&gt;
=== 20_FRM_IN.pm ===&lt;br /&gt;
Macht einen Arduino-pin als digitalen Eingang nutzbar.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Firmata_IN FRM_IN 12 # definiert Arduino Pin 12 als digitalen Eingang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_IN}} FRM_IN&lt;br /&gt;
=== 20_FRM_OUT.pm ===&lt;br /&gt;
Macht einen Arduino-pin als digitalen Ausgang nutzbar.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Firmata_OUT FRM_OUT 11 # definiert Arduino Pin 11 als digitalen Ausgang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_OUT}} FRM_OUT&lt;br /&gt;
=== 20_FRM_AD.pm ===&lt;br /&gt;
Macht einen Arduino-pin als analogen Eingang nutzbar.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Firmata_ANALOG FRM_AD 17 # definiert Arduino Pin 17 als analogen Eingang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_AD}} FRM_AD&lt;br /&gt;
=== 20_FRM_PWM.pm ===&lt;br /&gt;
Macht einen Arduino-pin als analogen Ausgang nutzbar. Es wird ein pulsweitenmoduliertes Signal ausgegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Firmata_ANALOG FRM_PWM 10 # definiert Arduino Pin 10 als analogen Ausgang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_PWM}} FRM_PWM&lt;br /&gt;
=== 20_FRM_SERVO.pm ===&lt;br /&gt;
Erlaubt die Ansteuerung von analogen Modelbauservos (Ansteuerung über PWM) am Arduino.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Firmata_ANALOG FRM_AD 9 # definiert Arduino Pin 9 als analogen Eingang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_SERVO}} FRM_SERVO&lt;br /&gt;
=== 20_FRM_I2C.pm ===&lt;br /&gt;
&amp;lt;p&amp;gt;Erlaubt das Auslesen von über I2C angeschlossenen ICs&amp;lt;/p&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_I2C}}FRM_I2C&lt;br /&gt;
=== Arduino mit OneWireFirmata ===&lt;br /&gt;
&amp;lt;p&amp;gt;die Seite [[Arduino mit OneWireFirmata]] beschreibt, wie es möglich ist, mit einer um OneWire erweiterten Version der Standard Firmata an den Arduino angeschlossene 1-Wire Devices in FHEM einzubinden.&amp;lt;/p&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=OWX}} OWX&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other_Components]]&lt;br /&gt;
[[Kategorie:Arduino]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Arduino_mit_OneWireFirmata&amp;diff=25659</id>
		<title>Arduino mit OneWireFirmata</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Arduino_mit_OneWireFirmata&amp;diff=25659"/>
		<updated>2018-03-03T18:54:55Z</updated>

		<summary type="html">&lt;p&gt;JensB: Beschreibungen an die aktuellen Versionen von Arduino-IDE, Firmata und FHEM angepasst.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einleitung =&lt;br /&gt;
Ein Adruino mit der Firmware ConfigurableFirmata kann als 1-Wire-Busmaster eingesetzt werden. Dafür kommen fast alle Arduino-Boards in Frage. Bei Boards mit wenig Speicher (z.B. MEGA168P) bzw. beim Einbinden großer Programmbibliotheken (z.B. für den ENC28J60) muss man jedoch einige Features von ConfigurableFirmata deaktivieren, um die Firmware installieren zu können.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man auch einen DS2482 als 1-Wire-Busmaster an den I2C-Bus eines Arduinos anschließen. Ein ConfigurableFirmata-Sketch mit DS2482-Unterstützung findet sich [https://github.com/ntruchsess/arduino/tree/DS2482/examples/ConfigurableFirmata hier] bzw kann man sich [https://github.com/ntruchsess/arduino/archive/DS2482.zip hier als zip] herunterladen.&lt;br /&gt;
&lt;br /&gt;
ConfigurableFirmata kommuniziert mit FHEM wahlweise über den USB-Anschluss, über Ethernet (sowohl über Ethernet Shields mit W5100 oder ENC28J60 Chip, letztere unter Verwendung der [https://github.com/ntruchsess/arduino_uip UIPEthernet Library]).&lt;br /&gt;
&lt;br /&gt;
In FHEM ist ein Firmata-Device vom Typ FRM anzulegen, das dann als IODev für ein Device vom Typ OWX oder OWX_ASYNC dient.&lt;br /&gt;
&lt;br /&gt;
= Allgemeine Funktionsweise =&lt;br /&gt;
ConfigurableFirmata führt auf dem Arduino bestimmte 1-Wire-Kommandofolgen selbstständig aus. Der Firmata-Client OWX(_ASYNC) fordert z.B. von Firmata an: &#039;mache eine 1-Wire-Bussuche&#039;. Die wird auf dem Arduino ausgeführt und der schickt das Ergebniss (alle gefundenen Devices) an den Firmata-Client zurück. Oder es wird angefordert: &#039;mache einen Bus-Reset, sprich ein bestimmtest Device mit der Adresse XXX an, schicke folgende Bytes dorthin und lese anschließend YY Bytes&#039;. Der Arduino tut das und wenn er fertig ist, schickt er die YY Bytes an den Firmata-Client zurück. Nach dem Abarbeiten einer 1-Wire-Kommandfolge und dem Verschicken des Ergebnisses vergisst er, was er getan hat, weiß also z.B. nicht, welche 1-Wire Devices am Bus gefunden wurden. Solche Funktionen wären bei der Speicherknappheit einiger Arduinos auch nicht realisierbar. Dieser Funktionsumfang ist aber schon deutlich höher als der von anderen Busmasterchips (wie z.B. DS2480 oder DS2482). Denen muss man jedes Kommando in der Abfolge einzeln vorgeben und dabei noch auf das korrekte Timing achten. Bei ConfigurableFirmata bedeutet das Starten einer Bussuche, dass OWX nur 4 Bytes versendet und dann auf das Ergebnis wartet. Das FHEM Modul OWX wartet dabei und blockiert solange FHEM, das Modul OWX_ASYNC wartet dagegen in einem Protothread während FHEM weiter arbeitet und der Arduino parallel dazu über den 1-Wire Bus kommuniziert.&lt;br /&gt;
&lt;br /&gt;
Wenn man zusätzlich einen DS2482 als Busmaster an den Arduino anschließt, dann ändert sich am oben Gesagtem nichts. Mit dem DS2482 hat der Arduino ein elektrisch etwas besser an 1-Wire angepasstes Interface und muss weniger Timing per Software machen. Dies erlaubt z.T. mehr Devices bei längerem 1-Wire Bus als es ohne zusätzlichen Busmaster möglich ist.&lt;br /&gt;
&lt;br /&gt;
= Mögliche Funktionserweiterung =&lt;br /&gt;
Die Funktion &amp;quot;FirmataScheduler&amp;quot; von ConfigurableFirmata wird zur Zeit von den FHEM-Modulen FRM und OWX nicht unterstützt. Damit könnte man z.B. iButtons über OWID mit einer schnellen, arduinoseitig getriggerten Bussuche versorgen. Der Scheduler ist in der Lage Firmata-Kommandoabfolgen zu speichern und zeitversetzt (auch zyklisch) abzuspielen. Damit könnte man sich auch das Senden der genannten 4 Bytes zum Starten der Bussuche ersparen. Der Arduino würde die Ergebnisse selbstständig im vorgegebenen Interval verschicken. Je nach Arduino kann man wegen des begrenzten Speichers jedoch keine komplexeren Aufgaben im FirmataScheduler unterbringen, insbesondere kann man nicht die Kommandofolgen für mehrere Devices unterbringen (eine DS18B20 Abfrage braucht z.B. ca. 30 Bytes pro Device. Das klingt nach wenig, ist aber eine ganze Menge, wenn nur wenige 100kb verfügbar sind). Ist der Speicher zu Ende stürzt der Arduino einfach ab bzw. resettet sich.&lt;br /&gt;
&lt;br /&gt;
= Arduino IDE und ConfigurableFirmata =&lt;br /&gt;
Die Installation der Arduino-IDE sowie das Auswählen und das prinzipielle Kompilieren von ConfigurableFirmata wird auf der Seite [[Arduino Firmata]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
Will man den DS2482 als Busmaster einsetzen, verwendet man statt eines der Standardbeispiele von ConfigurableFirmata die oben aufgeführte DS2482-ConfigurableFirmata als Sketch. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Dieser Sketch basiert auf einer älteren Version von ConfigurableFirmata. Sollte er mit der aktuellen Version von ConfigurableFirmata nicht mehr kompatibel sein, müsste man die relevanten Teile für den DS2482 manuell in die neue Version übertragen.&lt;br /&gt;
&lt;br /&gt;
= ConfigurableFirmata Features =&lt;br /&gt;
Wenn man die Features von ConfigurableFirmata reduzieren möchte (z.B. weil man einen MEGA168P verwenden will und gar keine Servos ansteuern möchte), muss man im ConfigurableFirmata-Sketch die entsprechenden includes mit zwei vorgestellen Schrägstrichen auskommentieren. &lt;br /&gt;
&lt;br /&gt;
Kommt es nach dem Auskommentiert zu Fehlern bei der ersten Kompilierung, sollte man den Sketch zunächst mit allen Features kompilieren und anschließend schrittweise wieder reduzieren. &lt;br /&gt;
&lt;br /&gt;
Für 1-Wire muss neben OneWireFirmata auf jeden Fall auch FirmataExt aktiviert werden, denn ohne FirmataExt ist nur Digital- und Analog-I/O möglich.&lt;br /&gt;
&lt;br /&gt;
Es wird empfohlen nur die erforderlichen Features zu aktivieren. Beispielsweise passen I2C und 1Wire nicht gleichzeitig mit UIPEthernet ins RAM eines ATMega328. Das lässt sich zwar flashen, es stürzt aber mangels ausreichend Heap-Speichers sofort ab.&lt;br /&gt;
&lt;br /&gt;
Außerdem sollte man eine feste IP-Adresse vergeben statt DHCP zu verwenden. Bei UIPEthernet kann man dann UDP in der uipethernet-conf.h abstellen und das spart ca. 5kb Flash und einige 100 Bytes RAM.&lt;br /&gt;
&lt;br /&gt;
= Arduino Firmware Flashen =&lt;br /&gt;
Ist das Kompilieren erfolgreich, muss man noch unter &#039;Tools&#039;-&amp;amp;gt;&#039;Programmer&#039; den verwendeten Programmieradapter sowie unter &#039;Tools&#039;-&amp;amp;gt;&#039;serieller Port&#039; den korrekten Port auswählen und mit dem &#039;Upload&#039;-Knopf (der mit dem Rechspfeil oben link in der Arduino IDE) den geladenen Sketch auf das Board hochladen. Je nach Arduino Board sind andere Einstellungen als die hier aufgeführten und ggf. auch zusätzliche Aktionen erforderlich (z.B. zu einem bestimmten Zeitpunkt bestimmte Buttons auf dem Board drücken oder bestimmte Pins verbinden).&lt;br /&gt;
&lt;br /&gt;
Falls man unter Windows Probleme hat, den Arduino über USB zu verbinden, finden sich z.B. hier weitere Informationen: [http://arduino.cc/en/Guide/Windows#toc2 http://arduino.cc/en/Guide/Windows#toc2]&lt;br /&gt;
&lt;br /&gt;
= Einbinden eines Arduinos mit Firmata in FHEM =&lt;br /&gt;
Ein Arduino mit Firmata wird in FHEM über das Modul 10_FRM.pm angesprochen. Dazu sollte mindestens die FRM Modul in der Version 15941 vom 20.01.2018 verwendet werden (ggf. FHEM update durchführen).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# definiere FRM mit USB-Schnittstelle /dev/ttyUSB0, Baudrate 57600 ist Default für StandardFirmata&lt;br /&gt;
define FIRMATA FRM /dev/ttyUSB0@57600&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# definiere FRM mit TCP/IP-Schnittstelle auf Port 3030&lt;br /&gt;
define FIRMATA FRM 3030 global&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
FRM macht bei Netzwerkverbindungen FHEM-seitig einen Serverport auf (dieser wird in der define-Zeile angegeben). &#039;global&#039; muss zusätzlich angegeben werden, damit der Serversocket an alle IP-addressen gebunden wird. (Sonst wird nur &#039;localhost&#039; verwendet, was nicht funktionieren würde). Der Arduino verbindet sich aktiv zu diesem Port, sonst gilt im Prinzip alles was auch für den über USB angebunden Arduino gilt.&lt;br /&gt;
&lt;br /&gt;
Siehe dazu auch die {{Link2CmdRef|Anker=FRM}}.&lt;br /&gt;
&lt;br /&gt;
= Einbinden der 1-Wire Devices in FHEM =&lt;br /&gt;
Nachdem das FRM Device angelegt wurde, kann ein danach definiertes OWX Device einen der Arduino-Pins als 1-Wire-Busmaster nutzen. Das funktioniert bei den meisten Boards an allen Pins, die Digital-IO unterstützen. Wenn sich das Firmata Device schon verbunden hat, findet man im laufenden FHEM bei den Internals des FRM Devices den Eintrag: &#039;onewire-pins&#039;. Dieser listet alle Pins auf, die 1-Wire unterstützen. Damit kann das OWX-Device angelegt werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;device-name&amp;amp;gt; OWX &amp;lt;Firmata-Device&amp;gt;:&amp;amp;lt;arduino-pin&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z.B. ist beim Arduino Mini Pro der D9 = Pin 9 gut geeignet.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define OWio1 OWX Arduino:9&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Definieren des OWX Devices fängt dieses selbsttätig an über den Arduino-Pin nach 1-Wire Devices zu suchen und im Raum &#039;OWX&#039; automatisch anzulegen.&lt;br /&gt;
&lt;br /&gt;
Wenn man die [https://github.com/ntruchsess/arduino/tree/DS2482/examples/ConfigurableFirmata DS2482-ConfigurableFirmata] benutzt, dann findet man beim FRM-Device unter &#039;onewire-pins&#039; nur die I2C-Pins. Das sind z.B. bei einem Uno bzw. Nano die Pins 18 und 19 (das entspricht den Analogpins 4 und 5). Einen der beiden muss man dann bei der Definition des OWX-Moduls angeben um die DS2482-Unterstützung zu aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;device-name&amp;amp;gt; OWX 18&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;br /&gt;
[[Kategorie:Arduino]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Arduino_mit_OneWireFirmata&amp;diff=25198</id>
		<title>Arduino mit OneWireFirmata</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Arduino_mit_OneWireFirmata&amp;diff=25198"/>
		<updated>2018-02-11T19:31:35Z</updated>

		<summary type="html">&lt;p&gt;JensB: Versionshinweis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Hinweis: Dieser Artikel bezieht sich auf ältere Versionen der Arduino-IDE und von FHEM. Mit den aktuellen Version sind die hier beschriebenen versionsspezifischen Anpassungen nicht mehr erforderlich. Eine Überarbeitung dieses Artikels ist geplant.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Einleitung zur OneWireFirmata (ConfigurableFirmata) =&lt;br /&gt;
mit dem Modul 10_FRM.pm kann man einen Arduino als OneWire-Busmaster für das Modul 00_OWX.pm benutzen.&lt;br /&gt;
Auf dem Arduino muss dazu eine erweiterte Version der Firmata-Firmware geladen werden. Unterstützt werden im prinzip alle Arduino-Versionen. Auf Arduinos mit nur 16kb RAM (MEGA168P) muss man die Zahl der eingebauten Features reduzieren, auf allen Arduinos mit mehr als 16kb Ram (MEGA328P aufwärts) läuft die Firmware unverändert.&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Arduino-IDE bringt zwar schon eine Version der StandardFirmata mit, diese enthält aber noch keine Unterstützung für OneWire. Diese findet man [https://github.com/firmata/ConfigurableFirmata im eigenen Fork]. Den kompletten Branch kann man sich auch bequem [https://github.com/firmata/ConfigurableFirmata/archive/master.zip als zip-Archiv herunterladen]&lt;br /&gt;
&lt;br /&gt;
Die ConfigurableFirmata kommuniziert mit FHEM über den USB-anschluss oder Ethernet (sowohl original EthernetShield, &#039;Arduino Ethernet&#039; als auch ENC28J60 basierte Boards werden unterstützt, letztere unter Verwendung der [https://github.com/ntruchsess/arduino_uip UIPEthernet-library]).&lt;br /&gt;
&lt;br /&gt;
Alternativ kann man einen DS2482 als 1-Wire-Busmaster an den I2C-Bus des Arduino anschließen. Die nötige ConfigurableFirmata mit DS2482-Unterstützung [https://github.com/ntruchsess/arduino/tree/DS2482/examples/ConfigurableFirmata findet sich hier] bzw kann man sich hier als [https://github.com/ntruchsess/arduino/archive/DS2482.zip zip] herunterladen.&lt;br /&gt;
&lt;br /&gt;
= Allgemeine Funktionsweise =&lt;br /&gt;
Der Arduino ist in der Lage bestimmte 1-Wire-kommandoabfolgen selbstständig auszuführen. Der Firmata-client (OWX(_ASYNC)) fordert vom Arduino/Firmata entweder an: &#039;mache eine 1-Wire-Bussuche&#039;, dann läuft diese auf dem Arduino und schickt das Ergebniss (alle gefundenen Devices) an den Firmata-client zurück. Oder es wird angefordert: &#039;mache einen Bus-reset, sprich ein bestimmtest Device mit der Addresse XXX an, schicke folgende Bytes dorthin und lese anschließend YY Bytes. Der Arduino tut das und wenn er fertig ist, schickt er die YY Bytes an den Firmata-client zurück. Mehr Intelligenz steckt im OneWire-firmata feature nicht drin. Der Arduino merkt sich dabei nichts. Nach dem Abarbeiten einer 1-Wire-kommandfolge und dem Verschicken des Ergebnisses vergisst er alles, was er getan hat. Mehr Eingenintelligenz wäre bei der Speicherknappheit auch nicht stabil unterzubringen, als Alternaive müsste man die Anzahl der Devices auf dem 1-Wire Bus (stark) einschränken. Das ist aber schon deutlich mehr Eigenintelligenz als die anderen Busmasterchips (DS2480 oder DS2482) mitbringen. Denen muss man jeden Einzelschritt vorgenannter Abfolgen einzeln sagen (und dabei noch auf das korrekte Timing achten). Beim Arduino bedeutet das Starten einer Bussuche, dass OWX gerade einmal 4 Bytes in einem Rutsch abschickt und dann auf das fertige Ergebnis wartet. OWX wartet dabei synchron und blockiert FHEM, OWX_ASYNC wartet in einem Protothread wärend FHEM weiterläuft und der Arduino parallel dazu den 1-Wire-bus durchsucht.&lt;br /&gt;
&lt;br /&gt;
Der FirmataScheduler wird zur Zeit von den FRM-Modulen noch nicht unterstützt. Geplant ist damit iButtons über OWID mit einer schnellen, arduinoseitig getriggerten Bussuche zu versorgen. Der Scheduler ist in der Lage Firmata-kommando-abfolgen zu speichern und zeitversetzt (auch zyklisch) abzuspielen, damit kann man sich das Senden der genannten 4 Bytes zum Starten der Bussuche sparen. Der Arduino schickt dann die Ergebnisse selbstständig im vorgegebenen Interval. Leider kann man (wg. des begrenzten Speichers) keine komplexeren Aufgaben im FirmataScheduler unterbringen, insbesonders kann man nicht einfach mal alle Device-abfragen da rein programmieren, da wäre schon nach einer Handvoll Devices der Speicher des Arduinos voll. (Eine DS18B20 Abfrage braucht z.B. ca. 30 Bytes pro Device. Das klingt nach wenig, ist aber eine ganze Menge, wenn nur wenige 100kb verfügbar sind). Ist der Speicher zu Ende stürzt der Arduino einfach ab bzw. resettet sich.&lt;br /&gt;
&lt;br /&gt;
Wenn man einen DS2482 am Arduino hat, dann ändert sich nichts prinzipielles an oben gesagtem. Mit dem DS2482 hat der Arduino ggf. ein physikalisch besser an 1-Wire angepasstes Interface und muss weniger Timing selber in Software machen. Damit sollten mehr Devices bei längerem 1-Wire-bus funktionieren, als mit der reinen Softwarelösung. Alle anderen Einschränkungen und/oder Möglichkeiten sind aber praktisch identisch.&lt;br /&gt;
&lt;br /&gt;
= Vorbereitungen in der Arduino IDE =&lt;br /&gt;
Zur Installation auf den Arduino wird natürlich erst mal die Arduino-IDE benötigt ([http://arduino.cc/en/Guide/Libraries http://arduino.cc/en/Guide/Libraries]))&lt;br /&gt;
&lt;br /&gt;
Hat man das &#039;libraries&#039; Verzeichnis seiner Arduino-ide-installation gefunden (unter Ubuntu z.B. unter /usr/share/arduino/libraries/), gibt es dort normalerweise schon ein Verzeichnis &#039;Firmata&#039;. Falls nicht, muss dieses angelegt werden. Die in dem Verzeichnis befindlichen Dateien &#039;Firmata.h&#039;, &#039;Firmata.cpp&#039; und &#039;Boards.h&#039; müssen durch die im arduino-configurable.zip-file enthaltenen Versionen ersetzt werden. Am besten kopiert man einfach den gesamten Inhalt des Ordners &#039;arduino-configurable&#039; in das &#039;libraries/Firmata&#039;-Verzeichnis (mitsamt des Unterordners &#039;examples&#039;). &lt;br /&gt;
&lt;br /&gt;
Anschließend sollte man noch den Unterordner &#039;ConfigurableFirmata&#039; aus den soeben kopierten Examples in sein Sketchbook kopieren. Wichtig: der Ordnername darf nicht umbenannt werden ansonsten erkennt die Arduino-IDE das Verzeichnis nicht als korrekten Sketch.&lt;br /&gt;
Macht man das so, dann findet man nach einem Neustart der IDE den ConfigurableFirmata-sketch unter &#039;Datei&#039;-&amp;amp;gt;&#039;Sketchbook&#039;-&amp;amp;gt;&#039;sketches&#039;-&amp;amp;gt;&#039;ConfigurableFirmata&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Stand 2017-12-29: =====&lt;br /&gt;
Laut https://forum.fhem.de/index.php/topic,44525.msg380238.html#msg380238&lt;br /&gt;
&lt;br /&gt;
verwende einen Git-Client und checke eine Version vor dem 22.11.2015 aus, also z.B. den Commit &amp;quot;55b4e352b5647072805adc5b82798b78788018af&amp;quot;. Es gibt leider keine Tags vor 2.8.0.&lt;br /&gt;
&lt;br /&gt;
= Kompilierung =&lt;br /&gt;
Wenn man die in dieser neuen Firmataversion eingebauten Features reduzieren möchte (weil man nur eine MEGA168P verwenden will und z.B. gar keine Servos ansteuern möchte), muss man nur im &#039;ConfigurableFirmata&#039;-sketch die entsprechenden includes auskommentieren.&lt;br /&gt;
&lt;br /&gt;
Werden aufgrund der Sketchgröße einige Features auskommentiert und gibt es bei der ersten Kompilierung Fehler, so muss der Sketch erstmalig mit allen Features kompiliert werden. Erst anschließend kann auf das notwendige Maß der Umfang reduziert werden. &lt;br /&gt;
&lt;br /&gt;
Um 1wire zu nutzen muss neben OneWireFirmata auch FirmataExt aktiviert werden. FirmataExt ist für SysEx-basierte Features (wie 1-Wire) unverzichtbar. Ohne FirmataExt geht nur Digital+Analog-I/O&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich ist empfohlen nur die wirklich benutzten Features zu aktivieren. Beispielsweise passen I2C und 1Wire nicht gleichzeitig mit UIPEthernet ins RAM eines ATMega328. Kann man zwar noch flashen, stürzt dann aber mangels ausreichend Heap sofort ab. Also erst mal sparsam anfangen und nur die Dinge, die wirklich genutzt werden gleichzeitig aktivieren. &lt;br /&gt;
Wenn es geht, dann eine fixe IP verwenden (kein DHCP), dann kann man UDP in der uipethernet-conf.h abstellen - das spart ca. 5kb Flash und ein paar 100 Bytes RAM.&lt;br /&gt;
&lt;br /&gt;
Naja - hat man es erst mal geschafft, dann muss man nur noch unter &#039;Tools&#039;-&amp;amp;gt;&#039;Board&#039; den eigenen Arduino, &#039;Tools&#039;-&amp;amp;gt;&#039;Programmer&#039; den verwendeten Programmieradapter sowie unter &#039;Tools&#039;-&amp;amp;gt;&#039;serieller Port&#039; den korrekten Port auswählen und mit dem Upload-knopf (der Rechtspfeil im Kreis oben links) den geladenen Sketch compilieren und auf das Board hochladen. &lt;br /&gt;
&lt;br /&gt;
Falls man unter Windows Probleme hat den Arduino über USB zu connecten findet sich hier weitere Information: [http://arduino.cc/en/Guide/Windows#toc2 http://arduino.cc/en/Guide/Windows#toc2]&lt;br /&gt;
&lt;br /&gt;
= Einbindung des Arduino in FHEM =&lt;br /&gt;
Der Arduino wird in FHEM über das Modul 10_FRM.pm angesprochen (dazu bitte die aktuelle Development-version herunterladen ([http://www.dhs-computertechnik.de/downloads/fhem-cvs.tgz http://www.dhs-computertechnik.de/downloads/fhem-cvs.tgz]) aus dem SVN auschecken oder per updatefhem aktualisieren).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# definiere FRM als IO-Device - Baudrate 57600 ist default in der Standardfirmata&lt;br /&gt;
define Arduino FRM /dev/ttyUSB0@57600&lt;br /&gt;
&lt;br /&gt;
# definiere FRM als IO-Device über Ethernet (&#039;global&#039; bindet an alle IP-Addressen des Servers)&lt;br /&gt;
define Arduino FRM &amp;lt;port&amp;gt; global&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Siehe dazu auch die {{Link2CmdRef|Anker=FRM}}.&lt;br /&gt;
&lt;br /&gt;
===== Stand 2017-12-29: =====&lt;br /&gt;
&lt;br /&gt;
Da die Firmata 2_10 nicht von FHEM erkannt wird (es werden z.B. keine Pins angezeigt) (TODO: WARUM?), muss in der Datei /opt/fhem/FHEM/lib/Device/Firmata/Constants.pm eine Anpassung durchgeführt werden. &lt;br /&gt;
Wenn man nur ein einziges Device hat, reicht es, in Zeile 301 den Variablennamen &amp;quot;V_2_06&amp;quot; in &amp;quot;V_2_10&amp;quot; umzubenennen. Anderenfalls ist es sicherer, den gesamten Inhalt zu kopieren und unten drunter als &amp;quot;V_2_10&amp;quot; einzufügen.&lt;br /&gt;
&lt;br /&gt;
= Einbindung der 1WireDevices in FHEM =&lt;br /&gt;
Ein im Anschluss daran definiertes 1-Wire Device kann dann einfach einen der Arduino-Pins als 1-Wire Busmaster nutzen. Das funktioniert an allen Pins, die Digital IO unterstützen. Wenn man das FRM Device schon definiert hat, findet man im laufenden FHEM unter den FRM-Attributen einen Eintrag: &#039;onewire-pins&#039;, dieser listet alle Pins auf, die 1-Wire unterstützen. Damit kann dann das OWX-Device angelegt werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;device-name&amp;amp;gt; OWX &amp;lt;Firmata-Device&amp;gt;:&amp;amp;lt;arduino-pin&amp;amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zb. ist beim Arduino Mini Pro der D9 = Pin9 gut geeignet.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define OWio1 OWX Arduino:9&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Definieren des 1-Wire Devices fängt dieses selbsttätig an über den Arduino-Pin nach 1-Wire Devices zu suchen und im Raum &#039;OWX&#039; automatisch anzulegen.&lt;br /&gt;
&lt;br /&gt;
Wenn man die [https://github.com/ntruchsess/arduino/tree/DS2482/examples/ConfigurableFirmata DS2482-Firmata] benutzt, dann findet man beim FRM-Device unter &#039;onewire-pins&#039; nur die I2C-Pins. Das sind z.B. bei einem Uno/Nano die Pins 18 und 19 (das entspricht den Analogpins 4 und 5). Einen der beiden muss man dann bei der Definition des OWX-Moduls angeben um die DS2482-Unterstützung zu aktivieren:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define &amp;amp;lt;device-name&amp;amp;gt; OWX 18&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
[[Kategorie:1-Wire]]&lt;br /&gt;
[[Kategorie:Arduino]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=System%C3%BCbersicht&amp;diff=25197</id>
		<title>Systemübersicht</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=System%C3%BCbersicht&amp;diff=25197"/>
		<updated>2018-02-11T19:20:10Z</updated>

		<summary type="html">&lt;p&gt;JensB: FRM/Firmata vervollständigt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein FHEM &#039;&#039;&#039;System&#039;&#039;&#039; besteht im Prinzip aus den in der nachfolgenden &#039;&#039;&#039;Übersicht&#039;&#039;&#039; aufgeführten Bestandteilen.&lt;br /&gt;
[[Datei:Systemübersicht.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Server ==&lt;br /&gt;
Bei der Komponente &#039;&#039;&#039;Server&#039;&#039;&#039; muss unterschieden werden zwischen dem eigentlichen &#039;&#039;&#039;FHEM&#039;&#039;&#039; Hausautomations-Server (implementiert in der Perl-Datei fhem.pl) und der Hardware, auf der dieser Server ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Als Server &#039;&#039;&#039;Hardware&#039;&#039;&#039; sind (z.&amp;amp;nbsp;B.) möglich:&lt;br /&gt;
* Windows Rechner&lt;br /&gt;
* Linux Rechner&lt;br /&gt;
* OS X Rechner&lt;br /&gt;
* Router (z.&amp;amp;nbsp;B. [[AVM Fritz!Box|FritzBox]])&lt;br /&gt;
* Einplatinencomputer, wie [[:Kategorie:Raspberry Pi|Raspberry Pi]], [[BeagleBone Black]]&lt;br /&gt;
* DockStar, PogoPlug, etc.&lt;br /&gt;
* diverse NAS Systeme wie Buffalo Linkstation, Synology Diskstation&lt;br /&gt;
&lt;br /&gt;
(Diese Aufstellung ist nur eine unvollständige Auswahl; Details zu unterstützten Server Systemen finden sich in der Kategorie [[:Kategorie:Server Hardware|Server Hardware]]).&lt;br /&gt;
&lt;br /&gt;
== Perl ==&lt;br /&gt;
Auf dem Server muss Perl installiert sein. Zur erforderlichen Version gibt es widersprüchliche Aussagen, die vor allem daraus resultieren, dass verschiedene FHEM-Module von verschiedenen Entwicklern stammen und daher unterschiedliche Anforderungen stellen. Laut FHEM-Webseite wird mindestens Version 5.6 benötigt, faktisch setzen aber viele Module 5.10 oder sogar 5.12 voraus. Der Betrieb mit Grundfunktionen ist jedoch zumindest ab Version 5.8.8 mit Einschränkungen möglich.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Das Hausautomations-System wird definiert über die [[Konfiguration]], die im Regelfall aus der &lt;br /&gt;
* reinen Textdatei &amp;lt;code&amp;gt;fhem.cfg&amp;lt;/code&amp;gt; (Standard nach der Erstinstallation) oder alternativ einer&lt;br /&gt;
* [[configdb|SQL-Datenbank]]&lt;br /&gt;
besteht.&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration enthält Definitionen für die Bestandteile (Geräte) und Funktionen des jeweiligen Hausautomations-Systems. Die verfügbaren Befehle und deren Syntax sind in der Befehlsreferenz ({{Link2CmdRef}}) aufgeführt und beschrieben. Zu einigen Hilfsmodulen gibt es [[:Kategorie:Hilfsmodul|detaillierte Beschreibungen]] mit Beispielen.&lt;br /&gt;
&lt;br /&gt;
== Benutzeroberfläche ==&lt;br /&gt;
Der Zugriff auf FHEM erfolgt mittels Webbrowser oder App über die verfügbaren &#039;&#039;&#039;[[:Kategorie:FHEM Frontends|FHEM Benutzeroberflächen]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In den FHEM Server integriert ist ein Webserver ([[PGM2]]), der im Prinzip immer zur Verfügung steht. Abhängig vom benutzten Klienten ist PGM2 über &lt;br /&gt;
* &amp;lt;code&amp;gt;serverhostnameoderIP:8083/fhem&amp;lt;/code&amp;gt; (Desktop-Darstellung = Port 8083),&lt;br /&gt;
* &amp;lt;code&amp;gt;serverhostnameoderIP:8084/fhem&amp;lt;/code&amp;gt; (Smartphone-Darstellung = Port 8084) oder &lt;br /&gt;
* &amp;lt;code&amp;gt;serverhostnameoderIP:8085/fhem&amp;lt;/code&amp;gt; (Tablet-Darstellung = Port 8085) &lt;br /&gt;
erreichbar.&lt;br /&gt;
&lt;br /&gt;
Eine Auswahl der Benutzeroberflächen:&lt;br /&gt;
* PGM2 - das Standardinterface&lt;br /&gt;
* [[FLOORPLAN]]&lt;br /&gt;
* [[FHEM Tablet UI]]&lt;br /&gt;
* [[SmartVISU]]&lt;br /&gt;
* diverse Apps für iOS und Android (Auswahl unter: [[:Kategorie:FHEM Frontends|FHEM Benutzeroberflächen]])&lt;br /&gt;
&lt;br /&gt;
Beispielhafte Screenshots diverser Benutzeroberflächen: http://fhem.de/fhem.html#Screenshots&lt;br /&gt;
&lt;br /&gt;
== Module ==&lt;br /&gt;
Die Funktionalität von FHEM kann über &#039;&#039;&#039;Module&#039;&#039;&#039; erweitert werden. Module können die unterschiedlichsten Aufgaben übernehmen vom Anbinden eines Hardwaresystems&lt;br /&gt;
über die Bereitstellung eines Frontends bis zur Automatisierung von Aufgaben. Beispiele für Module:&lt;br /&gt;
* 00_CUL.pm - Implementierung der Unterstützung für den [[CUL]]&lt;br /&gt;
* 11_FHT.pm - Unterstützung der [[:Kategorie:FHT Components|FHT]] Heizungssteuerung&lt;br /&gt;
* 95_FLOORPLAN.pm - Grundriss (oder Ähnliches) als Benutzeroberfläche &lt;br /&gt;
* uvm.&lt;br /&gt;
&lt;br /&gt;
Module können unterteilt werden in&lt;br /&gt;
* [[:Kategorie:FHEM Befehl|Befehlsmodule]] (FHEM-Befehle sind teilweise eigenständige Module) &lt;br /&gt;
* [[:Kategorie:Hilfsmodul|Hilfsmodule]]&lt;br /&gt;
* [[:Kategorie:Gerätemodul|Gerätemodule]]&lt;br /&gt;
Die offiziell in FHEM enthaltenen Module sind in der {{Link2CmdRef}} beschrieben. Sie werden über den [[Update]]-Befehl von FHEM verteilt und aktualisiert. Voraussetzung für die Aufnahme als offizielles Modul sind Supportwille durch den Entwickler und Dokumentation des Moduls.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich existiert eine Vielzahl von [[:Kategorie:Modul (Inoffiziell)|inoffiziellen Modulen]], die manuell in FHEM installiert werden können. Auch die Aktualisierung erfolgt nicht über den Update-Befehl, sondern muss durch den Nutzer selbst erfolgen. Inoffizielle Module sind an den verschiedensten Stellen zu finden:&lt;br /&gt;
* [[:Kategorie:Modul (Contrib)|Contrib]]-Verzeichnis im offiziellen FHEM-Sourcecode-SVN [http://svn.fhem.de/trac/browser/trunk/fhem/contrib]&lt;br /&gt;
* Beiträge im [https://forum.fhem.de/ FHEM-Forum]&lt;br /&gt;
* private Homepages&lt;br /&gt;
&lt;br /&gt;
== Interfaces ==&lt;br /&gt;
Die Verbindung zu den angeschlossenen &#039;&#039;&#039;Geräten&#039;&#039;&#039; der Hausautomation wird im Allgemeinen - geräteabhängig - über [[Interface|Interfaces]] (manchmal auch als &#039;&#039;&#039;Gateway&#039;&#039;&#039; bezeichnet) hergestellt. Das kann z.&amp;amp;nbsp;B. im Falle von [[HomeMatic]] ein [[HMLAN Konfigurator]] sein, ein mittels LAN mit dem FHEM Server verbundenes Gerät, das die FHEM Steuerbefehle  in das HomeMatic Funkprotokoll umsetzt - und auch die Funktelegramme der HomeMatic Komponenten an FHEM zurückgibt. Entsprechende Interfaces gibt es auch für andere Funkprotokolle und für die drahtgebundenen Systeme.&lt;br /&gt;
&lt;br /&gt;
Eine (unvollständige) Liste solcher Interfaces (siehe auch [[:Kategorie:Interfaces|Kategorie Interfaces]]):&lt;br /&gt;
* [[CUL]] - je nach Einstellung für die Kommunikation mit [[:Kategorie:FS20 Components|FS20]], [[:Kategorie:FHT Components|FHT]] und andere [[SlowRF]] Protokolle, [[MAX|MAX!]] Heizungssteuerung oder [[:Kategorie:HomeMatic Components|HomeMatic]] und, mit Einschränkungen, InterTechno (nur senden)&lt;br /&gt;
* [[CUNO]], ähnlich CUL, jedoch nicht per USB sondern per IP angebunden (z.Zt. -Stand Januar 2014 - nicht für HomeMatic empfohlen)&lt;br /&gt;
* [[HMLAN Konfigurator|HomeMatic LAN Konfigurations-Adapter]] - HomeMatic&lt;br /&gt;
* [[MAX#MAXLAN|MAX! Cube LAN-Gateway]]&lt;br /&gt;
* Schnittstellen(karten) für [[:Kategorie:1-Wire|1-Wire]]&lt;br /&gt;
* TCM(120/310) zur Anbindung von [[:Kategorie:EnOcean Components|EnOcean]]&lt;br /&gt;
* [[Arduino]] mit Firmata über USB oder Netzwerk&lt;br /&gt;
* [[panStamp]] als Möglichkeit Arduinos mit diversen Sensor- und I/O- Boards per 868MHz Funk über das SWAP protokoll anzubinden&lt;br /&gt;
* [[JeeLink]], ein weiteres USB-Stick Interface (ebenfalls arduino basiert) für diverse 433MHz und 868MHz Komponenten&lt;br /&gt;
* [[RFXtrx]] für InterTechno, RSL, ELRO etc., Wetter-Sensoren (Oregon-Scientific, Cresta, La Crosse, TFA, UPM) und andere 433&amp;amp;nbsp;Mhz Geräte.&lt;br /&gt;
* manche Komponenten ([[:Kategorie:IP Components|IP Komponenten]]) können über TCP/IP (LAN) direkt vom FHEM Server aus angesprochen werden; hier ist dann kein weiteres Interface im eigentlichen Sinne erforderlich. Dies gilt auch für diverse Module die Geräte über WEB Dienste des Herstellers anbinden (z.&amp;amp;nbsp;B. Withings, [[netatmo]]).&lt;br /&gt;
&lt;br /&gt;
== Protokolle ==&lt;br /&gt;
Der Kommunikation zwischen Interfaces und Geräten liegt jeweils ein bestimmtes Protokoll zugrunde. Unterstützte Protokolle mit ihren Eigenschaften sind in der folgenden Tabelle aufgelistet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Übersicht über unterstützte Funkprotokolle&lt;br /&gt;
|-&lt;br /&gt;
! Name !! rfMode !! Frequenz !! Modulation !! Datenrate !! class=&amp;quot;unsortable&amp;quot; | Interfaces !! class=&amp;quot;unsortable&amp;quot; | Modul !! class=&amp;quot;unsortable&amp;quot; | Geräte (Beispiel) !! class=&amp;quot;unsortable&amp;quot; | Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| [[FS20_Allgemein|FS20]] || SlowRF || 868,35MHz || AM || 1kHz || CU*, FHZ || {{Link2CmdRef|Anker=FS20|Label=FS20}} || - || -&lt;br /&gt;
|-&lt;br /&gt;
| FHT  || SlowRF || 868,35MHz || AM || 1kHz || CU*, FHZ || {{Link2CmdRef|Anker=CUL_FHTTK|Label=FHTTK}}, {{Link2CmdRef|Anker=FHT|Label=FHT}} || Heizungsregelung || -&lt;br /&gt;
|-&lt;br /&gt;
| S300 || SlowRF || 868,35MHz || AM || 1kHz || CU*, FHZ || {{Link2CmdRef|Anker=CUL_WS|Label=CUL_WS}} || Temperatur-/Feuchtesensoren || -&lt;br /&gt;
|-&lt;br /&gt;
| HMS || SlowRF || 868,35MHz || AM || 1kHz || CU*O, FHZ || - || ?? || -&lt;br /&gt;
|-&lt;br /&gt;
| EM || SlowRF || 868,35MHz || AM || 1kHz || CU*, FHZ || {{Link2CmdRef|Anker=CUL_EM|Label=CUL_EM}} || Energiemonitore (Strom, Gas) || -&lt;br /&gt;
|-&lt;br /&gt;
| [[HomeMatic ]]|| HomeMatic || 868,3MHz || FM || 10kHz || CU*, [[HM-CFG-LAN_LAN_Konfigurations-Adapter|HMLan]], [[HM-CFG-USB_USB_Konfigurations-Adapter|HMUsb]] || {{Link2CmdRef|Anker=CUL_HM|Label=CUL_HM}}  || [[:Kategorie:HomeMatic_Components|diverse]] || -&lt;br /&gt;
|-&lt;br /&gt;
| [[MAX|MAX!]] || MAX || 868,3MHz || FM || 20kHz || CU*, [[MAX#MAXLAN|MAXLAN]] ||  {{Link2CmdRef|Lang=de|Anker=MAX|Label=MAX}} ||  [[:Kategorie:MAX|Wandthermostat, Heizkörperthermostate, Fensterkontakt, Zwischenstecker]] ||  -&lt;br /&gt;
|-&lt;br /&gt;
| IT || - || 433MHz || AM? || 1kHz || CU*433, || - || - || -&lt;br /&gt;
|-&lt;br /&gt;
| Firmata WiFi || - || 2,4/5 GHz ||  ||  ||  || {{Link2CmdRef|Anker=FRM|Label=FRM}} || Arduino || -&lt;br /&gt;
|-&lt;br /&gt;
| SWAP || - || 868 (433/915) MHz || GFSK || 38.3835 Kbps || panStamp (+panStick) || {{Link2CmdRef|Anker=SWAP|Label=SWAP}} || RGB LED Driver, diverse Sensoren und Aktoren || -&lt;br /&gt;
|-&lt;br /&gt;
| [[:Kategorie:EnOcean  Components|EnOcean]] || - || 315 / 868 / 902 / 928MHz || ASK || 125 kbit/s || {{Link2CmdRef|Anker=TCM|Label=TCM}} || {{Link2CmdRef|Anker=EnOcean|Label=EnOcean}} || Batterielose Funksensoren, diverse Aktoren || -&lt;br /&gt;
|-&lt;br /&gt;
| PCA || - || 868,35MHz || ?? || ?? || [[JeeLink]] || {{Link2CmdRef|Anker=PCA301|Label=PCA301}} || [[PCA301 Funkschaltsteckdose mit Energieverbrauchsmessung|PCA301]] || -&lt;br /&gt;
|-&lt;br /&gt;
| [[La Crosse]] || - || 868,35MHz || ?? || ?? || [[JeeLink]], LGW || {{Link2CmdRef|Anker=Lacrosse|Label=Lacrosse}} || LaCrosse IT+ (Technoline) Sensoren || -&lt;br /&gt;
|-&lt;br /&gt;
| ZigBee Light Link || - || 2,4 GHz ||  ||  || HUE Bridge (RaspBee) || {{Link2CmdRef|Anker=HUEBridge|Label=HUEBridge}} || Philips HUE und LightLink Lampen (auch Osram LIGHTIFY an der HUE-Bridge)|| [http://www.developers.meethue.com/documentation/how-hue-works]&lt;br /&gt;
|-&lt;br /&gt;
| [[MySensors]] || - || 2,4 GHz ||  ||  || MySensors Gateway  || [[MYSENSORS]] || [http://www.mysensors.org/build/ Selbstbau-Sensoren] || -&lt;br /&gt;
|-&lt;br /&gt;
| [[:Kategorie:Z-Wave Components|Z-Wave]] || - || 868MHz || 2-FSK || 9.600 bit/s oder 40 Kbit/s || {{Link2CmdRef|Anker=ZWDongle|Label=ZWDongle}} || {{Link2CmdRef|Anker=ZWave|Label=ZWave}} || - || -&lt;br /&gt;
|-&lt;br /&gt;
| [[WMBUS]] || WMBus_T, WMBus_S || 868MHz || ?? || 100 kbit/s / 32.768 kbit/s || CU* || {{Link2CmdRef|Anker=WMBUS|Label=WMBUS}} || Wasseruhren, Wärmezähler, Elektrozähler || - &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot; | &#039;&#039;Tabelle muss noch vervollständigt werden&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Legende:&#039;&#039;&#039; &lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; | CU* = CUL, CUN, CUNO / &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Übersicht über drahtgebundene Systeme&lt;br /&gt;
|-&lt;br /&gt;
! Name !!  class=&amp;quot;unsortable&amp;quot; | Interfaces (Hardware) !! class=&amp;quot;unsortable&amp;quot; | Modul !! class=&amp;quot;unsortable&amp;quot; | Geräte (Beispiel) !! class=&amp;quot;unsortable&amp;quot; | Bemerkungen&lt;br /&gt;
|-&lt;br /&gt;
| [[1-Wire]]  || [[Interfaces für 1-Wire|diverse]] || {{Link2CmdRef|Anker=OWX|Label=OWX}} || [[:Kategorie:1-Wire|1-Wire]] || -&lt;br /&gt;
|-&lt;br /&gt;
| [[EIB_/_KNX|EIB/KNX]]  || {{Link2CmdRef|Anker=TUL|Label=TUL}} || {{Link2CmdRef|Anker=EIB|Label=EIB}} || [[:Kategorie:EIB/KNX|EIB/KNX]] || -&lt;br /&gt;
|-&lt;br /&gt;
| Firmata || RS-232, USB, Ethernet || {{Link2CmdRef|Anker=FRM|Label=FRM}} || Arduino || -&lt;br /&gt;
|-&lt;br /&gt;
| [[HomeMatic Wired]]  || [[HomeMatic Wired RS485 LAN Gateway|HM485 LAN Gateway]] || {{Link2CmdRef|Anker=HM485_LAN|Label=HM485_LAN}} || [[:Kategorie:HomeMatic Components|Präfix HMW]] || -&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | &#039;&#039;Tabelle muss noch vervollständigt werden&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Legende:&#039;&#039;&#039; &lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Komponenten ==&lt;br /&gt;
Der eigentliche Zweck eines Hausautomatisierungs-Projekts sind dann letztendlich die &#039;&#039;&#039;Geräte&#039;&#039;&#039; (Komponenten / Aktoren / [[:Kategorie:Schalter (Empfänger)|Empfänger]]), die automatisch gesteuert werden sollen, bzw. auch Auslöser für Aktionen ([[:Kategorie:Schalter (Sender)|Sender]]) und Lieferant von Datenmaterial ([[:Kategorie:Hardware Typen|Sensoren]]) sind.&lt;br /&gt;
&lt;br /&gt;
Diese Geräte sind, sofern es eine detaillierte Beschreibung dazu gibt, in den jeweiligen Unterseiten der [[:Kategorie:Hardware|Hardwareliste]] aufgeführt.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.enocean.com/de/home/ EnOcean] Homepage&lt;br /&gt;
* [http://www.elv.de ELV], (Haupt-)Lieferant von FS20, FHT, HomeMatic, MAX!&lt;br /&gt;
* [https://github.com/firmata/protocol Firmata] Protokoll&lt;br /&gt;
* [http://www.panstamp.com panStamp], panStamp Hersteller&lt;br /&gt;
* [http://jeelabs.com/products/jeelink Jeelabs], JeeLink Hersteller&lt;br /&gt;
* [http://www.zigbee.org/ Zigbee] Homepage&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:FHEM]]&lt;br /&gt;
[[Kategorie:FHEM-Verwendung]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Arduino_Firmata&amp;diff=25196</id>
		<title>Arduino Firmata</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Arduino_Firmata&amp;diff=25196"/>
		<updated>2018-02-11T18:59:49Z</updated>

		<summary type="html">&lt;p&gt;JensB: Beschreibungen an die aktuellen Versionen von Arduino-IDE, Firmata, FHEM und Boards angepasst.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Arduino mit Firmata ==&lt;br /&gt;
Für Arduinos (und diverse Arduino kompatible Boards) gibt es eine Standardimplementierung des Kommunikationsprotokolls &#039;&#039;Firmata&#039;&#039; [https://github.com/firmata/protocol]. Mit Hilfe des Perl-Moduls &#039;&#039;Device::Firmata&#039;&#039;, auch bekannt als perl-firmata [https://github.com/ntruchsess/perl-firmata], kann das Firmata-Protokoll in Perl genutzt werden und mit dem Modul [[#FRM|FRM]] auch in FHEM.&lt;br /&gt;
&lt;br /&gt;
Für die Kommunikation zwischen FHEM (Master) und Arduino (Slave) stehen mehrere Schnittstellen zur Auswahl: RS-232, USB, Ethernet und WiFi. Insbesondere Ethernet und WiFi erlauben die Integration dezentraler IO-Periperie mit FHEM.&lt;br /&gt;
&lt;br /&gt;
Firmata möglich es, mit nur geringen Arduino-Kenntnissen digitale und analoge Signale aus eigenen Schaltungen in FHEM zu verarbeiten. Dabei können Signale sowohl eingelesen als auch ausgegeben werden. Ein Verständnis der Bedienung der Arduino-IDE und elektronische Kenntnisse zum Anschluss von Sensoren und Aktoren sind natürlich erforderlich.&lt;br /&gt;
&lt;br /&gt;
=== Arduino IDE ===&lt;br /&gt;
Zur Installation von Firmware auf den Arduino wird natürlich erst mal die Arduino-IDE (Version 1.8 oder höher) benötigt [https://www.arduino.cc/en/main/software]. Die gibt es für die Betriebssysteme Windows, Mac OS X und Linux.&lt;br /&gt;
&lt;br /&gt;
Über die Bibliotheksverwaltung der Arduino-IDE (Menü &#039;Sketch&#039;-&amp;amp;gt;&#039;Bibliothek einbinden&#039;-&amp;amp;gt;&#039;Bibliotheken verwalten...&#039;) stehen verschiedene Firmware-Versionen von Firmata zur Auswahl. Im folgenden wird auf die Version &amp;quot;Firmata by Firmata Developers&amp;quot; und &amp;quot;ConfigurableFirmata by Firmata Developers&amp;quot; eingegangen. Diese beiden Versionen unterscheiden sich in den unterstützten Hardware-Funktionen:&lt;br /&gt;
&lt;br /&gt;
* Firmata: digitale und analoge I/Os, Servos, I2C&lt;br /&gt;
* ConfigurableFirmata: zusätzlich 1-Wire und Schrittmotoren&lt;br /&gt;
&lt;br /&gt;
Bei ConfigurableFirmata ist es auch außerdem einfacher, nicht benötigte Funktionen zu deaktivieren, damit die Arduino-Firmware möglichst wenig Speicher belegt. Wenn man den zusätzlichen Funktionsumfang von ConfigurableFirmata nicht benötigt, kann man mit etwas Geschick durch Auskommentieren von nicht benötigtem Code aus Firmata z.T. ein noch kompakteres Ergebnis erzielen (das ist aber nur etwas für Fortgeschrittene).&lt;br /&gt;
&lt;br /&gt;
Bei Firmata ist zwischen der Firmata-Protokoll-Version (aktuell 2.6.0) und der Version der jeweiligen Firmware (Firmata: aktuell 2.5.7, ConfigurableFirmata: aktuell 2.10.0) zu unterscheiden, die insbesondere bei ConfigurableFirmata voneinander unabhängig sind.&lt;br /&gt;
&lt;br /&gt;
Nach Installation der gewünschten Firmata-Firmware wählt man eines der funktionsfertigen Beispiele über das Arduino-IDE Menü &#039;Datei&#039;-&amp;amp;gt;&#039;Beispiele&#039;-&amp;amp;gt;&#039;Firmata&#039; bzw. &#039;Datei&#039;-&amp;amp;gt;&#039;Beispiele&#039;-&amp;amp;gt;&#039;ConfigurableFirmata&#039; aus. Je nach ausgewähltem Beispielprojekt sind noch Anpassungen direkt im Sketch oder in einer zusätzlichen Konfigurationsdatei erforderlich (z.B. um für Ethernet- und WiFi-Schnittstellen die Netzwerkparameter einzustellen).&lt;br /&gt;
&lt;br /&gt;
Über das Arduino-IDE Menü &#039;Werkzeuge&#039;-&amp;amp;gt;&#039;Bords&#039; wählt man das Board aus, das dem eigenen Arduino entspricht. Fehlt das Board in der Auswahl, kann die erforderliche Unterstützung oft über das Menü &#039;Werkzeuge&#039;-&amp;amp;gt;&#039;Bords&#039;-&amp;amp;gt;&#039;Boardverwalter...&#039; nachinstalliert werden. Ansonsten hilft ein Blick auf die Hersteller-Webseiten des Boards.&lt;br /&gt;
&lt;br /&gt;
Ist der Arduino korrekt angeschlossen, drückt man den &#039;Upload&#039;-Knopf (der mit dem Rechspfeil oben link), um den Arduino-Sketch zu kompilieren und auf das Board hochzuladen. Die Vorgehensweise zum Hochladen ist sehr stark davon abhängig, welches Board man verwendet und mit welcher Technik es angeschlossen ist. Bitte die jeweiligen Angaben des Board-Herstellers beachten.&lt;br /&gt;
&lt;br /&gt;
Wer zum ersten mal mit der Arduino-IDE arbeitet, sollte statt Firmata zunächst das Standard Arduino Beispielprojekt &#039;Blink&#039; auswählen und es auf dem Arduino installieren. Sobald das klappt, kann man mit Firmata weiter machen.&lt;br /&gt;
&lt;br /&gt;
=== Firmata mit Ethernet oder WiFi ===&lt;br /&gt;
&lt;br /&gt;
Vor dem Kompilieren muss man unbedingt die Netzwerkparameter anpassen, d.h. die IP-Adresse des FHEM-Servers und den Port des FRM-Moduls eintragen (ggf. auch eine neue eindeutige MAC-Adresse), bei WiFi auch die SSID und den PSK. In älteren Firmata-Versionen und bei ConfigurableFirmata geschieht das direkt im Sketch. Aktuelle Firmata-Versionen haben dazu eine getrennte Konfigurationsdatei (ethernetConfig.h bzw. wifiConfig.h), so dass keine Änderungen am Sketch erforderlich sind.&lt;br /&gt;
&lt;br /&gt;
Falls der Speicherbedarf der kompilierten Arduino-Firmware die Möglichkeiten des Boards übersteigt (insbesondere bei Verwendung eines ENC28J60-Ethernet-Shields [https://github.com/ntruchsess/arduino_uip] in Kombination mit einem &amp;quot;kleinen&amp;quot; Arduiono wie den Uno oder Nano) kann man bei Verwendung von ConfigurableFirmata nicht benötigten Features im Sketch auskommentieren. Wenn der Speicherbedarf nur &amp;quot;knapp&amp;quot; ausreicht, läuft die Firmware u.U. trotzdem nicht zuverlässig.&lt;br /&gt;
&lt;br /&gt;
Als ersten Funktionstest für die Netzwerkverbindung empfiehlt sich ein Ping von FHEM zum Arduino.&lt;br /&gt;
&lt;br /&gt;
=== Sonderfälle ===&lt;br /&gt;
&lt;br /&gt;
Je nach verwendetem Board sind u.U. individuelle Besonderheiten zu berücksichtigen. Hier ein paar Beispiele:&lt;br /&gt;
&lt;br /&gt;
Ein MEGA256 z.B. benutzt einen anderen Pin als SS (Slave select) zur Kommunikation mit dem Ethernetmodul. Man muss der Firmata im Setup mitteilen, welche Pins zu ignorieren sind, damit es keine Wechselwirkungen zwischen Firmata und Ethernet Library gibt. Das ist im ConfigurableFirmata-Sketch [https://github.com/firmata/arduino/blob/configurable/examples/ConfigurableFirmata/ConfigurableFirmata.ino] vorbereitet und muss (wenn man etwas anderes als ein Standard-Ethernetshield am Uno verwendet) geeignet angepasst werden (Beim Mega muss man z.B. den Pin 10 ignorieren und Pin 53 als hardcodiert auf Output stellen). Das gleiche gilt, wenn man eine andere Hardware (z.B. mit ENC28J60 anstelle des WizNet W5100 des Ethernetshields) benutzen möchte, die einen anderen Pin als CS/SS benutzt.&lt;br /&gt;
&lt;br /&gt;
== FRM ==&lt;br /&gt;
Der Arduino wird in FHEM über das Modul 10_FRM.pm angesprochen. 10_FRM ist für andere FHEM-Module die Schnittstelle (das IODev) zum Arduino. Es lassen sich jeweils so viele Ein/Ausgabe Devices pro Arduino konfigurieren, wie dieser physikalisch besitzt (natürlich muss man darauf achten, dass nicht alle Arduino-Pins alle Ein-/Ausgabemöglichkeiten besitzen). Konfiguriert man einen Pin für einen nicht unterstützen Modus so gibt es mit der aktuellen Firmata-Version direkt einen Fehler - ältere Versionen (vor 2.3) schlucken Fehlkonfigurationen einfach so, der betreffende Pin funktioniert dann aber nicht.&lt;br /&gt;
&lt;br /&gt;
Hier ein kurzer Ausschnitt aus der fhem.cfg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# definiere FRM mit USB-Schnittstelle /dev/ttyUSB0, Baudrate 57600 ist Default für StandardFirmata&lt;br /&gt;
define FIRMATA FRM /dev/ttyUSB0@57600&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# definiere FRM mit TCP/IP-Schnittstelle auf Port 3030&lt;br /&gt;
define FIRMATA FRM 3030 global&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
FRM macht bei Netzwerkverbindungen FHEM-seitig einen Serverport auf (dieser wird in der define-Zeile angegeben). &#039;global&#039; muss zusätzlich angegeben werden, damit der Serversocket an alle IP-addressen gebunden wird. (Sonst wird nur &#039;localhost&#039; verwendet, was nicht funktionieren würde). Der Arduino verbindet sich aktiv zu diesem Port, sonst gilt im Prinzip alles was auch für den über USB angebunden Arduino gilt.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# für alle analogen Eingangs-Pins&lt;br /&gt;
attr FIRMATA sampling-interval 1000 # [ms] - maximal 16384 setzbar&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM}} FRM&lt;br /&gt;
=== 20_FRM_IN.pm ===&lt;br /&gt;
Macht einen Arduino-pin als digitalen Eingang nutzbar.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Firmata_IN FRM_IN 12 # definiert Arduino Pin 12 als digitalen Eingang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_IN}} FRM_IN&lt;br /&gt;
=== 20_FRM_OUT.pm ===&lt;br /&gt;
Macht einen Arduino-pin als digitalen Ausgang nutzbar.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Firmata_OUT FRM_OUT 11 # definiert Arduino Pin 11 als digitalen Ausgang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_OUT}} FRM_OUT&lt;br /&gt;
=== 20_FRM_AD.pm ===&lt;br /&gt;
Macht einen Arduino-pin als analogen Eingang nutzbar.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Firmata_ANALOG FRM_AD 17 # definiert Arduino Pin 17 als analogen Eingang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_AD}} FRM_AD&lt;br /&gt;
=== 20_FRM_PWM.pm ===&lt;br /&gt;
Macht einen Arduino-pin als analogen Ausgang nutzbar. Es wird ein pulsweitenmoduliertes Signal ausgegeben.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Firmata_ANALOG FRM_PWM 10 # definiert Arduino Pin 10 als analogen Ausgang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_PWM}} FRM_PWM&lt;br /&gt;
=== 20_FRM_SERVO.pm ===&lt;br /&gt;
Erlaubt die Ansteuerung von analogen Modelbauservos (Ansteuerung über PWM) am Arduino.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define Firmata_ANALOG FRM_AD 9 # definiert Arduino Pin 9 als analogen Eingang&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_SERVO}} FRM_SERVO&lt;br /&gt;
=== 20_FRM_I2C.pm ===&lt;br /&gt;
&amp;lt;p&amp;gt;Erlaubt das Auslesen von über I2C angeschlossenen ICs&amp;lt;/p&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=FRM_I2C}}FRM_I2C&lt;br /&gt;
=== Arduino mit OneWireFirmata ===&lt;br /&gt;
&amp;lt;p&amp;gt;die Seite [[Arduino mit OneWireFirmata]] beschreibt, wie es möglich ist, mit einer um OneWire erweiterten Version der Standard Firmata an den Arduino angeschlossene 1-Wire Devices in FHEM einzubinden.&amp;lt;/p&amp;gt;&lt;br /&gt;
siehe auch: {{Link2CmdRef|Anker=OWX}} OWX&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other_Components]]&lt;br /&gt;
[[Kategorie:Arduino]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>JensB</name></author>
	</entry>
</feed>