Hallo liebe Freunde der Wetterbeobachtung und Dokumentation. In inzwischen über 2.200 Beiträgen erklären @SBorg und @a200 wie man eine Wetterstation mit dem ioBroker mit Hilfe eines Linux-Shell-Skriptes verbinden kann.
Meine Wetterstation ist eine Sainlogic FT 0300. Die Station kann mit bis zu 8 externen Sensoren der Art DP50 ausgestattet werden.
In diesem Beitrag versuche ich Euch zu erklären, wie eine alternative Installation des Skriptes von @SBorg für Wetterstationen, die nicht mit der WSView App arbeiten (z.B. Sainlogic FT0300), möglich ist.
Auf der GitHub-Seite beschreibt @SBorg die notwendigen Schritte zur Installation seines Skriptes zur Nutzung der Wetterstationen mit ioBroker. Das Hauptaugenmerk liegt hierbei auf den Stationen, die ihre Daten mit Hilfe der WS-View App an einen vom Nutzer bestimmten alternativen Server (in diesem Fall ein eigener Linux-Server, auf dem dann das Script läuft) weiterleitet.
Es existieren nun verschiedene Wetterstationen, die zwar ihre Daten über eine Verbindung zum Internet im entsprechenden Format an wunderground.com weiterleiten. Diese erlauben aber nicht die Nutzung der WS-View App und somit nur über einen Umweg die Weiterleitung der Daten an den eigenen Server.
Jetzt wird es sehr technisch, ich denke aber interessant für Alle, die versuchen Ihre Station auch mit ioBroker zu verbinden. Beispielhaft besitze ich die Sainlogic FT 0300. Diese sendet ihre Daten an xxx.wunderground.com. Es gibt keinen direkten Weg der Umleitung der Daten wie bei den anderen Wetterstationen über die Nutzung der WS-View App.
Die Station stellt keinen eigenständigen Computer dar, auf dem man wie auf einer Linux- oder Windows-Maschine eine hosts-Datei erstellen und editieren könnte. Möchte der Computer mit einer bestimmten Adresse z.B. xxx.wunderground.com Kontakt aufnehmen, so stellt der Dynamic Name Server (kurz DNS) dafür die Adresse 104.84.57.166 zur Verfügung. In Windows 10 findet sich die „hosts-Datei“ unter %windir%\system32\drivers\etc und sie hat den simplen Namen „hosts“. Die Datei kann nur mit Administrator- oder root-Rechten bearbeitet werden.
Editiert man nun die Datei und erstellt einen Eintrag der Art
192.168.178.1 wunderground.com,
speichert die Datei ab und startet die Maschine neu und gibt anschließend in seinem Browser „wunderground.com“ als Adresse ein, so leitet der Eintrag in der hosts-Datei die Anfrage am DNS vorbei an die eigene Adresse 192.168.178.1. Bei mir komme ich z.B. damit auf meine Fritz-Box.
Die Möglichkeit der Umleitung über die hosts-Datei können wir uns nun zunutze machen. Wir müssen nur erreichen, dass all unser Traffic aus dem eigenen Netzwerk über einen vorgeschalteten DNS geht, der wiederum über eine hosts-Datei eine bestimmte angesurfte Adresse umleiten kann – und das wird in unserem Fall eine Maschine sein, auf der Pi-hole läuft.
Ich möchte hier nicht auf die genaue Funktion und die Eigenschaften von Pi-hole eingehen. Nur so viel, dass Pi-hole die Funktion des DNS übernimmt und die Erstellung einer hosts-Datei auf dieser Maschine möglich ist. Unter https://pi-hole.net/ wird die Installation unter Docker oder jedem anderen Linux-System genau erklärt. Die eigentliche Aufgabe von Pi-hole ist die Filterung von Werbung und das Blockieren derselben auf allen Seiten, die jedwedes Gerät in unserem Heim-Netzwerk ansurfen will. Es kommt hierbei aber auch zur Blockierung verschiedener Weiterleitungen. Die Suche unter google.de und das Ansurfen von bestimmten Such-Ergebnissen funktioniert nicht mehr zuverlässig, da Pi-hole sie blockiert. Dies lässt sich allerdings in den neuesten Versionen von Pi-hole komfortabel umgehen. Die aktuellste Version von Pi-hole erlaubt das Eingeben der MAC-Adresse z.B. meiner Windows-Maschine, die fortan von der Blockierung der Werbung ausgenommen wird. Alles läuft weiter so, als wäre Pi-hole nicht existent. Jedes Gerät in meinem Heim-Netzwerk kann so von der Blockierung ausgenommen werden. Die Installation von Pi-hole verlangsamt den Zugriff auf das Internet über das heimische Netzwerk in nicht erfühl- oder erfahrbarem Maß! Im Gegenteil vermag die Blockierung der Werbung bestimmte Zugriffe sogar zu beschleunigen.
Die meisten Probleme hatte ich mit den für Pi-hole notwendigen Einträgen in meiner Fritz!Box. Deshalb werde ich sie hier exemplarisch zeigen. Zuvor noch ein Hinweis: Sind die Einträge in der Fritz!Box entsprechend erstellt und der Rechner, auf dem Pi-hole läuft fällt aus, wird runtergefahren oder stürzt ab, kommt kein anderer Rechner mehr ins Internet bis die Einträge in der Fritz!Box zurückgestellt sind. Deshalb der gute Rat, die alten Einstellungen der Fritz!Box (oder sonstigen Routers) unbedingt zu dokumentieren oder am besten gleich unter System-Sicherung eine solche anzulegen!
Bei mir läuft Pi-hole auf einem LXC unter Proxmox mit lediglich einer CPU und vollkommen überdimensionierten 8GB Plattenspeicher sowie 1GB RAM auf einem NUC 24/7 vollkommen stabil.
-
Die lokale Installation meines Pi-hole läuft unter Proxmox in einem LXC mit der gezeigten Adresse. Hier die Einstellungen von Pi-hole
System:
DNS:
DHCP:
-
Die Einstellungen meiner FritzBox 7590 mit ipV6 Unterstützung (VDSL 100Mbit Netcologne)
Eintrag des Alternativen DNSv4 Server auf die Adresse 192.168.178.10 des Pi-hole
Die nächste Einstellung findet sich unter „Heimnetz-Netzwerkeinstellungen“ ganz unten unter IP-Adressen der Punkt „IPv4-Konfiguration“
Und der Punkt „IPv6-Konfiguration“
!!! Beachte: die hier angezeigte Adresse unter „DNSv6-Server im Heimnetz“ beginnend mit fd00 ist dem System-Eintrag des Pi-hole auf dem ersten Bild (rot umkringelt) zu entnehmen
Mit diesen Einstellungen des Pi-hole und der Fritz!Box sollte der Zugang ins Internet jetzt funktionieren. Wir werden jetzt noch einige Änderungen auf dem Pi-hole vornehmen müssen, darum unbedingt sicherstellen, dass ein SSH-Zugang z.B. über Putty auf die Maschine möglich ist, unter der Pi-hole läuft.
-
Als erstes ermitteln wir auf der FritzBox die Adresse, mit der die Wetterstation mit unserem Netzwerk verbunden ist:
Ich empfehle, der Station immer die gleiche Adresse zuzuweisen und ihr einen eindeutigen Namen zu geben (der Name wird im Folgenden wichtig):
-
Wir müssen nun mit Hilfe des Pi-hole herausfinden, zu welcher Adresse im WWW unsere Station die Daten schicken will:
Unter „Query Log“ geben wir rechts oben im Feld „Search“ den Namen der Station (hier „sain“) ein. Merkwürdigerweise funktioniert das nicht mit der IP der Station im Heimnetzwerk.
Das angezeigte Ergebnis sind die beiden Adressen „rtupdate.wunderground.com“ und „api.weathercloud.net“. Erstere Adresse werden wir gleich umbiegen, die zweite Adresse dient weiterhin der möglichen Weiterleitung der Daten an weathercloud.net entsprechend der Anleitung von @Sborg auf GitHub.
Zwei Dinge sind jetzt notwendig:
- Der Standard-Port vom Pi-hole, in meinem Fall also 192.168.178.10 ist der Port 80. Port 80 müssen wir später aber dem Skript von @SBorg zuweisen. Das Skript verwendet den Standart-Port zum Zugriff auf Pi-hole über die gleich mit der hosts-Datei umgeleitete Adresse. Deshalb ändern wir den Port für den Zugriff auf Pi-hole auf 85.
Mit Putty auf dem Pi-hole Server ändern wir einen Eintrag in der Datei /etc/lighttpd/lighttpd.conf
!!! man verzeihe mir, die Änderungen und Eingaben im Folgenden als root dokumentiert zu haben!!!
~root@Pi-hole:~#nano /etc/lighttpd/lighttpd.conf
# Pi-hole: A black hole for Internet advertisements
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# Lighttpd config for Pi-hole
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
###############################################################################
# FILE AUTOMATICALLY OVERWRITTEN BY PI-HOLE INSTALL/UPDATE PROCEDURE. #
# ANY CHANGES MADE TO THIS FILE AFTER INSTALL WILL BE LOST ON THE NEXT UPDATE #
# #
# CHANGES SHOULD BE MADE IN A SEPARATE CONFIG FILE: #
# /etc/lighttpd/external.conf #
###############################################################################
server.modules = (
"mod_access",
"mod_accesslog",
"mod_auth",
"mod_expire",
"mod_compress",
"mod_redirect",
"mod_setenv",
"mod_rewrite"
)
server.document-root = "/var/www/html"
server.error-handler-404 = "/Pi-hole/index.php"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
accesslog.filename = "/var/log/lighttpd/access.log"
accesslog.format = "%{%s}t|%V|%r|%s|%b"
Ganz unten unter „server.port“ ändern wir 80 in 85 und speichern die Datei ab. Anschließend den Pi-hole Server neu starten. Zukünftig ist die Oberfläche des Pi-hole dann unter 192.168.178.10:85/admin zu erreichen.
!!!Wichtig ein Detail!!!: nach einem Update des Pi-hole mit dem Befehl „Pi-hole -up“ muss der Port wieder von 80 auf 85 gesetzt werden. Die hosts-Datei wird nicht geändert und überlebt ein Pi-hole update.
- Wir editieren die hosts-Datei des Pi-hole wie folgt:
root@Pi-hole:~# nano /etc/hosts
192.168.178.10 rtupdate.wunderground.com
127.0.0.1 localhost
127.0.0.1 Pi-hole.local
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# --- BEGIN PVE ---
192.168.178.10 Pi-hole.nuc.local Pi-hole
# --- END PVE ---
Wichtig ist der Eintrag in der ersten Zeile. In meinem Fall lasse ich das Script auf meinem Pi-hole Server, also 192.168.178.10, laufen. Die Umleitung von rtupdate.wunderground.com erfolgt also nun auf diese Adresse. Die Datei wird gespeichert und der Pi-hole wiederum neu gestartet.
Wir prüfen von unserem Linux-Pi-hole-Rechner aus, ob wir den Pi-hole richtig konfiguriert haben:
Wir geben ein:
ping rtupdate.wunderground.com
Funktioniert alles, dann ergibt sich ein ping auf die Adresse 192.168.178.10.
!!! Wichtig zu wissen ist, dass wir das Skript auf dem Pi-hole-Server installieren und das Script die Daten dann an den ioBroker durchreicht!!!
Geschafft!!! Die Voraussetzungen für die Anwendung des Scriptes von @SBorg sind erfüllt!!!
Wir wenden uns der Anleitung von @SBorg auf GitHub zu und installieren das Skript wie vorgeschlagen:
- Installation in einem Verzeichnis z.B. /home/Wetterstation
- Datei wetterstation.sh ausführbar machen wie beschrieben
- Datei wetterstation.js unter Skripte des ioBrokers als Javascript einfügen und einmalig ausführen, um damit alle Datenpunkte anzulegen
- Wir installieren unter ioBroker den Adapter simple-api, in dem wir nichts Besonderes konfigurieren müssen
- Wir editieren die Datei „wetterstation.conf“ auf dem Pi-hole wie folgt (Ausschnitt):
### Settings V2.2.0 -----------------------------------------------------------
#Debuging einschalten [true/false] / default: false / Ausgabe der Messwerte
debug=false
#ioBroker-IP und Port der Simple-Restful-API [xxx.xxx.xxx.xxx:xxxxx]
IPP=192.168.178.6:8087
#Protokoll der Wetterstation [1/2/9] / 1=Wunderground ; 2=Ecowitt ; 9=Sainlogic Profi / default: 1
WS_PROTOKOLL=9
#Anzahl der vorhandenen DP50 Sensoren / default: 0
ANZAHL_DP50=0
#HTTP Anzahl der vorhandenen DP100 Sensoren / default: 0
ANZAHL_DP100=0
#Protokoll (HTTP oder HTTPS) / default: HTTP
WEB=HTTP
#User-Authentifizierung falls benutzt; sonst leer lassen
AUTH_USER=
AUTH_PASS=
#Port der Wetterstation
WS_PORT=80
#Pollintervall der Wetterstation in Sekunden (minimal 16 Sekunden)
WS_POLL=30
#Name/ID der Wetterstation
WS_ID=XXXXXXX
#wo sollen die Datenobjekte abgelegt werden
PRE_DP=0_userdata.0.Wetterstation
- Unter IPP= tragen wir die Adresse des ioBrokers mit dem Port von simple-api.0 ein
- Unter WS_PROTOKOLL= tragen wir 9 für die Station ein, die nicht die WS-View App unterstützt
- Unter WS_PORT= tragen wir den Standard Port 80 des Pi-hole Servers ein
Unter WS_ID=XXXXXXX tragen wir die Stationsadresse, die wir von wunderground bei der Inbetriebnahme und Anmeldung auf wunderground.com erhalten haben, ein z.B. WS_ID=INRWCOLO2 (beispielhafte Adresse einer Station in der Kölner Innenstadt)
Wenn wir jetzt alles richtig erledigt haben, dann sollte ein
root@PiHole:/home/Wetterstation# ./wetterstation.sh --debug
Connection to 192.168.178.6 8087 port [tcp/*] succeeded!
Listening on [0.0.0.0] (family 0, port 80)
Connection from 192.168.178.62 18015 received!
/home/Wetterstation/wetterstation.sub: line 274: [: : integer expression expected
/home/Wetterstation/wetterstation.sub: line 274: [: : integer expression expected
/home/Wetterstation/wetterstation.sub: line 274: [: : integer expression expected
/home/Wetterstation/wetterstation.sub: line 274: [: : integer expression expected
[
{
"id": "0_userdata.0.Wetterstation.Innentemperatur",
"val": 24.38
},
{
"id": "0_userdata.0.Wetterstation.Aussentemperatur",
"val": 4.55
},
{
"id": "0_userdata.0.Wetterstation.Taupunkt",
"val": 2.27
},
{
"id": "0_userdata.0.Wetterstation.Gefuehlte_Temperatur",
"val": -1.94
},
{
"id": "0_userdata.0.Wetterstation.Innenfeuchtigkeit",
"val": 36
},
{
"id": "0_userdata.0.Wetterstation.Aussenfeuchtigkeit",
"val": 85
},
{
"id": "0_userdata.0.Wetterstation.Wind",
"val": 4.98
},
{
"id": "0_userdata.0.Wetterstation.Wind_max",
"val": 6.11
},
{
"id": "0_userdata.0.Wetterstation.Windrichtung",
"val": 34
},
{
"id": "0_userdata.0.Wetterstation.Druck_absolut",
"val": 994.58
},
{
"id": "0_userdata.0.Wetterstation.Druck_relativ",
"val": 1017.95
},
{
"id": "0_userdata.0.Wetterstation.Regen_Tag",
"val": 2.7
},
{
"id": "0_userdata.0.Wetterstation.Regen_Woche",
"val": 76.7
},
{
"id": "0_userdata.0.Wetterstation.Regen_Monat",
"val": 18.7
},
{
"id": "0_userdata.0.Wetterstation.Regen_Jahr",
"val": 0
},
{
"id": "0_userdata.0.Wetterstation.Sonnenstrahlung",
"val": 0.14
},
{
"id": "0_userdata.0.Wetterstation.UV_Index",
"val": 0
},
{
"id": "0_userdata.0.Wetterstation.Zeitstempel",
"val": "06.02.2021 17:46:21"
},
{
"id": "0_userdata.0.Wetterstation.DP50.7.Temperatur",
"val": 6.22
},
{
"id": "0_userdata.0.Wetterstation.DP50.7.Feuchtigkeit",
"val": 80
},
{
"id": "0_userdata.0.Wetterstation.Regenstatus",
"val": ""
},
{
"id": "0_userdata.0.Wetterstation.UV_Belastung",
"val": "keine"
},
{
"id": "0_userdata.0.Wetterstation.Windrichtung_Text",
"val": "NO"
}
]
Messwerteblock: 24.38 4.55 2.27 -1.94 36 85 4.98 6.11 34 994.58 1017.95 2.7 76.7 18.7 0 0.14 0 06.02.2021%2017:46:21 temp7f 6.22 humidity7 80
Nicht alle Werte werden unterstützt (abhängig vom Modell der Wetterstation und dem verwendeten Protokoll)!
Temperatur Innen : 24.38 °C
Temperatur Aussen : 4.55 °C
Taupunkt : 2.27 °C
Gefühlte Temperatur : -1.94 °C
Luftfeuchte Innen : 36 %
Luftfeuchte Aussen : 85 %
Windgeschwindkeit : 4.98 km/h
Windböengeschwindkeit : 6.11 km/h
max. Windböe : km/h
Windrichtung : 34 °
Windrichtung : NO
Luftdruck absolut : 994.58 hPa
Luftdruck relativ : 1017.95 hPa
Regenrate : mm/h
Regenstatus :
Regen seit Regenbeginn : mm
Regen Stunde : mm
Regen Tag : 2.7 mm
Regen Woche : 76.7 mm
Regen Monat : 18.7 mm
Regen Jahr : 0 mm
Regen Gesamt : mm
Sonnenstrahlung : 0.14 W/m²
UV-Index : 0
Zeitstempel : 06.02.2021%2017:46:21
Firmware :
Batteriestand: :
Gateway-Modell :
Zusatzsensoren:
temp7f : 6.22
humidity7 : 80
Datenstring für ioBroker:
0_userdata.0.Wetterstation.Innentemperatur=24.38&0_userdata.0.Wetterstation.Aussentemperatur=4.55&0_userdata.0.Wetterstation.Taupunkt=2.27&0_userdata.0.Wetterstation.Gefuehlte_Temperatur=-1.94&0_userdata.0.Wetterstation.Innenfeuchtigkeit=36&0_userdata.0.Wetterstation.Aussenfeuchtigkeit=85&0_userdata.0.Wetterstation.Wind=4.98&0_userdata.0.Wetterstation.Wind_max=6.11&0_userdata.0.Wetterstation.Windrichtung=34&0_userdata.0.Wetterstation.Druck_absolut=994.58&0_userdata.0.Wetterstation.Druck_relativ=1017.95&0_userdata.0.Wetterstation.Regen_Tag=2.7&0_userdata.0.Wetterstation.Regen_Woche=76.7&0_userdata.0.Wetterstation.Regen_Monat=18.7&0_userdata.0.Wetterstation.Regen_Jahr=0&0_userdata.0.Wetterstation.Sonnenstrahlung=0.14&0_userdata.0.Wetterstation.UV_Index=0&0_userdata.0.Wetterstation.Zeitstempel=06.02.2021%2017:46:21&0_userdata.0.Wetterstation.DP50.7.Temperatur=6.22&0_userdata.0.Wetterstation.DP50.7.Feuchtigkeit=80&0_userdata.0.Wetterstation.Regenstatus=&0_userdata.0.Wetterstation.UV_Belastung=keine&0_userdata.0.Wetterstation.Windrichtung_Text=NO
DATA von Wetterstation:
GET /weatherstation/updateweatherstation.php?ID=xxxxxx&PASSWORD=xxxxxx&indoortempf=75.9&indoorhumidity=36&tempf=40.2&humidity=85&temp7f=43.2&humidity7=80&dewptf=36.1&windchillf=28.5&absbaromin=29.37&baromin=30.06&windspeedmph=3.1&windgustmph=3.8&winddir=34&windspdmph_avg2m=2.9&winddir_avg2m=226&windgustmph_10m=2.5&windgustdir_10m=126&dailyrainin=0.11&weeklyrainin=3.02&monthlyrainin=0.74&yearlyrainin=0&solarradiation=0.14&UV=0&dateutc=2021-2-6%2017:46:21&action=updateraw&realtime=1&rtfreq=5& HTTP/1.0
Debug VAR:
Installationsverzeichnis: /home/Wetterstation
IPP: 192.168.178.6:8087 WS_PORT: 80 WS_POLL: 30 PRE_DP: 0_userdata.0.Wetterstation
WEB: HTTP WS_PROT: Sainlogic Pro DP50/60/100: 1 | 0 | 0
Script-Version: V2.3.0 Config-Version: V2.3.0 Sub-Version: V2.3.0
nach spätestens 30 Sekunden erste Daten erbringen
Viel Erfolg!!!
Zum Schluss noch folgender Hinweis:
Spezifische Fragen zum Wetterstations-Script von @SBorg stellt bitte in seinem thread https://forum.iobroker.net/topic/28384/linux-shell-skript-wlan-wetterstation
Spezifische Fragen zu den Einstellungen von Pi-hole zur Benutzung mit dem Script für eine alternative Wetterstation, die nicht die WS-View App zur Einstellung verwendet könnt Ihr gerne hier stellen. Ich bin sicher, dass @SBorg, @a200 und alle Anderen auch hier gerne Hilfe leisten.
!!! Vielen Dank an @Sborg, @a200 und viele Andere, die mir halfen, das Script auf meinen Maschinen mit meiner Station zum Laufen zu bekommen !!!