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

Loxone 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.

Was sind eure Ideen zur Nutzung im Smart Home?

Loxone im Einsatz? Dann schau dir unseren LoxKurs an und profitiere von unserem Wissen!

Verpasse keine Inhalte mehr! Trage dich in den Newsletter ein und folge uns auf Facebook.

Was ist ein Affiliate-Link? Wenn du auf einen Affiliate-Link klickst und √ľber diesen Link einkaufst, bekomme ich vom betreffenden Online-Shop oder Anbieter eine Provision, was mich u.A. bei den laufenden Kosten den Blogs unterst√ľtzt. F√ľr dich ver√§ndert sich der Preis nicht.

Christoph

berichtet seit Juni 2012 auf meintechblog.de √ľber seine Erfahrungen zu Smart Home und Hausautomation und besch√§ftigt sich au√üerdem mit Smart Grids. Mehr Infos

48 Gedanken zu „Informationen von High-End-Wetterstationen kostenlos in das Smart Home 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 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

    2. 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.

    3. 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. 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 ?

  13. 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?

  14. 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.

  15. 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?

  16. 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.

  17. 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

  18. 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?

  19. 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

  20. 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