NEWS
[Linux Shell-Skript] WLAN-Wetterstation
-
-
@negalein
Der angemeckerte TS (bzw. die Zeitdifferenz) stammt auch nicht vom System, dies ist der zu übertragene Zeitpunkt der Messung wann diese statt fand und der kommt direkt vom Display/Gateway. Stimmt die Uhrzeit vom Display/Gateway? -
Da hier die Wetterstations Profis sind erlaube ich mir mal eine Frage zu meiner Station hier zu verlinken
https://forum.iobroker.net/topic/81470/wetterstation-ventus-w830-zeigt-falsche-uhrzeit/5
Vielleicht hat ja jemand von hier eine Idee dazu.
Danke und schönen Sonntag
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Stimmt die Uhrzeit vom Display/Gateway?
Ja, die stimmt genau
-
@negalein
Ich habe mir die Routine noch mal angesehen und ich lag falsch. Tatsächlich wird die Uhrzeit des Clients benutzt.Dann versuchen wir es mal so wie die Routine es macht. Führe mal auf dem Skript-System ein
date +%s
aus. Da sollte nun als Ausgabe ein Uinxtimestamp erscheinen. Den kopierst du und fügst ihn mal bei bspw. unixtime.de ein.Das sollte dann dein aktuelles Datum und Uhrzeit sein.
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Das sollte dann dein aktuelles Datum und Uhrzeit sein.
ja, das passt +- ca. 30 Sek.
-
Hallo,
ich habe vor ein paar Tagen, die DS 100 Sensoren von 11 auf 16 Stück erhöht.
Hat auch alles Dank der Anleitung in Wiki vorerst gut funktioniert, im Iobroker sehe ich nun 16 Bodenfeuchte Sensoren.
Nun bemerkte ich, das der Sensor 1 & 16 immer die gleichen Werte angezeigen:
Nachdem ich auf der Ecowitt App kontrolliert habe, bin ich mir nun sicher, das der Wert von Sensor 1, falsch angezeigt wird, also es ist derselbe Wert wie 16.
Habe schon einiges probiert, von Neustart der Wetterstation, Raspherry, IoBroker, usw....
Ich bekomme immer den Wert 16 zweimal angezeigt und den Wertz 1 falsch...
Hat jemand eine Idee?
Danke
Oliver -
-
@negalein
Da es aktuell funktioniert, bei dir mal funktionierte und so kein Fehler ersichtlich ist, bleibt nur die Vermutung Problem von "Außerhalb". Ev. sind sie zB. mittels Geocaching der Meinung ihr hättet keine Sommerzeit und meinen deshalb die Werte wären über 60 Minuten alt. Verbiegen wir mal deinen Übertragungszeitstempel um eine Stunde zurück:öffne mal die
wetterstation.sub
und suche nach windy_update (sollte bei ca. #1870ff sein)dort ersetzt du nun (sollten vier Zeilen runter sein):
windy_DATA="station=${windy_Station}&ts=$(date +%s)&temp=${MESSWERTE[1]}&mbar=${MESSWERTE[9]}"
mit
ts_tweak=$(date +%s) && let ts_tweak-=3600 windy_DATA="station=${windy_Station}&ts=${ts_tweak}&temp=${MESSWERTE[1]}&mbar=${MESSWERTE[9]}"
Service restarten
systemctl restart wetterstation
-
@oliver1972
Ich habe es mir eben noch mal angeschaut ob ich da ev. die Werte/Sensoren falsch zugeordnet habe, konnte aber so nichts finden.
Kannst du nochmal einen aktuellen String (./wetterstation.sh --data
) posten (Passkey etc. kannst du kpl. löschen, ich brauche eigentlich nur den Teil mit den 16 Sensoren)? Dann kann ich mir Messwerte von 1-16 faken und sehe wo die Falschzuweisung erfolgt -
@mike77 sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@sborg genau. Und wie vermutet... ECOWITT WS3900 funktioniert.
Danke für dein Skript
Mike
Immer gerne und nehme ich mit in die Liste auf
-
@sborg die Ecowitt WS3800 (A) kannst du auch gerne in die Liste aufnehmen
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
mit
jetzt kommt nur noch das
Datenübertragung an windy.com: {"observations":[],"stations":[]}
-
@sborg Habe mal alles kopiert (außer Versionsinfo), da ich mich hier Zuwenig auskenne..:
#Versionierung SH_VER="V3.5.0" CONF_V="V3.5.0" SUBVER="V3.5.0" #Installationsverzeichnis feststellen DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" #Config-Version prüfen VER_CONFIG=$(cat "${DIR}/wetterstation.conf"|grep '### Setting'|cut -d" " -f3) if [ $CONF_V != $VER_CONFIG ]; then echo -e "wetterstation: \e[31mERROR #000 - Config-Version mismatch!\n" echo -e "benutzt: $VER_CONFIG\t benötigt wird: $CONF_V \e[0m" exit 1 fi #Sub-Version prüfen SUB_CONFIG=$(cat "${DIR}/wetterstation.sub"|grep '### Subroutinen'|cut -d" " -f3) if [ $SUBVER != $SUB_CONFIG ]; then echo -e "wetterstation: \e[31mERROR #001 - Subroutinen-Version mismatch!\n" echo -e "benutzt: $SUB_CONFIG\t benötigt wird: $SUBVER \e[0m" exit 1 fi #Konfiguration lesen + Subroutinen laden . "${DIR}/wetterstation.conf" . "${DIR}/wetterstation.sub" #gibt es Parameter? while [ "$1" != "" ]; do case $1 in --debug ) version debug=true #override ;; --osem_reg ) osem_register exit ;; --windy_reg ) windy_register exit ;; --metsommer ) metsom_override=true metsommer exit ;; --influx_test) minmax24h DEBUG exit ;; -s | --show ) show_pwid=true ;; -d | --data ) setup ws_data exit ;; -v | --version ) version exit ;; -h | --help ) usage exit ;; * ) usage exit 1 esac shift done #Setup + Initial ausführen setup minmaxheute #Endlosschleife while true do #Kommunikation herstellen und Daten empfangen get_DATA #KOM-Fehler? if [ "$?" -eq "0" ]; then unset MESSWERTE; unset MESSWERTERAWIN MESSWERTERAWIN=(${DATA//&/ }) rawinlen=${#MESSWERTERAWIN[@]} j=35 for (( i=1; i<rawinlen; i++ )) do if [[ ${MESSWERTERAWIN[$i]} == tempinf=* ]] || [[ ${MESSWERTERAWIN[$i]} == indoortempf=* ]] then MESSWERTE[0]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); INDOOR_TEMP=${MESSWERTE[0]}; convertFtoC 0; fi if [[ ${MESSWERTERAWIN[$i]} == tempf=* ]] then MESSWERTE[1]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); TEMPF=${MESSWERTE[1]}; convertFtoC 1; do_trend_aussentemp; fi if [[ ${MESSWERTERAWIN[$i]} == dewptf=* ]] then MESSWERTE[2]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); DEWPTF=${MESSWERTE[2]}; convertFtoC 2; fi if [[ ${MESSWERTERAWIN[$i]} == windchillf=* ]] then MESSWERTE[3]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertFtoC 3; fi if [[ ${MESSWERTERAWIN[$i]} == humidityin=* ]] || [[ ${MESSWERTERAWIN[$i]} == indoorhumidity=* ]] then MESSWERTE[4]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); fi if [[ ${MESSWERTERAWIN[$i]} == humidity=* ]] then MESSWERTE[5]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); fi if [[ ${MESSWERTERAWIN[$i]} == windspeedmph=* ]] then MESSWERTE[6]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertMPHtoKMH 6; fi if [[ ${MESSWERTERAWIN[$i]} == windgustmph=* ]] then MESSWERTE[7]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertMPHtoKMH 7; fi if [[ ${MESSWERTERAWIN[$i]} == winddir=* ]] then MESSWERTE[8]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); winddir 8; fi if [[ ${MESSWERTERAWIN[$i]} == baromabsin=* ]] || [[ ${MESSWERTERAWIN[$i]} == absbaromin=* ]] then MESSWERTE[9]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertLuftdruck 9; fi if [[ ${MESSWERTERAWIN[$i]} == baromrelin=* ]] || [[ ${MESSWERTERAWIN[$i]} == baromin=* ]] then MESSWERTE[10]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertLuftdruck 10; fi if [[ ${MESSWERTERAWIN[$i]} == rainratein=* ]] || [[ ${MESSWERTERAWIN[$i]} == rainin=* ]] || [[ ${MESSWERTERAWIN[$i]} == rrain_piezo=* ]] then MESSWERTE[11]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertInchtoMM 11; fi if [[ ${MESSWERTERAWIN[$i]} == dailyrainin=* ]] || [[ ${MESSWERTERAWIN[$i]} == drain_piezo=* ]] then MESSWERTE[12]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertInchtoMM 12; fi if [[ ${MESSWERTERAWIN[$i]} == weeklyrainin=* ]] || [[ ${MESSWERTERAWIN[$i]} == wrain_piezo=* ]] then MESSWERTE[13]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertInchtoMM 13; fi if [[ ${MESSWERTERAWIN[$i]} == monthlyrainin=* ]] || [[ ${MESSWERTERAWIN[$i]} == mrain_piezo=* ]] then MESSWERTE[14]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertInchtoMM 14; fi if [[ ${MESSWERTERAWIN[$i]} == yearlyrainin=* ]] || [[ ${MESSWERTERAWIN[$i]} == yrain_piezo=* ]] then MESSWERTE[15]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertInchtoMM 15; fi if [[ ${MESSWERTERAWIN[$i]} == solarradiation=* ]] then MESSWERTE[16]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); sonnenpuls 16; fi if [[ ${MESSWERTERAWIN[$i]} == uv=* ]] || [[ ${MESSWERTERAWIN[$i]} == UV=* ]] then MESSWERTE[17]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); uv_belastung 17; fi if [[ ${MESSWERTERAWIN[$i]} == dateutc=* ]] then MESSWERTE[18]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertTime 18; fi if [[ ${MESSWERTERAWIN[$i]} == stationtype=* ]] || [[ ${MESSWERTERAWIN[$i]} == softwaretype=* ]] then MESSWERTE[19]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); fi if [[ ${MESSWERTERAWIN[$i]} == wh65batt=* ]] then MESSWERTE[20]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); fi if [[ ${MESSWERTERAWIN[$i]} == maxdailygust=* ]] then MESSWERTE[21]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertMPHtoKMH 21; fi if [[ ${MESSWERTERAWIN[$i]} == eventrainin=* ]] then MESSWERTE[22]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertInchtoMM 22; fi if [[ ${MESSWERTERAWIN[$i]} == hourlyrainin=* ]] then MESSWERTE[23]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertInchtoMM 23; fi if [[ ${MESSWERTERAWIN[$i]} == totalrainin=* ]] then MESSWERTE[24]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertInchtoMM 24; fi if [[ ${MESSWERTERAWIN[$i]} == model=* ]] then MESSWERTE[25]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); fi if [[ ${MESSWERTERAWIN[$i]} == winddir_avg10m=* ]] then MESSWERTE[26]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); winddir 26; fi if [[ ${MESSWERTERAWIN[$i]} == windspdmph_avg10m=* ]] then MESSWERTE[27]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertMPHtoKMH 27; fi if [[ ${MESSWERTERAWIN[$i]} == vpd=* ]] then MESSWERTE[30]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); fi ### zusätzliche DPxxx-Sensoren ############################################################ if [ "${ANZAHL_DP10}" -gt "0" ]; then DP10; fi if [ "${ANZAHL_DP35}" -gt "0" ]; then DP35; fi if [ "${ANZAHL_DP40}" -gt "0" ]; then DP40; fi if [ "${ANZAHL_DP50}" -gt "0" ] || [ "${ANZAHL_DP100}" -gt "0" ]; then DP50_100; fi if [ "${ANZAHL_DP60}" -gt "0" ]; then DP60; fi if [ "${ANZAHL_DP70}" -gt "0" ]; then DP70; fi if [ "${ANZAHL_DP200}" -gt "0" ]; then DP200; fi if [ "${ANZAHL_DP250}" -gt "0" ]; then DP250; fi if [ "${ANZAHL_DP300}" -gt "0" ]; then DP300; fi ### zusätzliche DPxxx-Sensoren ################################################### ENDE ### ### zusätzliche WHxxx-Sensoren ############################################################ if [ "${ANZAHL_WH31}" -gt "0" ]; then WH31; fi ### zusätzliche WHxxx-Sensoren ################################################### ENDE ### ### zusätzliche WSxxx-Sensoren ############################################################ if [ "${ANZAHL_WS90}" -gt "0" ]; then WS90; fi ### zusätzliche WHxxx-Sensoren ################################################### ENDE ### ### zusätzliche Bresser-Sensoren ########################################################## if [ "${ANZAHL_7009999}" -gt "0" ]; then BR_001; fi ### zusätzliche WHxxx-Sensoren ################################################### ENDE ### ### zusätzliche Sainlogic oder Curconsa Sensoren, Station FT0300 ########################### if [ "${ANZAHL_DP50}" -eq "0" ] || [ "${ANZAHL_DP100}" -eq "0" ]; then if [[ ${MESSWERTERAWIN[$i]} == temp1f=* ]] then MESSWERTE[28]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); convertFtoC 28; fi if [[ ${MESSWERTERAWIN[$i]} == humidity1=* ]] then MESSWERTE[29]=$(echo ${MESSWERTERAWIN[$i]}|cut -d"=" -f2); fi fi ### zusätzliche Sainlogic oder Curconsa Sensoren, Station FT0300 ################## ENDE ### done #Taupunkt und Windchill do_windchill #durchschnittliche Windgeschwindigkeit der letzten 10 Minuten if [[ ! "$DATA" =~ "windspdmph_avg10m=" ]]; then do_windspeed ${MESSWERTE[6]}; fi #Daten an ioB schicken if [ ${FIX_AUSSENTEMP} == "true" ] then if (( $(bc -l <<< "${MESSWERTE[1]} > -273") )) then iob_send if [ "${TEMPFIX_ERR}" -gt "0" ]; then let "TEMPFIX_ERR--"; fi else MELDUNG "unplausibler Messwert Aussentemperatur. Datenpaket verworfen..." let "TEMPFIX_ERR++" if [ "${TEMPFIX_ERR}" -gt "10" ] then MELDUNG "m%C3%B6glicherweise Batterie des Wettermastes schwach" SAPI "Single" "set/${DP_STATION_BATTERIE}?value=1&ack=true" fi fi else iob_send fi #Reset Kommfehler if [ ! -z "$KOMFEHLER" ] && [ "$KOMFEHLER" -gt "0" ]; then let "KOMFEHLER--" if [ "$KOMFEHLER" -eq "0" ] && [ $RESET_KOMFEHLER == "true" ]; then SAPI "Single" "set/${DP_KOMFEHLER}?value=false&ack=true"; fi fi else let "KOMFEHLER++" if [ "$KOMFEHLER" -eq "10" ]; then SAPI "Single" "set/${DP_KOMFEHLER}?value=true&ack=true"; fi if [ "$KOMFEHLER" -gt "10" ]; then KOMFEHLER=10; fi #Anzahl beschränken fi #Debug eingeschaltet? if [ $debug == "true" ]; then debuging; fi #Mitternachtjobs if [ $(date +%H) -ge "23" ] && [ $(date +%M) -ge "58" ] && [ -z $MIDNIGHTRUN ]; then rain #Jahresregenmenge firmware_check #neue Firmware reset_zaehler #Sonnenscheindauer, Solarenergie zurücksetzen (enthällt auch Speicherung Werte VorJahr) minmaxavg365d #Min-/Max-/Avg-Aussentemperatur vor einem Jahr metsommer #meteorologischer Sommer Durchschnittstemperatur und Regenmenge MELDUNG "Mitternachtjobs durchgef%C3%BChrt" fi if [ $(date +%H) -eq "0" ] && [ $(date +%M) -le "3" ]; then unset MIDNIGHTRUN if [ $(date +%Z) == "CEST" ]; then ZULU=22; else ZULU=23; fi fi #15-Minutenjobs: Wetterprognose; min/max Aussentemperatur der letzten 24h + heute DO_IT=$(date +%M) DO_IT=${DO_IT#0} if [ $(( $DO_IT % 15 )) -eq "0" ]; then if [ $(date +%s) -ge "$TIMER_SET" ]; then wetterprognose if [ ! -z ${INFLUX_BUCKET} ]; then minmax24h; minmaxheute; fi fi do_Wetterwarnung #stündlich Lebenszeichen if [ "$(date +%H)" -ne "${ALIVE}" ]; then ALIVE=$(date +%H); MELDUNG "Skript l%C3%A4uft..."; fi fi #6-Minutenjobs: WOW, Windy if [ $(( $DO_IT % 6 )) -eq "0" ] && [ ${block_6minjobs} -le "0" ]; then #Windy if [ ${use_windy} == "true" ]; then windy_update; fi #WOW if [ ${use_wow} == "true" ]; then wow_update; fi #run_onlyonce block_6minjobs=3; else let block_6minjobs-- fi #5-Minutenjobs: wetter.com; Wolkenbasis if [[ $(( $DO_IT % 5 )) -eq "0" && -z ${run_5minjobs_onlyonce} ]]; then #wetter.com / Wolkenbasis if [ ! -z ${WETTERCOM_ID} ]; then wettercom_update; fi do_wolkenbasis #Windböe max. für Stationen die keinen Wert (#21) liefern if [ ! -z ${INFLUX_BUCKET} ] && [ -z ${MESSWERTE[21]} ]; then windboeemax; fi #run only once run_5minjobs_onlyonce=true else if [ ${run_5minjobs_onlyonce} ]; then unset run_5minjobs_onlyonce; fi fi #Hitzeindex if (( $(bc -l <<< "${MESSWERTE[1]} > 20") )); then HITZEINDEX=$(round $(hitzeindex ${MESSWERTE[1]} ${MESSWERTE[5]}) 2) else HITZEINDEX= fi #openSenseMap if [ ${openSenseMap} == "true" ]; then opensensemap; fi #Wunderground if [ ${WUNDERGROUND_UPDATE} == "true" ]; then wunderground_update; fi #AWEKAS if [ ${use_awekas} == "true" ]; then awekas_update; fi #Logging eingeschaltet? if [ $logging == "true" ]; then logging; fi done ###EoF
Danke