Homematic: Wetterdaten von Accuweather abrufen (CCU3/RaspberriMatic)

Homematic: Wetterdaten von Accuweather abrufen (CCU3/RaspberriMatic)

Nach vielen Anfragen stelle ich euch eine Lösung für CCU3 bzw. RaspberriMatic vor, in der mithilfe eines sh-Skriptes über die API-Schnittstelle von AccuWeather mittels CUxD die Wetterdaten abgerufen und in die Homematic Systemvariablen abspeichert werden. Die Wetterdaten können bequem aus dem Internet importier werden und können anschließend beliebig in Homematic Programmen wie z.B. in einer Gartenbewässerung weiterverarbeitet werden. Diese Lösung funktioniert nur auf einer CCU3 oder RaspberriMatic.

Ich gehe davon aus, dass ihr das CUxD-Addon schon habt, falls es nicht der Fall sein sollte habe ich hier eine Anleitung geschrieben, wie das CUxD-Addon installiert werden kann.

jq-Addone installieren

jq ist ein Kommandozeilen-Programm, mit dem auf einen Stream von JSON-Daten verschiedene Filter angewandt werden können. Auf diese Weise können gewünschte Daten aus dem JSON-Stream extrahiert werden. Da alle Wetterdaten von AccuWeather im JSON-Format generiert werden, brauchen wir es, um die einzelne Wetterdaten aus JSON-Stream zu extragieren. Für Homematic CCU3 bzw. RaspberriMatic wird jq als Addon angebotet, dessen letztes Version hier heruntergeladen werden kann. Dort die Datei mit der Erweiterung „.tar.gz“ herunterladen. Danach kann über Systemsteuerung / Zusatzsoftware diese Datei ausgewäht und installiert werden.

API Key von AccuWeather generieren

Das Generieren von API-Key von AccuWeather habe ich schon in anderen meinen Artikeln beschrieben. Hier erfolgt es nach der gleichen Art und Weise. Ich erläutere es aber nochmal, damit der Artikel komplett wird.

Um an das API-Key zu kommen, solltet ihr euch bei developer.accuweather.com anmelden. Wenn die Anmeldung abgeschlossen wurde, solltet ihr in „My Apps“ gehen und dort „Add a New App“ klicken, dort alles ausfüllen und anschließend auf „Create App“ klicken. Das neue App wird erstellt.

Auf das erstellte App klicken, dort findet man das API-Key (s. Bild unten).

Das Benutzen von AccuWeatehr-API ist für private Zwecke kostenlos, es gibt allerdings die Begrenzung der Tagesaufrufe der API: 50 mal/Tag pro Account. Wenn man halbstündlich die Wetterdaten aktualisiert, verbraucht 24*2 = 48 Aufrufe/Tag , was noch unterhalb der Begrenzung liegt. Mit 2 Accounts (also 2 API-Keys) kann man die Wetterdaten in 15-Minutentakt aktualisieren.

Wetterstation ID suchen

Auf accuweather.com gehen, im Suchfeld der gewünschte Standort eingeben. In dem Adressenfeld des Browsers die 6-stellige Zahl merken, das ist das Wetterstation-ID.

Skript an der CCU anlegen

Das Abrufen und Verarbeiten der Wetterdaten erfolgt mit einem sh-Skript. Das Skript kann hier herunterladen werden:

Herunterladen

Befor das Skript auf die CCU eingespielt wird, soll in dem Skript ein Paar einstellungen vorgenommen werden. Dafür das heruntergeladene Skript in einem Textverarbeitungsprogramm (z. B. Windows Notepad) öffnen und dort im Folgenden beschriebenen Änderungen vornehmen.

In den folgenden Zeilen „XXXXX“ mit Wetterstation-ID eures Standortes ersetzen:

# Wetterstation-ID von AaccuWeather
WETTERSTATION_ID="XXXXX"

In den folgenden Zeilen „XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX“ mit eurem API-Key ersetzen:

# AccuWeather Api-Keys "apikey1" "apikey2" "apikey3" ... "apikeyX"
APIKEYCOUNT=1
APIKEY0="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
# ...
# APIKEYX="apikeyX"

