Informationen von High-End-Wetterstationen kostenlos in das Smart Home einbinden

IM EINSATZ?

Dann schau dir UNSEREN LOXKURS an und profitiere von unserem Wissen!

Für zahlreiche Anwendungen im Smart Home sind Informationen zu Wetterdaten von zentraler Bedeutung. Rolläden beschatten das Zuhause bei hoher UV-Strahlung, Fenster können bei Wind oder Niederschlag automatisch geschlossen werden. Gute Wetterstationen, die zahlreiche Umweltfaktoren messen, kosten jedoch viel Geld. “BMS Quadra”, “Davis Vantage” oder andere KNX-Wetterstationen kosten zwischen 500 und 1000 Euro.

In diesem Howto wird gezeigt, wie mit einem FHEM Smart Home Server Wetterinformationen von High-End-Wetterstationen, die sich in eurer Nähe befinden, komplett kostenlos erhoben und an den Loxone Miniserver Go (Affiliate-Link) weitergegeben werden, damit professionelle und “smarte” Automatikprogramme im Smart Home realisiert werden können.Die Einbindung erfolgt über den Online-Dienst wunderground.com (Weather Underground), an den man Wetterdaten als Betreiber bzw. Besitzer einer Wetterstation automatisiert übermitteln kann. Da die Dichte an Stationen in den letzten Jahren massiv zugenommen hat, seitdem unter anderem auch Netatmo-Geräte die Anbindung an wundergound.com unterstützen, ist die Lösung in dem hier gezeigten Howto mittlerweile wirklich praxistauglich geworden.

Geeignete Wetterstation finden

Auf der Webseite http://www.wunderground.com wird im ersten Schritt die Location gesucht (1), woraufhin auf der Karte zahlreiche Wetterstationen erscheinen. Hier kann dann zunächst die Wetterstation ausgesucht werden, die dem eigenen Wohnort am Nähesten ist (2). Ein Klick auf den Stationsnamen (3) ermöglicht es, weitere, wichtige Informationen zur Station einzuholen.

wunderground1

Hierfür muss zunächst in der Detailansicht wieder auf den Namen der Station geklickt werden.

wunderground2

Zu Beginn wird hier die interne wunderground-ID der Wetterstation angezeigt (1), die später für die Anbindung an das Smart Home benötigt wird. Ferner kann man sich hier ansehen, um was für eine Station es sich handelt. Dazu muss auf den Link “About this PWS” (2) geklickt werden.

wunderground3

Das daraufhin erscheinende “Popup” liefert diese gewünschten Detail-Informationen zur Wetterstation. In meinem Fall steht keine 200 Meter von meinem Zuhause entfernt eine High-End-Wetterstation “Davis Vantage Pro2 Plus Wireless”, die im Minutenintervall neue Wetterinformationen liefert.

wunderground4Natürlich hat man nicht immer Glück und die nächste, etwas bessere Station ist ein Stückchen weiter entfernt. Am Besten sucht man sich bei der Wahl der Wetterstation einen Kompromiss aus Entfernung zum eigenen Smart Home und Art der Wetterstation aus. Logischerweise messen nicht alle in wunderground verfügbaren Stationen die gleichen Daten. Manche Stationen messen z.B. lediglich Temperatur und Luftfeuchtigkeit, manche hingegen bis zu zehn Werte, wie z.B. Windrichtung, Niederschlag, Luftdruck, UV-Strahlung etc.

Wetterstation in FHEM einbinden

Die gefundene Wetterstation kann dann anhand der wunderground-ID in FHEM eingebunden werden.

FHEM ist ein quelloffener Smart Home Server, dessen Installation z.B. hier beschrieben ist: FHEM-Server auf dem Raspberry Pi in weniger als einer Stunde einrichten

Zur Einbindung wird zunächst der nachfolgende Code verwendet, der in der FHEM-Kommandozeile am oberen Bildrand des Webinterfaces abgesendet wird:

define wetter_eigheim HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IBAYERNF17 30

Wie zu erkennen ist, wird die wunderground-ID der Wetterstation am Ende des Codes angefügt (hier: IBAYERN17), um das Wetterdatenobjekt (hier: wetter_eigheim) anzulegen. Die “30” am Ende des Codes gibt das Update-Intervall in Sekunden an.

Abschließend wird die Konfiguration über einen Klick auf “Save Config” dauerhaft gespeichert.

wetter-in-fhem-1

Um alle relevanten Readings, also alle relevanten Messwerte aus der Wetterstation im Smart Home Server auszulesen, wird ferner folgender Code in der Datei “fhem.cfg” hinzugefügt.

