Hi!
Das Script ist noch nicht ganz fertig - jedenfalls nicht so, wie ich es gerne haette.
Aber der grundsaetzliche Ablauf ist der:
Das Script wird ueber einen cron-Job alle x Minuten gestartet und triggert dann folgende Dinge:
1. die Kamera macht per http-Request ein aktuelles Foto
Das ist bei der Ecowitt
HP10 gegeben - wie das bei anderen Kameras ist, muss man pruefen.
Alternativ - etwa wenn die Kamera von sich aus alle x Sekunden ein Foto macht und es im Filesystem ablegt, greift man eben auf diese Datei zurueck.
2. das Script muss "irgendwie" Zugriff auf die aktuellen Wetterdaten erhalten
Bei Einsatz von FOSHKplugin ist das leicht - es ermoeglicht die Abfrage der zuletzt von der Wetterstation gemeldeten Werte
Die Werte sollten sich jedoch auch aus anderen bereits vorhandenen Dateien parsen lassen - etwa realtime.txt oder clientraw.txt.
GW1100, GW2000 und neuere HP25xx-Konsolen ermoeglichen eine Echtzeitabfrage, bei der die gemeldeten Werte dann als JSON zur Verfuegung stehen - auch das laesst sich dann sehr leicht parsen und weiterverarbeiten.
Ich hatte dazu
hier mal den grundsaetzlichen Ablauf beschrieben und eben die Abfrage der Messwerte
nachgetragen.
3. stehen Bild und Daten bereit, muessen diese beiden Dinge zusammengebracht werden
Dazu nutze ich hier ffmpeg - es gibt aber auch andere Loesungen dafuer.
Dabei werden die Messwerte an bestimmte Positionen im Bild eingetragen. Knifflig ist da eigentlich nur die Syntax - aber da hilft das Script als Vorlage wohl jetzt schon.
4. das "komponierte" Bild muss nun zum Zielort gebracht werden
Dies kann auf verschiedenen Wegen erfolgen - etwa per Dateisystem (bei lokalem Webserver) oder per ftp(s) oder http(s)/POST oder nfs oder ...
Das Script in der vorliegenden Version verschickt die fertige Bilddatei per http/POST an den Webserver. Dies erfordert aber auf Webserver-Seite ein Script, dass diese Datei entgegennimmt.
Einfacher ist da vermutlich eher die Bereitstellung per Dateisystem oder ftp(s).
Hier das Script:
Code: Alles auswählen
#!/bin/bash
# Script for gathering the current snapshot of a local HP10 camera with
# integration of current real time data via FOSHKplugin
# Phantasoft, Oliver Engel 06.11.2022
##################################################################
# set the HP10 camera ip
CAM=192.168.15.182
# name the output file
JPG=snapshot.jpg
#JPG=`date +%y%m%d%H%M%S`-snapshot.jpg
# name the cam (bottom left)
NAM="Hohen Neuendorf, Brandenburg"
# time format (bottom right)
#TIM=`date '+%Y/%m/%d %H:%M:%S'|sed 's/:/\\\:/g'`
TIM=`date '+%d.%m.%Y %H:%M:%S'|sed 's/:/\\\:/g'`
# remote destination for output file
DST="https://yourdomain.tld/some/where/specialscript.php"
# ip address of FOSHKplugin host to gather weather data from
ADR="http://192.168.15.236:8080"
# remote destination and credentials for ftp(s) access
FTPUSER=username
FTPPASS=password
FTPLOC=ftp://yourdomain.tld/path/to/img-dir/
###################################################################
# get the current picture
curl --silent -o ${JPG} "http://${CAM}/capture"
# for additional weather data in the picture
# if you don't use FOSHKplugin but a current GW1100/GW2000 or HP25xxC you may use it's realtime data instead:
# WS=192.168.15.229
# temp=`curl -s http://${WS}/get_livedata_info?|jq ".common_list[0].val"|sed 's/\"//g'`
# humidity=`curl -s http://${WS}/get_livedata_info?|jq ".common_list[1].val"|sed 's/\"//g'|sed 's/\%//g'`
# ... - see: https://www.wxforum.net/index.php?topic=43811.msg453151#msg453151
tempc=`curl ${ADR}/getvalue?key=tempc 2>/dev/null`
humidity=`curl ${ADR}/getvalue?key=humidity 2>/dev/null`
baromrelhpa=`curl ${ADR}/getvalue?key=baromrelhpa 2>/dev/null`
windspeedkmh=`curl ${ADR}/getvalue?key=windspeedkmh 2>/dev/null`
dailyrainmm=`curl ${ADR}/getvalue?key=dailyrainmm 2>/dev/null`
leafwetness_ch1=`curl ${ADR}/getvalue?key=leafwetness_ch1 2>/dev/null`
solarradiation=`curl ${ADR}/getvalue?key=solarradiation 2>/dev/null`
uv=`curl ${ADR}/getvalue?key=uv 2>/dev/null`
sunhours=`curl ${ADR}/getvalue?key=sunhours 2>/dev/null`
wnowtxt=`curl ${ADR}/getvalue?key=wnowtxt 2>/dev/null`
wprogtxt=`curl ${ADR}/getvalue?key=wprogtxt 2>/dev/null`
dateutc=`curl ${ADR}/getvalue?key=dateutc 2>/dev/null|sed 's/:/\\\:/g'`
# ohne Banderole
ffmpeg -y -hide_banner -loglevel error -i ${JPG} -vf "[in] \
drawtext=font=monospace:fontsize=25:fontcolor=white:text='${NAM}':x=10:y=(h)-30, \
drawtext=font=monospace:fontsize=25:fontcolor=white:text='${TIM}':x=(w)-295:y=(h)-30, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Temperatur\:\ ${tempc}\°C':x=10:y=(h)-120, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Luftfeuchte\:\ ${humidity}\\\\\%':x=10:y=(h)-95, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Luftdruck\:\ ${baromrelhpa}hPa':x=10:y=(h)-70, \
\
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Wind\:\ ${windspeedkmh}kmh':x=400:y=(h)-120, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Regen/Tag\:\ ${dailyrainmm}mm':x=400:y=(h)-95, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Blattfeuchte\:\ ${leafwetness_ch1}\\\\\%':x=400:y=(h)-70, \
\
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Solar\:\ ${solarradiation}W/m²':x=790:y=(h)-120, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='UVI\:\ ${uv}':x=790:y=(h)-95, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Sonnenstd\:\ ${sunhours}h':x=790:y=(h)-70, \
\
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Wetterlage\:\ ${wnowtxt}':x=1190:y=(h)-120, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Vorhersage\:\ ${wprogtxt}':x=1190:y=(h)-95, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='UTC-Zeit\:\ ${dateutc}':x=1190:y=(h)-70 \
\
[out]" output.jpg 2>/dev/null
# mit weisser Banderole
ffmpeg -y -hide_banner -loglevel error -i ${JPG} -vf "[in] \
drawbox=y=1075:color=white@0.5:width=iw:height=125:t=max, \
drawtext=font=monospace:fontsize=25:fontcolor=black:text='${NAM}':x=10:y=(h)-30, \
drawtext=font=monospace:fontsize=25:fontcolor=black:text='${TIM}':x=(w)-295:y=(h)-30, \
drawtext=font=monospace:fontsize=20:fontcolor=black:text='Temperatur\:\ ${tempc}\°C':x=10:y=(h)-120, \
drawtext=font=monospace:fontsize=20:fontcolor=black:text='Luftfeuchte\:\ ${humidity}\\\\\%':x=10:y=(h)-95, \
drawtext=font=monospace:fontsize=20:fontcolor=black:text='Luftdruck\:\ ${baromrelhpa}hPa':x=10:y=(h)-70, \
\
drawtext=font=monospace:fontsize=20:fontcolor=black:text='Wind\:\ ${windspeedkmh}kmh':x=400:y=(h)-120, \
drawtext=font=monospace:fontsize=20:fontcolor=black:text='Regen/Tag\:\ ${dailyrainmm}mm':x=400:y=(h)-95, \
drawtext=font=monospace:fontsize=20:fontcolor=black:text='Blattfeuchte\:\ ${leafwetness_ch1}\\\\\%':x=400:y=(h)-70, \
\
drawtext=font=monospace:fontsize=20:fontcolor=black:text='Solar\:\ ${solarradiation}W/m²':x=790:y=(h)-120, \
drawtext=font=monospace:fontsize=20:fontcolor=black:text='UVI\:\ ${uv}':x=790:y=(h)-95, \
drawtext=font=monospace:fontsize=20:fontcolor=black:text='Sonnenstd\:\ ${sunhours}h':x=790:y=(h)-70, \
\
drawtext=font=monospace:fontsize=20:fontcolor=black:text='Wetterlage\:\ ${wnowtxt}':x=1190:y=(h)-120, \
drawtext=font=monospace:fontsize=20:fontcolor=black:text='Vorhersage\:\ ${wprogtxt}':x=1190:y=(h)-95, \
drawtext=font=monospace:fontsize=20:fontcolor=black:text='UTC-Zeit\:\ ${dateutc}':x=1190:y=(h)-70 \
\
[out]" output2.jpg 2>/dev/null
# mit schwarzer Banderole
ffmpeg -y -hide_banner -loglevel error -i ${JPG} -vf "[in] \
drawbox=y=1075:color=black@0.4:width=iw:height=125:t=max, \
drawtext=font=monospace:fontsize=25:fontcolor=white:text='${NAM}':x=10:y=(h)-30, \
drawtext=font=monospace:fontsize=25:fontcolor=white:text='${TIM}':x=(w)-295:y=(h)-30, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Temperatur\:\ ${tempc}\°C':x=10:y=(h)-120, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Luftfeuchte\:\ ${humidity}\\\\\%':x=10:y=(h)-95, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Luftdruck\:\ ${baromrelhpa}hPa':x=10:y=(h)-70, \
\
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Wind\:\ ${windspeedkmh}kmh':x=400:y=(h)-120, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Regen/Tag\:\ ${dailyrainmm}mm':x=400:y=(h)-95, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Blattfeuchte\:\ ${leafwetness_ch1}\\\\\%':x=400:y=(h)-70, \
\
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Solar\:\ ${solarradiation}W/m²':x=790:y=(h)-120, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='UVI\:\ ${uv}':x=790:y=(h)-95, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Sonnenstd\:\ ${sunhours}h':x=790:y=(h)-70, \
\
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Wetterlage\:\ ${wnowtxt}':x=1190:y=(h)-120, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='Vorhersage\:\ ${wprogtxt}':x=1190:y=(h)-95, \
drawtext=font=monospace:fontsize=20:fontcolor=white:text='UTC-Zeit\:\ ${dateutc}':x=1190:y=(h)-70 \
\
[out]" output3.jpg 2>/dev/null
# upload snapshot via http/POST
curl -k -F "image=@${JPG}" -F "user=user" -F "password=password" -F "filename=${JPG}" -F "fwd_type=SAVE" ${DST}
# uploadsnapshot via ftp(s)
JPG=output3.jpg
# unsecured ftp
#curl --silent -p --insecure "${FTPLOC}" --user "${FTPUSER}:${FTPPASS}" -T ${JPG}
# ftps
curl --silent -p --insecure --ssl "${FTPLOC}" --user "${FTPUSER}:${FTPPASS}" -T ${JPG}
Soweit als "Teaser" - es ist noch "work in progress".
Es handelt sich um ein bash-Script fuer Linux-Systeme - grundsaetzlich sollte es auch unter Windows als Batch und Task im Aufgabenplaner funktionieren. Jedoch sind dazu vermutlich einige Anpassungen noetig. Ich habe das nicht getestet.
Oliver