#!/bin/bash
UPDATE_VER=V2.21.0
### Farbdefinition
GR='\e[1;32m'
GE='\e[1;33m'
WE='\e[1;37m'
BL='\e[1;36m'
RE='\e[1;31m'
echo -e "\n\n${BL}"
echo -e '
_ _______ __ __ __ __
| | / / ___/ / / / /___ ____/ /___ _/ /____ _____
| | /| / /\__ \______/ / / / __ \/ __ / __ `/ __/ _ \/ ___/
| |/ |/ /___/ /_____/ /_/ / /_/ / /_/ / /_/ / /_/ __/ /
|__/|__//____/ \____/ .___/\__,_/\__,_/\__/\___/_/' ${GE}${UPDATE_VER}${BL}
echo -en ' /_/'
echo -e "${WE}\n"
#Nicht als root...
if [ $(whoami) = "root" ]; then echo -e "$RE Ausführung als \"root\" nicht möglich...!\n"; exit 1; fi
#Verzeichnis feststellen + conf lesen
DIR=$(pwd)
if [ -f "${DIR}/wetterstation.conf" ]; then . "${DIR}/wetterstation.conf"; fi
#Test ob Datei auf GitHub, sonst Fallback
if [ "$1" = "" ] && ( ! curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh|grep -xq '404: Not Found' ); then
echo -e "$WE Benutze neuste Version ${BL}$(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh|grep -m 1 'UPDATE_VER='|cut -d"=" -f2)${WE} auf GitHub..."
sleep 2
source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --menu
exit 0
fi
checker() {
#Test ob bc, jq, unzip, patch und dc installiert sind / Service im User-Kontext läuft
#installierte Influx-Version
#Rest-Api im ioB läuft
#Service im User-Kontext?
if [ ! $(cat /etc/systemd/system/wetterstation.service|grep User=) ]; then
echo -e "\n$GE Service läuft nicht im User-Kontext sondern unter User ${RE}root${GE}..."
jn_abfrage "\n$WE Soll nun auf User (empfohlen) umgestellt werden?"
if [ -z $antwort ]; then echo -e "\n"; return; fi
echo -e "\n"
sudo sed -i '/[Service]/a User='$(whoami)'\nGroup='$(whoami) /etc/systemd/system/wetterstation.service
echo -e "\n Done... Restarte Service...\n"
sudo systemctl daemon-reload
sudo systemctl restart wetterstation
fi
if [ ! -z ${INFLUX_API} ] && [ $(which influxd) ]; then check_prog influx; fi
check_prog bc
check_prog jq
check_prog dc
check_prog unzip
check_prog patch
check_prog restapi
echo -e "\n"
}
check_prog() {
if [ $1 == "influx" ]; then
if [ ! $(influxd version|cut -d" " -f2|grep v1.) ]; then echo -e "${RE} Offizieller Support nur für Influx V1.x!\n\n${WE}"; sleep 5; fi
return
fi
if [ $1 == "restapi" ]; then
if [ "$(nc -vz $(echo "${RESTAPI_URL}" | grep -o '[\.0-9]*') &> /dev/null; echo $?)" -eq "0" ]; then RESTAPI=true
echo -e "\n Zugriff auf $GR'Rest-API'$WE im ioBroker: [$GR✓$WE]"
else
RESTAPI=false
echo -e "\n Zugriff auf $GR'Rest-API'$WE im ioBroker: [$RE✗$WE]"
echo -e " (Dies ist kein Problem, es können nur keine neuen Datenpunkte bei Bedarf automatisch angelegt werden."
echo -e " Dies muss im Fall neuer Datenpunkte per 'wetterstation.js' von Hand im ioBroker erfolgen.)"
fi
return
fi
if [ $(which $1) ]; then
echo -e " $GR'$1'$WE installiert: [$GR✓$WE]"
else
echo -e " $GR'$1'$WE installiert: [$RE✗$WE]"
echo -e "\n\n $RE Bitte zuerst '$1' installieren [sudo apt install $1]\n"
exit 1
fi
}
backup() {
echo -e "\n Lege Sicherungskopie der wetterstation.conf an..."
cp ./wetterstation.conf ./wetterstation.conf.backup
}
FEHLER() {
if [ "$UPDATE_VER" == "$VERSION" ]; then echo -e "\n$WE Version ist aktuell, nothing to do...\n"; exit 0; fi
echo -e "\n Updater ist ${RE}nur${WE} für Versionen ab V1.4.0 !\n"
exit 1
}
patcher() {
echo -en "\n${WE} Soll die ${RE}wetterstation.conf ${WE}nun auf eine neue Version gepatcht werden? [${GR}J/N${WE}]"
read -n 1 -p ": " JN
if [ "$JN" = "J" ] || [ "$JN" = "j" ]; then
echo -e "\n\n\n"
else
echo -e "\n\n\n"
echo -e " $RE Abbruch... ${WE}\n\n\n"; exit 1;
fi
VERSION_SH=$(cat ./wetterstation.sh|grep "SH_VER"|cut -d"=" -f2|tr -d \")
while [ "$VERSION_CONF" != "$VERSION_SH" ]
do
VERSION_CONF=$(cat ./wetterstation.conf|grep "### Settings V"|cut -d" " -f3)
case ${VERSION_CONF} in
V1.4.0) PATCH140 ;;
V1.5.0) PATCH150 ;;
V1.6.0) PATCH160 ;;
V2.0.0) PATCH210 ;;
V2.1.0) PATCH220 ;;
V2.2.0) PATCH230 ;;
V2.3.0) PATCH240 ;;
V2.4.0) PATCH250 ;;
V2.5.0) PATCH260 ;;
V2.6.0) PATCH270 ;;
V2.7.0) PATCH280 ;;
V2.8.0) PATCH2100 ;;
V2.9.0) echo -e "$GE Kein Patch nötig...\n" ;;
V2.10.0) PATCH2110 ;;
V2.11.0) PATCH2111 ;;
V2.11.1) PATCH2120 ;;
V2.12.0) PATCH2121 ;;
V2.12.1) PATCH2130 ;;
V2.13.0) PATCH2140 ;;
V2.14.0) PATCH2150 ;;
V2.15.0) PATCH2160 ;;
V2.16.0) PATCH2170 ;;
V2.17.0) PATCH2180 ;;
V2.18.0) PATCH2190 ;;
V2.19.0) PATCH2200 ;;
V2.20.0) PATCH2210 && exit 0;;
V2.21.0) echo -e "$GE Version ist bereits aktuell...\n" && exit 0;;
*) FEHLER
esac
done
exit 0
}
main() {
#Wetterstation im Verzeichnis vorhanden
if [ ! -f ./wetterstation.sh ]; then
echo -e "\n$RE Keine Version von WLAN-Wetterstation im aktuellen Verzeichnis gefunden...\n"
exit 1
fi
#aktuelle Version von GitHub holen
GitHub=$(curl -sH "Accept: application/vnd.github.v3+json" https://api.github.com/repos/SBorg2014/WLAN-Wetterstation/releases/latest)
akt_ver_long=$(echo ${GitHub} | jq -r '.name' | sed -e 's/-/vom/; s/\"//g')
akt_version=$(echo ${GitHub} | jq -r '.tag_name')
info_version=$(echo ${GitHub} | jq -r '.body' | tr -d '*\\')
echo -e " Aktuelle Version (latest) auf GitHub: ${GR}$akt_ver_long$WE"
VERSION=$(cat ./wetterstation.sh|grep "SH_VER"|cut -d"=" -f2|tr -d \")
echo -e " Version im aktuellen Verzeichnis : ${GR}$VERSION"
if [ "$VERSION" == "$akt_version" ]; then echo -e "\n$GE Version ist bereits aktuell...\n"; exit 0; fi
echo -e "\n$WE Informationen zum Release $akt_version:"
echo -e " ─────────────────────────────────────────────────────────────"
echo -e "\n$GE $info_version\n$WE"
jn_abfrage "\n$WE Soll ein Update von WLAN-Wetterstation durchgeführt werden?"
if [ -z $antwort ]; then echo -e "\n"; exit 0; fi
#Update
echo -e "\n\n$WE Führe Update aus...\n"
DL_URL=$(echo ${GitHub} | jq -r '.assets | .[].browser_download_url')
curl -LJ ${DL_URL} -o tmp.zip
unzip -o tmp.zip -x wetterstation.conf
sudo chmod +x wetterstation.sh ws_updater.sh
rm tmp.zip
source ./ws_updater.sh --patch
jn_abfrage "\n ${WE}Update ausgeführt. Soll der Service nun neu gestartet werden?"
if [ ! -z $antwort ]; then echo -e "\n"; sudo systemctl restart wetterstation.service; fi
exit
}
########################################################################################
#Patch Version V1.4.0 auf V1.5.0
PATCH140() {
backup
echo -e "\n Patche wetterstation.conf auf V1.5.0 ..."
sed -i '/^.#Port der Wetterstation/i \ #Protokoll (HTTP oder HTTPS) \/ default: HTTP\n WEB=HTTP\n\n #User-Authentifizierung falls benutzt; sonst leer lassen\n AUTH_USER=\n AUTH_PASS=\n' ./wetterstation.conf
sed -i 's/### Settings V1.4.0/### Settings V1.5.0/' ./wetterstation.conf
echo -e " Fertig...\n"
}
#Patch Version V1.5.0 auf V1.6.0
PATCH150() {
backup
echo -e "\n Patche wetterstation.conf auf V1.6.0 ..."
sed -i 's/### Settings V1.5.0/### Settings V1.6.0/' ./wetterstation.conf
echo -e " Fertig...\n"
}
#Patch Version V1.6.0 auf V2.0.0
PATCH160() {
backup
echo -e "\n Patche wetterstation.conf auf V2.0.0 ..."
sed -i '/^.#Protokoll (HTTP oder HTTPS)/i \ #Protokoll der Wetterstation [1/2] \/ 1=Wunderground ; 2=Ecowitt \/ default: 1\n WS_PROTOKOLL=1\n\n #Anzahl der vorhandenen DP50 Sensoren \/ default: 0\n ANZAHL_DP50=0\n\n #HTTP Anzahl der vorhandenen DP100 Sensoren \/ default: 0\n ANZAHL_DP100=0\n' ./wetterstation.conf
sed -i 's/### Settings V1.6.0/### Settings V2.0.0/' ./wetterstation.conf
echo -e " Fertig...\n"
}
#Patch Version V2.0.0 auf V2.1.0
PATCH210() {
backup
echo -e "\n Patche wetterstation.conf auf V2.1.0 ..."
sed -i 's/#Protokoll der Wetterstation [1\/2] \/ 1=Wunderground ; 2=Ecowitt \/ default: 1/#Protokoll der Wetterstation [1\/2\/9] \/ 1=Wunderground ; 2=Ecowitt ; 9=Sainlogic Profi \/ default: 1/' ./wetterstation.conf
sed -i 's/### Settings V2.0.0/### Settings V2.1.0/' ./wetterstation.conf
echo -e " Fertig...\n"
}
#Patch Version V2.1.0 auf V2.2.0
PATCH220() {
backup
echo -e "\n Patche wetterstation.conf auf V2.2.0 ..."
sed -i 's/Chillfaktor/gefühlte Temperatur/' ./wetterstation.conf
sed -i 's/### Settings V2.1.0/### Settings V2.2.0/' ./wetterstation.conf
echo -e " Fertig...\n"
}
#Patch Version V2.2.0 auf V2.3.0
PATCH230() {
backup
echo -e "\n Patche wetterstation.conf auf V2.3.0 ..."
sed -i '/#Anzahl der vorhandenen DP50/,/ANZAHL_DP100=/c\ #Anzahl der vorhandenen Zusatzsensoren \/ default: 0\n ANZAHL_DP50=0\n ANZAHL_DP60=0\n ANZAHL_DP100=0' ./wetterstation.conf
sed -i '/^.#letztes Regenereignis/i \ #InfluxDB-Konfiguration \/ ohne InfluxDB alles leer lassen\n #IP und Port der API [xxx.xxx.xxx.xxx:xxxxx]\n INFLUX_API=\n #Name, User und Passwort der InfluxDB-Datenbank\n INFLUX_DB=\n INFLUX_USER=\n INFLUX_PASSWORD=\n' ./wetterstation.conf
sed -i 's/### Settings V2.2.0/### Settings V2.3.0/' ./wetterstation.conf
echo -e " Fertig...\n"
echo -e " ${GE}Eventuelle Zusatzsensoren DP50/60/100 müssen neu eingetragen werden!"
echo -e " Neuen Configblock für Influx beachten/konfigurieren!\n"
}
#Patch Version V2.3.0 auf V2.4.0
PATCH240() {
backup
echo -e "\n Patche wetterstation.conf auf V2.4.0 ..."
sed -i '/^.*ANZAHL_DP100=.*/a \ ANZAHL_DP200=0' ./wetterstation.conf
sed -i 's/### Settings V2.3.0/### Settings V2.4.0/' ./wetterstation.conf
echo -e " Fertig...\n"
echo -e " ${GE}Eventuelle Zusatzsensoren DP200 müssen eingetragen werden!\n"
}
#Patch Version V2.4.0 auf V2.5.0
PATCH250() {
backup
echo -e "\n Patche wetterstation.conf auf V2.5.0 ..."
sed -i '/^.*ANZAHL_DP100=.*/i \ ANZAHL_DP70=0' ./wetterstation.conf
sed -i 's/### Settings V2.4.0/### Settings V2.5.0/' ./wetterstation.conf
echo -e " Fertig...\n"
echo -e " ${GE}Eventuelle Zusatzsensoren DP70 müssen eingetragen werden!\n"
}
#Patch Version V2.5.0 auf V2.6.0
PATCH260() {
backup
echo -e "\n Patche wetterstation.conf auf V2.6.0 ..."
patch_260 && patch ./wetterstation.conf < patch
rm patch
echo -e " ${GE}Windy kann nun mittels \033[30m\033[47m./wetterstation.sh --windy_reg\033[0m ${GE}eingerichtet werden !\n"
}
#Patch Version V2.6.0 auf V2.7.0
PATCH270() {
backup
echo -e "\n Patche wetterstation.conf auf V2.7.0 ..."
sed -i '/^.*ANZAHL_DP200=.*/a \ ANZAHL_DP250=0' ./wetterstation.conf
sed -i 's/### Settings V2.6.0/### Settings V2.7.0/' ./wetterstation.conf
echo -e " Fertig...\n"
echo -e " ${GE}Eventueller Zusatzsensor DP250/WH45 muss eingetragen werden!\n"
}
#Patch Version V2.7.0 auf V2.8.0
PATCH280() {
backup
echo -e "\n Patche wetterstation.conf auf V2.8.0 ..."
sed -i '/^.*SONNENSCHEIN_TXTFORMAT=.*/a \ \n\n #Daten an Wetter.com senden (leer lassen falls nicht gewünscht)?\n WETTERCOM_ID=\n WETTERCOM_PW=' ./wetterstation.conf
sed -i 's/### Settings V2.7.0/### Settings V2.8.0/' ./wetterstation.conf
echo -e " Fertig...\n"
echo -e " ${GE}Falls die Übertragung der Wetterdaten an wetter.com erfolgen soll, nun aktivieren durch eintragen von User-ID und Passwort!\n"
}
#Patch Version V2.8.0 auf V2.10.0
PATCH2100() {
backup
echo -e "\n Patche wetterstation.conf auf V2.10.0 ..."
patch_2100 && patch ./wetterstation.conf < patch.dat
rm patch.dat
echo -e " Fertig...\n"
echo -e " ${GE}Eventuelle Zusatzsensoren DP300/WS68, DP40/WH32 oder WH25/WH31 müssen eingetragen werden!\n"
}
#Patch Version V2.10.0 auf V2.11.0
PATCH2110() {
backup
echo -e "\n Patche wetterstation.conf auf V2.11.0 ..."
sed -i 's/### Settings V2.10.0/### Settings V2.11.0/' ./wetterstation.conf
sed -i '/^.*debug=.*/a \ \n #Verhalten bei Kommunikationsfehler [true/false] / default: false / Soll der Datenpunkt automatisch resettet werden?\n RESET_KOMFEHLER=false' ./wetterstation.conf
echo -e " Fertig...\n"
echo -e " ${GE}Parameter für Kommunikationsfehler ggf. ändern. Per Default verbleibt er im Zustand 'true' bei einem Fehler.\n"
}
#Patch Version V2.11.0 auf V2.11.1
PATCH2111() {
backup
echo -e "\n Patche wetterstation.conf auf V2.11.1 ..."
sed -i 's/### Settings V2.11.0/### Settings V2.11.1/' ./wetterstation.conf
sed -i 's/Sainlogic Profi/DNS/' ./wetterstation.conf
echo -e " Fertig...\n"
}
#Patch Version V2.11.1 auf V2.12.0
PATCH2120() {
backup
echo -e "\n Patche wetterstation.conf auf V2.12.0 ..."
sed -i 's/### Settings V2.11.1/### Settings V2.12.0/' ./wetterstation.conf
sed -i '/^.*WETTERCOM_PW=.*/a \ \n #Fix aktivieren bei fehlerhafter Außentemperatur [true/false] / default: false\n #Bei unplausiblem Messwert wird kein Datenpaket an den ioB geschickt\n FIX_AUSSENTEMP=false' ./wetterstation.conf
echo -e " Fertig...\n"
echo -e " ${GE}Parameter für FIX_AUSSENTEMP ggf. ändern. Per Default werden auch unplausible Messwerte an den ioB geschickt.\n"
}
#Patch Version V2.12.0 auf V2.12.1
PATCH2121() {
backup
echo -e "${WE}\n Patche wetterstation.conf auf V2.12.1 ..."
sed -i 's/### Settings V2.12.0/### Settings V2.12.1/' ./wetterstation.conf
echo -e "${WE} Fertig...\n"
}
#Patch Version V2.12.1 auf V2.13.0
PATCH2130() {
backup
echo -e "${WE}\n Patche wetterstation.conf auf V2.13.0 ..."
sed -i 's/### Settings V2.12.1/### Settings V2.13.0/' ./wetterstation.conf
sed -i '/^.*ANZAHL_WH31=.*/a \ ANZAHL_DP35=0' ./wetterstation.conf
echo -e "${WE} Fertig...\n"
echo -e " ${GE}Eventuelle Zusatzsensoren DP35 müssen eingetragen werden!\n"
}
#Patch Version V2.13.0 auf V2.14.0
PATCH2140() {
backup
echo -e "${WE}\n Patche wetterstation.conf auf V2.14.0 ..."
sed -i 's/### Settings V2.13.0/### Settings V2.14.0/' ./wetterstation.conf
sed -i '/^.*WEB=HTTP.*/a \\n #Ignoriere Zertifikatsfehler bei der Simple-Restful-API [true/false] / default: false / nötig bei eigenen Zertifikaten\n WEB_IGN_SSL_ERROR=false' ./wetterstation.conf
echo -e "${WE} Fertig...\n"
}
#Patch Version V2.14.0 auf V2.15.0
PATCH2150() {
backup
echo -e "${WE}\n Patche wetterstation.conf auf V2.15.0 ..."
sed -i 's/### Settings V2.14.0/### Settings V2.15.0/' ./wetterstation.conf
sed -i '/^.*WETTERCOM_PW=.*/a \\n\n #Daten an Wunderground.com senden? [true/false] / default: false\n #Nur nötig und sinnvoll bei WS_PROTOKOLL=9 (DNS) wenn trotzdem auch Daten weiterhin an Wunderground.com gesendet werden sollen.\n WUNDERGROUND_UPDATE=false' ./wetterstation.conf
sed -i 's/#InfluxDB-Konfiguration/#InfluxDB-Konfiguration für Influx V1.x.x/' ./wetterstation.conf
echo -e "${WE} Fertig...\n"
echo -e " ${GE}Die Datenübertragung an Wunderground.com kann nun aktiviert werden!\n"
}
#Patch Version V2.15.0 auf V2.16.0
PATCH2160() {
backup
echo -e "${WE}\n Patche wetterstation.conf auf V2.16.0 ..."
sed -i 's/### Settings V2.15.0/### Settings V2.16.0/' ./wetterstation.conf
sed -i '/^.*IPP=.*/a \\n #Protokoll, ioBroker-IP und Port der Rest-API [http(s)://xxx.xxx.xxx.xxx:xxxxx] / leer lassen falls nicht benutzt\n RESTAPI_URL=\n RESTAPI_USER=\n RESTAPI_PW=' ./wetterstation.conf
echo -e "${WE} Fertig...\n"
echo -e " ${GE}Die Rest-API kann nun durch Eingabe der URL und den Zugangsdaten aktiviert werden!\n"
}
#Patch Version V2.16.0 auf V2.17.0
PATCH2170() {
backup
echo -e "${WE}\n Patche wetterstation.conf auf V2.17.0 ..."
sed -i 's/### Settings V2.16.0/### Settings V2.17.0/' ./wetterstation.conf
sed -i '/^.*WUNDERGROUND_UPDATE=.*/a \\n #Windrichtung und -geschwindigkeit der letzten 10 Minuten anstelle aktueller Werte an\n #windy/OpenSenseMap/wetter.com übertragen? [true/false] / default: false\n USE_AVG_WIND=false' ./wetterstation.conf
if [ ${RESTAPI} == "true" ]; then make_objects ".Aussentemperatur_Trend" "Trend der Aussentemperatur der letzten Stunde" "number" "°C"; fi
echo -e "${WE} Fertig...\n"
echo -e " ${GE}Die alternative Datenübertragung von Windrichtung und -geschwindigkeit der letzten\n 10 Minuten an windy/OpenSenseMap/wetter.com kann nun aktiviert werden!"
echo -e " Einstellung dafür in der wetterstation.conf: ${BL}USE_AVG_WIND=true\n${WE}"
}
#Patch Version V2.17.0 auf V2.18.0
PATCH2180() {
backup
echo -e "${WE}\n Patche wetterstation.conf auf V2.18.0 ..."
sed -i 's/### Settings V2.17.0/### Settings V2.18.0/' ./wetterstation.conf
sed -i '/^.*ANZAHL_DP35=.*/i \ ANZAHL_DP10=0' ./wetterstation.conf
if [ ${RESTAPI} == "true" ]; then
make_objects ".Info.Wolkenbasis" "Höhe der Wolkenbasis" "number" "m"
make_objects ".Info.Shellscriptversion" "Versionsnummer des Scriptes" "string"
make_objects ".Windrichtung_Text_10min" "Windrichtung Durchschnitt 10 Minuten als Text" "string"
fi
echo -e "${WE} Fertig...\n"
echo -e " ${GE}Eventuelle Zusatzsensoren DP10/WN35 können nun eingetragen werden!\n${WE}"
}
#Patch Version V2.18.0 auf V2.19.0
PATCH2190() {
backup
echo -e "${WE}\n Patche wetterstation.conf auf V2.19.0 ..."
sed -i 's/### Settings V2.18.0/### Settings V2.19.0/' ./wetterstation.conf
sed -i '/^.*ANZAHL_WH31=.*/a \ ANZAHL_WS90=0' ./wetterstation.conf
if [ ${RESTAPI} == "true" ]; then make_objects ".Info.Wetterwarnung" "mögliche Wetterereignisse" "string"
# #Abfrage starten zum Anlegen der DPs des WS90
# jn_abfrage "${WE} Sollen nun Datenpunkte für den WS90 angelegt werden...(nur sinnvoll wenn man auch einen hat ;-))?"
# if [ ! -z $antwort ]; then
# make_objects ".WS90" "WS90 Wittboy" "folder"
# make_objects ".WS90.1.aktuelle_Regenrate" "WS90 Kanal 1 aktuelle Regenrate" "number" "mm/h"
# fi
fi
echo -e "\n${WE} Fertig...\n"
echo -e " ${GE}Eventueller Zusatzsensor WS90 kann nun eingetragen werden!${WE}"
# if [ ${RESTAPI} != "true" ] || [ -z $antwort ]; then echo -e " ${GE}Dazu noch 'wetterstation.js' im ioB ersetzen, konfigurieren und einmalig ausführen.\n${WE}"; fi
echo -e " ${GE}Dazu noch 'wetterstation.js' im ioB ersetzen, konfigurieren und einmalig ausführen.\n${WE}"
}
#Patch Version V2.19.0 auf V2.20.0
PATCH2200(){
backup
echo -e "${WE}\n Patche wetterstation.conf auf V2.20.0 ..."
sed -i 's/### Settings V2.19.0/### Settings V2.20.0/' ./wetterstation.conf
echo -e "\n${WE} Fertig...\n"
}
#Patch Version V2.20.0 auf V2.21.0
PATCH2210(){
backup
echo -e "${WE}\n Patche wetterstation.conf auf V2.21.0 ..."
sed -i 's/### Settings V2.20.0/### Settings V2.21.0/' ./wetterstation.conf
sed -i '/^.*Ende Usereinstellungen.*/i \\n #############################################################################################\n ### AWEKAS - Einstellungen (nur nötig falls AWEKAS benutzt werden soll) ###\n #############################################################################################' ./wetterstation.conf
sed -i '/^.*Ende Usereinstellungen.*/i \\n #AWEKAS aktivieren [true/false] / default: false\n use_awekas=false\n\
#AWEKAS Login Username und Password\n AWEKAS_USER=\n AWEKAS_PW=\n\
#############################################################################################\
### AWEKAS - Ende der Einstellungen ###################################################\
#############################################################################################\n' ./wetterstation.conf
echo -e "\n${WE} Fertig...\n"
}
patch_260() {
cat <<EoD >patch
--- wetterstation.conf_250 2021-05-13 13:45:06.297750501 +0200
+++ wetterstation.conf 2021-05-12 18:39:24.358821394 +0200
@@ -1,4 +1,4 @@
-### Settings V2.5.0 -----------------------------------------------------------
+### Settings V2.6.0 -----------------------------------------------------------
#Debuging einschalten [true/false] / default: false / Ausgabe der Messwerte
debug=false
@@ -112,5 +112,42 @@
#############################################################################################
+
+ #############################################################################################
+ ### Windy - Einstellungen (nur nötig falls Windy benutzt werden soll) ###
+ #############################################################################################
+
+ #Windy aktivieren [true/false] / default: false
+ use_windy=false
+
+ #Windy API-Key
+ windy_APIKey=
+
+ #Station [number: 0 - 2147483647] / default: 0
+ windy_Station=
+
+ #Name der Station [Text]
+ windy_Name=
+
+ #Latitude/Breitengrad der Station
+ windy_Latitude=
+
+ #Longitude/Längengrad der Station
+ windy_Longitude=
+
+ #Elevation/Höhe ÜNN
+ windy_Elevation=
+
+ #Montagehöhe Temperatursensor über Boden
+ windy_Tempheight=
+
+ #Montagehöhe Windsensor über Boden
+ windy_Windheight=
+
+ #############################################################################################
+ ### Windy - Ende der Einstellungen ####################################################
+ #############################################################################################
+
+
### Ende Usereinstellungen
###EoF
EoD
}
patch_2100() {
cat <<EofP >patch.dat
--- wetterstation.org 2021-10-26 20:01:56.772982845 +0200
+++ wetterstation.conf 2021-10-26 20:04:21.625615091 +0200
@@ -1,7 +1,10 @@
-### Settings V2.8.0 -----------------------------------------------------------
+### Settings V2.10.0 -----------------------------------------------------------
#Debuging einschalten [true/false] / default: false / Ausgabe der Messwerte
debug=false
+ #Logging einschalten [true/false] / default: false / schreibt die Datenstrings der Station in eine Datei
+ logging=false
+
#ioBroker-IP und Port der Simple-Restful-API [xxx.xxx.xxx.xxx:xxxxx]
IPP=192.168.1.3:8087
@@ -9,12 +12,15 @@
WS_PROTOKOLL=1
#Anzahl der vorhandenen Zusatzsensoren / default: 0
+ ANZAHL_WH31=0
+ ANZAHL_DP40=0
ANZAHL_DP50=0
ANZAHL_DP60=0
ANZAHL_DP70=0
ANZAHL_DP100=0
ANZAHL_DP200=0
ANZAHL_DP250=0
+ ANZAHL_DP300=0
#Protokoll (HTTP oder HTTPS) / default: HTTP
WEB=HTTP
EofP
}
jn_abfrage() {
echo -en "\n$1 ${WE}[${GR}J/N${WE}]"
read -n 1 -p ": " JN
if [ "$JN" = "J" ] || [ "$JN" = "j" ]; then
antwort=true
else
unset antwort
fi
}
install() {
#WLAN-Wetterstation Installationsroutine
jn_abfrage "${WE}\n Möchten Sie ${BL}WLAN-Wetterstation${WE} im aktuellen Verzeichnis installieren?"
if [ -z $antwort ]; then echo -e "\n ${RE}Abbruch...${WE}\n\n"; exit 1; fi
unset antwort
#aktuelle Version feststellen, downloaden und entpacken
echo -e "\n\n\n Hole Daten von GitHub..."
GitHub=$(curl -sH "Accept: application/vnd.github.v3+json" https://api.github.com/repos/SBorg2014/WLAN-Wetterstation/releases/latest)
akt_version=$(echo ${GitHub} | jq -r '.name' | sed -e 's/-/vom/; s/\"//g')
echo -e " Aktuelle Version: ${GR}${akt_version}${WE}"
DL_URL=$(echo ${GitHub} | jq -r '.assets | .[].browser_download_url')
echo -e " Lade Datei von GitHub herunter...\n"
curl -LJ ${DL_URL} -o tmp.zip
echo -e "\n Entpacke Dateien...\n"
unzip -n tmp.zip
echo -e "\n Lösche Dateidownload..."
rm tmp.zip
echo -e "\n Dateien ausführbar setzen..."
chmod +x ws_updater.sh wetterstation.sh
jn_abfrage "\n${WE} Soll WLAN-Wetterstation nun als Service eingerichtet werden?"
if [ ! -z $antwort ]; then service; fi
#Konfiguration öffnen
jn_abfrage "\n${WE} Konfiguration nun öffnen?"
if [ ! -z $antwort ]; then
if [ ! -f ~/.selected_editor ]; then update-alternatives --config editor; fi
$(cat ~/.selected_editor | grep SELECTED_EDITOR | cut -d"=" -f2 | tr -d \") wetterstation.conf
fi
#DPs im ioB anlegen...
jn_abfrage "\n${BL} Nun mittels des Javascriptes ${GE}'wetterstation.js'${BL} die Datenpunkte im ioBroker anlegen! Fertig [\e[101m Nein=Abbruch \e[0m${BL}]?"
if [ -z $antwort ]; then echo -e "\n"; exit 1; fi
unset antwort
#Testlauf starten
jn_abfrage "\n${WE} Einmaligen Testdurchlauf im Debug-Modus starten...(empfiehlt sich)?"
if [ ! -z $antwort ]; then ./wetterstation.sh --debug; fi
#enable Service
jn_abfrage "\n${WE} WLAN-Wetterstation Service nun starten?"
if [ ! -z $antwort ]; then sudo systemctl start wetterstation.service; fi
echo -e "\n\n Fertig..."
echo -e " Wenn der Testlauf ausgeführt wurde und erfolgreich verlief, sollten nun aktuelle Daten\n der Wetterstation im ioBroker in den Datenpunkten stehen ;-)\n"
}
service() {
#existiert der Service schon?
if [ -f /etc/systemd/system/wetterstation.service ]; then
echo -e "\n\n ${RE}Wetterstation-Service existiert bereits!${WE}\n"
return 0
fi
sudo tee -a /etc/systemd/system/wetterstation.service > /dev/null <<-EoD
[Unit]
Description=Service für ioBroker Wetterstation
[Service]
User=$(whoami)
Group=$(whoami)
ExecStart=${DIR}/wetterstation.sh
[Install]
WantedBy=multi-user.target
EoD
echo -e "\n Aktiviere den Service nun..."
sudo systemctl daemon-reload
sudo systemctl enable wetterstation.service
echo -e "\n ${GE}Der Service kann nun mittels ${GR}systemctl start wetterstation${GE} gestartet werden..."
}
usage() {
echo -e "\nusage: ws_updater [[--install] | [--patch] | [--service] | [-h|--help]]\n"
echo -e " --install\tinstalliert WLAN-Wetterstation im aktuellen Verzeichnis"
echo -e " --patch\tpatcht die 'wetterstation.conf' auf eine neue Version"
echo -e " --service\trichtet WLAN-Wetterstation als Service ein"
echo -e " -h | --help\tdieses Hilfemenue\n"
}
menu() {
clear
echo -e "$WE\n\n\n"
echo -e "\t Auswahlmenü für WLAN-Wetterstation:"
echo -e "\t_____________________________________\n\n"
echo -e "\t [${BL}1${WE}] im aktuellen Verzeichnis installieren\n"
echo -e "\t [${BL}2${WE}] als Service einrichten\n"
echo -e "\t [${BL}3${WE}] Konfigurationsdatei patchen\n"
echo -e "\t [${BL}4${WE}] Update ausführen\n\n"
echo -e "\t [${BL}E${WE}] Exit\n\n\n"
echo -en "\t Ihre Auswahl: [${GR}1-4,E${WE}]"
read -n 1 -p ": " MENU_AUSWAHL
echo -e "\n"
case $MENU_AUSWAHL in
1) source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --install
exit 0 ;;
2) source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --service
exit 0 ;;
3) source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --patch
exit 0 ;;
4) source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --gitup
exit 0 ;;
e|E) exit 0 ;;
*) menu
esac
}
make_objects(){
#1: ID
#2: name
#3: type
#4: unit
echo -e "\n ${WE}Lege neues Object im ioBroker an: $BL${PRE_DP}$1$WE"
local TOKEN=$(echo -n ${RESTAPI_USER}:${RESTAPI_PW} | base64)
#build Data-String
local DATA=$(cat <<-EOD
{
"_id": "${PRE_DP}$1",
"type": "state",
"common": {
"name": "$2",
"type": "$3",
"role": "state"
},
"native": {
"name": "$2",
"type": "$3",
"role": "state"
}
}
EOD
)
#Check 4 Units
if [ "$4" != "" ]; then DATA=$(echo $DATA | sed "s|\"role\": \"state\"|\"role\": \"state\", \"unit\": \"$4\"|g"); fi
local RESULT=$(curl -skX 'POST' \
${RESTAPI_URL}'/v1/object/'${PRE_DP}${1} \
-H 'accept: application/json' \
-H 'authorization: Basic '${TOKEN} \
-H 'Content-Type: application/json' \
--data "$DATA"
)
#Fehler beim anlegen?
if [[ $RESULT == *"error"* ]]; then local FEHLER_ioB=$(echo ${RESULT} | jq -r '.error')
echo -e "${RE} Fehlermeldung beim Anlegen des Datenpunktes: ${FEHLER_ioB}${WE}\n"
fi
if [ "$RESULT" == "" ]; then echo -e "${RE} Keine Antwort der Rest-API erhalten! Stimmt das Protokoll (http/https), IP-Adresse und der Port?${WE}\n"; fi
}
#gibt es Parameter?
while [ "$1" != "" ]; do
case $1 in
--install ) checker
install
exit 0
;;
--menu ) menu
exit 0
;;
--service ) service
exit 0
;;
--gitup ) checker
main
exit 0
;;
--patch ) checker
patcher
exit 0
;;
-h | --help ) usage
exit 0
;;
* ) echo -e "\n${RE}\"$1\"${WE} wird nicht unterstützt...\n\n"
usage
exit 1
esac
shift
done
checker
main