Hi!
Ist das soweit verständlich und (vorallem) hilfreich?
Die Funktion habe ich in meine interne Version implementiert und teste damit jetzt. Hier der Entwurf einer Anleitung (aka Rezept) fuer die spaetere Dokumentation.
--
Zusätzliche Daten von Fremdgeräten für Wetterdienste bereitstellen (script)
Mit der
FWD_EXEC-Funktion gibt es schon länger die Möglichkeit, die Ausgabezeile für einen Forward kurz vor dem eigentlichen Versand zum jeweiligen Wetterstationsdienst per Script zu ändern. Dieses Script arbeitet ausschließlich Forward-spezifisch und muss daher für jeden einzelnen Forward eingerichtet werden.
Wenn man nun aber z.B. die Daten eines Luftdaten.info-Feinstaubsensors als Daten eines virtuellen WH45/WH46 für das Versenden an mehrere Dienste nutzen möchte, müsste man für jeden einzelnen Dienst ein separates Script einrichten.
Und je nach Zielformat bzw. FWD_TYPE (Ecowitt-Format, WU, Awekas, Ambient Weather etc.) muss dieses Script dann auch einen unterschiedlichen Inhalt haben.
Mit ADD_SCRIPT lässt sich ab v0.10 ein globales Script definieren, dass die ursprünglich von der Wetterstation kommenden Daten erhält und modifizierbar macht. Nach der Änderung erhält FOSHKplugin die modifizierten bzw. erweiterten Daten zurück und fängt dann erst an, diese Daten für jeden einzelnen Forward zu verarbeiten.
Somit gibt es eine zentrale Möglichkeit der Daten-Manipulation, die für sämtliche Ausgabeformate gültig ist.
Ein Beispiel:
Der Feinstaubsensor von Luftdaten.info lässt sich lokal per Web-Interface abfragen. Über den Link
http://ip-address/data.json (wobei ip-address der IP-Adresse des Sensors entspricht) erhält man ein JSON-Datei mit den Werten zurück, die sich mit Standard-Bordmitteln sehr leicht parsen und weiterverarbeiten lässt.
JSON - je nach Softwarestand des Geräts kann der Aufbau des JSON jedoch anders sein:
Code: Alles auswählen
{
"software_version":"NRZ-2020-133",
"age":"28",
"sensordatavalues":[
{
"value_type":"SDS_P1",
"value":"8.25"
},
{
"value_type":"SDS_P2",
"value":"3.03"
},
{
"value_type":"samples",
"value":"5051440"
},
{
"value_type":"min_micro",
"value":"28"
},
{
"value_type":"max_micro",
"value":"20098"
},
{
"value_type":"interval",
"value":"145000"
},
{
"value_type":"signal",
"value":"-73"
}
]
}
SDS_P1 entspricht hier dem PM10-Wert und SDS_P2 dem PM2.5-Wert.
Der WH45 kennt im Ecowitt-Format die Keys tf_co2 (Temperatur in °F), humi_co2 (Luftfeuchte), pm25_co2 (der PM2.5-Wert), pm25_24h_co2 (der 24h-Mittelwert von PM2.5), pm10_co2 (PM10-Wert), pm10_24h_co2 (24h-Mittelwert PM10),
co2 (CO2) und co2_24h (24h-Mittel CO2). Sofern wir selbst keinen echten WH45/WH46 haben, können wir den PM10- sowie PM2.5-Wert des luftdaten.info-Sensors nutzen und einen WH45 - zumindest partiell - emulieren, indem wir die Keys des WH45/WH46 nutzen.
Wir weisen also per Script dem Key pm25_co2 den Wert von SDS_P2 und dem Key pm10_co2 den Wert von SDS_P1 zu.
Zum besseren Verständnis hier der Ablauf der einzelnen Schritte:
1. FOSHKplugin erhaelt die Daten der Konsole
2. bei Datenerhalt wird das konfigurierte Script gestartet, das folgende Arbeitsschritte ausführt:
2.1 Daten abfragen - irgendwo müssen die Werte ja her kommen
2.2 mit den echten Daten der Wetterstation zusammenfügen
2.3 an FOSHKplugin zurückgeben
3. FOSHKplugin sendet an alle konfigurierten Wetterdienste Dienste
Hier das Beispiel-Script, das den kompletten Punkt 2 ausführt:
Code: Alles auswählen
#!/bin/bash
# complements the output line of FOSHKplugin with values of the particulate matter sensor from Luftdaten.info and emulates a WH41
# the channel number of the virtual WH41 is defined via the variable WH41
# depending on the output format, the output strings must be modified - in Ecowitt format, the individual components are combined
# using an "&" - used here
# needs curl and jq - install with sudo apt-get install curl jq
# general help: https://foshkplugin.phantasoft.de/generic#exec
# define the local ip address of the Sensor
ADR=192.168.15.229
# define the channel number of the virtual WH41; 9 = emulate WH45 instead
WH41=9
#JSON=`curl -s http://${ADR}/data.json`
JSON=`cat luftdaten2.json`
# the original output data from FOSHKplugin
instr="$@"
# PM2.5
pm2=`echo ${JSON}|jq ".sensordatavalues[1].value"|sed 's/\"//g'`
if [ ! -z "${pm2}" ]; then
if [ "${WH41}" = "9" ]; then pm2string="&pm25_co2=${pm2}"; else pm2string="&pm25_ch${WH41}=${pm2}"; fi
fi
# PM10
pm1=`echo ${JSON}|jq ".sensordatavalues[0].value"|sed 's/\"//g'`
if [ ! -z "${pm1}" ]; then
if [ "${WH41}" = "9" ]; then pm1string="&pm10_co2=${pm1}"; else pm1string="&pm10_ch${WH41}=${pm1}"; fi
fi
# temp in °C - must be converted to °F - F = (C*9/5)+32 -
temp=`echo ${JSON}|jq ".sensordatavalues[2].value"|sed 's/\"//g'`
temp=`echo "scale=2; (${temp}*9/5)+32"|bc`
if [ ! -z "${temp}" ]; then
if [ "${WH41}" = "9" ]; then tempstring="&tf_co2=${temp}"; else tempstring="&tf_ch${WH41}=${temp}"; fi
fi
# pressure - not supported by WH41, WH45, WH46 - you could override the original pressure from wether station
# not used
pressure=`echo ${JSON}|jq ".sensordatavalues[3].value"|sed 's/\"//g'`
if [ ! -z "${pressure}" ]; then
if [ "${WH41}" = "9" ]; then pressurestring="&tf_pressure=${pressure}"; else pressurestring="&pressure_ch${WH41}=${pressure}"; fi
fi
#humidity
humidity=`echo ${JSON}|jq ".sensordatavalues[4].value"|sed 's/\"//g'`
if [ ! -z "${humidity}" ]; then
if [ "${WH41}" = "9" ]; then humiditystring="&humi_co2=${humidity}"; else humiditystring="&humidity_ch${WH41}=${humidity}"; fi
fi
# merge the original string with the new components
echo "${instr}${pm2string}${pm1string}${tempstring}${humiditystring}"
Das Script hier ist etwas umfangreicher, weil es wahlweise Daten für einen WH41 oder WH45 zur Verfügung stellen kann.
Zur Installation/Konfiguration:
1. beiliegende Datei als addLDdata.sh im Installationsverzeichnis von FOSHKplugin (/opt/FOSHKplugin/) abspeichern
2. Anpassen der addLDdata.sh - IP-Adresse Deines Feinstaubsensors bei ADR anpassen
3. das Script ausfuehrbar machen: chmod ug+x addLDdata.sh
4. Sicherstellen, das die erforderlichen Tools verfuegbar sind: sudo apt-get install curl jq
5. manueller Test des Scripts: ./addLDdata.sh - es sollte dann eine Zeile wie &pm25_co2=8.15&pm10_co2=17.17&tf_co2=31.55&humi_co2=87.72 ausgegeben werden
6. Anpassen des Forwards zu PWSDashboard - dabei muss die Zeile FWD_EXEC = ./addLDdata.sh im betreffenden Forward hinzugefuegt werden
7. Neustart von FOSHKplugin - sudo service foshkplugin restart
Achtung!
Es handelt sich um ein sehr mächtiges Feature das mit Bedacht genutzt werden sollte. Fehler im Script können zu Ärger mit dem Ziel-Wetterdienst oder auch zum Ausfall von FOSHKplugin führen.
Als Sofort-Maßnahme bei etwaigen unklaren Fehlerbildern immer gleich im Script unterhalb des shebang "#!/bin/bash" eine Zeile exit einfügen - dann wird das Script weiterhin von FOSHKplugin gestartet, richtet aber kein Unheil mehr an.
Scripte sollten gut getestet werden - auch unter Bedingungen die nicht vorgesehen sind - idealerweise lokal. Als Parameter lässt sich eine Textzeile angeben, an die die zusätzlichen Keys und Werte angehängt werden.
Im SND-Logfile wird der Aufruf des Scripts sowie feststellbare Fehler protokolliert.
--
Oliver