Falls ihr mehrere API-Keys haben, können die alle eingetragen werden. Die werden nacheinander verwendet, wenn das vorherige API-Key wegen Limitierung der Aufrufe nicht funktioniert hat. Bei drei API-Keys siht es z. B. so aus:

# AccuWeather Api-Keys "apikey1" "apikey2" "apikey3" ... "apikeyX"
APIKEYCOUNT=3
APIKEY0="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
APIKEY1="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
APIKEY2="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
# ...
# APIKEYX="apikeyX"

Dabei soll bei APIKEYCOUNT die Anzahl der API-Keys eingetragen werden.

In den folgenden Zeilen kann das verwendete Einheitensystem eingestellt werden. Man kann entweder die metrische (metric) oder angloamerikanische (imperial) Einheitssystem verwenden. Voreingestellt ist das metrische (metric) Einheitensystem.

# Metric or Imperial system of units ?
UNIT_SYSTEM="metric"

Des Weiteren kann die Sprache der Wetterdaten eingestellt werden. Die voreinstellte Sprache ist deutsch. Die verfügbaren Sprachen können aus der Tabelle auf AccuWeather-Internetseite entnommen werden.

# String indicating the language in which to return the resource
# https://developer.accuweather.com/localizations-by-language
LANGUAGE="de-de"

Als Nächstes sollen die Variablennamen eingegeben werden, die auf der CCU erstellt werden und wo die Wetterdaten gespeichert werden. Es werden nur solche Wetterdaten an die CCU ünergeben, wo der CCU-Variablenname eingetragen ist. Im folgenden Beispiel werden die Variablen „[Wetter] Aktuell“, „[Wetter] Temperatur“ und „[Wetter] RealFeel-Temperatur“ erstellt und entsprechende Wetterdaten werden dort nach dem Skriptaufruf gespeichert.

# Enter names of Homematic variables for current weather. If nothing is entered, no value will be passed to CCU.

#(string) DateTime of the current observation, displayed in ISO8601 format.
LocalObservationDateTime=""

#(double) DateTime of the current observation, displayed as the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT).
EpochTime=""

#(string) Phrase description of the current weather condition. Displayed in the language set with language code in URL.
WeatherText="[Wetter] Aktuell"

#(double) Numeric value representing an image that displays the current condition described by WeatherText. May be NULL.
WeatherIcon=""

#(double) Numeric identifier unique to the local data provider. This parameter is not shown if there is not local source information to display.
LocalSource_Id=""

#(string) Name of the local data provider, displayed in the language set with language code in URL, if available. Otherwise, Name is displayed in English or the language in which the name was provided. This parameter is not shown if there is no local source information to display.
LocalSource_Name=""

#(string) Weather code provided by the local data provider. This weather code allows the current condition to be matched to icons provided by the local data provider instead of AccuWeather icons. This parameter is not shown if there is no local source information to display.
LocalSource_WeatherCode=""

#(boolean) Flag indicating the time of day (true=day, false=night)
IsDayTime=""

#(double) Rounded value in specified units. May be NULL.
Temperature_Value="[Wetter] Temperatur"

#(double) Patented AccuWeather RealFeel Temperature. Contains Metric and Imperial Values.
RealFeelTemperature_Value="[Wetter] RealFeel-Temperatur"

...

Wenn ihr alle Variablennamen von den Benötigten Wetterdaten eingetragen habt, seid ihr mit Konfiguration des Skriptes fertig. Das Skript kann auf die CCU aufgespielt werden. Um das Skript auf die CCU einspielen, soll die SSH Schnittstelle auf der CCU eingeschaltet werden. Dazu öffnen wir zuerst die WebUI der Homematic und gehen in die Systemsteuerung in den Punkt Sicherheit

Dort aktivieren wir temporär die SSH Schnittstelle und vergeben ein Passwort.

Danach muss die Skript-Datei mit einem FTP Programm (bpsw. FileZilla) auf die CCU geladen werden. Dazu öffnen wir ein FTP Programm und verbinden uns mit der CCU.