attr wetter_eigheim userattr event-on-change-reading readingsName_cloudiness readingsName_date readingsName_dewpointTemperature readingsName_fog readingsName_heatindex readingsName_humidity readingsName_precip1hrmetric readingsName_preciptodaymetric 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_precip1hrmetric readingsRegex_preciptodaymetric readingsRegex_pressure readingsRegex_solarRadiation readingsRegex_solarUV readingsRegex_temperature readingsRegex_time readingsRegex_windChill readingsRegex_windDegrees readingsRegex_windDirection readingsRegex_windGust readingsRegex_windSpeed
attr wetter_eigheim event-on-change-reading dewpointTemperature,humidity,preciptodaymetric,pressure,solarRadiation,solarUV,temperature,windDegrees,windGust,windSpeed,precip1hrmetric
attr wetter_eigheim readingsName_cloudiness cloudiness
attr wetter_eigheim readingsName_date date
attr wetter_eigheim readingsName_dewpointTemperature dewpointTemperature
attr wetter_eigheim readingsName_fog fog
attr wetter_eigheim readingsName_heatindex heatindex
attr wetter_eigheim readingsName_humidity humidity
attr wetter_eigheim readingsName_precip1hrmetric precip1hrmetric
attr wetter_eigheim readingsName_preciptodaymetric preciptodaymetric
attr wetter_eigheim readingsName_pressure pressure
attr wetter_eigheim readingsName_solarRadiation solarRadiation
attr wetter_eigheim readingsName_solarUV solarUV
attr wetter_eigheim readingsName_temperature temperature
attr wetter_eigheim readingsName_time time
attr wetter_eigheim readingsName_windChill windChill
attr wetter_eigheim readingsName_windDegrees windDegrees
attr wetter_eigheim readingsName_windDirection windDirection
attr wetter_eigheim readingsName_windGust windGust
attr wetter_eigheim readingsName_windSpeed windSpeed
attr wetter_eigheim readingsRegex_cloudiness cloudiness id="NN" percent="([\d\.]+)
attr wetter_eigheim readingsRegex_date date date" content="([\d\.]+)
attr wetter_eigheim readingsRegex_dewpointTemperature <dewpoint_c>([\d\.]+)
attr wetter_eigheim readingsRegex_fog fog id="FOG" percent="([\d\.]+)
attr wetter_eigheim readingsRegex_heatindex <heat_index_c>([\d\.]+)
attr wetter_eigheim readingsRegex_humidity <relative_humidity>([\d\.]+)
attr wetter_eigheim readingsRegex_precip1hrmetric <precip_1hr_metric>([\d\.]+)
attr wetter_eigheim readingsRegex_preciptodaymetric <precip_today_metric>([\d\.]+)
attr wetter_eigheim readingsRegex_pressure <pressure_mb>([\d\.]+)
attr wetter_eigheim readingsRegex_solarRadiation <solar_radiation>([\d\.]+)
attr wetter_eigheim readingsRegex_solarUV <UV>([\d\.]+)
attr wetter_eigheim readingsRegex_temperature <temp_c> ([-]*[\d\.]+)
attr wetter_eigheim readingsRegex_time time Zeit([\d\:]+)
attr wetter_eigheim readingsRegex_windChill <windchill_c>([\d\.]+)
attr wetter_eigheim readingsRegex_windDegrees <wind_degrees>([\d\.]+)
attr wetter_eigheim readingsRegex_windDirection <wind_dir>([\d\.]+)
attr wetter_eigheim readingsRegex_windGust <wind_gust_mph>([\d\.]+)
attr wetter_eigheim readingsRegex_windSpeed <wind_mph>([\d\.]+)

Sobald dieser Code in FHEM gespeichert wurde, werden einzelne Readings der Wetterstation in lesbarer Form dargestellt.

wetter-in-fhem-2

Die Informationen können nun in FHEM so verwendet werden, als ob sie über einen lokalen Sensor in das Smart Home eingebunden wären.

Wetterinformationen an Loxone weitergeben

Loxone hat sich in den letzten Jahren zu einem für Jörg und mich nicht mehr wegzudenkenden Smart-Home-System entwickelt. Mit dem kleinen, grünen Miniserver – ich nutze den Loxone Miniserver Go (Affiliate-Link) – kommt man als Smart-Home-Enthusiast voll auf seine Kosten: eingebaute Logik, graphische Programmierung mittels Logikbausteinen, automatische Visualisierung etc. pp. Wer sich mit Loxone noch nicht beschäftigt hat, sollte sich einmal diesen Blogpost durchlesen: 5 Gründe zur Erweiterung deines FHEM-Servers mit Loxone + Howto.

Um die Wetterinformationen per FHEM zu erfassen und in Loxone auszuwerten, sollte die grundsätzliche Verbindung beider Welten (FHEM-Server und Loxone Miniserver) so, wie im oben verlinkten Blogpost erklärt, umgesetzt sein. Diese Verbindung ist Grundvoraussetzung für das weitere Vorgehen.

Dieses beginnt damit, dass FHEM-seitig in die Datei “fhem.cfg” der folgende Code eingefügt wird:

define WetterdatenToLoxone notify wetter_eigheim {WetterdatenToLoxone("$NAME")}

