Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:sensors:sensorless_outdoor_temp

Außentemperatur ohne Sensor

Gerade zur Auswertung von Heizkurven oder dem Verbrauch von Heizungsanlagen ist eine Aufzeichnung der Außentemperatur sinnvoll.

Das ist auch ohne weitere Hardware möglich mittels Abfrage eines Online-Wetterdienstes, z.B. beim Gratis-Tool OpenWeatherMap.

Die Daten werden mittels Python-Skript als JSON-File von OpenWeatherMap abgerufen, interpretiert und per API-Aufruf an die Volkszähler-Datenbank gesendet. Der Aufruf der Python-Skripts erfolgt z.B. mittels Cronjob auf dem Rechner mit der Volkszähler-Installation.

Auf openweathermap.org muss ein Account angelegt werden, um eine „Application ID“ für die Legitimierung der Wetterabfrage zu erzeugen. 60 Abfragen pro Minute sind im kostenfreien Paket inklusive, was mehr als ausreichend ist. Die City-ID im Skript muss auf OpenWeatherMap ermittelt werden, z.B. hier: https://openweathermap.org/find Die City-ID taucht nach Suche und Auswahl der Stadt in der URL auf, z.B. https://openweathermap.org/city/2867714

Zuerst einen Kanal für die Außentemperatur übers Volkszaehler-Webfrontend anlegen.

Das folgende Python-Skript benötigt das Paket requests; sollte es noch nicht vorhanden sein, lässt es sich auf dem Volkszähler-Image wie folgt nachinstallieren:

apt-get install python3-requests

Das vollständige Skript getWetter.py dann z.B. unter /home/pi/bin abspeichern:

getWetter.py
#!/usr/bin/python3
from requests import get,post
 
url = "http://api.openweathermap.org/data/2.5/weather?id=2845222&APPID=a9a65433e56edeee32db51a8f283a03f&units=metric"
 
try:
    resp = get(url)
    data = resp.json()
except:
    print("URL load failed")
    raise SystemExit(2)
 
temp = float(data["main"]["temp"])
#pres = float(data["main"]["pressure"])
#humi = float(data["main"]["humidity"])
 
try:
    post("http://localhost/middleware/data/70919b00-c5f8-11ea-8152-ed29ae9e5e38.json", data={"value" : temp })
    #post("http://localhost/middleware/data/<CHANNEL-UUID>.json", data={"value" : pres })
    #post("http://localhost/middleware/data/<CHANNEL-UUID>.json", data={"value" : humi })
except:
    print("Couldn't post to VZ Middleware.")
    raise SystemExit(3)

Wer möchte kann auch Luftdruck und Luftfeuchte importieren, dazu einfach die auskommentierten Zeilen entsprechend aktivieren.

Nun das Skript ausführbar machen:

chmod 755 /home/pi/bin/getWetter.py

Und noch einen Cronjob einrichten:

crontab -e

Diese Zeile ergänzen für eine Abfrage alle 5 Minuten:

*/5 * * * * /home/pi/bin/getWetter.py
Möchte man mögliche Fehlermeldungen im systemd-journal haben, ist das per systemd-cat möglich, das erspart dann auch die Emails, die Cron andernfalls versendet:
*/5 * * * * systemd-cat /home/pi/bin/getWetter.py
Wer anstelle der Daten von Openweathermap lieber einzelne Wetterstationen abfragen möchte, kann dies z.B. über den Dienst von Weather.com/Wunderground tun. Die Abfrage ist der hier aufgeführten recht ähnlich, die Auswertung allerdings etwas kniffliger.

.

hardware/channels/sensors/sensorless_outdoor_temp.txt · Zuletzt geändert: 2020/07/17 12:37 von jau