Dazu auf „Neuer Server“ Knopf drücken, es wird ein Servermanager aufgerufen. In dem Servermanager-Dialog auf „Neuer Server“ klicken und einen Servernamen eingeben. Im Textfeld Server soll die IP-Adresse der CCU eingetragen werden. Als Protokoll soll SFTP gewählt werden. Als verbindungsart „Normal“ auswählen. Im Textfeld „Benutzer“ soll „root“ eingetragen werden, im Textfeld „Passwort“ soll das Passwort für die SSH Schnittstelle eingetragen werden, das ich in WebUI gesetzt haben. Abschließend auf „Verbinden“ klicken, um die Verbindung zur CCU2 zu starten. Falls die Verbindung geklappt ist, gehen wir weiter.

Im FileZilla links in den Verzeichnis auf PC/Mac gehen, wo das Skript heruntergeladen wurde. Rechts in das Verzeichniss /usr/local/addons/cuxd/user/ gehen. Im FileZilla gehst du eine Verzeichnissebene höher, indem du auf „..“ doppelklickst.

Anschliessend überträgst du die Datei accuweather.sh aus dem lokalen Verzeichnis von deinem PC/Mac in das Verzeichnis /usr/local/addons/cuxd/user/accuweather.sh auf der CCU. Dass kann per Drag&Drop gemacht werden.

Das aufgespielte Skript soll ausführbar gemacht werden, in dem der Datei noch die korrekten Berechtigungen eingeräumt werden. Dies kann auch direkt im FileZilla gemacht werden. Dazu die Datei Eigenschaften anzeigen lassen und die Berechtigung 755 für alle Dateien vergeben.

Die korrekten Berechtigungen können auch in der Console mit folgendem Befehl vergeben werden: chmod +x /usr/local/addons/cuxd/user/accuweather.sh

Wenn alles erfolgreich ist kann man den SSH Zugang in der HM WebUI wieder deaktivieren.

CCU Konfigurieren

Das Sonoff-Gerät wird im Homatic System mit einem virtuellen CUxD-Gerät dargestellt. Mit diesem virtuellen Gerät wird das Skript zum Abrufen des Wetterdaten ausgeführt. Dazu ist ein neues CUxD Device anzulegen. Hierfür die CuXD-Console öffnen, die ist unter Startseite → Einstellungen → Systemsteuerung → CUx-Daemon zu finden.

cuxd02

Danach auf die Geräte-Seite wechseln. Dort das Gerät „(28) System“ auswählen. Als Funktion „Exec“ auswählen und als Control „Taster“ auswählen. Optional kann der Namen eingetragen und der Geräte-Icon ausgewählt werden.  Bei der Seriennummer kann die Vorgabe verwendet werden. Abschließend „Gerät auf der CCU erzeugen!“ drücken und zurück auf die CCU Web Oberfläche gehen.

Auf der CCU Oberfläche fügen wir nun ein neues Gerät hinzu, im Posteingang sollte das soeben erstelle neue Gerät bereits angezeigt werden. Es wird anschließend in der WebUI ein virtuelles Gerät mit 16 Kanälen erzeugt. Nun soll der zuvor erstellte CUxD-Gerät konfiguriert werden, dazu im WebUI in die Einstellungen->Geräte gehen, den zuvor erstellten CUxD-Gerät aussuchen und auf das „Einstellen“ drücken:

Dort müssen folgende Einstellungen vorgenommen werden (unten als Text zum Kopieren):

Hier ist das 1. Kanal für die aktuellen Wetterdaten zuständig, zusätzlich können die im Skript definierten Variablen mit einem langen Tastendruck erstellt werden. Im 2. Kanal wirden die Wetterdaten für 1-tägige Vorhersage abgefragt, des Weiteren können die im Skript definierten Variablen von der CCU mit einem langen Tastendruck gelöscht werden.

Folgende Geräteparameter sollen eingetragen werden:

  • PARAM1: /usr/local/addons/cuxd/user/accuweather.sh