Der Name des Wetterdaten-Objektes in FHEM (hier: wetter_eigheim) muss dabei an den eigenen, in FHEM gewählten Namen angepasst werden.

Zusätzlich wird in der Datei “99_myUtils.pm” noch folgende Codezeile hinzugefügt, die für den Datenaustausch in Richtung Loxone per UDP verantwortlich zeichnet:

#WetterdatenToLoxone
sub WetterdatenToLoxone($)
{
 my ($device) = @_;
 my $regenaktuell=ReadingsVal("$device","precip1hrmetric","-1");
 my $regenheute=ReadingsVal("$device","preciptodaymetric","-1");
 my $luftdruck=ReadingsVal("$device","pressure","-1");
 my $windrichtung=ReadingsVal("$device","windDegrees","-1");
 my $windspeed=ReadingsVal("$device","windSpeed","-1");
 my $windboehe=ReadingsVal("$device","windGust","-1");
 my $uvstrahlung=ReadingsVal("$device","solarUV","-1");
 my $solarleistung=ReadingsVal("$device","solarRadiation","-1");

 UDP_Msg("192.168.178.76" , "7000" , "$device: $regenaktuell $regenheute $luftdruck $windrichtung $windspeed $windboehe $uvstrahlung $solarleistung");
}

Jedes mal, wenn in FHEM die Wetterdaten aktualisiert werden, wird eine UDP-Nachricht mit allen Werten an den Loxone Miniserver versendet.

Um diese Informationen in Loxone auszuwerten, gilt es, unterhalb des für die Verbindung zwischen FHEM und Loxone nötigen UDP-Eingangsknoten einen neuen “Virtuellen UDP Eingang Befehl” anzulegen.

befehlseingang

Dieser Schritt wird für jeden Wert wiederholt. Dabei wird in der Befehlserkennung unterschieden, welcher Wert abgefragt wird. Die Windrichtung wird beispielsweise mit folgendem Code in Loxone empfangen:

wetter_eigheim: \# \# \# \v

Das liegt daran, dass vom FHEM-Device “wetter_eigheim” der vierte Wert der UDP-Nachricht die Informationen zur Windgeschwindigkeit enthält. Die Reihenfolge ergibt sich aus dem UDP-Code, der zuvor in FHEM angelegt wurde. Hier noch einmal die relevante Zeile zur Erinnerung:

...
UDP_Msg("192.168.178.76" , "7000" , "$device: $regenaktuell $regenheute $luftdruck $windrichtung $windspeed $windboehe $uvstrahlung $solarleistung");
...

Wie zu erkennen ist, wird zuerst die aktuelle Regenmenge übertragen, anschließend die kumulierte Regenmenge des Tages, dann der Luftdruck, die Windrichtung, die Windgeschwindigkeit usw.

In Loxone steht ein “\#” für das Überspringen eines Wertes, sodass z.B. der zweite Wert in der Befehlserkennung mit “\# \v” abgefragt wird, der dritte Wert mit “\# \# \v” usw.

So werden alle relevanten Informationen Schritt für Schritt unterhalb des UDP-Eingangsknotens angelegt.

loxone-wetter-in-peripherie

Wetterdaten, die nicht näher bearbeitet werden müssen, können in der Loxone Config Software auf einer neuen Programmierseite z.B. direkt an einen “Virtueller-Status“-Baustein angehängt werden. Hierbei wird dann lediglich im Eigenschaftenbereich (links) die Einheit entsprechend angegeben (z.B. für Windgeschwindigkeit in km/h, siehe Screenshot).

wetter-loxone-werte

Werte, die hingegen noch etwas “aufgehübscht” werden sollen, werden besser an den “Status“-Baustein angehängt. Dieser bietet die Möglichkeit, Ein- und Ausgabewert regelbasiert zu ersetzen.

Die Windrichtung wird z.B. – von FHEM kommend – in Gradzahlen angegeben. Ich möchte aber viel lieber wissen, ob der Wind aus Nord, Nordost, Süd, usw. kommt, also rechne ich die Werte über den Status-Baustein vorher um. Dies funktioniert so, wie auf dem nachfolgenden Bild zu sehen und kann beliebig fein aufgegliedert werden. Ich habe eine relativ simple Einteilung vorgenommen: 0-90 Grad = Nordost (NO), 90-180 Grad = Südost (SO) usw.

virtueller-status

Gleiches mache ich bei der Anzeige der aktuellen Regenmenge. Bei Werten über “0” soll die Anzeige “Regen” lauten, bei “0” dann “Kein Regen”. Dies wird ebenfalls mit dem Status-Baustein entsprechend der gleichen Logik wie für die Windrichtung umgesetzt.

konfig-in-loxone

Die Visualisierung in Loxone stellt die empfangenen Werte dann recht übersichtlich dar.

wetter-in-loxone

Aus meinem täglichen Leben

