NEWS
WLAN-Wetterstation in ioBroker direkt einbinden
-
Hi,
ich kann da auch nur raten (von wegen hab keine Station )
@Berchemer sagte in WLAN-Wetterstation in ioBroker direkt einbinden:Als ServerIP habe ich die IP meines MINT-Servers mit vorangestelltem "http://" eingetragen.
Zumindest würde ich als ServerIP implizieren, dass er hier xxx.xxx.xxx.xxx erwartet. http://xxx.xxx.xxx.xxx ist eine URL, dann sollte da auch ServerURL stehen wenn er dies erwartet (aber man weiß ja nie...).
StationID ist IMO frei wählbar, nur dass man bei mehreren (oder von Nachbarn) diese unterscheiden kann. Wird hier aber, genauso wie das Passwort, später nicht ausgewertet/benötigt. Die Station sendet die Daten ja "freiwillig" (könnte man im bash-Skript aber auch evaluieren, nicht dass einer mal falsche Messdaten schickt ).
Der Port ist nur der auf dem gesendet wird. Er muss auf deinem Mint frei sein und netcat (nc) muss dann auf diesem lauschen.Pauschal könnten auf dem Mint auch Ports geblockt sein, oder dein WLAN-AP/-Router reicht sie nicht weiter.
-
@Berchemer hier meine Einstellungen:
Lasse das http weg und wähle einen anderen Port, da 8087 vom Simple-Adapter belegt sein wird.Path wie vorgegeben, StationID und Key kannst leer lassen, ich hab´s belegt - muss nicht sein.
Versuchs mal, wenns klappt kann ich das Script reinstellen, ist zwar sicher verbesserungswürdig aber es läuft.
-
@SBorg sagte in WLAN-Wetterstation in ioBroker direkt einbinden:
Zumindest würde ich als ServerIP implizieren, dass er hier xxx.xxx.xxx.xxx erwartet. http://xxx.xxx.xxx.xxx ist eine URL
Absolut richtig
-
@Latzi sagte in WLAN-Wetterstation in ioBroker direkt einbinden:
Versuchs mal, wenns klappt kann ich das Script reinstellen, ist zwar sicher verbesserungswürdig aber es läuft.
Schöner wäre natürlich ein Adapter, aber da habe ich schon x-mal angefangen, und genauso oft wieder aufgehört
Man könnte es natürlich auch optimieren, wie bspw. eine Funktion nutzen, um die wiederkehrende Konvertierung von °F nach °C durchzurechnen und, und, und... -
Habe mal auf Port 8096 geändert und das http:// weggelassen und habe tatsächlich Daten erhalten.
DankeJetzt muss ich mal den Weg von Latzi nachverfolgen, um zu sehen, was ich noch umsetzen muss
-
hier mal das Script:
#!/bin/bash ###Settings debug=true #[true/false] IPP=10.0.0.210:8087 #ioBroker-IP:Port PRE_DP=javascript.0.Wetterstation #Datenpunkt DP_TEMP_INNEN=${PRE_DP}.Innentemperatur DP_TEMP_AUSSEN=${PRE_DP}.Aussentemperatur DP_TAUPUNKT=${PRE_DP}.Taupunkt DP_CHILL=${PRE_DP}.Chillfaktor DP_FEUCHTE_INNEN=${PRE_DP}.Innenfeuchtigkeit DP_FEUCHTE_AUSSEN=${PRE_DP}.Aussenfeuchtigkeit DP_WIND=${PRE_DP}.Wind DP_WIND_MAX=${PRE_DP}.Wind_max DP_WIND_DIR=${PRE_DP}.Windrichtung DP_DRUCK_ABS=${PRE_DP}.Druck_absolut DP_DRUCK_REL=${PRE_DP}.Druck_relativ DP_REGEN_AKT=${PRE_DP}.Regen_aktuell DP_REGEN_TAG=${PRE_DP}.Regen_Tag DP_REGEN_WOCHE=${PRE_DP}.Regen_Woche DP_REGEN_MONAT=${PRE_DP}.Regen_Monat DP_SONNE=${PRE_DP}.Sonnenstrahlung DP_UV_INDEX=${PRE_DP}.UV_Index DP_DATUM=${PRE_DP}.Datum DP_ZEIT=${PRE_DP}.Zeit # Endlosschleife while true do #Datenzeile von Wetterstation abholen und Zeile mit GET am Anfang rausfiltern DATA=`nc -lv 80|grep GET` #DATA zerlegen #Innentemperatur: TEMP_INNEN=$(echo ${DATA}|cut -d'&' -f3 | cut -d"=" -f2) TEMP_INNEN=`echo "scale=2;(${TEMP_INNEN}-32)*5/9"|bc -l` #Aussentemperatur: TEMP_AUSSEN=$(echo ${DATA}|cut -d'&' -f4 | cut -d"=" -f2) TEMP_AUSSEN=`echo "scale=2;(${TEMP_AUSSEN}-32)*5/9"|bc -l` #Taupunkt: TAUPUNKT=$(echo ${DATA}|cut -d'&' -f5 | cut -d"=" -f2) TAUPUNKT=`echo "scale=2;(${TAUPUNKT}-32)*5/9"|bc -l` #Chill-Faktor: CHILL=$(echo ${DATA}|cut -d'&' -f6 | cut -d"=" -f2) CHILL=`echo "scale=2;(${CHILL}-32)*5/9"|bc -l` #Innenluftfeuchte: FEUCHTE_INNEN=$(echo ${DATA}|cut -d'&' -f7 | cut -d"=" -f2) #Aussenluftfeuchte: FEUCHTE_AUSSEN=$(echo ${DATA}|cut -d'&' -f8 | cut -d"=" -f2) #Windgeschwindigkeit: WIND=$(echo ${DATA}|cut -d'&' -f9 | cut -d"=" -f2) WIND=`echo "scale=2;${WIND}*16094/10000"|bc -l` #Windgeschwindigkeit max: WIND_MAX=$(echo ${DATA}|cut -d'&' -f10 | cut -d"=" -f2) WIND_MAX=`echo "scale=2;${WIND_MAX}*16094/10000"|bc -l` #Windrichtung: WIND_DIR=$(echo ${DATA}|cut -d'&' -f11 | cut -d"=" -f2) #Luftdruck absolut: DRUCK_ABS=$(echo ${DATA}|cut -d'&' -f12 | cut -d"=" -f2) DRUCK_ABS=`echo "scale=2;${DRUCK_ABS}*33864/1000"|bc -l` #Luftdruck relativ: DRUCK_REL=$(echo ${DATA}|cut -d'&' -f13 | cut -d"=" -f2) DRUCK_REL=`echo "scale=2;${DRUCK_REL}*33864/1000"|bc -l` #Regen aktuell: REGEN_AKT=$(echo ${DATA}|cut -d'&' -f14 | cut -d"=" -f2) REGEN_AKT=`echo "scale=1;${REGEN_AKT}*254/10"|bc -l` #Regen Tag: REGEN_TAG=$(echo ${DATA}|cut -d'&' -f15 | cut -d"=" -f2) REGEN_TAG=`echo "scale=1;${REGEN_TAG}*254/10"|bc -l` #Regen Woche: REGEN_WOCHE=$(echo ${DATA}|cut -d'&' -f16 | cut -d"=" -f2) REGEN_WOCHE=`echo "scale=1;${REGEN_WOCHE}*254/10"|bc -l` #Regen Monat: REGEN_MONAT=$(echo ${DATA}|cut -d'&' -f17 | cut -d"=" -f2) REGEN_MONAT=`echo "scale=1;${REGEN_MONAT}*254/10"|bc -l` #Sonnenstrahlung: SONNE=$(echo ${DATA}|cut -d'&' -f18 | cut -d"=" -f2) #UV-Index: UV_INDEX=$(echo ${DATA}|cut -d'&' -f19 | cut -d"=" -f2) #Datum und Zeit abfragen DAT_ZEIT=`timedatectl |grep Local` DATUM=$(echo ${DAT_ZEIT}|cut -d' ' -f4) UHRZEIT=$(echo ${DAT_ZEIT}|cut -d' ' -f5) #Daten an ioB schicken curl --data "${DP_TEMP_INNEN}=$TEMP_INNEN&${DP_TEMP_AUSSEN}=$TEMP_AUSSEN&${DP_TAUPUNKT}=$TAUPUNKT&${DP_CHILL}=$CHILL&${DP_FEUCHTE_INNEN}=$FEUCHTE_INNEN&${DP_FEUCHTE_AUSSEN}=$FEUCHTE_AUSSEN&${DP_WIND}=$WIND&${DP_WIND_MAX}=$WIND_MAX&${DP_WIND_DIR}=$WIND_DIR&${DP_DRUCK_ABS}=$DRUCK_ABS&${DP_DRUCK_REL}=$DRUCK_REL&${DP_REGEN_AKT}=$REGEN_AKT&${DP_REGEN_TAG}=$REGEN_TAG&${DP_REGEN_WOCHE}=$REGEN_WOCHE&${DP_REGEN_MONAT}=$REGEN_MONAT&${DP_SONNE}=$SONNE&${DP_UV_INDEX}=$UV_INDEX&${DP_DATUM}=$DATUM&${DP_ZEIT}=$UHRZEIT&prettyPrint" http://${IPP}/setBulk if [ $debug == "true" ]; then # Datenfelder ausgeben echo Temperatur Innen: $TEMP_INNEN °C echo Temperatur Aussen: $TEMP_AUSSEN °C echo Taupunkt: $TAUPUNKT °C echo Chill-Faktor: $CHILL °C echo Luftfeuchte Innen: $FEUCHTE_INNEN % echo Luftfeuchte Aussen: $FEUCHTE_AUSSEN % echo Windgeschwindkeit: $WIND km/h echo max. Windgeschwindkeit: $WIND_MAX km/h echo Windrichtung: $WIND_DIR ° echo Luftdruck absolut: $DRUCK_ABS hPa echo Luftdruck relativ: $DRUCK_REL hPa echo Regen aktuell: $REGEN_AKT mm echo Regen Tag: $REGEN_TAG mm echo Regen Woche: $REGEN_WOCHE mm echo Regen Monat: $REGEN_MONAT mm echo Sonnenstrahlung: $SONNE W/m^2 echo UV-Index: $UV_INDEX echo Datum: $DATUM Zeit: $UHRZEIT fi done
Zusätzlich sind die Datenpunkte anzulegen ( ich hab´s unter javascript.0.Wetterstation) und der Adapter (Simple RESTFul) zu installieren, sowie das Script im "Autostart" (crontab -e) zu platzieren (@SBorg hat das sehr schön beschrieben) - das war´s auch schon!
Bei der Umrechnung der Windgeschwindigkeiten bin ich mir noch nicht sicher, leider bläst gerade kein Wind
-
Ach ja... Da war noch das Bash-Script...
Muss jetzt erst mal nachschauen, wie ich das nochmal macheDatei erstellen, Skript hineinkopieren und als "/opt/iobroker/WS3500Abfrage.sh" abspeichern.
Dann "crontab -e" als Befehl eingeben, den Editor aussuchen und am Ende der Datei "@reboot /opt/iobroker/WS3500Abfrage.sh &" eingeben. Richtig?
Mache ich zumindest mal so...
-
Ok... Soweit eingegeben und natürlich die IP im Skript geändert.
Und natürlich den Datenpunkt vergessen einzutragen. -
@Berchemer
Ja genau so! Rechte beim Script beachten (wenn nicht root) und VORHER Datenpunkte anlegen -
@Berchemer
Im Script beim Aufruf von nc den Port ändern (80 bei mir) nicht vergessen! -
Habe also Datenpunkt unter javascript.0.Wetterstation angelegt.
Die Rechte des Eigentums und Ausführung des Skripts vergebe ich an iobroker und "Der Datei erlauben sie als Programm auszuführen" habe ich nicht angeklickt.
Muss ich eigentlich neu starten??? -
-
@Latzi sagte in WLAN-Wetterstation in ioBroker direkt einbinden:
@Berchemer
Im Script beim Aufruf von nc den Port ändern (80 bei mir) nicht vergessen!Stimmt hatte ich auch vergessen
-
Musste ich eigentlich noch etwas im "simple-api"-Adapter anpassen???
Ich habe ihn nur eingeschaltet, weil er bei mir bisher ausgeschaltet war. -
@Berchemer
Nein, nur einschalten, Port (vermutlich 8087) mit Script vergleichen und reboot - fertig. Danach sollten die Daten reinflattern -
@Latzi Willst/kannst du noch etwas Zeit investieren? Ich würde es ggf. gerne noch optimieren und als Package auf GitHub stellen mit Installationsanleitung etc. "Hier" ist es doch etwas konfus, da es sich dynamisch entwickelt hat ^^
Unabhängig davon würde mich aber die Prozesslast noch interessieren. Ich nenne das Skript mal
ws.sh
ps -A|grep ws.sh
Da steht dann vorne eine Zahl (=PID), dann
top -p ermittelte_Zahl_von_oben
Wie sieht die CPU-Last im Idle aus, und wie wenn er ein Datenpaket empfängt und verarbeitet?
Ggf. musst du auch anstelle von ws.sh noch auf nc prüfen. -
@SBorg sagte in WLAN-Wetterstation in ioBroker direkt einbinden:
@Latzi Willst/kannst du noch etwas Zeit investieren?
Ja, mach ich gerne, da lerne ich sicherlich etwas. Ich melde mich mit den Ergebnissen.
-
@SBorg sagte in WLAN-Wetterstation in ioBroker direkt einbinden:
Wie sieht die CPU-Last im Idle aus, und wie wenn er ein Datenpaket empfängt und verarbeitet?
Ggf. musst du auch anstelle von ws.sh noch auf nc prüfen.Tja, ich bekomme 2 PID´s:
Die PID 21222 wechselt andauernd, 423 ist dauerhaft erreichbar.
wetterdaten.sh: Keine merkbare Veränderung idle/active
nc: auch hier tut sich nicht viel (komisch ist 0 Tasks???) und bei jeder ps-Abfrage bekomme ich eine andere PID ??? Ich kann gar nicht schnell genug die ID bei top -p eintippseln ist sie auch schon wieder weg
@SBorg hilft dir das weiter?
-
@Latzi Danke, zumindest sieht die Last gut aus
Eigentlich sollte wetterdaten.sh nur 1x auftauchen. Außer er würde bei bc oder curl dies als 2. Prozess werten (dann würde sich auch die PID ändern). Ich werde trotzdem mal was anderes versuchen, denn der Vorschlag von @OliverIO ist auch nicht ohne und mal schnell umgesetzt. -
@Latzi Hast du einen GitHub-Account? Ich will die überarbeitete Version nicht öffentlich zur Verfügung stellen, da sie zum Großteil neu geschrieben ist. Da ich selbst nur bedingt testen kann sind Fehler vorprogrammiert. Außerdem habe ich noch nicht alles umgesetzt. Dann kommen nur wieder "geht nicht, was mache ich falsch..."-Posts