Folgende Kanalparameter sollen eingetragen werden:

  • Kanal 1
    • KEY|CMD_SHORT: $_P1$ --curcond
    • KEY|CMD_LONG: $_P1$ --createvars
    • KEY|TIMER_PRESET: Hier die Zeit in Sekunden definieren, wie oft die Daten für das aktuelle Wetter abgefragt werden. Bei mir z. B. ist es 1800 s, was 30 min beträgt.
    • KEY|CMD_TIMER: $_P1$ --curcond
  • Kanal 2
    • KEY|CMD_SHORT: $_P1$ --forecast1d
    • KEY|CMD_LONG: $_P1$ --deletevars
    • KEY|TIMER_PRESET: Hier die Zeit in Sekunden definieren, wie oft die Daten für das 1-tagige Wettervorhersage abgefragt werden. Bei mir z. B. ist es 7200 s, was 2 h beträgt.
    • KEY|CMD_TIMER: $_P1$ --forecast1d

Bei den Werten KEY|TIMER_PRESET soll die maximale Anzahl der API-Aufrufe pro Tag beachtet werden. Mit einem Api-Key ist nur 50 API-Aufrufe pro Tag möglich.

Abschließend in „Status und Bedienung“ → „Geräte“ gehen, den soeben erstellten Gerät wählen und beim 1. Kanal den „langen Tastendruck“ anklicken, somit die im Skript definierten Variablen auf der CCU automatisch erstellt werden. Mit den kurzen Tastendrücken können die Wetterdaten manuell oder aus anderen Programmen abgerufen werden, sonst passiert es automatisch entsprechend euren „KEY|TIMER_PRESET“ Einstellungen.

Somit sind wir fertig. Des Weiteren wollte ich noch anmerken, dass es sich um eine Betaversion des Skripts handelt. Somit sind die Fehler nicht ausgeschlossen. Wenn ihr welch findet, bitte meldet die in den Kommentaren.

Übrigens in Favoriten kann man sich eine schöne Ansicht der Wetterdaten legen:

Für Anmerkungen, Vorschläge, Hinweise, Anregungen und konstruktive Kritik zu diesem Artikel bin ich euch dankbar!

Das gesamte CCU-Programm

Falls dieser Artikel euch geholfen hat oder ihr den nützlich findet, würde ich mich über eine Tasse Kaffee freuen, die ihr oben rechts für mich bestellen können. Vielen Dank.

Dieser Beitrag hat 6 Kommentare

  1. Hi! First of all: thank you for all your hard work! I truly appreciate!
    I had the chance to test your script and followed every step like documented BUT I have some trouble during the Variable creation.
    We speak about: CCU3, Firmware 3.45.7. Executing the script by long press didn’t work so I switched to SSH and tried to execute the script by /bin/sh accuweather.sh –createvars which leads to the error: accuweather.sh: line 565: syntax error: unexpected word (expecting „in“)

    Do you have an idea to share maybe?

  2. same thing here on raspberrymatic latest release and CUxD 2.3.1

    tried commenting out but did not succeed 😉

    script details:
    # Version: 1.0.0
    # Date: 2019-06-18

  3. Hi,

    gibt es hier schon etwas neues? Ich stoße auf den selben Fehler… Danke 🙂

  4. Hallo,
    Danke für das tolle Projekt!
    Leider erhalte auch ich den selben Fehler -> die Systemvariablen bleiben leer.

  5. Bei mir werden nach Abschluss und Betätigen des „langen Tastendruck“ überhaupt gar keine Variablen angelegt oder wo finde ich diese? Das Ganze scheint leider irgendwie überhaupt nicht zu funktionieren. Schade! 🙁

  6. Da der Artikel ja noch nicht sehr alt ist, wundert es mich etwas das sich der Autor nicht äussert, da es ja schon einige Kommentare gibt, die darauf verweisen das dieses Vorgehen nicht funktioniert.
    Vielleicht macht der Autor gar nichts mehr in dieser Richtung?
    Ich wäre für alternative Lösungen sehr dankbar

Schreibe einen Kommentar

Menü schließen