Ich nutze die Werte nicht nur zur Information, sondern vor allem zur Automatisierung im Smart Home. Beispielsweise nutze ich den Wert des UV-Levels, um meine Rolläden zu steuern. Das hatte ich bereits hier erklärt: Smart-Home-Rolladensteuerung mit FHEM und Loxone: Howto und Praxistipps für Nachrüster. Windböhen und Windgeschwindigkeit möchte ich entsprechend auch bald in die Rolladensteuerung integrieren. Da bei mir Aluminium-Rolläden verbaut sind, sollen diese im Fall eines Unwetters (hohe Windböhen und starker aktueller Niederschlag) das Glas meiner Balkontüren vor herumfliegenden Gegenständen schützen und deshalb herunterfahren. Wer hingegen Raffstoren verbaut hat, kann diese anhand der Wetterdaten bei Unwettern hochfahren, um sie selbst vor starken Winden zu schützen.

So möchte ich in nächster Zeit weitere Wetterdaten-Szenarien mit dem Loxone Miniserver Go (Affiliate-Link) realisieren.

48 Kommentare
    1. doch die Möglichkeit ist hier beschrieben
      http://www.loxwiki.eu/display/LOX/Weather+Underground+%28Wunderground%29+direkt+in+Loxone+einbinden

  1. Hallo Ralf,

    das geht ganz einfach über den “Virtuellen Http Eingang” von Loxone. Einfach die Http Stationsseite von einer Wunderground Wetterstation in deiner Nähe auslesen. Und schon hast du alle benötigten Wetterwerte in deinem Miniserver.
    Ich lese z.B. bei mir die aktuellen Wetterwerte aus meiner Vantage Pro 2 über ein Skript mit Weewx (Vantage Pro 2 -> seriell (USB) -> Raspi (Weewx)) in Loxone ein, und die Wettervorhersagen von Wunderground über meine Stationsseite bei Wunderground, wo ich meine Wetterdaten mit Weewx auch alle fünf Minuten hochlade.

    Gruß,
    Andi

  2. Super vielen Dank.

    Ich habe so meinen WS1600 direkt über Fhem eingebunden.

    ICh habe nur ein kleines Problem.
    Der Ws1600 gibt die Windrichtung, also z.b. “SW”schon direkt an. Dieses wird aber von Loxone nicht genommen.

    Genau wie der Batteriestatus “Ok”. Auch hier wird der Wert nicht genommen.

    Nimmt Loxone nur Zahlen?

    1. Per UDP verarbeitet Loxone nur Ziffern, richtig. Du musst deine Werte also vor dem Übertragen in Nummern überführen.

      So mache ich das bspw. für die Übertragung vom Plex Media Player:
      Hier ein Auszug meiner 99_myUtils.pm:

      #PMPToLoxone
      #device:
      #1 presence (present, absent)
      #2 state (disappeared, stopped, paused, playing)
      sub PMPToLoxone($)
      {
      my ($device) = @_;
      my $presence = ReadingsVal(“$device”,”presence”,”-1″);
      if ($presence eq “absent”) {
      $presence = “0”;
      }
      if ($presence eq “present”) {
      $presence = “1”;
      }
      my $state = ReadingsVal(“$device”,”state”,”-1″);
      if ($state eq “disappeared”) {
      $state = “0”;
      }
      if ($state eq “stopped”) {
      $state = “1”;
      }
      if ($state eq “video:paused”) {
      $state = “2”;
      }
      if ($state eq “video:buffering”) {
      $state = “3”;
      }
      if ($state eq “video:playing”) {
      $state = “4”;
      }
      UDP_Msg(“192.168.3.11” , “7000” , “$device:plex $presence $state”);
      }

      Grüße und viel Erfolg
      Jörg

    2. hallo Stefan,

      kannst du bitte mal posten, wie du deine Wetterstation direkt eingebunden hast?! Ich möchte meine vorhandene Vantge Pro ebenfalls im fhem einbinden, hab aber noch nichts “how to” gefunden..

      Besten Dank

      Axel

  3. Hi,

    zunächst vielen Dank für den tollen Artikel.

    Ich bin ein Anfänger und konnte dennoch mit Eurer Hilfe folgende Readings konfigurieren:

    dewpointTemperature
    humidity
    precip1hrmetric
    preciptodaymetric
    pressure
    temperature
    windDegrees
    windGust
    windSpeed

    Meine Newbi-Frage nun: wie kann ich die einzelnen Readings in richtige Einträge einem Raum – z.b. Außenbereich zuordnen?
    Vielen lieben Dank für die Info.

    BB

    1. Hi Ricardo,
      hier mal an einem Reading verdeutlicht:

      Erstmal legst du in der fhem.cfg jeweils einen Dummy für ein gewünschtes Reading an. Der Dummy repräsentiert dann einen “Eintrag” im gewünschten Raum.

      define TE.Taupunkt dummy
      attr TE.Taupunkt room Terrasse

      Und dann wird über ein notify das gewünschte Reading vom Ursprungsdevice bei einer Änderung ausgelesen und in den neuen Dummy geschrieben:

      define WriteReadingInDummy notify TE.Wetterstation.* { \
      my $dewpointTemperature = ReadingsVal(“$NAME”, “dewpointTemperature”, “0”);; \
      fhem(“set $NAME TE.Taupunkt $dewpointTemperature”);; \
      }

      Hoffe das hilft dir erstmal weiter.

      Grüße
      Jörg

    2. Hallo,

      mir geht es genau so.
      die Readings bekomme ich alle rein.

      Aber dann komme ich auch nicht mehr weiter.
      Ich möchte alle Werte extra in einem Raum anzeigen.

      Einen Dummy wenn ich anlege ist es ein Schalter, aber kein z.B. Temperatur Wert.

      Danke Stefan

  4. Hallo Jörg,

    Ich habe da mal zwei Fragen.
    1. Warum wird von Euch immer noch das direkte bearbeiten der fhem.cfg praktiziert, obwohl das nicht mehr empfohlen wird?
    2. Warum empfiehlst Du Ricardo nicht readingsProxy statt des komplizierten Dummy Notify Geflechts?

    Grüße

    1. Hi Leon,
      zu deinen Fragen:

      1. Vermutlich weil wir das so jahrelang gewöhnt sind. Kürzere Einträge realisieren wir jetzt meist auch über die FHEM-Kommandozeile, längere Einträge werden jedoch immer noch direkt in der fhem.cfg gepackt. Gibt es dazu denn eine brauchbare Alternative?
      2. Mit dem readingsProxy bin ich noch nicht vertraut, deshalb das altbekannte dummy-Konstrukt. Wenn du weisst, wie es besser geht, dann sag doch einfach wie… Würde mich freuen. 🙂

      Grüße
      Jörg

  5. Hallo zusammen,
    ich habe eine Wetterstation in meiner Nähe im FHEM “eingebunden”, aber was ich einfach nicht hinbekommen ist die Ausgabe der Readings.

    Unter “buf” stehe die ganze Werte und es scheint sich auch etwas zu ändern.
    Könnt ihr mir vielleicht sagen, wo da das Problem liegen kann.
    Ist bestimmt ein ganz doofer Fehler.

  6. Hi Christoph,

    danke für den interessanten Artikel, jedoch schließe ich mich Jörg Wu. an, die Readings sind auf FHEM seite zu sehen.
    Der notify scheint aber nicht wirklich ausgeführt zu werden (Zeitstempel).
    Kannst bitte nochmal nachsehen – irgendwo “fehlt” vermutlich noch was…

    thnx
    Jimly

    1. Hallo Leute,

      habe es hinbekommen – wer aufmerksam liest kommt zur Erleuchtung!
      Trotzdem habe ich noch eine Frage:
      Wie bekommt man es hin, daß FEHM nur eine UDP Message sendet?
      In meinem FHEM Log, bzw. im UDP-Monitor in LOXONE ist zu sehen, daß mindestes 8 identische Zeilen liefert – vermutlich pro geändertem Reading das Ereignis WetterdatenToLoxone aufruft.

      Hier die Version mit der aktuellen Readings-Schreibweise ab 2013:
      (Bei alter Schreibweise noch kein Problem, fliegt aber irgendwann raus und produziert derzeit nur LOG Einträge)

      99_myUtils.pm

      #UDP Befehle senden
      sub UDP_Msg($$$)
      {
      my ($dest,$port,$cmd) = @_;
      my $sock = IO::Socket::INET->new(
      Proto => ‘udp’,
      PeerPort => $port,
      PeerAddr => $dest
      ) or die “Could not create socket: $!\n”;
      $sock->send($cmd) or die “Send error: $!\n”;
      return “send $cmd”;
      }

      #WetterdatenToLoxone
      sub WetterdatenToLoxone($)
      {
      my ($device) = @_;
      my $regenaktuell=ReadingsVal(“$device”,”precip1hrmetric”,”-1″);
      my $regenheute=ReadingsVal(“$device”,”preciptodaymetric”,”-1″);
      my $luftdruck=ReadingsVal(“$device”,”pressure”,”-1″);
      my $windrichtung=ReadingsVal(“$device”,”windDegrees”,”-1″);
      my $windspeed=ReadingsVal(“$device”,”windSpeed”,”-1″);
      my $windboehe=ReadingsVal(“$device”,”windGust”,”-1″);
      my $uvstrahlung=ReadingsVal(“$device”,”solarUV”,”-1″);
      my $solarleistung=ReadingsVal(“$device”,”solarRadiation”,”-1″);

      UDP_Msg(“192.168.2.18” , “7002” , “$device: $regenaktuell $regenheute $luftdruck $windrichtung $windspeed $windboehe $uvstrahlung $solarleistung”);
      }
      1;

      fhem.cfg

      # =====
      define HMS100TF_0000 HMS 0000
      attr HMS100TF_0000 IODev CUL
      attr HMS100TF_0000 room HMS
      define FileLog_HMS100TF_0000 FileLog ./log/HMS100TF_0000-%Y.log HMS100TF_0000:T:.*
      attr FileLog_HMS100TF_0000 logtype temp4hum6:Temp/Hum,text
      attr FileLog_HMS100TF_0000 room HMS
      define SVG_HMS100TF_0000 SVG FileLog_HMS100TF_0000:SVG_HMS100TF_0000:CURRENT
      attr SVG_HMS100TF_0000 label “HMS100TF_0000 Min $data{min1}, Max $data{max1}, Last $data{currval1}”
      attr SVG_HMS100TF_0000 room Plots

      define wetter_eigheim HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IBAYERNF17 30

      attr wetter_eigheim userattr event-on-change-reading .*

      attr wetter_eigheim reading01Name cloudiness
      attr wetter_eigheim reading01Regex cloudiness id=”NN” percent=”([\d\.]+)

      attr wetter_eigheim reading02Name date
      attr wetter_eigheim reading02Regex date date” content=”([\d\.]+)

      attr wetter_eigheim reading03Name dewpointTemperature
      attr wetter_eigheim reading03Regex ([\d\.]+)

      attr wetter_eigheim reading04Name fog
      attr wetter_eigheim reading04Regex fog id=”FOG” percent=”([\d\.]+)

      attr wetter_eigheim reading05Name heatindex
      attr wetter_eigheim reading05Regex ([\d\.]+)

      attr wetter_eigheim reading06Name humidity
      attr wetter_eigheim reading06Regex ([\d\.]+)

      attr wetter_eigheim reading07Name precip1hrmetric
      attr wetter_eigheim reading07Regex ([\d\.]+)

      attr wetter_eigheim reading08Name preciptodaymetric
      attr wetter_eigheim reading08Regex ([\d\.]+)

      attr wetter_eigheim reading09Name pressure
      attr wetter_eigheim reading09Regex ([\d\.]+)

      attr wetter_eigheim reading10Name solarRadiation
      attr wetter_eigheim reading10Regex ([\d\.]+)

      attr wetter_eigheim reading11Name solarUV
      attr wetter_eigheim reading11Regex ([\d\.]+)

      attr wetter_eigheim reading12Name temperature
      attr wetter_eigheim reading12Regex ([\d\.]+)

      attr wetter_eigheim reading13Name time
      attr wetter_eigheim reading13Regex time Zeit([\d\:]+)

      attr wetter_eigheim reading14Name windChill
      attr wetter_eigheim reading14Regex ([\d\.]+)

      attr wetter_eigheim reading15Name windDegrees
      attr wetter_eigheim reading15Regex ([\d\.]+)

      attr wetter_eigheim reading16Name windDirection
      attr wetter_eigheim reading16Regex ([\d\.]+)

      attr wetter_eigheim reading17Name windGust
      attr wetter_eigheim reading17Regex ([\d\.]+)

      attr wetter_eigheim reading18Name windSpeed
      attr wetter_eigheim reading18Regex ([\d\.]+)

      attr wetter_eigheim room Wetter

      define WetterdatenToLoxone notify wetter_eigheim {WetterdatenToLoxone(“$NAME”)}

    2. Hallo Jimly, das ist genau die Logik, die ich so haben möchte. Sobald sich ein Reading aktualisiert, sollen alle Status-Werte neu gesetzt werden. Wenn du das nicht möchtest, brauchst du für jedes Reading eine eigene UDP-Message mit separatem Inhalt, also separatem Code in der 99_myUtils.
      VG
      Christoph

    3. Hi Christoph,
      das ist klar, nur so wie es jetzt ist, ändert sich z.B. reading01 wird eine UDP Block gesendet. Ändert sich aber im selben Moment auch reading02, so wird wieder eine UDP Block gesendet.
      Besser wäre alle Readings verarbeiten und dann bei Änderung einen Block mit allen Daten senden.
      So wie jetzt verursacht das bei 10 Readings 10 UDP Messages auf einmal.

      Ich glaube das ist nicht so gewollt…. 😉

  7. Hallo,

    vielen Dank für diesen und die anderen hilfreichen Artikel.

    Ich habe eine Wetterstation in meiner Nähe eingebunden und sehe auch keine Werte in den Readings.

    Dafür finde ich im Logfile aber Einträge wie diesen bei eigentlich allen Readings:

    the attribute readingsRegex_temperature should no longer be used. Please use reading01Regex syntax instead

    Hat sich da etwas geändert?

  8. Danke für die tolle Idee der Einbindung von Crowd-Daten !

    ReadingsProxy geht so:

    define CW_Temperature readingsProxy CrowdWeather:temperature
    attr CW_Temperature alias Aussentemperatur
    attr CW_Temperature group CrowdWeather
    attr CW_Temperature room 0.Außen
    attr CW_Temperature stateFormat { sprintf(“%.1f °C”, ReadingsVal(“CrowdWeather”,”temperature”,0));; }

    “CrowdWeather” ist mein device statt “wetter_eigheim”

    VG ak323

    1. Hallo!

      Ist mein Verständnis richtig, dass dieser ReadingsProxy für alle relevanten Messwerte, z.B. windSpeed, separat angelegt werden muss?

      THX

  9. Hallo Leute

    Ich stehe auf dem Schlauch, bekomme das einfach nicht hin…..

    Ich moechte als Test einfach nur einmal die Temperature von meinem Eltako MS via UDP an den Loxone MS schicken, dafuer habe ich folgendes aus Euren Tutorials:

    :::: 99_myUtils.pm :::::

    #UDP Befehle senden
    sub UDP_Msg($$$)
    {
    my ($dest,$port,$cmd) = @_;
    my $sock = IO::Socket::INET->new(
    Proto => ‘udp’,
    PeerPort => $port,
    PeerAddr => $dest
    ) or die “Could not create socket: $!n”;
    $sock->send($cmd) or die “Send error: $!n”;
    return “send $cmd”;
    }
    #WetterdatenToLoxone
    sub WetterdatenToLoxone($)
    {
    my ($device) = @_;
    my $temperature=ReadingsVal(“$device”,”temperature”,”-1″);

    UDP_Msg(“10.x.x.x” , “7000” , “$device: $temperature”);
    }

    ::::: fhem.cfg :::::

    # Wetterstation Eltako MS FWS61-24V
    #
    #
    define EnO_019D1402 EnOcean 019D1402
    attr EnO_019D1402 IODev TCM_ESP3_0
    attr EnO_019D1402 eep A5-13-01
    attr EnO_019D1402 manufID 00D
    attr EnO_019D1402 room Aussenbereich
    attr EnO_019D1402 subType environmentApp
    define FileLog_EnO_019D1402 FileLog ./log/EnO_019D1402-%Y.log EnO_019D1402
    #
    #
    # Diese Daten werden an Loxone gesendet via UDP
    #
    define WetterdatenToLoxone notify FileLog_EnO_019D1402 {WetterdatenToLoxone(“$NAME”)}
    attr EnO_019D1402 readingsRegex_temperature ([\d\.]+)
    #
    ……

    Koennt Ihr mir BITTE helfen, ohne Eure Hilfe komme ich hier nicht weiter 🙁

    Vielen Dank

  10. Hallo ich bräuchte mal dringend Hilfe, da steht “Zusätzlich wird in der Datei “99_myUtils.pm” noch folgende Codezeile hinzugefügt” wo finde ich die Datei 99_myUtils.pm

    mfg Jens

    1. Hallo Jens

      – Im Fhem auf der linken Seite im Menü auf edit files klicken.
      – Dann das default file “99_utils.pm” anklicken.
      – Änderungen hinzufügen.
      – und jetzt wichtig, als 99_myUtils.pm abspeichern
      – zum Schluss noch reload 99_myUtils.pm

      Dann sollte das laufen

  11. Hey,

    schönen Dank für die gute Beschreibung! Ich habe mir eine Wetterstation (auch aus Fürth 🙂 erfolgreich in FHEM (ohne Loxone) eingebunden.

    Allerdings stelle ich bei dem aktuellen Wetter fest, dass die negativen Temperaturen nicht angezeigt werden. Kann es sein, dass bei der RegEx das Vorzeichen nicht ausgewertet wird? Kenn mich leider mit regulären Ausdrücken nicht aus.

    Viele Grüße
    Thorsten

    1. Hallo Thorsten,

      das kann eigentlich nicht sein. Bei mir klappt alles reibungslos. Habe es extra heute morgen noch einmal gecheckt und dir einen Screenshot geschossen. https://meintechblog.de/wordpress/wp-content/uploads/2016/12/IMG_0390.png

      VG
      Christoph

    2. Hallo Christoph,

      sehr komisch, ich habe mit regexe.de die Respones von der API und die Regex getestet. Bei mir funktioniert es jetzt so:

      ([-]*[\d\.]+)

      Habe es eben nochmal zurückgestellt auf:
      ([\d\.]+)

      Da findet er wieder nicht die negativen Werte, temperature wird wieder nicht aktualisiert.

      Viele Grüße
      Thorsten

    3. Ich schließe mich Thorsten an. Ich habe eben eine Wetterstation (Netatmo) eingebunden und das Regex für Temperatur hat ebenfalls nicht reagiert. Erst als ich Thorstens Variante mit dem Vorzeichen getestet habe ging es.

    4. Hallo Thorsten,

      ich habe deine Syntax jetzt mal für den Wert “temperature” in den Blogpost oben integriert. Danke für deine Hinweise!

      VG
      Christoph

  12. @Jens Stapel
    http://www.fhemwiki.de/wiki/99_myUtils_anlegen

    zu meiner eigenen Sache: Ich habe auch die Änderungen unter buf. In den readings steht alles auf 1.0. Wo liegt der Fehler ?

  13. Also ich habe das jetzt 3x probiert.
    Ich bekomme von der Station IWALDKRA2 den Taupunkt, den Druck und die Feuchtigkeit, aber keine Temperatur ?!?

    dewpointTemperature
    2.0
    2017-01-12 23:40:22
    heatindex
    1.0
    2017-01-12 23:25:34
    humidity
    100
    2017-01-12 23:40:22
    precip1hrmetric
    1.0
    2017-01-12 23:25:34
    preciptodaymetric
    1.0
    2017-01-12 23:25:34
    pressure
    996.8
    2017-01-12 23:40:22
    solarRadiation
    1.0
    2017-01-12 23:25:34
    solarUV
    1.0
    2017-01-12 23:25:34
    temperature
    1.0
    2017-01-12 23:25:34
    windChill
    1.0
    2017-01-12 23:25:34
    windDegrees
    1.0
    2017-01-12 23:25:34
    windDirection
    1.0
    2017-01-12 23:25:34
    windGust
    1.0
    2017-01-12 23:25:34
    windSpeed
    1.0
    2017-01-12 23:25:34

    Das gilt sowohl für den Original Code als auch für den upgegradeten Code
    mit der Sytax reading01Regex zu.
    Was mach ich denn falsch ?

  14. Hallo hab noch ne Frage:
    Kriege alle Werte in FHEM rein, doch die Regenwerte (preciptodaymetric und precip1hrmetric) sind beide genau um den Faktor 10 zu klein. Wie kann ich das bitte korrigieren?

  15. Hallo!
    Die Readings werden nicht korrekt dargestellt:
    http://www.directupload.net/file/d/4641/kaq8y64g_png.htm

    Liegt das an der Konfiguration?

    THX

  16. Hallo, danke für den tollen Blog. Habe heute mal Zeit gefunden und die Wetterdaten in mein FHEM eingebunden. Ich bekam jedoch nie die Temperatur angezeigt, erst als ich das Leerzeichen bei, ([-]*[\d\.]+), entfernt habe, also so, ([-]*[\d\.]+)
    Hoffe ich habe es etwas verständlich erklärt. Vielen Dank euch allen und ein schönes Wochenende.

  17. Hallo, ich bin Anfänger/Einsteiger bei FHEM. Ich habe den Programmschnipsel Wetter underground erfolgreich implementiert.
    Leider kann ich die Werte nicht auslesen. Kann mir jemand (Nach-)Hilfe geben?

  18. Hallo,

    mein Wettermodul in FHEM (Twilight) gibt mir zusätzlich noch die Uhrzeit von Sonnenaufgang und Sonnenuntergang an.
    Der Wert ist z.B.: 05:26:00. Im Loxone UDP Monitor sieht alles gut aus.
    Scheinbar Aufgrund des Doppelpunktes bekomme ich diese Werte aber nicht in Loxone einem Eingang zugewiesen. Loxone macht dann 00:00:05 daraus.
    Hat schon mal jemand Uhrzeiten per UDP übertragen und einen Tip für mich, wie die korrekte Befehlskennung aussehen müsste?

    Oder wäre der Weg: Stunde, Minute und Sekunde einzeln zu übermitteln.
    Da hapert es gerade bei dem Umbau des Readings bei mir 🙁

    Vielen Dank falls jemand einen Tip hat und ein schönes Wochenende.

  19. Hallo Jens,

    besten Dank für den Artikel. Ich habe eine Vantage Pro 2 an einem Raspi 3 mit weewx am laufen. Auf einem zweiten Raspi 3 läuft fhem mit Anbindung an fritzBox, Homatatic, KNX, Cul etc. Meine Frage wie bekomme ich die Vantage Pro Daten auf den Raspi auf dem fhem läuft. fhem2fhem oder kann ich das Httpmod Komando verwenden, und wie?

    Besten Dank für Deine/eure Unterstützung

  20. Hallo,
    ich habe eine Station, wie oben beschrieben, in Fhem eingebunden. Leider werden keine Werte angezeigt. Im Log steht: “wetter_eigheim: Read response to update didn’t match any Reading”.
    Hat jemand einen Tipp?

  21. Der Code ist schwer fehlerhaft! Diese attr Zeile (nur der Anfang) ist nonsens! Weder userattr ist dort sinnvoll und event-on-change-reading muss durch Komma getrennt werden!
    attr wetter_eigheim userattr event-on-change-reading readingsName_cloudiness readingsName_date

    Die Abfrage von Webseiten im 30 sec Takt macht vor allem bei Wetter keinen Sinn und ihr würdet euch bedanken wenn 1000ende von User Bots eure Webseite im 30 sec Takt abziehen würden!

    Gruß Otto

  22. Hallo,
    ich möchte hier mitteilen, dass Weather Underground die API seit März 2019 eingestellt hat und dementsprechend nicht mehr funktioniert.
    LG Karl

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte dir auch gefallen