├── .gitattributes
├── .github
└── stale.yml
├── Bilder
├── Awekas_Einrichtung_Station.png
├── Awekas_Einrichtung_Station1.png
├── Awekas_Stationsseite.png
├── Awekas_Stationsweb.png
├── Grafana-0.png
├── Grafana-1.png
├── Grafana-Dashboard_V8.png
├── Grafana-Dashboard_V8a.png
├── Grafana-Settings_V3.png
├── Grafana_V3a.png
├── Grafana_V3b.png
├── Influx_logging.png
├── OSEM SenseBox.png
├── OSEM Sensoren.png
├── OSEM Wetterstation_conf.png
├── OSEM_Messwerte.png
├── OSEM_User.png
├── WOW Settings1.png
├── WOW Settings1a.png
├── WOW Settings2.png
├── WOW Settings3.png
├── WOW.png
├── WS_View_Config_Ecowitt.png
├── WS_View_Config_Felder.png
├── Wettercom.png
├── Wetterstatistik_DP_Control.png
├── Wetterstatistik_DP_Data.png
├── Wetterstatistik_DP_Uebersicht.png
├── Wetterstatistik_DPs.png
├── Windy.png
├── Windy_APIKey.png
├── Windy_Registrierung.png
├── debug.png
├── ioB-Datenpunkte.png
├── iobroker_objekte.png
├── objekte_iobroker.png
├── wetter_com.png
└── wettercom.gif
├── Docker
└── docker-compose.yml
├── Grafana Dashboard
├── README.md
├── Wetterstation-Dashboard(Grafana V8.x).json
├── Wetterstation-Dashboard.json
└── Wetterstation-Dashboard_V3.json
├── LICENSE
├── README.md
├── _config.yml
├── firmware.version
├── wetterstation-statistik.js
├── wetterstation.conf
├── wetterstation.js
├── wetterstation.sh
├── wetterstation.sub
├── ws_updater.beta
└── ws_updater.sh
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.github/stale.yml:
--------------------------------------------------------------------------------
1 | # Number of days of inactivity before an issue becomes stale
2 | daysUntilStale: 14
3 | # Number of days of inactivity before a stale issue is closed
4 | daysUntilClose: 7
5 | # Issues with these labels will never be considered stale
6 | exemptLabels:
7 | - pinned
8 | - security
9 | - enhancement
10 | # Label to use when marking an issue as stale
11 | staleLabel: wontfix
12 | # Comment to post when marking an issue as stale. Set to `false` to disable
13 | markComment: >
14 | This issue has been automatically marked as stale because it has not had
15 | recent activity. It will be closed in 7 days if no further activity occurs. Thank you
16 | for your contributions.
17 | # Comment to post when closing a stale issue. Set to `false` to disable
18 | closeComment: false
19 |
--------------------------------------------------------------------------------
/Bilder/Awekas_Einrichtung_Station.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Awekas_Einrichtung_Station.png
--------------------------------------------------------------------------------
/Bilder/Awekas_Einrichtung_Station1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Awekas_Einrichtung_Station1.png
--------------------------------------------------------------------------------
/Bilder/Awekas_Stationsseite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Awekas_Stationsseite.png
--------------------------------------------------------------------------------
/Bilder/Awekas_Stationsweb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Awekas_Stationsweb.png
--------------------------------------------------------------------------------
/Bilder/Grafana-0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Grafana-0.png
--------------------------------------------------------------------------------
/Bilder/Grafana-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Grafana-1.png
--------------------------------------------------------------------------------
/Bilder/Grafana-Dashboard_V8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Grafana-Dashboard_V8.png
--------------------------------------------------------------------------------
/Bilder/Grafana-Dashboard_V8a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Grafana-Dashboard_V8a.png
--------------------------------------------------------------------------------
/Bilder/Grafana-Settings_V3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Grafana-Settings_V3.png
--------------------------------------------------------------------------------
/Bilder/Grafana_V3a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Grafana_V3a.png
--------------------------------------------------------------------------------
/Bilder/Grafana_V3b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Grafana_V3b.png
--------------------------------------------------------------------------------
/Bilder/Influx_logging.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Influx_logging.png
--------------------------------------------------------------------------------
/Bilder/OSEM SenseBox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/OSEM SenseBox.png
--------------------------------------------------------------------------------
/Bilder/OSEM Sensoren.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/OSEM Sensoren.png
--------------------------------------------------------------------------------
/Bilder/OSEM Wetterstation_conf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/OSEM Wetterstation_conf.png
--------------------------------------------------------------------------------
/Bilder/OSEM_Messwerte.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/OSEM_Messwerte.png
--------------------------------------------------------------------------------
/Bilder/OSEM_User.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/OSEM_User.png
--------------------------------------------------------------------------------
/Bilder/WOW Settings1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/WOW Settings1.png
--------------------------------------------------------------------------------
/Bilder/WOW Settings1a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/WOW Settings1a.png
--------------------------------------------------------------------------------
/Bilder/WOW Settings2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/WOW Settings2.png
--------------------------------------------------------------------------------
/Bilder/WOW Settings3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/WOW Settings3.png
--------------------------------------------------------------------------------
/Bilder/WOW.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/WOW.png
--------------------------------------------------------------------------------
/Bilder/WS_View_Config_Ecowitt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/WS_View_Config_Ecowitt.png
--------------------------------------------------------------------------------
/Bilder/WS_View_Config_Felder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/WS_View_Config_Felder.png
--------------------------------------------------------------------------------
/Bilder/Wettercom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Wettercom.png
--------------------------------------------------------------------------------
/Bilder/Wetterstatistik_DP_Control.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Wetterstatistik_DP_Control.png
--------------------------------------------------------------------------------
/Bilder/Wetterstatistik_DP_Data.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Wetterstatistik_DP_Data.png
--------------------------------------------------------------------------------
/Bilder/Wetterstatistik_DP_Uebersicht.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Wetterstatistik_DP_Uebersicht.png
--------------------------------------------------------------------------------
/Bilder/Wetterstatistik_DPs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Wetterstatistik_DPs.png
--------------------------------------------------------------------------------
/Bilder/Windy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Windy.png
--------------------------------------------------------------------------------
/Bilder/Windy_APIKey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Windy_APIKey.png
--------------------------------------------------------------------------------
/Bilder/Windy_Registrierung.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/Windy_Registrierung.png
--------------------------------------------------------------------------------
/Bilder/debug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/debug.png
--------------------------------------------------------------------------------
/Bilder/ioB-Datenpunkte.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/ioB-Datenpunkte.png
--------------------------------------------------------------------------------
/Bilder/iobroker_objekte.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/iobroker_objekte.png
--------------------------------------------------------------------------------
/Bilder/objekte_iobroker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/objekte_iobroker.png
--------------------------------------------------------------------------------
/Bilder/wetter_com.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/wetter_com.png
--------------------------------------------------------------------------------
/Bilder/wettercom.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/c9244ae7528e0cfcff37cf760175eb55dd969b1c/Bilder/wettercom.gif
--------------------------------------------------------------------------------
/Docker/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3"
2 | services:
3 | wetterstation:
4 | network_mode: host
5 | restart: always
6 | image: ubuntu:jammy-20240227
7 | container_name: wetterstation
8 | hostname: wetterstation
9 | volumes:
10 | - ./wetterstation:/opt/wetterstation
11 | ports:
12 | - 1080:1080
13 | command: >
14 | /bin/bash -c
15 | "
16 | apt-get update &&
17 | apt-get install -y apt-transport-https ca-certificates gnupg netcat-openbsd bc jq dc nano sudo curl &&
18 | cd /opt/wetterstation && chmod +x wetterstation.sh && /opt/wetterstation/wetterstation.sh
19 | "
20 |
21 |
--------------------------------------------------------------------------------
/Grafana Dashboard/README.md:
--------------------------------------------------------------------------------
1 | Ersteller: crunchip@forum.iobroker.net
2 | Modifikationen: sborg@forum.iobroker.net
3 |
4 | Das Grafana-Dashboard als JSON-Export.
5 |
6 | V3.0 des Dashboards ist speziell auf InfluxDB V2.x angepasst. Die Abfrage erfolgt mittels Flux.
7 | Benötigt :
8 | * Boom Theme Plugin (für das Hintergrundbild)
9 | * Spectraphilic Windrose Plugin
10 | * Blendstat Panel (by farski) Plugin
11 | * Table Plugin
12 |
13 | Installation des Windrose-Plugins:
14 | ```
15 | sudo su -
16 | cd /var/lib/grafana/plugins
17 | git clone https://github.com/spectraphilic/grafana-windrose.git
18 | ```
19 | Das Plugin in Grafana laden, dazu die `grafana.ini` bearbeiten:
20 | ```
21 | nano /etc/grafana/grafana.ini
22 | ```
23 | und unter **[plugins]** das laden erlauben:
24 | ```
25 | [plugins]
26 | allow_loading_unsigned_plugins = spectraphilic-windrose-panel
27 | ```
28 | Nun noch den Grafana Service neu starten.
29 |
30 | Für die Wetter- und Regenvorhersage werden weitere Datenpunkte aus den Adaptern "Das Wetter" und "Weatherunderground"
31 | benötigt, sowie weitere Datenpunkte aus dem ioBroker (bspw. "Ozon" oder "Strahlenbelastung" etc.).
32 |
33 | Die Konfiguration des Dashboardes erfolgt in dessen Settings über die Variablen:
34 | 
35 |
36 | Hier besteht die Möglichkeit mit zwei unterschiedlichen Buckets zu arbeiten. Nutzt man nur eines für alles (was ich nicht
37 | unbedingt empfehlen würde) trägt man bei beiden den gleichen Bucketnamen ein.
38 |
39 | Bilder zur V3.0:
40 | 
41 | 
42 | ---
43 |
44 |
45 | V2.0 ist für Grafana V8.x angepasst und enthällt zahlreiche Fixes für die einzelnen Panels.
46 |
47 | Benötigt :
48 | * Boom Theme Plugin (für das Hintergrundbild)
49 | * WindRose Plugin
50 | * Blendstat Panel (by farski) Plugin
51 | * Table Plugin
52 |
53 |
54 | Vor dem Import in der Datei ***\_\_DBname\_\_*** durch den eigenen Influx-Datenbanknamen ersetzen (40 Treffer bzw. bei V2.0 dann 45 Treffer), sonst gibt das
55 | später eine Klickorgie 😉
56 |
57 | Für die Wetter- und Regenvorhersage werden weitere Datenpunkte aus den Adaptern "Das Wetter" und "Weatherunderground"
58 | benötigt.
59 |
60 | KEIN Support zu Fragen bzgl. Influx, Grafana oder dem Import etc. des DashBoardes!
61 |
62 | Mit freundlicher Genehmigung zur Veröffentlichung von crunchip@forum.iobroker.net
63 |
64 |
65 |
66 |
67 | Creator: crunchip@forum.iobroker.net
68 | Modifications: sborg@forum.iobroker.net
69 |
70 | The Grafana dashboard as a JSON export.
71 | V2.0 is adapted for Grafana V8.x and contains numerous fixes for the individual panels.
72 |
73 | Requires:
74 | * Boom Theme plugin (for the background image)
75 | * WindRose plugin
76 | * Blendstat Panel (by farski) Plugin
77 | * Table Plugin
78 |
79 | Before importing, replace ***\_\_DBname\_\_*** in the file with your own Influx database name (40 hits or 45 hits with V2.0), otherwise you get
80 | later a click orgy 😉
81 |
82 | For the weather and rain forecast, further data points from the adapters "Das Wetter" and "Weatherunderground"
83 | needed.
84 |
85 | NO support for questions regarding Influx, Grafana or the import etc. of the DashBoard!
86 |
87 | Courtesy of crunchip@forum.iobroker.net for posting
88 |
89 |
90 | ---
91 |
92 | Bilder V2.0 / Pictures from V2.0:
93 | 
94 | 
95 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019-2024 SBorg2014
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # :partly_sunny: WLAN-Wetterstation
2 |
3 | [](https://github.com/SBorg2014/WLAN-Wetterstation/releases/latest)
4 | [](https://github/SBorg2014/WLAN-Wetterstation/)
5 | [](https://github.com/SBorg2014/WLAN-Wetterstation/releases/latest)
6 | [](https://github.com/SBorg2014/WLAN-Wetterstation/releases/latest)
7 | [](https://github.com/SBorg2014/WLAN-Wetterstation/graphs/contributors)
8 | [](https://github.com/SBorg2014/WLAN-Wetterstation/issues)
9 | [](https://github.com/SBorg2014/WLAN-Wetterstation/issues)
10 | [](https://github.com/SBorg2014/WLAN-Wetterstation/issues)
11 | [](https://github.com/SBorg2014/WLAN-Wetterstation/releases/latest)
12 | [](https://visitorbadge.io/status?path=SBorg2014%2FWLAN-Wetterstation)
13 | [](https://github.com/SBorg2014/WLAN-Wetterstation/blob/master/LICENSE)
14 | [
](https://api.gitsponsors.com/api/badge/link?p=E4fe5NJSbRsUJvEmBUW7KTRZMvejphK07f7hGHRGNm6EDSHEpb7x8898lN7IiN5i8JLpHVdSHZ6D4fwrPo4pGw==)
15 |
16 | schafft eine Verbindung von einer WLAN-Wetterstation zum ioBroker und kann optional die Wetterdaten für [AWEKAS.at](https://www.awekas.at), [openSenseMap](https://opensensemap.org), [Windy](https://www.windy.com), [WeatherObservationsWebsite (WOW)](https://wow.metoffice.gov.uk/) und [wetter.com](https://www.wetter.com) zur Verfügung stellen (__Projekt läuft nur unter Linux__)
17 |
18 | Die Wetterstation muss dazu in der Lage sein ihre Daten im "Wunderground/Ecowitt"-Format zu senden.
19 | Bisher getestete Stationen:
20 | - BRESSER®
21 | * WLAN Farb-Wetter Center mit 5-in-1 Profi-Sensor V (*)
22 | * WLAN Comfort Wetterstation mit 7-in-1 Profi-Sensor (*)
23 | - ChiliTec Funk Wetterstation 12in1
24 | - Curconsa FT0300 (*) (inkl. Zusatzsensor)
25 | - DNT Weatherscreen PRO
26 | - Ecowitt
27 | * Gateway GW1000
28 | * Gateway GW2000A
29 | * WS2910
30 | - ELV WS980WiFi
31 | - Eurochron EFWS 2900 (baugleich zu Sainlogic 10in1 Wifi, Ambient Weather WS-2902, Chilitec CTW-902 Wifi)
32 | - Froggit
33 | * Gateway/USB-Dongle DP1500/DP2000
34 | * HP1000SE Pro
35 | * WH3000 SE
36 | * WH4000 SE
37 | * WH6000 Pro
38 | - Renkforce WH2600
39 | - Sainlogic
40 | * 7in1 WiFi WS3500
41 | * Profi Wlan Wetterstation FT0300 (*)
42 | - Ventus W830
43 |
44 | (*) über DNS-Server wie bspw. PiHole oder dnsmasq
45 |
46 |
47 | Zusatzsensoren (mittels Station oder Gateway DP1500/DP2000/GW1000/GW2000A):
48 | - bis zu 8 Stück DP10/WN35 Blattfeuchte-Sensoren
49 | - bis zu 8 Stück DP30/WH31 Temperatur-Sensoren(3)(4)
50 | - bis zu 8 Stück DP35/WN34 Wassertemperatur-Sensoren
51 | - ein DP40/WH32 (bzw. WH26) Außentemperatur- und Luftfeuchtigkeitssensor
52 | - bis zu 8 Stück DP50/WH31A Temperatur-/Luftfeuchtigkeit-Sensoren(4)
53 | - ein DP60/WH57 Blitzsensor
54 | - bis zu 4 Stück DP70/WH55 Wasserleckage-Sensoren
55 | - bis zu 16 Stück DP100/WH51[L] Bodenfeuchte-Sensoren(4)
56 | - bis zu 4 Stück DP200/WH43 PM2.5 Feinstaub-Sensoren
57 | - ein DP250/WH45 5-In-1 CO2 / PM2.5 / PM10 / Temperatur / Luftfeuchte Innenraumsensor
58 | - ein DP300/WS68 Solarunterstütztes Anemometer mit UV-Lichtsensor
59 | - ein WH25 Sensor
60 | - ein WS90 "Wittboy" Sensor
61 | - BRESSER® (1)
62 | * bis zu 4 Stück(2) _BRESSER® Thermo-/Hygro-Sensor 7 Kanal_ #7009999
63 |
64 |
*(1) nicht alle Bresser-Stationen unterstützen Zusatzsensoren! siehe [hier](https://forum.iobroker.net/post/977421)
65 | (2) durch das verwendete Wunderground-Protokoll limitiert
66 | (3) sind als DP50 einzutragen
67 | (4) es sind in Summe nur max. 16 Sensoren der Typen DP30/50/100 bzw. deren WHxx-Derivate möglich.
68 | __Die mögliche Anzahl der Zusatzsensoren ist nicht durch das Skript begrenzt, sondern wird vom Display und/oder Gateway bestimmt.__*
69 |
70 |
71 | über eigenen DNS-Server:
72 | - Stationen ohne Möglichkeit der Konfiguration mittels App *WS View\[+\]* wie bspw. *Sainlogic Profi Wlan Wetterstation FT0300* oder Stationen der Firma BRESSER®
73 | - Installation siehe [WiKi](https://github.com/SBorg2014/WLAN-Wetterstation/wiki/Installation---eigener-DNS-Server)
74 |
75 |
76 | ## Unterstützung für dieses/zukünftige Projekte ##
77 | Wer möchte kann mir gerne einen Kaffee ausgeben und mich bei den Projekten unterstützen. Ich freue mich über jedweden Support.
78 | [](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=RR76AEZHPJ7H4&source=url)
79 |
80 |
81 | Beispiel einer Visualisierung per Grafana (zu finden [hier](https://github.com/SBorg2014/WLAN-Wetterstation/tree/master/Grafana%20Dashboard)):
82 | 
83 | 
84 |
85 | Datenpunkte im ioBroker:
86 | 
87 |
88 | Daten in openSenseMap:
89 | 
90 |
91 | Daten in Windy:
92 | 
93 |
94 | Daten in Wetter.com:
95 | 
96 |
97 | Daten in Awekas.at (Stationsseite, kostenlos):
98 | 
99 |
und kostenpflichtiges "Stationsweb":
100 | 
101 |
102 | Auszug von WeatherObservationsWebsite (WOW):
103 | 
104 |
105 |
106 |
107 | ## Weiterführende Informationen ##
108 | ***[Thread im ioBroker-Forum](https://forum.iobroker.net/topic/28384/linux-shell-skript-wlan-wetterstation)***
109 |
110 |
111 | ## Installation ##
112 | ***[siehe WiKi](https://github.com/SBorg2014/WLAN-Wetterstation/wiki)***
113 |
114 |
115 | ## Wetterstation-Statistik (Addon) ##
116 | 
117 |
118 | ***[siehe WiKi](https://github.com/SBorg2014/WLAN-Wetterstation/wiki/Wetterstation-Statistik)***
119 |
120 |
121 | ## Versionen ##
122 |
123 | **V3.5.0 - 10.05.2025**
124 | ```
125 | ~ Fix DP50/DP100 werden auch als FT0300-Sensoren erkannt
126 | ~ Fix bei AWEKAS.at - Skript bleibt bei fehlender Internet-Verbindung hängen
127 | + (Wasserdampf-)Drucksättigungsdefizit VPD / Issue #79
128 | ~ Unterstützung für bis zu 16x DP100 / Issue #80
129 | ```
130 |
131 | **V3.4.0 - 20.07.2024**
132 | ```
133 | ~ Fix "Kommunikationsfehler" bei Gateways mit Firmware ab V3.1.1 / Issue #71
134 | ~ Fix am ws_updater, Restart des Service wird nach Update nicht ausgeführt
135 | ```
136 |
137 | **V3.3.0 - 06.07.2024**
138 | ```
139 | + Fix Simple API-Fehlermeldung bei leerer Solarenergie
140 | + Fix DP "Windy Datenübertragung" verbleibt auf "false" trotz erfolgreicher Datenübertragung
141 | (Änderung an der API von windy)
142 | + Raw-Werte bei DP100/WH51[L] hinzugefügt
143 | ```
144 |
145 | **V3.2.0 - 12.08.2023**
146 | ```
147 | + Support für WeatherObservationsWebsite (WOW)
148 | + Fix Zeitstempel für neuere Gateway-Firmwarereleases die ein URL-Encoding enthalten
149 | ```
150 |
151 | **V3.1.1 - 05.06.2023 Bugfix Release**
152 | ```
153 | + Fix "MetSommer" (Skript bleibt bei den Mitternachtjobs hängen)
154 | ```
155 |
156 | **V3.1.0 - 16.03.2023 Bugfix Release**
157 | ```
158 | + Windböe max für Stationen die den Wert nicht liefern
159 | + Option "k" für selbstsignierte Zertifikate bei der Influx-Abfrage hinzugefügt
160 | + Parameter "--influx_test" zum test der Influx-Konnektivität
161 | + Fix "MetSommer" (Skript bleibt bei den Mitternachtjobs hängen)
162 | ```
163 |
164 | **V3.0.0 - 08.02.2023 Breaking Release**
165 | ```
166 | ~ Breaking Release / Support für (und nur noch!) InfluxDB V2.x / Issue #41
167 | ~ Mindestintervall von 65 Sekunden beim Datenversand an AWEKAS.at
168 | + Support Zusatzsensor Curconsa FT0300 / Pull Request #55 (LukasTr1980)
169 | ~ Anzahl maximaler interner Sensoren von 30 auf 35 angehoben
170 | ```
171 |
172 | **V2.21.0 - 15.01.2023**
173 | ```
174 | + Support für AWEKAS
175 | ~ fix fehlende Regenwerte wenn nur der WS90 ohne weitere Außeneinheit benutzt wird / Issue #51
176 | ```
177 |
178 | **V2.20.0 - 12.12.2022**
179 | ```
180 | ~ fix Wolkenbasis (keine Werte falls Taupunkt negativ) / Issue #46 (viper4iob)
181 | ~ fix Wetterwarnung (Reif) / Issue #47 (viper4iob)
182 | ~ fix OpenSenseMap für Stationen die 10-Minutendurchschnittswerte bereits liefern / Issue #48 (viper4iob)
183 | ```
184 |
185 | **V2.19.0 - 12.08.2022**
186 | ```
187 | + Wetterwarnungen Schwüle, Tau/Nebel und Reif
188 | ~ URL-Encoding für Umlaute
189 | + Unterstützung für WS90 "Wittboy"
190 | ```
191 |
192 | **V2.18.0 - 28.07.2022**
193 | ```
194 | + Höhe der Wolkenbasis
195 | + Windrichtung der letzten 10 Minuten als Text
196 | + Unterstützung für DP10/WN35 Blattfeuchte-Sensor
197 | + Ausgabe der Skriptversion in Datenpunkt beim Start
198 | ```
199 |
200 | **V2.17.0 - 22.07.2022**
201 | ```
202 | + durchschnittliche Windrichtung und -geschwindigkeit der letzten 10 Minuten alternativ anstelle
203 | der aktuellen Werte an OpenSenseMap, windy und wetter.com senden
204 | + Temperaturtrend Aussentemperatur der letzten Stunde
205 | ~ Fix für Datenübertragung an nicht antwortenden OSeM-Server
206 | ```
207 |
208 | **V2.16.0 - 12.07.2022**
209 | ```
210 | + Windrichtung der letzten 10 Minuten für alle Stationen (benötigt wird dafür nun noch 'dc')
211 | + durchschnittliche Windgeschwindigkeit der letzten 10 Minuten für alle Stationen
212 | ~ Bugfix gelegentlicher "jq parse"-Fehler
213 | ~ Bugfix Regenmenge des meteorologischen Sommers aktualisiert sich nicht
214 | ```
215 |
216 | **V2.15.0 - 19.06.2022**
217 | ```
218 | + neuer DP "Meldungen"; für Status- und Fehlermeldungen
219 | + Datenübertragung an Wunderground.com auch bei eigenem DNS-Server (Protokoll #9)(@git-ZeR0)
220 | + Windrichtung und -geschwindigkeit der letzten 10 Minuten (aktuell HP1000SE Pro)
221 | + ws_updater: anlegen neuer Datenpunkte per Rest-API möglich
222 | ```
223 |
224 | **V2.14.0 - 28.05.2022**
225 | ```
226 | ~ Fixed authentication for Simple-API setBulk requests (@crycode-de)
227 | + Set ack flag on setBulk requests (requires PR ioBroker/ioBroker.simple-api#145) (@crycode-de)
228 | + Added option to ignore SSL errors if HTTPS is used together with a self-signed certificate (@crycode-de)
229 | + Added the state .Info.Sonnenschein_VorTag_Text (@crycode-de)
230 | ~ Merge some SAPI "Single" calls into SAPI "Bulk" calls (@crycode-de)
231 | ```
232 |
233 | **V2.13.0 - 05.04.2022**
234 | ```
235 | + Unterstützung für DP35/WN34 Sensor (@Omnedon)
236 | ```
237 |
238 |
239 | **V2.12.1 - 29.03.2022**
240 | ```
241 | ~ Fehler bei "FIX_AUSSENTEMP" behoben (keine Datenübertragung an den ioB / Issue #31)
242 | ```
243 |
244 |
245 | **V2.12.0 - 26.03.2022**
246 | ```
247 | + bei fehlerhafter Außentemperatur erfolgt keine Datenübertragung des Paketes an den ioB
248 | ```
249 |
250 |
251 | **V2.11.1 - 14.02.2022**
252 | ```
253 | ~ Reduzierung valides Datenpaket auf 250 Zeichen
254 | ~ "SainLogic Pro"-Protokoll in "DNS" umbenannt
255 | ```
256 |
257 |
258 | **V2.11.0 - 03.12.2021**
259 | ```
260 | ~ Windgeschwindigkeit bei wetter.com in m/s
261 | + Konfigurationsmöglichkeit des Kommunikationsfehlers (Issue #26)
262 | ~ Bugfix Speicherort beim logging
263 | ~ Ergänzung bei Prüfung auf valides Datenpaket (Außentemperatur hinzugefügt)
264 | + Hinweis auf korrekte WS_ID bei Wunderground-Protokoll falls Kommunikationsfehler
265 | ```
266 |
267 |
268 | **V2.10.1 - 22.11.2021**
269 | ```
270 | ~ Bugfix 'jq'-Fehlermeldungen von 0:00 Uhr bis 01:00 Uhr
271 | ~ Bugfix Fehlermeldung "bereits existierender User" bei der OSeM-Registrierung obwohl keiner angelegt
272 | + bei Option '--debug' werden, sofern aktiviert, nun auch die Daten an den/die Wetter-Dienst(e) geschickt und deren Meldung(en) ausgegeben
273 | ~ Fix auftretende Fehlermeldung falls SimpleAPI nicht erreichbar war
274 | ~ Codeoptimierungen
275 | ```
276 |
277 |
278 | **V2.10.0 - 21.10.2021**
279 | ```
280 | ~ Bugfix Option '--data' bei Ecowitt-Protokoll
281 | ~ Passkey bei Nutzung des Ecowitt-Protokolls maskieren
282 | + logging des Datenstrings der Wetterstation in eine Datei
283 | + Unterstützung für DP40/WH32 (bzw. WH26) Sensor
284 | + Unterstützung für DP300/WS68 Sensor
285 | + Unterstützung für WH31 (bzw. WH25) Sensor
286 | + netcat-/Success-Meldungen im Syslog entfernt
287 | + Patch Sommer-/Winterzeit für wetter.com
288 | ```
289 |
290 |
291 | **V2.9.0 - 25.08.2021**
292 | ```
293 | + Min-/Max-Aussentemperatur des heutigen Tages
294 | ~ Änderung bei Datenübertragung per Simple-API wg. InfluxDB 2.x
295 | + Meteorologischer Sommer Durchschnittstemperatur und Regenmenge
296 | + neuer Shell-Parameter --metsommer (zur manuellen Berechnung der Werte des meteorologischen Sommers)
297 | ```
298 |
299 |
300 | **V2.8.0 - 14.08.2021**
301 | ```
302 | ~ Änderung am Messverfahren der Solarenergie (festes Poll-Intervall --> Zeitstempel)
303 | + Support für wetter.com
304 | ```
305 |
306 |
307 | **V2.7.0 - 15.07.2021**
308 | ```
309 | + Bei bereits eingetragenem OSEM-User erfolgt Abbruch der OSEM-Registrierung
310 | + Unterstützung für DP250/WH45 Sensor
311 | ~ Fix Prüfung netcat-Version
312 | ~ Berechnung Windchill nur bis 11°C
313 | ```
314 |
315 |
316 | **V2.6.0 - 04.05.2021**
317 | ```
318 | ~ Fix Avg Aussentemperatur vor einem Jahr
319 | ~ Windchill erst ab 5km/h Windgeschwindigkeit
320 | + Prüfung bei Option "v" ob die netcat-Version korrekt ist
321 | + Support für Windy
322 | ~ Hitzeindex
323 | ```
324 |
325 |
326 | **V2.5.0 - 08.02.2021**
327 | ```
328 | ~ Fix für Protokoll #9 wg. fehlender Regenrate
329 | + Min/Max/Avg Aussentemperatur vor einem Jahr
330 | + Unterstützung von max. 4 DP70 Sensoren
331 | ~ Codeoptimierungen
332 | ```
333 |
334 |
335 | **V2.4.0 - 03.02.2021**
336 | ```
337 | + Hitzeindex (>20°C)
338 | + Unterstützung von max. 4 DP200 Sensoren
339 | ```
340 |
341 |
342 | **V2.3.0 - 26.01.2021**
343 | ```
344 | ~ Fix Rundungsfehler Windchill/Taupunkt
345 | + Min/max Aussentemperatur der letzten 24h
346 | + Unterstützung für DP60 Sensor
347 | ~ Fix für Protokoll #9 wg. fehlender Regenrate
348 | ```
349 |
350 |
351 | **V2.2.0 - 21.01.2021**
352 | ```
353 | ~ Fix Batteriestatus
354 | ~ Chillfaktor umbenannt auf Windchill/gefühlte Temperatur
355 | + Berechnung Windchill + Taupunkt für Ecowitt-Protokoll
356 | ```
357 |
358 |
359 | **V2.1.0 - 10.01.2021**
360 | ```
361 | + zusätzliches Protokoll "9" für userspezifische Abfrage
362 | ~ Fix Reset kumulierte Regenmenge zum Jahresanfang
363 | ~ Fix für DP100 Bodenfeuchte
364 | ```
365 |
366 |
367 | **V2.0.0 - 15.12.2020**
368 | ```
369 | + Unterstützung des Gateways und Zusatzsensoren (@a200)
370 | + Protokoll (wunderground oder ecowitt) wählbar
371 | ```
372 |
373 |
374 | **V1.6.0 - 06.12.2020**
375 | ```
376 | + Patch (@a200) für neuere Firmwareversionen (V1.6.3) speziell bei Nutzung eines Gateways
377 | ~ Reset des Error-Kommunikationszählers
378 | + Prüfung bei Option "-v" ob 'bc' und 'jq' installiert sind
379 | ~ Option "n" bei netcat hinzugefügt
380 | ```
381 |
382 |
383 | **V1.5.0 - 30.11.2020**
384 | ```
385 | + Verschlüsselung mittels HTTPS möglich
386 | + Authentifizierung mittels User/Passwort
387 | + ws_updater.sh (zum updaten der wetterstation.conf)
388 | ```
389 |
390 |
391 | **V1.4.0 - 15.11.2020**
392 | ```
393 | + Support für OpenSenseMap
394 | ```
395 |
396 |
397 | **V1.3.1 - 10.10.2020**
398 | ```
399 | ~ fix für Leerzeichen im Verzeichnisnamen
400 | + Wetterstation-Statistik (JS-Addon)
401 | ```
402 |
403 |
404 | **V1.3.0 - 22.06.2020**
405 | ```
406 | + letztes Regenereignis und Regenmenge
407 | + Fehlermeldung bei falscher WS_ID / ID der Wetterstation
408 | + Sonnenscheindauer + Solarenergie vom Vortag
409 | ~ Änderung/Fix Sonnenscheindauer
410 | ```
411 |
412 |
413 | **V1.2.0 - 01.05.2020**
414 | ```
415 | + Firmwareupgrade verfügbar?
416 | + Firmwareversion
417 | + Sonnenscheindauer Heute, Woche, Monat, Jahr
418 | + UV-Belastung
419 | + Solarenergie Heute, Woche, Monat, Jahr
420 | + Vorjahreswerte von Regenmenge, Sonnenscheindauer und Solarenergie
421 | ```
422 |
423 |
424 | **V1.1.0 - 14.04.2020**
425 | ```
426 | + aktueller Regenstatus
427 | + Luftdrucktendenz, Wettertrend und aktuelles Wetter
428 | ```
429 |
430 |
431 | **V1.0.0 - 18.03.2020**
432 | ```
433 | + Berechnung der Jahresregenmenge
434 | + Windrichtung zusätzlich als Text
435 | ~ Änderung "Regen Aktuell" in "Regenrate"
436 | ~ Splitt in conf- + sub-Datei
437 | ```
438 |
439 |
440 | **V0.1.3 - 08.02.2020**
441 | ```
442 | + Unterstützung für Datenpunkt "Regenmenge Jahr", zB. für Froggit WH4000SE
443 | + Shell-Parameter -s (Klartextanzeige Passwort + Station-ID)
444 | + Shell-Parameter --data (zeigt nur das gesendete Datenpaket der Wetterstation an)
445 | ```
446 |
447 | **V0.1.2 - 31.01.2020**
448 | ```
449 | + Prüfung auf Datenintegrität
450 | + neuer Datenpunkt bei Kommunikationsfehler
451 | + Ausgabe Datenpaket der Wetterstation bei Debug
452 | ```
453 |
454 | **V0.1.1 - 01.01.2020**
455 | ```
456 | + UTC-Korrektur
457 | + Config-Versionscheck
458 | + Shell-Parameter -v/-h/--debug
459 | ```
460 |
461 | **V0.1.0 - erstes Release (29.12.2019)**
462 | ```
463 | + erstes Release
464 | ```
465 |
466 |
467 | ## :scroll: License ##
468 | MIT License
469 |
470 | Copyright (c)2019-2024 by SBorg
471 |
472 | Permission is hereby granted, free of charge, to any person obtaining a copy
473 | of this software and associated documentation files (the "Software"), to deal
474 | in the Software without restriction, including without limitation the rights
475 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
476 | copies of the Software, and to permit persons to whom the Software is
477 | furnished to do so, subject to the following conditions:
478 |
479 | The above copyright notice and this permission notice shall be included in all
480 | copies or substantial portions of the Software.
481 |
482 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
483 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
484 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
485 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
486 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
487 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
488 | SOFTWARE.
489 |
490 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-midnight
2 |
--------------------------------------------------------------------------------
/firmware.version:
--------------------------------------------------------------------------------
1 | EasyWeatherV1.7.0
2 |
--------------------------------------------------------------------------------
/wetterstation.conf:
--------------------------------------------------------------------------------
1 | ### Settings V3.5.0 -----------------------------------------------------------
2 | #Debuging einschalten [true/false] / default: false / Ausgabe der Messwerte
3 | debug=false
4 |
5 | #Verhalten bei Kommunikationsfehler [true/false] / default: false / Soll der Datenpunkt automatisch resettet werden?
6 | RESET_KOMFEHLER=false
7 |
8 | #Logging einschalten [true/false] / default: false / schreibt die Datenstrings der Station in eine Datei
9 | logging=false
10 |
11 | #ioBroker-IP und Port der Simple-Restful-API [xxx.xxx.xxx.xxx:xxxxx]
12 | IPP=192.168.1.3:8087
13 |
14 | #Protokoll, ioBroker-IP und Port der Rest-API [http(s)://xxx.xxx.xxx.xxx:xxxxx] / leer lassen falls nicht benutzt
15 | RESTAPI_URL=
16 | RESTAPI_USER=
17 | RESTAPI_PW=
18 |
19 | #Protokoll der Wetterstation [1/2/9] / 1=Wunderground ; 2=Ecowitt ; 9=DNS / default: 2
20 | WS_PROTOKOLL=2
21 |
22 | #Anzahl der vorhandenen Zusatzsensoren Froggit, Ecowitt und Bresser / default: 0
23 | ANZAHL_WH31=0
24 | ANZAHL_WS90=0
25 | ANZAHL_DP10=0
26 | ANZAHL_DP35=0
27 | ANZAHL_DP40=0
28 | ANZAHL_DP50=0
29 | ANZAHL_DP60=0
30 | ANZAHL_DP70=0
31 | ANZAHL_DP100=0
32 | ANZAHL_DP200=0
33 | ANZAHL_DP250=0
34 | ANZAHL_DP300=0
35 | ANZAHL_7009999=0
36 |
37 | #Protokoll (HTTP oder HTTPS) / default: HTTP
38 | WEB=HTTP
39 |
40 | #Ignoriere Zertifikatsfehler bei der Simple-Restful-API [true/false] / default: false / nötig bei eigenen Zertifikaten
41 | WEB_IGN_SSL_ERROR=false
42 |
43 | #User-Authentifizierung falls benutzt; sonst leer lassen
44 | AUTH_USER=
45 | AUTH_PASS=
46 |
47 | #Port der Wetterstation
48 | WS_PORT=1080
49 |
50 | #Pollintervall der Wetterstation in Sekunden (minimal 16 Sekunden)
51 | WS_POLL=30
52 |
53 | #Name/ID der Wetterstation
54 | WS_ID=ZuHause
55 |
56 | #wo sollen die Datenobjekte abgelegt werden
57 | PRE_DP=0_userdata.0.Wetterstation
58 |
59 | #InfluxDB-Konfiguration / ohne InfluxDB alles leer lassen
60 | #Protokoll (HTTP oder HTTPS) / default: HTTP
61 | INFLUX_WEB=HTTP
62 | #IP und Port der API [xxx.xxx.xxx.xxx:xxxxx]
63 | INFLUX_API=
64 | #Bucket, Token und Organisation der InfluxDB
65 | INFLUX_BUCKET=
66 | INFLUX_TOKEN=
67 | INFLUX_ORG=
68 |
69 | #letztes Regenereignis als [DATUM], [UNIX]-Timestamp oder [DIFF]erenz ("vor xx Tagen")
70 | # DATUM = 28.04.2020 13:12
71 | # UNIX = 1588074964
72 | # DIFF = gerade eben / vor einer Stunde / vor 23 Stunden / vor einem Tag / vor 12 Tagen
73 |
74 | LAST_RAIN=DIFF
75 |
76 | #Text-Format für Datenpunkte "Sonnenschein_[Tag|Woche|Monat|Jahr]_Text"
77 | # zweistellig wird ggf. mit einer führenden "0" aufgefüllt
78 | # d = Tag(e) 0...n ein- und mehrstellig / h = Stunden 0...n ein- oder mehrstellig
79 | # hh = Stunden zweistellig (00...23) / mm = Minuten zweistellig (00...59) / ss = Sekunden zweistellig (00...59)
80 | #
81 | # Beispiel: 68 Stunden, 2 Minuten und 15 Sekunden
82 | #
83 | # Auswahl | Ausgabe im Datenpunkt
84 | # ----------------------------------------------------------------------------
85 | # [0] = h Std. mm Min. ss Sek. | 68 Std. 02 Min. 15 Sek.
86 | # [1] = h:mm | 68:02
87 | # [2] = d Tag/e h Std. | 2 Tage 20 Std.
88 | # [3] = d Tag/e, h Std, m Min | 2 Tage, 20 Std, 2 Min (Anzeige Tage erst bei >0)
89 |
90 | SONNENSCHEIN_TXTFORMAT=3
91 |
92 |
93 | #Daten an Wetter.com senden (leer lassen falls nicht gewünscht)?
94 | WETTERCOM_ID=
95 | WETTERCOM_PW=
96 |
97 | #Daten an Wunderground.com senden? [true/false] / default: false
98 | #Nur nötig und sinnvoll bei WS_PROTOKOLL=9 (DNS) wenn trotzdem auch Daten weiterhin an Wunderground.com gesendet werden sollen.
99 | WUNDERGROUND_UPDATE=false
100 |
101 | #Windrichtung und -geschwindigkeit der letzten 10 Minuten anstelle aktueller Werte an
102 | #windy/OpenSenseMap/wetter.com übertragen? [true/false] / default: false
103 | USE_AVG_WIND=false
104 |
105 | #Fix aktivieren bei fehlerhafter Außentemperatur [true/false] / default: false
106 | #Bei unplausiblem Messwert wird kein Datenpaket an den ioB geschickt
107 | FIX_AUSSENTEMP=false
108 |
109 |
110 |
111 |
112 | #############################################################################################
113 | ### openSenseMap - Einstellungen (nur nötig falls openSenseMap benutzt werden soll) ###
114 | ### ###
115 | ### Für die Registrierung muss "openSenseMap" auf "false" eingestellt sein! ###
116 | ### Erst wenn auch Sensoren angelegt wurden, darf auf "true" umgestellt werden! ###
117 | #############################################################################################
118 |
119 | #openSenseMap aktivieren [true/false] / default: false
120 | openSenseMap=false
121 |
122 | #SenseBox-User
123 | senseBox_USER=
124 |
125 | #SenseBox-Password
126 | senseBox_PWD=
127 |
128 | #ID der senseBox (24-stellig)
129 | senseBox_ID=
130 |
131 | #Security-Token der Box
132 | BOX_TOKEN=
133 |
134 |
135 |
136 | ### Die restlichen Einstellungen für OpenSenseMap werden vom System generiert/benutzt ######
137 | ### Änderungen sind hier nicht nötig, außer man weiß ganz genau was man tut! ###############
138 |
139 | #Sensor-IDs (wird automatisch anhand der Sensoren erzeugt)
140 | SENSEBOX_IDSENSOR=()
141 |
142 | #Sensor-Bezeichnung (Reihenfolge muss zur Sensor-ID identisch sein!)
143 | SENSEBOX_IDNAME=("Temperatur" "Luftfeuchte" "Luftdruck relativ" "Luftdruck absolut" "Taupunkt" "gefühlte Temperatur" "Sonnenstrahlung" "Windgeschwindigkeit" "Windrichtung" "UV-Index" "Regenrate")
144 |
145 | #Messwertezuordnung (Reihenfolge muss zur Sensor-ID identisch sein!)
146 | SENSEBOX_IDMESSWERT=(1 5 10 9 2 3 16 6 8 17 11)
147 |
148 | #Sensorendefinitionen
149 | ICONS=(osem-thermometer osem-humidity osem-barometer osem-barometer osem-thermometer osem-thermometer osem-brightness osem-particulate-matter osem-particulate-matter osem-brightness osem-umbrella)
150 | UNITS=('°C' '%H' 'hPa' 'hPa' '°C' '°C' 'W/m²' 'km/h' '°' 'Index' 'mm/h')
151 |
152 | #############################################################################################
153 | ### openSenseMap - Ende der Einstellungen #############################################
154 | #############################################################################################
155 |
156 |
157 |
158 | #############################################################################################
159 | ### Windy - Einstellungen (nur nötig falls Windy benutzt werden soll) ###
160 | #############################################################################################
161 |
162 | #Windy aktivieren [true/false] / default: false
163 | use_windy=false
164 |
165 | #Windy API-Key
166 | windy_APIKey=
167 |
168 | #Station [number: 0 - 2147483647] / default: 0
169 | windy_Station=
170 |
171 | #Name der Station [Text]
172 | windy_Name=
173 |
174 | #Latitude/Breitengrad der Station
175 | windy_Latitude=
176 |
177 | #Longitude/Längengrad der Station
178 | windy_Longitude=
179 |
180 | #Elevation/Höhe ÜNN
181 | windy_Elevation=
182 |
183 | #Montagehöhe Temperatursensor über Boden
184 | windy_Tempheight=
185 |
186 | #Montagehöhe Windsensor über Boden
187 | windy_Windheight=
188 |
189 | #############################################################################################
190 | ### Windy - Ende der Einstellungen ####################################################
191 | #############################################################################################
192 |
193 |
194 |
195 | #############################################################################################
196 | ### AWEKAS - Einstellungen (nur nötig falls AWEKAS benutzt werden soll) ###
197 | #############################################################################################
198 |
199 | #AWEKAS aktivieren [true/false] / default: false
200 | use_awekas=false
201 |
202 | #AWEKAS Login Username und Passwort
203 | AWEKAS_USER=
204 | AWEKAS_PW=
205 |
206 | #############################################################################################
207 | ### AWEKAS - Ende der Einstellungen ###################################################
208 | #############################################################################################
209 |
210 |
211 |
212 | #############################################################################################
213 | ### WOW - Einstellungen (nur nötig falls WOW benutzt werden soll) ###
214 | #############################################################################################
215 |
216 | #WOW aktivieren [true/false] / default: false
217 | use_wow=false
218 |
219 | #WOW Site ID und Authentication Key
220 | WOW_SITEID=
221 | WOW_AUTHKEY=
222 |
223 | #############################################################################################
224 | ### WOW - Ende der Einstellungen ######################################################
225 | #############################################################################################
226 |
227 | ### Ende Usereinstellungen
228 | ###EoF
229 |
--------------------------------------------------------------------------------
/wetterstation.js:
--------------------------------------------------------------------------------
1 | //Wetterstation Datenpunkte anlegen V3.5.0
2 | let DP = "0_userdata.0.Wetterstation.";
3 | let WH31 = 0; // Anzahl der WH31/WH25 Sensoren (max. 1 Stück)
4 | let WS90 = 0; // Anzahl der WS90 Sensoren (max. 1 Stück)
5 | let DP10 = 0; // Anzahl der DP10/WN35 Sensoren (max. 8 Stück)
6 | let DP35 = 0; // Anzahl der DP35/WN34 Sensoren (max. 8 Stück)
7 | let DP40 = 0; // Anzahl der DP40/WH32 Sensoren (max. 1 Stück)
8 | let DP50 = 0; // Anzahl der DP50/WH31 Sensoren (max. 8 Stück)
9 | let DP60 = 0; // Anzahl der DP60/WH57 Sensoren (max. 1 Stück)
10 | let DP70 = 0; // Anzahl der DP70/WH55 Sensoren (max. 4 Stück)
11 | let DP100 = 0; // Anzahl der DP100/WH51[L] Sensoren (max. 16 Stück)
12 | let DP200 = 0; // Anzahl der DP200/WH43 Sensoren (max. 4 Stück)
13 | let DP250 = 0; // Anzahl der DP250/WH45 Sensoren (max. 1 Stück)
14 | let DP300 = 0; // Anzahl der DP300/WS68 Sensoren (max. 1 Stück)
15 | let BR7009999 = 0; // Anzahl der Thermo-Hygro-7Ch-Sensoren (max. 4 Stück)
16 | let FT0300 = 0; // Anzahl der FT0300 Sensoren (max. 1 Stück)
17 | //Ende der User-Einstellungen -------------------
18 |
19 | //Prüfe Objektpfad
20 | if (DP[DP.length - 1] != '.') { DP += '.'; }
21 |
22 | dpAnlegen();
23 |
24 | async function dpAnlegen(){
25 | await createStateAsync(DP + "Innentemperatur", 0, { name: "Temperatur im Haus", type: "number", role: "state", unit: "°C" });
26 | await createStateAsync(DP + "Aussentemperatur", 0, { name: "Temperatur Außen", type: "number", role: "state", unit: "°C" });
27 | await createStateAsync(DP + "Aussentemperatur_Trend", 0, { name: "Trend der Aussentemperatur der letzten Stunde", type: "number", role: "state", unit: "°C" });
28 | await createStateAsync(DP + "Taupunkt", 0, { name: "Taupunkt", type: "number", role: "state", unit: "°C" });
29 | await createStateAsync(DP + "Gefuehlte_Temperatur", 0, { name: "Windchill", type: "number", role: "state", unit: "°C" });
30 | await createStateAsync(DP + "Innenfeuchtigkeit", 0, { name: "Luftfeuchtigkeit Innen", type: "number", role: "state", unit: "%" });
31 | await createStateAsync(DP + "Aussenfeuchtigkeit", 0, { name: "Luftfeuchtigkeit Außen", type: "number", role: "state", unit: "%" });
32 | await createStateAsync(DP + "Wind", 0, { name: "Windgeschwindigkeit", type: "number", role: "state", unit: "km/h" });
33 | await createStateAsync(DP + "Wind_max", 0, { name: "Windgeschwindigkeit maximal", type: "number", role: "state", unit: "km/h" });
34 | await createStateAsync(DP + "Wind_10min", 0, { name: "Windgeschwindigkeit Durchschnitt 10min", type: "number", role: "state", unit: "km/h" });
35 | await createStateAsync(DP + "Windrichtung", 0, { name: "Windrichtung in Grad", type: "number", role: "state", unit: "°" });
36 | await createStateAsync(DP + "Windrichtung_Text", " ", { name: "Windrichtung als Text", type: "string", role: "state" });
37 | await createStateAsync(DP + "Windrichtung_Text_10min", " ", { name: "Windrichtung Durchschnitt 10 Minuten als Text", type: "string", role: "state" });
38 | await createStateAsync(DP + "Windrichtung_10min", 0, { name: "Windrichtung Durchschnitt 10 Minuten", type: "number", role: "state", unit: "°" });
39 | await createStateAsync(DP + "Druck_absolut", 0, { name: "Luftdruck absolut", type: "number", role: "state", unit: "hPa" });
40 | await createStateAsync(DP + "Druck_relativ", 0, { name: "Luftdruck relativ", type: "number", role: "state", unit: "hPa" });
41 | await createStateAsync(DP + "Druck_Tendenz", "", { name: "Luftdrucktendenz", type: "mixed", role: "state" });
42 | await createStateAsync(DP + "Wetter_Trend", " ", { name: "Wettertrend", type: "string", role: "state" });
43 | await createStateAsync(DP + "Wetter_aktuell", " ", { name: "aktuelles Wetter", type: "string", role: "state" });
44 | await createStateAsync(DP + "Regenrate", 0, { name: "Regenrate", type: "number", role: "state", unit: "mm/h" });
45 | await createStateAsync(DP + "Regenstatus", "--", { name: "aktueller Regenstatus", type: "string", role: "state" });
46 | await createStateAsync(DP + "Regen_Tag", 0, { name: "Regenmenge Heute", type: "number", role: "state", unit: "mm" });
47 | await createStateAsync(DP + "Regen_Woche", 0, { name: "Regenmenge Woche", type: "number", role: "state", unit: "mm" });
48 | await createStateAsync(DP + "Regen_Monat", 0, { name: "Regenmenge Monat", type: "number", role: "state", unit: "mm" });
49 | await createStateAsync(DP + "Regen_Jahr", 0, { name: "Regenmenge Jahr aus Station", type: "number", role: "state", unit: "mm" });
50 | await createStateAsync(DP + "Regen_Jahr_kumuliert", 0, { name: "Regenmenge Jahr berechnet", type: "number", role: "state", unit: "mm" });
51 | await createStateAsync(DP + "Sättigungsdefizit", 0, { name: "(Wasserdampf-)Drucksättigungsdefizit VPD", type: "number", role: "state", unit: "kPa" });
52 | await createStateAsync(DP + "Sonnenstrahlung", 0, { name: "Sonnenstrahlung", type: "number", role: "state", unit: "W/m²" });
53 | await createStateAsync(DP + "UV_Index", 0, { name: "UV Index", type: "number", role: "state" });
54 | await createStateAsync(DP + "UV_Belastung", " ", { name: "UV-Belastung", type: "string", role: "state" });
55 | await createStateAsync(DP + "Zeitstempel", " ", { name: "von wann ist die Messung", type: "string", role: "state" });
56 | await createStateAsync(DP + "_Kommunikationsfehler", false, { name: "liegt ein Problem vor", type: "boolean", role: "state" });
57 | await createStateAsync(DP + "tempData.Wetterdaten", " ", { name: "temporär gespeicherte Wetterdaten", type: "string", role: "state" });
58 | await createStateAsync(DP + "tempData.Sonnenschein", " ", { name: "temporäre Daten Tag, Woche, Monat, Jahr", type: "string", role: "state" });
59 | await createStateAsync(DP + "tempData.Solarenergie", "0", { name: "temporäre Daten Tag, Woche, Monat, Jahr", type: "string", role: "state" });
60 | await createStateAsync(DP + "Info.FW_Upgrade", false, { name: "neue Firmware für die Station", type: "boolean", role: "state" });
61 | await createStateAsync(DP + "Info.FW_Version", " ", { name: "Firmwareversion der Station", type: "string", role: "state" });
62 | await createStateAsync(DP + "Info.Meldungen", " ", { name: "Status- und Fehlermeldungen", type: "string", role: "state" });
63 | await createStateAsync(DP + "Info.Hitzeindex", 0, { name: "Hitzeindex (erst ab 20°C)", type: "mixed", role: "state", unit: "°C" });
64 | await createStateAsync(DP + "Info.openSenseMap", false, { name: "Datenübertragung openSenseMap erfolgreich", type: "boolean", role: "state" });
65 | await createStateAsync(DP + "Info.Shellscriptversion", false, { name: "Versionsnummer des Scriptes", type: "string", role: "state" });
66 | await createStateAsync(DP + "Info.Windy", false, { name: "Datenübertragung Windy erfolgreich", type: "boolean", role: "state" });
67 | await createStateAsync(DP + "Info.Wetter_com", false, { name: "Datenübertragung Wetter.com erfolgreich", type: "boolean", role: "state" });
68 | await createStateAsync(DP + "Info.WOW", false, { name: "Datenübertragung WOW erfolgreich", type: "boolean", role: "state" });
69 | await createStateAsync(DP + "Info.Wunderground_com", false, { name: "Datenübertragung Wunderground.com erfolgreich", type: "boolean", role: "state" });
70 | await createStateAsync(DP + "Info.Awekas_at", false, { name: "Datenübertragung AWEKAS.at erfolgreich", type: "boolean", role: "state" });
71 | await createStateAsync(DP + "Info.Sonnenschein_VorTag", 0, { name: "Sonnenscheindauer Gestern", type: "number", role: "state", unit: "Sek." });
72 | await createStateAsync(DP + "Info.Sonnenschein_Tag", 0, { name: "Sonnenscheindauer Heute", type: "number", role: "state", unit: "Sek." });
73 | await createStateAsync(DP + "Info.Sonnenschein_Woche", 0, { name: "Sonnenscheindauer diese Woche", type: "number", role: "state", unit: "Sek." });
74 | await createStateAsync(DP + "Info.Sonnenschein_Monat", 0, { name: "Sonnenscheindauer diesen Monat", type: "number", role: "state", unit: "Sek." });
75 | await createStateAsync(DP + "Info.Sonnenschein_Jahr", 0, { name: "Sonnenscheindauer dieses Jahr", type: "number", role: "state", unit: "Sek." });
76 | await createStateAsync(DP + "Info.Sonnenschein_VorTag_Text", " ", { name: "Sonnenscheindauer Gestern als Text", type: "string", role: "state" });
77 | await createStateAsync(DP + "Info.Sonnenschein_Tag_Text", " ", { name: "Sonnenscheindauer Heute als Text", type: "string", role: "state" });
78 | await createStateAsync(DP + "Info.Sonnenschein_Woche_Text", " ", { name: "Sonnenscheindauer diese Woche als Text", type: "string", role: "state" });
79 | await createStateAsync(DP + "Info.Sonnenschein_Monat_Text", " ", { name: "Sonnenscheindauer diesen Monat als Text", type: "string", role: "state" });
80 | await createStateAsync(DP + "Info.Sonnenschein_Jahr_Text", " ", { name: "Sonnenscheindauer dieses Jahr als Text", type: "string", role: "state" });
81 | await createStateAsync(DP + "Info.Sonnenschein_VorJahr", 0, { name: "Sonnenscheindauer letztes Jahr", type: "number", role: "state", unit: "Sek." });
82 | await createStateAsync(DP + "Info.Regenmenge_VorJahr", 0, { name: "Regenmenge letztes Jahr", type: "number", role: "state", unit: "mm" });
83 | await createStateAsync(DP + "Info.Regenmenge_Met_Sommer", 0, { name: "Regenmenge des meteorologischen Sommers", type: "number", role: "value", unit: "l/m²" });
84 | await createStateAsync(DP + "Info.Solarenergie_VorTag", 0, { name: "Solarenergie Gestern", type: "number", role: "state", unit: "Wh/m²" });
85 | await createStateAsync(DP + "Info.Solarenergie_Tag", 0, { name: "Solarenergie Heute", type: "number", role: "state", unit: "Wh/m²" });
86 | await createStateAsync(DP + "Info.Solarenergie_Woche", 0, { name: "Solarenergie diese Woche", type: "number", role: "state", unit: "kWh/m²" });
87 | await createStateAsync(DP + "Info.Solarenergie_Monat", 0, { name: "Solarenergie diesen Monat", type: "number", role: "state", unit: "kWh/m²" });
88 | await createStateAsync(DP + "Info.Solarenergie_Jahr", 0, { name: "Solarenergie dieses Jahr", type: "number", role: "state", unit: "kWh/m²" });
89 | await createStateAsync(DP + "Info.Solarenergie_VorJahr", 0, { name: "Solarenergie letztes Jahr", type: "number", role: "state", unit: "kWh/m²" });
90 | await createStateAsync(DP + "Info.Letzter_Regen", " ", { name: "letztes Regenereignis", type: "string", role: "state" });
91 | await createStateAsync(DP + "Info.Letzte_Regenmenge", 0, { name: "letzte Regenmenge", type: "number", role: "value", unit: "mm" });
92 | await createStateAsync(DP + "Info.Station_Batteriestatus", 0, { name: "Batteriestatus [0=OK, 1=Alarm]", type: "number", role: "value" });
93 | await createStateAsync(DP + "Info.Wetterstation_Gateway", " ", { name: "Gateway Informationen", type: "string", role: "state" });
94 | await createStateAsync(DP + "Info.Wetterwarnung" ," ", {name: "mögliche Wetterereignisse", type: "string", role: "state" });
95 | await createStateAsync(DP + "Info.Wolkenbasis", 0, { name: "Höhe der Wolkenbasis", type: "number", role: "state", unit: "m" });
96 | await createStateAsync(DP + "Info.Temp_Aussen_24h_max", 0, { name: "höchste Aussentemperatur der letzten 24 Stunden", type: "number", role: "state", unit: "°C" });
97 | await createStateAsync(DP + "Info.Temp_Aussen_Heute_max", 0, { name: "bisher höchste Aussentemperatur des heutigen Tages", type: "number", role: "value", unit: "°C" });
98 | await createStateAsync(DP + "Info.Temp_Aussen_Heute_min", 0, { name: "bisher niedrigste Aussentemperatur des heutigen Tages", type: "number", role: "value", unit: "°C" });
99 | await createStateAsync(DP + "Info.Temp_Aussen_24h_min", 0, { name: "tiefste Aussentemperatur der letzten 24 Stunden", type: "number", role: "value", unit: "°C" });
100 | await createStateAsync(DP + "Info.Temp_Aussen_365t_min", 0, { name: "tiefste Aussentemperatur vor einem Jahr", type: "number", role: "value", unit: "°C" });
101 | await createStateAsync(DP + "Info.Temp_Aussen_365t_max", 0, { name: "höchste Aussentemperatur vor einem Jahr", type: "number", role: "value", unit: "°C" });
102 | await createStateAsync(DP + "Info.Temp_Aussen_365t_avg", 0, { name: "durchschnittliche Aussentemperatur vor einem Jahr", type: "number", role: "value", unit: "°C" });
103 | await createStateAsync(DP + "Info.Temp_Met_Sommer_avg", 0, { name: "Durchschnittstemperatur des meteorologischen Sommers", type: "number", role: "value", unit: "°C" });
104 | await createStateAsync(DP + "Windboeen_max", 0, { name: "Windböengeschwindigkeit maximal", type: "number", role: "value", unit: "km/h" });
105 | await createStateAsync(DP + "Regen_Event", 0, { name: "Regenmenge Event", type: "number", role: "value", unit: "mm" });
106 | await createStateAsync(DP + "Regen_Stunde", 0, { name: "Regenmenge Stunde", type: "number", role: "value", unit: "mm" });
107 | await createStateAsync(DP + "Regen_Total", 0, { name: "Regenmenge Insgesammt", type: "number", role: "value", unit: "mm" });
108 |
109 | if (DP100 > 0 && DP100 <= 16) { await DP100_anlegen(); console.log("Datenpunkte für DP100 angelegt..."); }
110 | if (WS90 > 0 && WS90 <= 1) { await WS90_anlegen(); console.log("Datenpunkte für WS90 angelegt..."); }
111 | if (BR7009999 > 0 && BR7009999 <= 4) { await BR7009999_anlegen(); console.log("Datenpunkte für Bresser #7009999 angelegt..."); }
112 | if (FT0300 > 0 && FT0300 <= 1) { await FT0300_anlegen(); console.log("Datenpunkte für Zusatzsensor FT0300 angelegt..."); }
113 | console.log("Anlegen der Datenpunkte beendet. Skript kann nun gestoppt werden...");
114 | }
115 |
116 | if (WH31 > 0 && WH31 <= 1) {
117 | if (!existsState(DP + "WH31")) { createState(DP + "WH31", '', { name: "Temp-Luftfeuchte Sensor Innen" }); }
118 | for (var i = 1; i <= WH31; i++) {
119 | if (!existsState(DP + "WH31." + i + ".Batterie")) {
120 | createState(DP + "WH31." + i + ".Batterie", "", {
121 | "name": "WH31 Kanal " + i + " Batteriestatus [0=OK, 1=Alarm]",
122 | "type": "number",
123 | "role": "state"
124 | });
125 | }
126 | }
127 | }
128 |
129 |
130 | //WS90 - Sensoren
131 | async function WS90_anlegen() {
132 | if (!existsState(DP + "WS90")) { await createStateAsync(DP + 'WS90', '', { name: 'WS90 "Wittboy"' }); }
133 | for (var i = 1; i <= WS90; i++) {
134 | if (!existsState(DP + 'WS90.' + i)) { await createStateAsync(DP + 'WS90.' + i, '', { name: i + '. Kanal' }); }
135 | if (!existsState(DP + 'WS90.' + i + '.aktuelle_Regenrate')) {
136 | await createStateAsync(DP + 'WS90.' + i + '.aktuelle_Regenrate', {
137 | name: 'WS90 Kanal ' + i + ' aktuelle Regenrate',
138 | type: 'number',
139 | role: 'state',
140 | unit: 'mm/h'
141 | });
142 | }
143 | if (!existsState(DP + 'WS90.' + i + '.aktuelle_Regenmenge')) {
144 | await createStateAsync(DP + 'WS90.' + i + '.aktuelle_Regenmenge', {
145 | name: 'WS90 Kanal ' + i + ' aktuelle Regenmenge',
146 | type: 'number',
147 | role: 'state',
148 | unit: 'mm'
149 | });
150 | }
151 | if (!existsState(DP + 'WS90.' + i + '.stuendliche_Regenmenge')) {
152 | await createStateAsync(DP + 'WS90.' + i + '.stuendliche_Regenmenge', {
153 | name: 'WS90 Kanal ' + i + ' stündliche Regenmenge',
154 | type: 'number',
155 | role: 'state',
156 | unit: 'mm'
157 | });
158 | }
159 | if (!existsState(DP + 'WS90.' + i + '.taegliche_Regenmenge')) {
160 | await createStateAsync(DP + 'WS90.' + i + '.taegliche_Regenmenge', {
161 | name: 'WS90 Kanal ' + i + ' tägliche Regenmenge',
162 | type: 'number',
163 | role: 'state',
164 | unit: 'mm'
165 | });
166 | }
167 | if (!existsState(DP + 'WS90.' + i + '.woechentliche_Regenmenge')) {
168 | await createStateAsync(DP + 'WS90.' + i + '.woechentliche_Regenmenge', {
169 | name: 'WS90 Kanal ' + i + ' wöchentliche Regenmenge',
170 | type: 'number',
171 | role: 'state',
172 | unit: 'mm'
173 | });
174 | }
175 | if (!existsState(DP + 'WS90.' + i + '.monatliche_Regenmenge')) {
176 | await createStateAsync(DP + 'WS90.' + i + '.monatliche_Regenmenge', {
177 | name: 'WS90 Kanal ' + i + ' monatliche Regenmenge',
178 | type: 'number',
179 | role: 'state',
180 | unit: 'mm'
181 | });
182 | }
183 | if (!existsState(DP + 'WS90.' + i + '.jaehrliche_Regenmenge')) {
184 | await createStateAsync(DP + 'WS90.' + i + '.jaehrliche_Regenmenge', {
185 | name: 'WS90 Kanal ' + i + ' jährliche Regenmenge',
186 | type: 'number',
187 | role: 'state',
188 | unit: 'mm'
189 | });
190 | }
191 | if (!existsState(DP + 'WS90.' + i + '.Firmwareversion')) {
192 | await createStateAsync(DP + 'WS90.' + i + '.Firmwareversion', {
193 | name: 'WS90 Kanal ' + i + ' Firmwareversion',
194 | type: 'mixed',
195 | role: 'state'
196 | });
197 | }
198 | if (!existsState(DP + 'WS90.' + i + '.Spannung_GoldCap')) {
199 | await createStateAsync(DP + 'WS90.' + i + '.Spannung_GoldCap', {
200 | name: 'WS90 Kanal ' + i + ' Spannung des GoldCaps (Solarzelle)',
201 | type: 'number',
202 | role: 'state',
203 | unit: 'Volt'
204 | });
205 | }
206 | if (!existsState(DP + 'WS90.' + i + '.Batterie')) {
207 | await createStateAsync(DP + 'WS90.' + i + '.Batterie', {
208 | name: 'WS90 Kanal ' + i + ' Batterie',
209 | type: 'number',
210 | role: 'state',
211 | unit: 'Volt'
212 | });
213 | }
214 | }
215 | }
216 |
217 | if (DP10 > 0 && DP10 <= 8) {
218 | if (!existsState(DP + "DP10")) { createState(DP + "DP10", '', { name: "Blattfeuchte Sensor" }); }
219 | for (var i = 1; i <= DP10; i++) {
220 | if (!existsState(DP + "DP10." + i + ".Blattfeuchte")) {
221 | createState(DP + "DP10." + i + ".Blattfeuchte", "", {
222 | "name": "DP10 Kanal " + i + " Blattfeuchte",
223 | "type": "number",
224 | "role": "state",
225 | "unit": "%"
226 | });
227 | }
228 | if (!existsState(DP + "DP10." + i + ".Batterie")) {
229 | createState(DP + "DP10." + i + ".Batterie", "", {
230 | "name": "DP10 Kanal " + i + " Batterie",
231 | "type": "number",
232 | "role": "state",
233 | "unit": "Volt"
234 | });
235 | }
236 | }
237 | }
238 |
239 | if (DP35 > 0 && DP35 <= 8) {
240 | if (!existsState(DP + "DP35")) { createState(DP + "DP35", '', { name: "Wassertemperatur Sensor Außen" }); }
241 | for (var i = 1; i <= DP35; i++) {
242 | if (!existsState(DP + "DP35." + i + ".Temperatur")) {
243 | createState(DP + "DP35." + i + ".Temperatur", "", {
244 | "name": "DP35 Kanal " + i + " Temperatur",
245 | "type": "number",
246 | "role": "state",
247 | "unit": "°C"
248 | });
249 | }
250 | if (!existsState(DP + "DP35." + i + ".Batterie")) {
251 | createState(DP + "DP35." + i + ".Batterie", "", {
252 | "name": "DP35 Kanal " + i + " Batterie",
253 | "type": "number",
254 | "role": "state"
255 | });
256 | }
257 | }
258 | }
259 |
260 | if (DP40 > 0 && DP40 <= 1) {
261 | if (!existsState(DP + "DP40")) { createState(DP + "DP40", '', { name: "Temp-Luftfeuchte Sensor Außen" }); }
262 | for (var i = 1; i <= DP40; i++) {
263 | if (!existsState(DP + "DP40." + i + ".Batterie")) {
264 | createState(DP + "DP40." + i + ".Batterie", "", {
265 | "name": "DP40 Kanal " + i + " Batteriestatus [0=OK, 1=Alarm]",
266 | "type": "number",
267 | "role": "state"
268 | });
269 | }
270 | }
271 | }
272 |
273 | if (DP50 > 0 && DP50 <= 8) {
274 | if (!existsState(DP + "DP50")) { createState(DP + "DP50", '', { name: "Mehrkanal Thermo-Hygrometersensoren" }); }
275 | for (var i = 1; i <= DP50; i++) {
276 | if (!existsState(DP + "DP50." + i + ".Temperatur")) {
277 | createState(DP + "DP50." + i + ".Temperatur", "", {
278 | "name": "DP50 Kanal " + i + " Temperatur",
279 | "type": "number",
280 | "role": "state",
281 | "unit": "°C"
282 | });
283 | }
284 | if (!existsState(DP + "DP50." + i + ".Feuchtigkeit")) {
285 | createState(DP + "DP50." + i + ".Feuchtigkeit", "", {
286 | "name": "DP50 Kanal " + i + " Feuchtigkeit",
287 | "type": "number",
288 | "role": "state",
289 | "unit": "%"
290 | });
291 | }
292 | if (!existsState(DP + "DP50." + i + ".Batterie")) {
293 | createState(DP + "DP50." + i + ".Batterie", "", {
294 | "name": "DP50 Kanal " + i + " Batterie",
295 | "type": "number",
296 | "role": "state"
297 | });
298 | }
299 | }
300 | }
301 |
302 | if (DP60 > 0 && DP60 <= 1) {
303 | if (!existsState(DP + "DP60")) { createState(DP + "DP60", '', { name: "Blitzdetektor" }); }
304 | for (let i = 1; i <= DP60; i++) {
305 | if (!existsState(DP + "DP60." + i + ".Entfernung")) {
306 | createState(DP + "DP60." + i + ".Entfernung", "", {
307 | "name": "DP60 Kanal " + i + " Entfernung",
308 | "type": "number",
309 | "role": "state",
310 | "unit": "km"
311 | });
312 | }
313 | if (!existsState(DP + "DP60." + i + ".Zeitpunkt")) {
314 | createState(DP + "DP60." + i + ".Zeitpunkt", "", {
315 | "name": "DP60 Kanal " + i + " Zeitpunkt (Unix-Timestamp)",
316 | "type": "number",
317 | "role": "state"
318 | });
319 | }
320 | if (!existsState(DP + "DP60." + i + ".Anzahl")) {
321 | createState(DP + "DP60." + i + ".Anzahl", "", {
322 | "name": "DP60 Kanal " + i + " Anzahl innerhalb von 24 Stunden",
323 | "type": "number",
324 | "role": "state"
325 | });
326 | }
327 | if (!existsState(DP + "DP60." + i + ".Batterie")) {
328 | createState(DP + "DP60." + i + ".Batterie", "", {
329 | "name": "DP60 Kanal " + i + " Batterie (5 = max)",
330 | "type": "number",
331 | "role": "state"
332 | });
333 | }
334 | }
335 | }
336 |
337 | if (DP70 > 0 && DP70 <= 4) {
338 | if (!existsState(DP + "DP70")) { createState(DP + "DP70", '', { name: "Mehrkanal-Wasserlecksensoren" }); }
339 | for (var i = 1; i <= DP70; i++) {
340 | if (!existsState(DP + "DP70." + i + ".Status")) {
341 | createState(DP + "DP70." + i + ".Status", "", {
342 | "name": "DP70 Kanal " + i + " Status (normal/Alarm)",
343 | "type": "string",
344 | "role": "state"
345 | });
346 | }
347 | if (!existsState(DP + "DP70." + i + ".Batterie")) {
348 | createState(DP + "DP70." + i + ".Batterie", "", {
349 | "name": "DP70 Kanal " + i + " Batterie",
350 | "type": "number",
351 | "role": "state"
352 | });
353 | }
354 | }
355 | }
356 |
357 | //DP100 / WH51[L] - Sensoren
358 | async function DP100_anlegen() {
359 | if (!existsState(DP + "DP100")) { await createStateAsync(DP + "DP100", '', { name: "Mehrkanal Bodenfeuchtesensoren" }); }
360 | for (var i = 1; i <= DP100; i++) {
361 | if (!existsState(DP + "DP100." + i + ".Bodenfeuchtigkeit")) {
362 | await createStateAsync(DP + "DP100." + i + ".Bodenfeuchtigkeit", "", {
363 | "name": "DP100 Kanal " + i + " Bodenfeuchtigkeit",
364 | "type": "number",
365 | "role": "state",
366 | "unit": "%"
367 | });
368 | }
369 | if (!existsState(DP + "DP100." + i + ".Batterie")) {
370 | await createStateAsync(DP + "DP100." + i + ".Batterie", "", {
371 | "name": "DP100 Kanal " + i + " Batterie",
372 | "type": "number",
373 | "role": "state",
374 | "unit": "V"
375 | });
376 | }
377 | if (!existsState(DP + "DP100." + i + ".Raw")) {
378 | await createStateAsync(DP + "DP100." + i + ".Raw", "", {
379 | "name": "DP100 Kanal " + i + " Raw-Wert",
380 | "type": "number",
381 | "role": "state"
382 | });
383 | }
384 | }
385 | }
386 |
387 | if (DP200 > 0 && DP200 <= 4) {
388 | if (!existsState(DP + "DP200")) { createState(DP + "DP200", '', { name: "Feinstaub Emissionssensoren" }); }
389 | for (var i = 1; i <= DP200; i++) {
390 | if (!existsState(DP + "DP200." + i + ".PM25")) {
391 | createState(DP + "DP200." + i + ".PM25", "", {
392 | "name": "DP200 Kanal " + i + " 2.5µm Partikel",
393 | "type": "number",
394 | "role": "state",
395 | "unit": "µg/m³"
396 | });
397 | }
398 | if (!existsState(DP + "DP200." + i + ".PM25_24h")) {
399 | createState(DP + "DP200." + i + ".PM25_24h", "", {
400 | "name": "DP200 Kanal " + i + " Durchschnitt per 24h",
401 | "type": "number",
402 | "role": "state",
403 | "unit": "µg/m³"
404 | });
405 | }
406 | if (!existsState(DP + "DP200." + i + ".Batterie")) {
407 | createState(DP + "DP200." + i + ".Batterie", "", {
408 | "name": "DP200 Kanal " + i + " Batterie (5 = max)",
409 | "type": "number",
410 | "role": "state"
411 | });
412 | }
413 | }
414 | }
415 |
416 | if (DP250 > 0 && DP250 <= 1) {
417 | if (!existsState(DP + "DP250")) { createState(DP + "DP250", '', { name: "5-In-1 CO2 / PM2.5 / PM10 / Temperatur / Luftfeuchte Innenraumsensor" }); }
418 | for (let i = 1; i <= DP250; i++) {
419 | if (!existsState(DP + "DP250." + i + ".Temperatur")) {
420 | createState(DP + "DP250." + i + ".Temperatur", "", {
421 | "name": "DP250 Kanal " + i + " Temperatur",
422 | "type": "number",
423 | "role": "value",
424 | "unit": "°C"
425 | });
426 | }
427 | if (!existsState(DP + "DP250." + i + ".Luftfeuchtigkeit")) {
428 | createState(DP + "DP250." + i + ".Luftfeuchtigkeit", "", {
429 | "name": "DP250 Kanal " + i + " Luftfeuchtigkeit",
430 | "type": "number",
431 | "role": "value",
432 | "unit": "%"
433 | });
434 | }
435 | if (!existsState(DP + "DP250." + i + ".PM25")) {
436 | createState(DP + "DP250." + i + ".PM25", "", {
437 | "name": "DP250 Kanal " + i + " 2.5µm Partikel",
438 | "type": "number",
439 | "role": "value",
440 | "unit": "µg/m³"
441 | });
442 | }
443 | if (!existsState(DP + "DP250." + i + ".PM25_24h")) {
444 | createState(DP + "DP250." + i + ".PM25_24h", "", {
445 | "name": "DP250 Kanal " + i + " Durchschnitt per 24h",
446 | "type": "number",
447 | "role": "value",
448 | "unit": "µg/m³"
449 | });
450 | }
451 | if (!existsState(DP + "DP250." + i + ".PM10")) {
452 | createState(DP + "DP250." + i + ".PM10", "", {
453 | "name": "DP250 Kanal " + i + " 10µm Partikel",
454 | "type": "number",
455 | "role": "value",
456 | "unit": "µg/m³"
457 | });
458 | }
459 | if (!existsState(DP + "DP250." + i + ".PM10_24h")) {
460 | createState(DP + "DP250." + i + ".PM10_24h", "", {
461 | "name": "DP250 Kanal " + i + " Durchschnitt per 24h",
462 | "type": "number",
463 | "role": "value",
464 | "unit": "µg/m³"
465 | });
466 | }
467 | if (!existsState(DP + "DP250." + i + ".CO2")) {
468 | createState(DP + "DP250." + i + ".CO2", "", {
469 | "name": "DP250 Kanal " + i + " CO2-Konzentration",
470 | "type": "number",
471 | "role": "value",
472 | "unit": "ppm"
473 | });
474 | }
475 | if (!existsState(DP + "DP250." + i + ".CO2_24h")) {
476 | createState(DP + "DP250." + i + ".CO2_24h", "", {
477 | "name": "DP250 Kanal " + i + " Durchschnitt per 24h",
478 | "type": "number",
479 | "role": "value",
480 | "unit": "ppm"
481 | });
482 | }
483 | if (!existsState(DP + "DP250." + i + ".Batterie")) {
484 | createState(DP + "DP250." + i + ".Batterie", "", {
485 | "name": "DP250 Kanal " + i + " Batterie (6 = max)",
486 | "type": "number",
487 | "role": "value"
488 | });
489 | }
490 | }
491 | }
492 |
493 | if (DP300 > 0 && DP300 <= 1) {
494 | if (!existsState(DP + "DP300")) { createState(DP + "DP300", '', { name: "Solar unterstütztes Anemometer mit UV-Lichtsensor" }); }
495 | for (let i = 1; i <= DP300; i++) {
496 | if (!existsState(DP + "DP300." + i + ".Batterie")) {
497 | createState(DP + "DP300." + i + ".Batterie", "", {
498 | "name": "DP300 Kanal " + i + " Batterie",
499 | "type": "number",
500 | "role": "value",
501 | "unit": "Volt"
502 | });
503 | }
504 | }
505 | }
506 |
507 | //Bresser #7009999 - Sensoren
508 | async function BR7009999_anlegen() {
509 | if (!existsState(DP + "BR7009999")) { await createStateAsync(DP + 'BR7009999', '', { name: 'Thermo-Hygro-7Ch-Sensor' }); }
510 | for (var i = 1; i <= BR7009999; i++) {
511 | if (!existsState(DP + 'BR7009999.' + i)) { await createStateAsync(DP + 'BR7009999.' + i, '', { name: i + '. Kanal' }); }
512 | if (!existsState(DP + 'BR7009999.' + i + '.Temperatur')) {
513 | await createStateAsync(DP + 'BR7009999.' + i + '.Temperatur', {
514 | name: 'BR7009999 Kanal ' + i + ' Temperatur',
515 | type: 'number',
516 | role: 'state',
517 | unit: '°C'
518 | });
519 | }
520 | if (!existsState(DP + 'BR7009999.' + i + '.Luftfeuchte')) {
521 | await createStateAsync(DP + 'BR7009999.' + i + '.Luftfeuchte', {
522 | name: 'BR7009999 Kanal ' + i + ' Luftfeuchte',
523 | type: 'number',
524 | role: 'state',
525 | unit: '%'
526 | });
527 | }
528 | }
529 | }
530 |
531 | //FT0300 - Sensoren
532 | async function FT0300_anlegen() {
533 | await createStateAsync(DP + "FT0300_Temperatur_1", 0, { name: "Temperatur FT0300 Sensor 1", type: "number", role: "state", unit: "°C" });
534 | await createStateAsync(DP + "FT0300_Feuchte_1", 0, { name: "Feuchtigkeit FT0300 Sensor 1", type: "number", role: "state", unit: "%" });
535 | }
536 |
--------------------------------------------------------------------------------
/wetterstation.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | : <<'Versionsinfo'
3 |
4 |
5 | V3.5.0 - 10.05.2025 (c) 2019-2025 SBorg
6 |
7 | wertet ein Datenpaket einer WLAN-Wetterstation im Wunderground-/Ecowitt-Format aus, konvertiert dieses und überträgt
8 | die Daten an den ioBroker (alternativ auch an AWEKAS, OpenSenseMap, Windy, wetter.com und WeatherObservationsWebsite)
9 |
10 | benötigt den 'Simple RESTful API'-Adapter im ioBroker, 'jq', 'bc' und 'dc' unter Linux
11 |
12 |
13 | V3.5.0 / 10.05.2025 ~ Fix DP50/DP100 werden auch als FT0300-Sensoren erkannt
14 | ~ Fix bei AWEKAS.at - Skript bleibt bei fehlender Internet-Verbindung hängen
15 | + (Wasserdampf-)Drucksättigungsdefizit VPD / Issue #79
16 | ~ Unterstützung für bis zu 16x DP100 / Issue #80
17 | V3.4.0 / 20.07.2024 ~ Fix "Kommunikationsfehler" bei Gateways mit Firmware ab V3.1.1 / Issue #71
18 | ~ Fix am ws_updater, Restart des Service wird nach Update nicht ausgeführt
19 | V3.3.0 / 06.07.2024 + Fix Simple API-Fehlermeldung bei leerer Solarenergie
20 | + Fix DP "Windy Datenübertragung" verbleibt auf "false" trotz erfolgreicher Datenübertragung
21 | (Änderung an der API von windy)
22 | + Raw-Werte bei DP100/WH51[L] hinzugefügt
23 | V3.2.0 / 12.08.2023 + Support für WeatherObservationsWebsite (WOW)
24 | + Fix Zeitstempel für neuere Gateway-Firmwarereleases die ein URL-Encoding enthalten
25 | V3.1.1 / 04.06.2023 + Fix "MetSommer" (Skript bleibt bei den Mitternachtjobs hängen)
26 | V3.1.0 / 16.03.2023 + Windböe max für Stationen die den Wert nicht liefern
27 | + Option "k" für selbstsignierte Zertifikate bei der Influx-Abfrage hinzugefügt
28 | + Parameter "--influx_test" zum test der Influx-Konnektivität
29 | + Fix "MetSommer" (Skript bleibt bei den Mitternachtjobs hängen)
30 | V3.0.0 / 08.02.2023 ~ Breaking Release / Support für (und nur noch!) InfluxDB V2.x / Issue #41
31 | ~ Mindestintervall von 65 Sekunden beim Datenversand an AWEKAS.at
32 | + Support Zusatzsensor Curconsa FT0300 / Pull Request #55 (LukasTr1980)
33 | ~ Anzahl maximaler interner Sensoren von 30 auf 35 angehoben
34 | + Debug-Option zum Test der InfluxDB-Konnektivität
35 | V2.22.0 / 23.01.2023 + Support für Bresser Thermo-Hygro-7Ch-Sensor #7009999 / Issue #53
36 | V2.21.0 / 15.01.2023 + Support für AWEKAS
37 | ~ fix fehlende Regenwerte wenn nur der WS90 ohne weitere Außeneinheit benutzt wird / Issue #51
38 | V2.20.0 / 12.12.2022 ~ fix Wolkenbasis (keine Werte falls Taupunkt negativ) / Issue #46 (viper4iob)
39 | ~ fix Wetterwarnung (Reif) / Issue #47 (viper4iob)
40 | ~ fix OpenSenseMap für Stationen die 10-Minutendurchschnittswerte bereits liefern / Issue #48 (viper4iob)
41 | V2.19.0 / 12.08.2022 + Wetterwarnungen Schwüle, Tau/Nebel und Reif
42 | ~ URL-Encoding für Umlaute
43 | + Unterstützung für WS90 "Wittboy"
44 | V2.18.0 / 28.07.2022 + Höhe der Wolkenbasis
45 | + Windrichtung der letzten 10 Minuten als Text
46 | + Unterstützung für DP10/WN35 Blattfeuchte-Sensor
47 | + Ausgabe der Skriptversion in Datenpunkt beim Start
48 | V2.17.0 / 22.07.2022 + durchschnittliche Windrichtung und -geschwindigkeit der letzten 10 Minuten alternativ anstelle
49 | der aktuellen Werte an OpenSenseMap, windy und wetter.com senden
50 | + Temperaturtrend Aussentemperatur der letzten Stunde
51 | ~ Fix für Datenübertragung an nicht antwortenden OSeM-Server
52 | V2.16.0 / 12.07.2022 + Windrichtung der letzten 10 Minuten für alle Stationen (benötigt wird dafür nun noch 'dc')
53 | + durchschnittliche Windgeschwindigkeit der letzten 10 Minuten für alle Stationen
54 | ~ Bugfix gelegentlicher "jq parse"-Fehler
55 | ~ Bugfix Regenmenge des meteorologischen Sommers aktualisiert sich nicht
56 | V2.15.0 / 19.06.2022 + neuer DP "Meldungen"; für Status- und Fehlermeldungen
57 | + Datenübertragung an Wunderground.com auch bei eigenem DNS-Server (Protokoll #9)(@git-ZeR0)
58 | + Windrichtung und -geschwindigkeit der letzten 10 Minuten (aktuell HP1000SE Pro)
59 | + ws_updater: anlegen neuer Datenpunkte per Rest-API möglich
60 | V2.14.0 / 28.05.2022 ~ Fixed authentication for Simple-API setBulk requests (@crycode-de)
61 | + Set ack flag on setBulk requests (requires PR ioBroker/ioBroker.simple-api#145) (@crycode-de)
62 | + Added option to ignore SSL errors if HTTPS is used together with a self-signed certificate (@crycode-de)
63 | + Added the state .Info.Sonnenschein_VorTag_Text (@crycode-de)
64 | ~ Merge some SAPI "Single" calls into SAPI "Bulk" calls (@crycode-de)
65 | V2.13.0 / 05.04.2022 + Unterstützung für DP35/WN34 Sensor (@Omnedon)
66 | V2.12.1 / 29.03.2022 ~ Fehler bei "FIX_AUSSENTEMP" behoben (keine Datenübertragung an den ioB / Issue #31)
67 | V2.12.0 / 26.03.2022 + bei fehlerhafter Außentemperatur erfolgt keine Datenübertragung des Paketes an den ioB
68 | V2.11.1 / 14.02.2022 ~ Reduzierung valides Datenpaket auf 250 Zeichen
69 | ~ "SainLogic Pro"-Protokoll in "DNS" umbenannt
70 | V2.11.0 / 03.12.2021 ~ Windgeschwindigkeit bei wetter.com in m/s
71 | + Konfigurationsmöglichkeit des Kommunikationsfehlers (Issue #26)
72 | ~ Bugfix Speicherort beim logging
73 | ~ Ergänzung bei Prüfung auf valides Datenpaket (Außentemperatur hinzugefügt)
74 | + Hinweis auf korrekte WS_ID bei Wunderground-Protokoll falls Kommunikationsfehler
75 | V2.10.1 / 22.11.2021 ~ Bugfix 'jq'-Fehlermeldungen von 0:00 Uhr bis 01:00 Uhr
76 | ~ Bugfix Fehlermeldung "bereits existierender User" bei der OSeM-Registrierung obwohl keiner angelegt
77 | + bei Option '--debug' werden, sofern aktiviert, nun auch die Daten an den/die Wetter-Dienst(e)
78 | geschickt und deren Meldung(en) ausgegeben
79 | ~ Fix auftretende Fehlermeldung falls SimpleAPI nicht erreichbar war
80 | ~ Codeoptimierungen
81 | V2.10.0 / 21.10.2021 ~ Bugfix Option '--data' bei Ecowitt-Protokoll
82 | ~ Passkey bei Nutzung des Ecowitt-Protokolls maskieren
83 | + logging des Datenstrings der Wetterstation in eine Datei
84 | + Unterstützung für DP40/WH32 (bzw. WH26) Sensor
85 | + Unterstützung für DP300/WS68 Sensor
86 | + Unterstützung für WH31 (bzw. WH25) Sensor
87 | + netcat-/Success-Meldungen im Syslog entfernt
88 | + Patch Sommer-/Winterzeit für wetter.com
89 | V2.9.0 / 25.08.2021 + Min-/Max-Aussentemperatur des heutigen Tages
90 | ~ Änderung bei Datenübertragung per Simple-API wg. InfluxDB 2.x
91 | + Meteorologischer Sommer Durchschnittstemperatur und Regenmenge
92 | + neuer Shell-Parameter --metsommer (zur manuellen Berechnung der Werte des meteorologischen Sommers)
93 | V2.8.0 / 14.08.2021 ~ Änderung am Messverfahren der Solarenergie (festes Poll-Intervall --> Zeitstempel)
94 | + Support für wetter.com
95 | V2.7.0 / 15.07.2021 + Bei bereits eingetragenem OSEM-User erfolgt Abbruch der OSEM-Registrierung
96 | + Unterstützung für DP250/WH45 Sensor
97 | ~ Fix Prüfung netcat-Version
98 | ~ Berechnung Windchill nur bis 11°C
99 | V2.6.0 / 04.05.2021 ~ Fix Avg Aussentemperatur vor einem Jahr
100 | ~ Windchill erst ab 5km/h Windgeschwindigkeit
101 | + Prüfung bei Option "v" ob die netcat-Version korrekt ist
102 | + Support für Windy
103 | ~ Hitzeindex
104 | V2.5.0 / 08.02.2021 ~ Fix für Protokoll #9 wg. fehlender Regenrate
105 | + Min/Max/Avg Aussentemperatur vor einem Jahr
106 | + Unterstützung von max. 4 DP70 Sensoren
107 | ~ Codeoptimierungen
108 | V2.4.0 / 03.02.2021 + Hitzeindex (>20°C)
109 | + Unterstützung von max. 4 DP200 Sensoren
110 | V2.3.0 / 26.01.2021 ~ Fix Rundungsfehler Windchill/Taupunkt
111 | + Min/max Aussentemperatur der letzten 24h
112 | + Unterstützung für DP60 Sensor
113 | ~ Fix für Protokoll #9 wg. fehlender Regenrate
114 | V2.2.0 / 21.01.2021 ~ Fix Batteriestatus
115 | ~ Chillfaktor umbenannt auf Windchill/gefühlte Temperatur
116 | + Berechnung Windchill + Taupunkt für Ecowitt-Protokoll
117 | V2.1.0 / 10.01.2021 + zusätzliches Protokoll "9" für userspezifische Abfrage
118 | ~ Fix Reset kumulierte Regenmenge zum Jahresanfang
119 | ~ Fix für DP100 Bodenfeuchte
120 | V2.0.0 / 15.12.2020 + Unterstützung des Gateways und Zusatzsensoren (@a200)
121 | + Protokoll (wunderground oder ecowitt) wählbar
122 | V1.6.0 / 06.12.2020 + Patch (@a200) für neuere Firmwareversionen (V1.6.3) speziell bei Nutzung eines Gateways
123 | ~ Reset des Error-Kommunikationszählers
124 | + Prüfung bei Option "-v" ob 'bc' und 'jq' installiert sind
125 | ~ Option "n" bei netcat hinzugefügt
126 | V1.5.0 / 30.11.2020 ~ Simple-API per HTTP[S] und Authentifizierung
127 | + Update-Routine (beta)
128 | V1.4.0 / 30.10.2020 + Support für openSenseMap
129 | V1.3.1 / 08.10.2020 ~ Fix falls Leerzeichen im Verzeichnisnamen
130 | V1.3.0 / 19.06.2020 + letztes Regenereignis und Regenmenge
131 | + Fehlermeldung bei falscher WS_ID / ID der Wetterstation
132 | + Sonnenscheindauer + Solarenergie vom Vortag
133 | ~ Änderung/Fix Sonnenscheindauer
134 | V1.2.0 / 20.04.2020 + Firmwareupgrade verfügbar?
135 | + Firmwareversion
136 | + Sonnenscheindauer Heute, Woche, Monat, Jahr
137 | + UV-Belastung
138 | + Solarenergie Heute, Woche, Monat, Jahr
139 | + Vorjahreswerte von Regenmenge, Sonnenscheindauer und Solarenergie
140 | V1.1.0 / 03.04.2020 + aktueller Regenstatus
141 | + Luftdrucktendenz, Wettertrend und aktuelles Wetter
142 | V1.0.0 / 12.03.2020 + Berechnung Jahresregenmenge
143 | + Windrichtung zusätzlich als Text
144 | ~ Änderung "Regen Aktuell" in "Regenrate"
145 | ~ Splitt in conf- + sub-Datei
146 | V0.1.3 / 08.02.2020 + Unterstützung für Datenpunkt "Regenmenge Jahr", zB. für Froggit WH4000 SE
147 | + Shell-Parameter -s (Klartextanzeige Passwort + Station-ID)
148 | + Shell-Parameter --data (zeigt nur das gesendete Datenpaket der Wetterstation an)
149 | V0.1.2 / 31.01.2020 + Prüfung auf Datenintegrität
150 | + neuer Datenpunkt bei Kommunikationsfehler
151 | + Ausgabe Datenpaket der Wetterstation bei Debug
152 | V0.1.1 / 01.01.2020 + UTC-Korrektur
153 | + Config-Versionscheck
154 | + Shell-Parameter -v/-h/--debug
155 | V0.1.0 / 29.12.2019 erstes Release
156 |
157 | Versionsinfo
158 | ### Ende Infoblock
159 |
160 | #Versionierung
161 | SH_VER="V3.5.0"
162 | CONF_V="V3.5.0"
163 | SUBVER="V3.5.0"
164 |
165 |
166 | #Installationsverzeichnis feststellen
167 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
168 |
169 | #Config-Version prüfen
170 | VER_CONFIG=$(cat "${DIR}/wetterstation.conf"|grep '### Setting'|cut -d" " -f3)
171 | if [ $CONF_V != $VER_CONFIG ]; then
172 | echo -e "wetterstation: \e[31mERROR #000 - Config-Version mismatch!\n"
173 | echo -e "benutzt: $VER_CONFIG\t benötigt wird: $CONF_V \e[0m"
174 | exit 1
175 | fi
176 |
177 | #Sub-Version prüfen
178 | SUB_CONFIG=$(cat "${DIR}/wetterstation.sub"|grep '### Subroutinen'|cut -d" " -f3)
179 | if [ $SUBVER != $SUB_CONFIG ]; then
180 | echo -e "wetterstation: \e[31mERROR #001 - Subroutinen-Version mismatch!\n"
181 | echo -e "benutzt: $SUB_CONFIG\t benötigt wird: $SUBVER \e[0m"
182 | exit 1
183 | fi
184 |
185 | #Konfiguration lesen + Subroutinen laden
186 | . "${DIR}/wetterstation.conf"
187 | . "${DIR}/wetterstation.sub"
188 |
189 |
190 | #gibt es Parameter?
191 | while [ "$1" != "" ]; do
192 | case $1 in
193 | --debug ) version
194 | debug=true #override
195 | ;;
196 | --osem_reg ) osem_register
197 | exit
198 | ;;
199 | --windy_reg ) windy_register
200 | exit
201 | ;;
202 | --metsommer ) metsom_override=true
203 | metsommer
204 | exit
205 | ;;
206 | --influx_test) minmax24h DEBUG
207 | exit
208 | ;;
209 | -s | --show ) show_pwid=true
210 | ;;
211 | -d | --data ) setup
212 | ws_data
213 | exit
214 | ;;
215 | -v | --version ) version
216 | exit
217 | ;;
218 | -h | --help ) usage
219 | exit
220 | ;;
221 | * ) usage
222 | exit 1
223 | esac
224 | shift
225 | done
226 |
227 |
228 | #Setup + Initial ausführen
229 | setup
230 | minmaxheute
231 |
232 |
233 | #Endlosschleife
234 | while true
235 | do
236 |
237 | #Kommunikation herstellen und Daten empfangen
238 | get_DATA
239 |
240 | #KOM-Fehler?
241 | if [ "$?" -eq "0" ]; then
242 | unset MESSWERTE; unset MESSWERTERAWIN
243 | MESSWERTERAWIN=(${DATA//&/ })
244 | rawinlen=${#MESSWERTERAWIN[@]}
245 | j=35
246 | for (( i=1; i -273") ))
354 | then
355 | iob_send
356 | if [ "${TEMPFIX_ERR}" -gt "0" ]; then let "TEMPFIX_ERR--"; fi
357 | else
358 | MELDUNG "unplausibler Messwert Aussentemperatur. Datenpaket verworfen..."
359 | let "TEMPFIX_ERR++"
360 | if [ "${TEMPFIX_ERR}" -gt "10" ]
361 | then
362 | MELDUNG "m%C3%B6glicherweise Batterie des Wettermastes schwach"
363 | SAPI "Single" "set/${DP_STATION_BATTERIE}?value=1&ack=true"
364 | fi
365 | fi
366 | else
367 | iob_send
368 | fi
369 |
370 | #Reset Kommfehler
371 | if [ ! -z "$KOMFEHLER" ] && [ "$KOMFEHLER" -gt "0" ]; then
372 | let "KOMFEHLER--"
373 | if [ "$KOMFEHLER" -eq "0" ] && [ $RESET_KOMFEHLER == "true" ]; then SAPI "Single" "set/${DP_KOMFEHLER}?value=false&ack=true"; fi
374 | fi
375 |
376 |
377 | else
378 | let "KOMFEHLER++"
379 | if [ "$KOMFEHLER" -eq "10" ]; then SAPI "Single" "set/${DP_KOMFEHLER}?value=true&ack=true"; fi
380 | if [ "$KOMFEHLER" -gt "10" ]; then KOMFEHLER=10; fi #Anzahl beschränken
381 | fi
382 |
383 |
384 |
385 | #Debug eingeschaltet?
386 | if [ $debug == "true" ]; then debuging; fi
387 |
388 |
389 |
390 | #Mitternachtjobs
391 | if [ $(date +%H) -ge "23" ] && [ $(date +%M) -ge "58" ] && [ -z $MIDNIGHTRUN ]; then
392 | rain #Jahresregenmenge
393 | firmware_check #neue Firmware
394 | reset_zaehler #Sonnenscheindauer, Solarenergie zurücksetzen (enthällt auch Speicherung Werte VorJahr)
395 | minmaxavg365d #Min-/Max-/Avg-Aussentemperatur vor einem Jahr
396 | metsommer #meteorologischer Sommer Durchschnittstemperatur und Regenmenge
397 | MELDUNG "Mitternachtjobs durchgef%C3%BChrt"
398 | fi
399 | if [ $(date +%H) -eq "0" ] && [ $(date +%M) -le "3" ]; then
400 | unset MIDNIGHTRUN
401 | if [ $(date +%Z) == "CEST" ]; then ZULU=22; else ZULU=23; fi
402 | fi
403 |
404 |
405 |
406 | #15-Minutenjobs: Wetterprognose; min/max Aussentemperatur der letzten 24h + heute
407 | DO_IT=$(date +%M)
408 | DO_IT=${DO_IT#0}
409 | if [ $(( $DO_IT % 15 )) -eq "0" ]; then
410 | if [ $(date +%s) -ge "$TIMER_SET" ]; then wetterprognose
411 | if [ ! -z ${INFLUX_BUCKET} ]; then minmax24h; minmaxheute; fi
412 | fi
413 | do_Wetterwarnung
414 | #stündlich Lebenszeichen
415 | if [ "$(date +%H)" -ne "${ALIVE}" ]; then ALIVE=$(date +%H); MELDUNG "Skript l%C3%A4uft..."; fi
416 | fi
417 |
418 |
419 |
420 | #6-Minutenjobs: WOW, Windy
421 | if [ $(( $DO_IT % 6 )) -eq "0" ] && [ ${block_6minjobs} -le "0" ]; then
422 |
423 | #Windy
424 | if [ ${use_windy} == "true" ]; then windy_update; fi
425 | #WOW
426 | if [ ${use_wow} == "true" ]; then wow_update; fi
427 |
428 | #run_onlyonce
429 | block_6minjobs=3;
430 |
431 | else
432 | let block_6minjobs--
433 | fi
434 |
435 |
436 |
437 | #5-Minutenjobs: wetter.com; Wolkenbasis
438 | if [[ $(( $DO_IT % 5 )) -eq "0" && -z ${run_5minjobs_onlyonce} ]]; then
439 |
440 | #wetter.com / Wolkenbasis
441 | if [ ! -z ${WETTERCOM_ID} ]; then wettercom_update; fi
442 | do_wolkenbasis
443 |
444 | #Windböe max. für Stationen die keinen Wert (#21) liefern
445 | if [ ! -z ${INFLUX_BUCKET} ] && [ -z ${MESSWERTE[21]} ]; then windboeemax; fi
446 |
447 | #run only once
448 | run_5minjobs_onlyonce=true
449 |
450 | else
451 | if [ ${run_5minjobs_onlyonce} ]; then unset run_5minjobs_onlyonce; fi
452 | fi
453 |
454 |
455 |
456 | #Hitzeindex
457 | if (( $(bc -l <<< "${MESSWERTE[1]} > 20") )); then
458 | HITZEINDEX=$(round $(hitzeindex ${MESSWERTE[1]} ${MESSWERTE[5]}) 2)
459 | else
460 | HITZEINDEX=
461 | fi
462 |
463 |
464 | #openSenseMap
465 | if [ ${openSenseMap} == "true" ]; then opensensemap; fi
466 |
467 | #Wunderground
468 | if [ ${WUNDERGROUND_UPDATE} == "true" ]; then wunderground_update; fi
469 |
470 | #AWEKAS
471 | if [ ${use_awekas} == "true" ]; then awekas_update; fi
472 |
473 |
474 | #Logging eingeschaltet?
475 | if [ $logging == "true" ]; then logging; fi
476 |
477 |
478 | done
479 | ###EoF
480 |
481 |
--------------------------------------------------------------------------------
/ws_updater.beta:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | UPDATE_VER=V3.4.0
4 |
5 | ### Farbdefinition
6 | GR='\e[1;32m'
7 | GE='\e[1;33m'
8 | WE='\e[1;37m'
9 | BL='\e[1;36m'
10 | RE='\e[1;31m'
11 |
12 |
13 | echo -e "\n\n${BL}"
14 | echo -e '
15 | _ _______ __ __ __ __
16 | | | / / ___/ / / / /___ ____/ /___ _/ /____ _____
17 | | | /| / /\__ \______/ / / / __ \/ __ / __ `/ __/ _ \/ ___/
18 | | |/ |/ /___/ /_____/ /_/ / /_/ / /_/ / /_/ / /_/ __/ /
19 | |__/|__//____/ \____/ .___/\__,_/\__,_/\__/\___/_/' ${GE}${UPDATE_VER}${BL}
20 | echo -en ' /_/'
21 | echo -e "${WE}\n"
22 |
23 |
24 | #Nicht als root...
25 | if [ $(whoami) = "root" ]; then echo -e "$RE Ausführung als \"root\" nicht möglich...!\n"; exit 1; fi
26 |
27 | #Verzeichnis feststellen + conf lesen
28 | DIR=$(pwd)
29 | if [ -f "${DIR}/wetterstation.conf" ]; then . "${DIR}/wetterstation.conf"; fi
30 |
31 |
32 | #Test ob Datei auf GitHub, sonst Fallback
33 | if [ "$1" = "" ] && ( ! curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh|grep -xq '404: Not Found' ); then
34 | 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..."
35 | sleep 2
36 | source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --menu
37 | exit 0
38 | fi
39 |
40 |
41 |
42 | checker() {
43 | #Test ob bc, jq, unzip, patch und dc installiert sind / Service im User-Kontext läuft
44 | #installierte Influx-Version
45 | #Rest-Api im ioB läuft
46 | #Service im User-Kontext?
47 | if [ ! $(cat /etc/systemd/system/wetterstation.service|grep User=) ]; then
48 | echo -e "\n$GE Service läuft nicht im User-Kontext sondern unter User ${RE}root${GE}..."
49 | jn_abfrage "\n$WE Soll nun auf User (empfohlen) umgestellt werden?"
50 | if [ -z $antwort ]; then echo -e "\n"; return; fi
51 | echo -e "\n"
52 | sudo sed -i '/\[Service\]/a User='$(whoami)'\nGroup='$(whoami) /etc/systemd/system/wetterstation.service
53 | echo -e "\n Done... Restarte Service...\n"
54 | sudo systemctl daemon-reload
55 | sudo systemctl restart wetterstation
56 | fi
57 | if [ ! -z ${INFLUX_API} ]; then check_prog influx; fi
58 | check_prog bc
59 | check_prog jq
60 | check_prog dc
61 | check_prog unzip
62 | check_prog patch
63 | check_prog restapi
64 | echo -e "\n"
65 | }
66 |
67 |
68 | check_prog() {
69 | if [ $1 == "influx" ]; then
70 | if [ ! $(curl -skL -I "${INFLUX_WEB}://${INFLUX_API}/ping" | grep X-Influxdb-Version | cut -d" " -f2 | grep v2.[0-9].[0-9]) ]; then echo -e "${RE} Offizieller Support nur noch für Influx V2.x!\n\n${WE}"; sleep 5; fi
71 | return
72 | fi
73 | if [ $1 == "restapi" ]; then
74 | if [ "$(nc -vz $(echo "${RESTAPI_URL}" | grep -o '[\.0-9]*') &> /dev/null; echo $?)" -eq "0" ]; then RESTAPI=true
75 | echo -e "\n Zugriff auf $GR'Rest-API'$WE im ioBroker: [$GR✓$WE]"
76 | else
77 | RESTAPI=false
78 | echo -e "\n Zugriff auf $GR'Rest-API'$WE im ioBroker: [$RE✗$WE]"
79 | echo -e " (Dies ist kein Problem, es können nur keine neuen Datenpunkte bei Bedarf automatisch angelegt werden."
80 | echo -e " Dies muss im Fall neuer Datenpunkte per 'wetterstation.js' von Hand im ioBroker erfolgen.)"
81 | fi
82 | return
83 | fi
84 | if [ $(which $1) ]; then
85 | echo -e " $GR'$1'$WE installiert: [$GR✓$WE]"
86 | else
87 | echo -e " $GR'$1'$WE installiert: [$RE✗$WE]"
88 | echo -e "\n\n $RE Bitte zuerst '$1' installieren [sudo apt install $1]\n"
89 | exit 1
90 | fi
91 | }
92 |
93 | backup() {
94 | echo -e "\n Lege Sicherungskopie der wetterstation.conf an..."
95 | cp ./wetterstation.conf ./wetterstation.conf.backup
96 | }
97 |
98 | FEHLER() {
99 | if [ "$UPDATE_VER" == "$VERSION" ]; then echo -e "\n$WE Version ist aktuell, nothing to do...\n"; exit 0; fi
100 | echo -e "\n Updater ist ${RE}nur${WE} für Versionen ab V1.4.0 !\n"
101 | exit 1
102 | }
103 |
104 | patcher() {
105 | echo -en "\n${WE} Soll die ${RE}wetterstation.conf ${WE}nun auf die neue Version ${GE}${UPDATE_VER}${WE} gepatcht werden? [${GR}J/N${WE}]"
106 | read -n 1 -p ": " JN
107 | if [ "$JN" = "J" ] || [ "$JN" = "j" ]; then
108 | echo -e "\n\n\n"
109 | else
110 | echo -e "\n\n\n"
111 | echo -e " $RE Abbruch... ${WE}\n\n\n"; exit 1;
112 | fi
113 |
114 | VERSION_SH=$(cat ./wetterstation.sh|grep "SH_VER"|cut -d"=" -f2|tr -d \")
115 |
116 | while [ "$VERSION_CONF" != "$VERSION_SH" ]
117 | do
118 | VERSION_CONF=$(cat ./wetterstation.conf|grep "### Settings V"|cut -d" " -f3)
119 |
120 | case ${VERSION_CONF} in
121 | V1.4.0) PATCH140 ;;
122 | V1.5.0) PATCH150 ;;
123 | V1.6.0) PATCH160 ;;
124 | V2.0.0) PATCH210 ;;
125 | V2.1.0) PATCH220 ;;
126 | V2.2.0) PATCH230 ;;
127 | V2.3.0) PATCH240 ;;
128 | V2.4.0) PATCH250 ;;
129 | V2.5.0) PATCH260 ;;
130 | V2.6.0) PATCH270 ;;
131 | V2.7.0) PATCH280 ;;
132 | V2.8.0) PATCH2100 ;;
133 | V2.9.0) echo -e "$GE Kein Patch nötig...\n" ;;
134 | V2.10.0) PATCH2110 ;;
135 | V2.11.0) PATCH2111 ;;
136 | V2.11.1) PATCH2120 ;;
137 | V2.12.0) PATCH2121 ;;
138 | V2.12.1) PATCH2130 ;;
139 | V2.13.0) PATCH2140 ;;
140 | V2.14.0) PATCH2150 ;;
141 | V2.15.0) PATCH2160 ;;
142 | V2.16.0) PATCH2170 ;;
143 | V2.17.0) PATCH2180 ;;
144 | V2.18.0) PATCH2190 ;;
145 | V2.19.0) PATCH2200 ;;
146 | V2.20.0) PATCH2210 ;;
147 | V2.21.0) PATCH2220 ;;
148 | V2.22.0) PATCH3000 ;;
149 | V3.0.0) PATCH3010 ;;
150 | V3.1.0) PATCH3011 ;;
151 | V3.1.1) PATCH3020 ;;
152 | V3.2.0) PATCH3030 ;;
153 | V3.3.0) PATCH3040 && service_restart && exit 0;;
154 | V3.4.0) echo -e "$GE Version ist bereits aktuell...\n" && exit 0;;
155 | *) FEHLER
156 | esac
157 |
158 | done
159 | exit 0
160 | }
161 |
162 | main() {
163 | #Wetterstation im Verzeichnis vorhanden
164 | if [ ! -f ./wetterstation.sh ]; then
165 | echo -e "\n$RE Keine Version von WLAN-Wetterstation im aktuellen Verzeichnis gefunden...\n"
166 | exit 1
167 | fi
168 |
169 | #aktuelle Version von GitHub holen
170 | GitHub=$(curl -sH "Accept: application/vnd.github.v3+json" https://api.github.com/repos/SBorg2014/WLAN-Wetterstation/releases/latest)
171 | akt_ver_long=$(echo ${GitHub} | jq -r '.name' | sed -e 's/-/vom/; s/\"//g')
172 | akt_version=$(echo ${GitHub} | jq -r '.tag_name')
173 | info_version=$(echo ${GitHub} | jq -r '.body' | tr -d '*\\')
174 |
175 | echo -e " Aktuelle Version (latest) auf GitHub: ${GR}$akt_ver_long$WE"
176 | VERSION=$(cat ./wetterstation.sh|grep "SH_VER"|cut -d"=" -f2|tr -d \")
177 | echo -e " Version im aktuellen Verzeichnis : ${GR}$VERSION"
178 |
179 | if [ "$VERSION" == "$akt_version" ]; then echo -e "\n$GE Version ist bereits aktuell...\n"; exit 0; fi
180 |
181 | echo -e "\n$WE Informationen zum Release $akt_version:"
182 | echo -e " ─────────────────────────────────────────────────────────────"
183 | echo -e "\n$GE $info_version\n$WE"
184 |
185 | jn_abfrage "\n$WE Soll ein Update von WLAN-Wetterstation durchgeführt werden?"
186 | if [ -z $antwort ]; then echo -e "\n"; exit 0; fi
187 |
188 | #Update
189 | echo -e "\n\n$WE Führe Update aus...\n"
190 | DL_URL=$(echo ${GitHub} | jq -r '.assets | .[].browser_download_url')
191 | curl -LJ ${DL_URL} -o tmp.zip
192 | unzip -o tmp.zip -x wetterstation.conf
193 | sudo chmod +x wetterstation.sh ws_updater.sh
194 |
195 | rm tmp.zip
196 | source ./ws_updater.sh --patch
197 | }
198 |
199 | service_restart() {
200 | jn_abfrage "\n ${WE}Update ausgeführt. Soll der Service nun neu gestartet werden?"
201 | if [ ! -z $antwort ]; then echo -e "\n"; sudo systemctl restart wetterstation.service; fi
202 | }
203 |
204 | ########################################################################################
205 | #Patch Version V1.4.0 auf V1.5.0
206 | PATCH140() {
207 | backup
208 | echo -e "\n Patche wetterstation.conf auf V1.5.0 ..."
209 | 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
210 | sed -i 's/### Settings V1.4.0/### Settings V1.5.0/' ./wetterstation.conf
211 | echo -e " Fertig...\n"
212 | }
213 |
214 |
215 | #Patch Version V1.5.0 auf V1.6.0
216 | PATCH150() {
217 | backup
218 | echo -e "\n Patche wetterstation.conf auf V1.6.0 ..."
219 | sed -i 's/### Settings V1.5.0/### Settings V1.6.0/' ./wetterstation.conf
220 | echo -e " Fertig...\n"
221 | }
222 |
223 |
224 | #Patch Version V1.6.0 auf V2.0.0
225 | PATCH160() {
226 | backup
227 | echo -e "\n Patche wetterstation.conf auf V2.0.0 ..."
228 | 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
229 | sed -i 's/### Settings V1.6.0/### Settings V2.0.0/' ./wetterstation.conf
230 | echo -e " Fertig...\n"
231 | }
232 |
233 |
234 | #Patch Version V2.0.0 auf V2.1.0
235 | PATCH210() {
236 | backup
237 | echo -e "\n Patche wetterstation.conf auf V2.1.0 ..."
238 | 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
239 | sed -i 's/### Settings V2.0.0/### Settings V2.1.0/' ./wetterstation.conf
240 | echo -e " Fertig...\n"
241 | }
242 |
243 |
244 | #Patch Version V2.1.0 auf V2.2.0
245 | PATCH220() {
246 | backup
247 | echo -e "\n Patche wetterstation.conf auf V2.2.0 ..."
248 | sed -i 's/Chillfaktor/gefühlte Temperatur/' ./wetterstation.conf
249 | sed -i 's/### Settings V2.1.0/### Settings V2.2.0/' ./wetterstation.conf
250 | echo -e " Fertig...\n"
251 | }
252 |
253 |
254 | #Patch Version V2.2.0 auf V2.3.0
255 | PATCH230() {
256 | backup
257 | echo -e "\n Patche wetterstation.conf auf V2.3.0 ..."
258 | 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
259 | 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
260 | sed -i 's/### Settings V2.2.0/### Settings V2.3.0/' ./wetterstation.conf
261 | echo -e " Fertig...\n"
262 | echo -e " ${GE}Eventuelle Zusatzsensoren DP50/60/100 müssen neu eingetragen werden!"
263 | echo -e " Neuen Configblock für Influx beachten/konfigurieren!\n"
264 | }
265 |
266 |
267 | #Patch Version V2.3.0 auf V2.4.0
268 | PATCH240() {
269 | backup
270 | echo -e "\n Patche wetterstation.conf auf V2.4.0 ..."
271 | sed -i '/^.*ANZAHL_DP100=.*/a \ ANZAHL_DP200=0' ./wetterstation.conf
272 | sed -i 's/### Settings V2.3.0/### Settings V2.4.0/' ./wetterstation.conf
273 | echo -e " Fertig...\n"
274 | echo -e " ${GE}Eventuelle Zusatzsensoren DP200 müssen eingetragen werden!\n"
275 | }
276 |
277 |
278 | #Patch Version V2.4.0 auf V2.5.0
279 | PATCH250() {
280 | backup
281 | echo -e "\n Patche wetterstation.conf auf V2.5.0 ..."
282 | sed -i '/^.*ANZAHL_DP100=.*/i \ ANZAHL_DP70=0' ./wetterstation.conf
283 | sed -i 's/### Settings V2.4.0/### Settings V2.5.0/' ./wetterstation.conf
284 | echo -e " Fertig...\n"
285 | echo -e " ${GE}Eventuelle Zusatzsensoren DP70 müssen eingetragen werden!\n"
286 | }
287 |
288 |
289 | #Patch Version V2.5.0 auf V2.6.0
290 | PATCH260() {
291 | backup
292 | echo -e "\n Patche wetterstation.conf auf V2.6.0 ..."
293 | patch_260 && patch ./wetterstation.conf < patch
294 | rm patch
295 | echo -e " ${GE}Windy kann nun mittels \033[30m\033[47m./wetterstation.sh --windy_reg\033[0m ${GE}eingerichtet werden !\n"
296 | }
297 |
298 |
299 | #Patch Version V2.6.0 auf V2.7.0
300 | PATCH270() {
301 | backup
302 | echo -e "\n Patche wetterstation.conf auf V2.7.0 ..."
303 | sed -i '/^.*ANZAHL_DP200=.*/a \ ANZAHL_DP250=0' ./wetterstation.conf
304 | sed -i 's/### Settings V2.6.0/### Settings V2.7.0/' ./wetterstation.conf
305 | echo -e " Fertig...\n"
306 | echo -e " ${GE}Eventueller Zusatzsensor DP250/WH45 muss eingetragen werden!\n"
307 | }
308 |
309 |
310 | #Patch Version V2.7.0 auf V2.8.0
311 | PATCH280() {
312 | backup
313 | echo -e "\n Patche wetterstation.conf auf V2.8.0 ..."
314 | 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
315 | sed -i 's/### Settings V2.7.0/### Settings V2.8.0/' ./wetterstation.conf
316 | echo -e " Fertig...\n"
317 | echo -e " ${GE}Falls die Übertragung der Wetterdaten an wetter.com erfolgen soll, nun aktivieren durch eintragen von User-ID und Passwort!\n"
318 | }
319 |
320 |
321 | #Patch Version V2.8.0 auf V2.10.0
322 | PATCH2100() {
323 | backup
324 | echo -e "\n Patche wetterstation.conf auf V2.10.0 ..."
325 | patch_2100 && patch ./wetterstation.conf < patch.dat
326 | rm patch.dat
327 | echo -e " Fertig...\n"
328 | echo -e " ${GE}Eventuelle Zusatzsensoren DP300/WS68, DP40/WH32 oder WH25/WH31 müssen eingetragen werden!\n"
329 | }
330 |
331 |
332 | #Patch Version V2.10.0 auf V2.11.0
333 | PATCH2110() {
334 | backup
335 | echo -e "\n Patche wetterstation.conf auf V2.11.0 ..."
336 | sed -i 's/### Settings V2.10.0/### Settings V2.11.0/' ./wetterstation.conf
337 | sed -i '/^.*debug=.*/a \ \n #Verhalten bei Kommunikationsfehler [true/false] / default: false / Soll der Datenpunkt automatisch resettet werden?\n RESET_KOMFEHLER=false' ./wetterstation.conf
338 | echo -e " Fertig...\n"
339 | echo -e " ${GE}Parameter für Kommunikationsfehler ggf. ändern. Per Default verbleibt er im Zustand 'true' bei einem Fehler.\n"
340 | }
341 |
342 |
343 | #Patch Version V2.11.0 auf V2.11.1
344 | PATCH2111() {
345 | backup
346 | echo -e "\n Patche wetterstation.conf auf V2.11.1 ..."
347 | sed -i 's/### Settings V2.11.0/### Settings V2.11.1/' ./wetterstation.conf
348 | sed -i 's/Sainlogic Profi/DNS/' ./wetterstation.conf
349 | echo -e " Fertig...\n"
350 | }
351 |
352 |
353 | #Patch Version V2.11.1 auf V2.12.0
354 | PATCH2120() {
355 | backup
356 | echo -e "\n Patche wetterstation.conf auf V2.12.0 ..."
357 | sed -i 's/### Settings V2.11.1/### Settings V2.12.0/' ./wetterstation.conf
358 | 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
359 | echo -e " Fertig...\n"
360 | echo -e " ${GE}Parameter für FIX_AUSSENTEMP ggf. ändern. Per Default werden auch unplausible Messwerte an den ioB geschickt.\n"
361 | }
362 |
363 |
364 | #Patch Version V2.12.0 auf V2.12.1
365 | PATCH2121() {
366 | backup
367 | echo -e "${WE}\n Patche wetterstation.conf auf V2.12.1 ..."
368 | sed -i 's/### Settings V2.12.0/### Settings V2.12.1/' ./wetterstation.conf
369 | echo -e "${WE} Fertig...\n"
370 | }
371 |
372 |
373 | #Patch Version V2.12.1 auf V2.13.0
374 | PATCH2130() {
375 | backup
376 | echo -e "${WE}\n Patche wetterstation.conf auf V2.13.0 ..."
377 | sed -i 's/### Settings V2.12.1/### Settings V2.13.0/' ./wetterstation.conf
378 | sed -i '/^.*ANZAHL_WH31=.*/a \ ANZAHL_DP35=0' ./wetterstation.conf
379 | echo -e "${WE} Fertig...\n"
380 | echo -e " ${GE}Eventuelle Zusatzsensoren DP35 müssen eingetragen werden!\n"
381 | }
382 |
383 |
384 | #Patch Version V2.13.0 auf V2.14.0
385 | PATCH2140() {
386 | backup
387 | echo -e "${WE}\n Patche wetterstation.conf auf V2.14.0 ..."
388 | sed -i 's/### Settings V2.13.0/### Settings V2.14.0/' ./wetterstation.conf
389 | 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
390 | echo -e "${WE} Fertig...\n"
391 | }
392 |
393 |
394 | #Patch Version V2.14.0 auf V2.15.0
395 | PATCH2150() {
396 | backup
397 | echo -e "${WE}\n Patche wetterstation.conf auf V2.15.0 ..."
398 | sed -i 's/### Settings V2.14.0/### Settings V2.15.0/' ./wetterstation.conf
399 | 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
400 | sed -i 's/#InfluxDB-Konfiguration/#InfluxDB-Konfiguration für Influx V1.x.x/' ./wetterstation.conf
401 | echo -e "${WE} Fertig...\n"
402 | echo -e " ${GE}Die Datenübertragung an Wunderground.com kann nun aktiviert werden!\n"
403 | }
404 |
405 |
406 | #Patch Version V2.15.0 auf V2.16.0
407 | PATCH2160() {
408 | backup
409 | echo -e "${WE}\n Patche wetterstation.conf auf V2.16.0 ..."
410 | sed -i 's/### Settings V2.15.0/### Settings V2.16.0/' ./wetterstation.conf
411 | 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
412 | echo -e "${WE} Fertig...\n"
413 | echo -e " ${GE}Die Rest-API kann nun durch Eingabe der URL und den Zugangsdaten aktiviert werden!\n"
414 | }
415 |
416 |
417 | #Patch Version V2.16.0 auf V2.17.0
418 | PATCH2170() {
419 | backup
420 | echo -e "${WE}\n Patche wetterstation.conf auf V2.17.0 ..."
421 | sed -i 's/### Settings V2.16.0/### Settings V2.17.0/' ./wetterstation.conf
422 | 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
423 | if [ ${RESTAPI} == "true" ]; then make_objects ".Aussentemperatur_Trend" "Trend der Aussentemperatur der letzten Stunde" "number" "°C"; fi
424 | echo -e "${WE} Fertig...\n"
425 | 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!"
426 | echo -e " Einstellung dafür in der wetterstation.conf: ${BL}USE_AVG_WIND=true\n${WE}"
427 | }
428 |
429 |
430 | #Patch Version V2.17.0 auf V2.18.0
431 | PATCH2180() {
432 | backup
433 | echo -e "${WE}\n Patche wetterstation.conf auf V2.18.0 ..."
434 | sed -i 's/### Settings V2.17.0/### Settings V2.18.0/' ./wetterstation.conf
435 | sed -i '/^.*ANZAHL_DP35=.*/i \ ANZAHL_DP10=0' ./wetterstation.conf
436 | if [ ${RESTAPI} == "true" ]; then
437 | make_objects ".Info.Wolkenbasis" "Höhe der Wolkenbasis" "number" "m"
438 | make_objects ".Info.Shellscriptversion" "Versionsnummer des Scriptes" "string"
439 | make_objects ".Windrichtung_Text_10min" "Windrichtung Durchschnitt 10 Minuten als Text" "string"
440 | fi
441 | echo -e "${WE} Fertig...\n"
442 | echo -e " ${GE}Eventuelle Zusatzsensoren DP10/WN35 können nun eingetragen werden!\n${WE}"
443 | }
444 |
445 |
446 | #Patch Version V2.18.0 auf V2.19.0
447 | PATCH2190() {
448 | backup
449 | echo -e "${WE}\n Patche wetterstation.conf auf V2.19.0 ..."
450 | sed -i 's/### Settings V2.18.0/### Settings V2.19.0/' ./wetterstation.conf
451 | sed -i '/^.*ANZAHL_WH31=.*/a \ ANZAHL_WS90=0' ./wetterstation.conf
452 | if [ ${RESTAPI} == "true" ]; then make_objects ".Info.Wetterwarnung" "mögliche Wetterereignisse" "string"
453 | # #Abfrage starten zum Anlegen der DPs des WS90
454 | # jn_abfrage "${WE} Sollen nun Datenpunkte für den WS90 angelegt werden...(nur sinnvoll wenn man auch einen hat ;-))?"
455 | # if [ ! -z $antwort ]; then
456 | # make_objects ".WS90" "WS90 Wittboy" "folder"
457 | # make_objects ".WS90.1.aktuelle_Regenrate" "WS90 Kanal 1 aktuelle Regenrate" "number" "mm/h"
458 | # fi
459 | fi
460 | echo -e "\n${WE} Fertig...\n"
461 | echo -e " ${GE}Eventueller Zusatzsensor WS90 kann nun eingetragen werden!${WE}"
462 | # if [ ${RESTAPI} != "true" ] || [ -z $antwort ]; then echo -e " ${GE}Dazu noch 'wetterstation.js' im ioB ersetzen, konfigurieren und einmalig ausführen.\n${WE}"; fi
463 | echo -e " ${GE}Dazu noch 'wetterstation.js' im ioB ersetzen, konfigurieren und einmalig ausführen.\n${WE}"
464 | }
465 |
466 |
467 | #Patch Version V2.19.0 auf V2.20.0
468 | PATCH2200(){
469 | backup
470 | echo -e "${WE}\n Patche wetterstation.conf auf V2.20.0 ..."
471 | sed -i 's/### Settings V2.19.0/### Settings V2.20.0/' ./wetterstation.conf
472 | echo -e "\n${WE} Fertig...\n"
473 | }
474 |
475 |
476 | #Patch Version V2.20.0 auf V2.21.0
477 | PATCH2210(){
478 | backup
479 | echo -e "${WE}\n Patche wetterstation.conf auf V2.21.0 ..."
480 | sed -i 's/### Settings V2.20.0/### Settings V2.21.0/' ./wetterstation.conf
481 | sed -i '/^.*Ende Usereinstellungen.*/i \\n #############################################################################################\n ### AWEKAS - Einstellungen (nur nötig falls AWEKAS benutzt werden soll) ###\n #############################################################################################' ./wetterstation.conf
482 | sed -i '/^.*Ende Usereinstellungen.*/i \\n #AWEKAS aktivieren [true/false] / default: false\n use_awekas=false\n\
483 | #AWEKAS Login Username und Passwort\n AWEKAS_USER=\n AWEKAS_PW=\n\
484 | #############################################################################################\
485 | ### AWEKAS - Ende der Einstellungen ###################################################\
486 | #############################################################################################\n' ./wetterstation.conf
487 | if [ ${RESTAPI} == "true" ]; then
488 | make_objects ".Info.Awekas_at" "Datenübertragung an AWEKAS.at erfolgreich" "boolean"
489 | fi
490 | echo -e "\n${WE} Fertig...\n"
491 | echo -e " ${GE}Die Datenübertragung kann nun (optional) in der wetterstaion.conf nach Eintragung der Zugangsdaten aktiviert werden.${WE}"
492 | }
493 |
494 |
495 | #Patch Version V2.21.0 auf V2.22.0
496 | PATCH2220(){
497 | backup
498 | echo -e "${WE}\n Patche wetterstation.conf auf V2.22.0 ..."
499 | sed -i 's/### Settings V2.21.0/### Settings V2.22.0/' ./wetterstation.conf
500 | sed -i 's/Anzahl der vorhandenen Zusatzsensoren/Anzahl der vorhandenen Zusatzsensoren Froggit, Ecowitt und Bresser/' ./wetterstation.conf
501 | sed -i '/^.*ANZAHL_DP300=.*/a \ ANZAHL_7009999=0' ./wetterstation.conf
502 | echo -e "\n${WE} Fertig...\n"
503 | echo -e " ${GE}Eventuelle Zusatzsensoren Bresser #7009999 können nun eingetragen werden!${WE}"
504 | echo -e " ${GE}Dazu noch 'wetterstation.js' im ioB ersetzen, konfigurieren und einmalig ausführen.\n${WE}"
505 | }
506 |
507 |
508 | #Patch Version V2.22.0 auf V3.0.0
509 | PATCH3000(){
510 | echo -e "${RE}"'
511 | ___ __ __ __
512 | / | _____/ /_ / /___ ______ ____ _ / /
513 | / /| |/ ___/ __ \/ __/ / / / __ \/ __ `/ / /
514 | / ___ / /__/ / / / /_/ /_/ / / / / /_/ / /_/
515 | /_/ |_\___/_/ /_/\__/\__,_/_/ /_/\__, / (_)
516 | /____/'"${WE}"
517 |
518 | echo -e "\n${GE} ┌──────────────────────────────────────────────────────┐"
519 | echo -e " │ V3.0.0 ist ein Breaking-Release! │"
520 | echo -e " │ Es wird zwingend bei der Nutzung der Influx-Features │"
521 | echo -e " │ InfluxDB mindestens in der Version 2.x oder höher │"
522 | echo -e " │ benötigt ! │"
523 | echo -e " └──────────────────────────────────────────────────────┘${WE}\n"
524 |
525 | jn_abfrage "${WE}\n Möchten Sie ${BL}WLAN-Wetterstation${WE} auf Version V3.0.0 updaten?"
526 | if [ -z $antwort ]; then echo -e "\n ${RE}Abbruch...${WE}\n\n"; exit 1; fi
527 | unset antwort
528 |
529 | backup
530 | echo -e "${WE}\n Patche wetterstation.conf auf V3.0.0 ..."
531 | sed -i 's/### Settings V2.22.0/### Settings V3.0.0/' ./wetterstation.conf
532 | sed -i 's/#Name, User und Passwort der InfluxDB-Datenbank/#Bucket, Token und Organisation der InfluxDB/' ./wetterstation.conf
533 | sed -i 's/INFLUX_DB=/INFLUX_BUCKET=/' ./wetterstation.conf
534 | sed -i 's/INFLUX_USER=.*/INFLUX_TOKEN=/' ./wetterstation.conf
535 | sed -i 's/INFLUX_PASSWORD=.*/INFLUX_ORG=/' ./wetterstation.conf
536 | sed -i '/^.*#InfluxDB-Konfiguration \/ ohne InfluxDB alles leer lassen.*/a \ #Protokoll (HTTP oder HTTPS) / default: HTTP\n INFLUX_WEB=HTTP' ./wetterstation.conf
537 | echo -e "\n${WE} Fertig...\n"
538 | echo -e " ${GE}InfluxDB in Version 2.x kann nun in der Konfiguration aktiviert werden.\n${WE}"
539 | }
540 |
541 |
542 | #Patch Version V3.0.0 auf V3.1.0
543 | PATCH3010(){
544 | backup
545 | echo -e "${WE}\n Patche wetterstation.conf auf V3.1.0 ..."
546 | sed -i 's/### Settings V3.0.0/### Settings V3.1.0/' ./wetterstation.conf
547 | echo -e "\n${WE} Fertig...\n"
548 | }
549 |
550 |
551 | #Patch Version V3.1.0 auf V3.1.1
552 | PATCH3011(){
553 | backup
554 | echo -e "${WE}\n Patche wetterstation.conf auf V3.1.1 ..."
555 | sed -i 's/### Settings V3.1.0/### Settings V3.1.1/' ./wetterstation.conf
556 | echo -e "\n${WE} Fertig...\n"
557 | }
558 |
559 |
560 | patch_260() {
561 | cat <patch
562 | --- wetterstation.conf_250 2021-05-13 13:45:06.297750501 +0200
563 | +++ wetterstation.conf 2021-05-12 18:39:24.358821394 +0200
564 | @@ -1,4 +1,4 @@
565 | -### Settings V2.5.0 -----------------------------------------------------------
566 | +### Settings V2.6.0 -----------------------------------------------------------
567 | #Debuging einschalten [true/false] / default: false / Ausgabe der Messwerte
568 | debug=false
569 |
570 | @@ -112,5 +112,42 @@
571 | #############################################################################################
572 |
573 |
574 | +
575 | + #############################################################################################
576 | + ### Windy - Einstellungen (nur nötig falls Windy benutzt werden soll) ###
577 | + #############################################################################################
578 | +
579 | + #Windy aktivieren [true/false] / default: false
580 | + use_windy=false
581 | +
582 | + #Windy API-Key
583 | + windy_APIKey=
584 | +
585 | + #Station [number: 0 - 2147483647] / default: 0
586 | + windy_Station=
587 | +
588 | + #Name der Station [Text]
589 | + windy_Name=
590 | +
591 | + #Latitude/Breitengrad der Station
592 | + windy_Latitude=
593 | +
594 | + #Longitude/Längengrad der Station
595 | + windy_Longitude=
596 | +
597 | + #Elevation/Höhe ÜNN
598 | + windy_Elevation=
599 | +
600 | + #Montagehöhe Temperatursensor über Boden
601 | + windy_Tempheight=
602 | +
603 | + #Montagehöhe Windsensor über Boden
604 | + windy_Windheight=
605 | +
606 | + #############################################################################################
607 | + ### Windy - Ende der Einstellungen ####################################################
608 | + #############################################################################################
609 | +
610 | +
611 | ### Ende Usereinstellungen
612 | ###EoF
613 | EoD
614 | }
615 |
616 | patch_2100() {
617 | cat <patch.dat
618 | --- wetterstation.org 2021-10-26 20:01:56.772982845 +0200
619 | +++ wetterstation.conf 2021-10-26 20:04:21.625615091 +0200
620 | @@ -1,7 +1,10 @@
621 | -### Settings V2.8.0 -----------------------------------------------------------
622 | +### Settings V2.10.0 -----------------------------------------------------------
623 | #Debuging einschalten [true/false] / default: false / Ausgabe der Messwerte
624 | debug=false
625 |
626 | + #Logging einschalten [true/false] / default: false / schreibt die Datenstrings der Station in eine Datei
627 | + logging=false
628 | +
629 | #ioBroker-IP und Port der Simple-Restful-API [xxx.xxx.xxx.xxx:xxxxx]
630 | IPP=192.168.1.3:8087
631 |
632 | @@ -9,12 +12,15 @@
633 | WS_PROTOKOLL=1
634 |
635 | #Anzahl der vorhandenen Zusatzsensoren / default: 0
636 | + ANZAHL_WH31=0
637 | + ANZAHL_DP40=0
638 | ANZAHL_DP50=0
639 | ANZAHL_DP60=0
640 | ANZAHL_DP70=0
641 | ANZAHL_DP100=0
642 | ANZAHL_DP200=0
643 | ANZAHL_DP250=0
644 | + ANZAHL_DP300=0
645 |
646 | #Protokoll (HTTP oder HTTPS) / default: HTTP
647 | WEB=HTTP
648 | EofP
649 | }
650 |
651 |
652 | #Patch Version V3.1.1 auf V3.2.0
653 | PATCH3020(){
654 | backup
655 | echo -e "${WE}\n Patche wetterstation.conf auf V3.2.0 ..."
656 | sed -i 's/### Settings V3.1.1/### Settings V3.2.0/' ./wetterstation.conf
657 | sed -i '/^.*Ende Usereinstellungen.*/i \\n\n #############################################################################################\n ### WOW - Einstellungen (nur nötig falls WOW benutzt werden soll) ###\n #############################################################################################' ./wetterstation.conf
658 | sed -i '/^.*Ende Usereinstellungen.*/i \\n #WOW aktivieren [true/false] / default: false\n use_wow=false\n\
659 | #WOW Site ID und Authentication Key\n WOW_SITEID=\n WOW_AUTHKEY=\n\
660 | #############################################################################################\
661 | ### WOW - Ende der Einstellungen ######################################################\
662 | #############################################################################################\n' ./wetterstation.conf
663 | if [ ${RESTAPI} == "true" ]; then
664 | make_objects ".Info.WOW" "Datenübertragung WOW erfolgreich" "boolean"
665 | fi
666 | echo -e "\n${WE} Fertig...\n"
667 | echo -e " ${GE}Die Datenübertragung kann nun (optional) in der wetterstaion.conf nach Eintragung der Zugangsdaten und Aktivierung erfolgen.${WE}"
668 | }
669 |
670 |
671 | #Patch Version V3.2.0 auf V3.3.0
672 | PATCH3030(){
673 | backup
674 | echo -e "${WE}\n Patche wetterstation.conf auf V3.3.0 ..."
675 | sed -i 's/### Settings V3.2.0/### Settings V3.3.0/' ./wetterstation.conf
676 | echo -e "\n${WE} Fertig...\n"
677 | }
678 |
679 |
680 | #Patch Version V3.3.0 auf V3.4.0
681 | PATCH3040(){
682 | backup
683 | echo -e "${WE}\n Patche wetterstation.conf auf V3.4.0 ..."
684 | sed -i 's/### Settings V3.3.0/### Settings V3.4.0/' ./wetterstation.conf
685 | echo -e "\n${WE} Fertig...\n"
686 | }
687 |
688 |
689 | jn_abfrage() {
690 | echo -en "\n$1 ${WE}[${GR}J/N${WE}]"
691 | read -n 1 -p ": " JN
692 | if [ "$JN" = "J" ] || [ "$JN" = "j" ]; then
693 | antwort=true
694 | else
695 | unset antwort
696 | fi
697 |
698 | }
699 |
700 | install() {
701 | #WLAN-Wetterstation Installationsroutine
702 | jn_abfrage "${WE}\n Möchten Sie ${BL}WLAN-Wetterstation${WE} im aktuellen Verzeichnis installieren?"
703 | if [ -z $antwort ]; then echo -e "\n ${RE}Abbruch...${WE}\n\n"; exit 1; fi
704 | unset antwort
705 |
706 | #aktuelle Version feststellen, downloaden und entpacken
707 | echo -e "\n\n\n Hole Daten von GitHub..."
708 | GitHub=$(curl -sH "Accept: application/vnd.github.v3+json" https://api.github.com/repos/SBorg2014/WLAN-Wetterstation/releases/latest)
709 | akt_version=$(echo ${GitHub} | jq -r '.name' | sed -e 's/-/vom/; s/\"//g')
710 | echo -e " Aktuelle Version: ${GR}${akt_version}${WE}"
711 | DL_URL=$(echo ${GitHub} | jq -r '.assets | .[].browser_download_url')
712 | echo -e " Lade Datei von GitHub herunter...\n"
713 | curl -LJ ${DL_URL} -o tmp.zip
714 | echo -e "\n Entpacke Dateien...\n"
715 | unzip -n tmp.zip
716 |
717 | echo -e "\n Lösche Dateidownload..."
718 | rm tmp.zip
719 |
720 | echo -e "\n Dateien ausführbar setzen..."
721 | chmod +x ws_updater.sh wetterstation.sh
722 |
723 | jn_abfrage "\n${WE} Soll WLAN-Wetterstation nun als Service eingerichtet werden?"
724 | if [ ! -z $antwort ]; then service; fi
725 |
726 | #Konfiguration öffnen
727 | jn_abfrage "\n${WE} Konfiguration nun öffnen?"
728 | if [ ! -z $antwort ]; then
729 | if [ ! -f ~/.selected_editor ]; then update-alternatives --config editor; fi
730 | $(cat ~/.selected_editor | grep SELECTED_EDITOR | cut -d"=" -f2 | tr -d \") wetterstation.conf
731 | fi
732 |
733 | #DPs im ioB anlegen...
734 | 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}]?"
735 | if [ -z $antwort ]; then echo -e "\n"; exit 1; fi
736 | unset antwort
737 |
738 | #Testlauf starten
739 | jn_abfrage "\n${WE} Einmaligen Testdurchlauf im Debug-Modus starten...(empfiehlt sich)?"
740 | if [ ! -z $antwort ]; then ./wetterstation.sh --debug; fi
741 |
742 | #enable Service
743 | jn_abfrage "\n${WE} WLAN-Wetterstation Service nun starten?"
744 | if [ ! -z $antwort ]; then sudo systemctl start wetterstation.service; fi
745 |
746 | echo -e "\n\n Fertig..."
747 | 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"
748 | }
749 |
750 | service() {
751 | #existiert der Service schon?
752 | if [ -f /etc/systemd/system/wetterstation.service ]; then
753 | echo -e "\n\n ${RE}Wetterstation-Service existiert bereits!${WE}\n"
754 | return 0
755 | fi
756 |
757 | sudo tee -a /etc/systemd/system/wetterstation.service > /dev/null <<-EoD
758 | [Unit]
759 | Description=Service für ioBroker Wetterstation
760 |
761 | [Service]
762 | User=$(whoami)
763 | Group=$(whoami)
764 | ExecStart=${DIR}/wetterstation.sh
765 |
766 | [Install]
767 | WantedBy=multi-user.target
768 | EoD
769 |
770 | echo -e "\n Aktiviere den Service nun..."
771 | sudo systemctl daemon-reload
772 | sudo systemctl enable wetterstation.service
773 | echo -e "\n ${GE}Der Service kann nun mittels ${GR}systemctl start wetterstation${GE} gestartet werden..."
774 |
775 | }
776 |
777 | usage() {
778 | echo -e "\nusage: ws_updater [[--install] | [--patch] | [--service] | [-h|--help]]\n"
779 | echo -e " --install\tinstalliert WLAN-Wetterstation im aktuellen Verzeichnis"
780 | echo -e " --patch\tpatcht die 'wetterstation.conf' auf eine neue Version"
781 | echo -e " --service\trichtet WLAN-Wetterstation als Service ein"
782 | echo -e " -h | --help\tdieses Hilfemenue\n"
783 | }
784 |
785 | menu() {
786 | clear
787 | echo -e "$WE\n\n\n"
788 | echo -e "\t Auswahlmenü für WLAN-Wetterstation:"
789 | echo -e "\t_____________________________________\n\n"
790 | echo -e "\t [${BL}1${WE}] im aktuellen Verzeichnis installieren\n"
791 | echo -e "\t [${BL}2${WE}] als Service einrichten\n"
792 | echo -e "\t [${BL}3${WE}] Konfigurationsdatei patchen\n"
793 | echo -e "\t [${BL}4${WE}] Update ausführen\n\n"
794 | echo -e "\t [${BL}E${WE}] Exit\n\n\n"
795 | echo -en "\t Ihre Auswahl: [${GR}1-4,E${WE}]"
796 |
797 | read -n 1 -p ": " MENU_AUSWAHL
798 | echo -e "\n"
799 | case $MENU_AUSWAHL in
800 | 1) source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --install
801 | exit 0 ;;
802 | 2) source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --service
803 | exit 0 ;;
804 | 3) source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --patch
805 | exit 0 ;;
806 | 4) source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --gitup
807 | exit 0 ;;
808 | e|E) exit 0 ;;
809 | *) menu
810 | esac
811 | }
812 |
813 | make_objects(){
814 | #1: ID
815 | #2: name
816 | #3: type
817 | #4: unit
818 |
819 | echo -e "\n ${WE}Lege neues Object im ioBroker an: $BL${PRE_DP}$1$WE"
820 | local TOKEN=$(echo -n ${RESTAPI_USER}:${RESTAPI_PW} | base64)
821 |
822 | #build Data-String
823 | local DATA=$(cat <<-EOD
824 | {
825 | "_id": "${PRE_DP}$1",
826 | "type": "state",
827 | "common": {
828 | "name": "$2",
829 | "type": "$3",
830 | "role": "state"
831 | },
832 | "native": {
833 | "name": "$2",
834 | "type": "$3",
835 | "role": "state"
836 | }
837 | }
838 | EOD
839 | )
840 |
841 | #Check 4 Units
842 | if [ "$4" != "" ]; then DATA=$(echo $DATA | sed "s|\"role\": \"state\"|\"role\": \"state\", \"unit\": \"$4\"|g"); fi
843 |
844 | local RESULT=$(curl -skX 'POST' \
845 | ${RESTAPI_URL}'/v1/object/'${PRE_DP}${1} \
846 | -H 'accept: application/json' \
847 | -H 'authorization: Basic '${TOKEN} \
848 | -H 'Content-Type: application/json' \
849 | --data "$DATA"
850 | )
851 |
852 | #Fehler beim anlegen?
853 | if [[ $RESULT == *"error"* ]]; then local FEHLER_ioB=$(echo ${RESULT} | jq -r '.error')
854 | echo -e "${RE} Fehlermeldung beim Anlegen des Datenpunktes: ${FEHLER_ioB}${WE}\n"
855 | fi
856 | 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
857 |
858 | }
859 |
860 |
861 | #gibt es Parameter?
862 | while [ "$1" != "" ]; do
863 | case $1 in
864 | --install ) checker
865 | install
866 | exit 0
867 | ;;
868 | --menu ) menu
869 | exit 0
870 | ;;
871 | --service ) service
872 | exit 0
873 | ;;
874 | --gitup ) checker
875 | main
876 | exit 0
877 | ;;
878 | --patch ) checker
879 | patcher
880 | exit 0
881 | ;;
882 | -h | --help ) usage
883 | exit 0
884 | ;;
885 | * ) echo -e "\n${RE}\"$1\"${WE} wird nicht unterstützt...\n\n"
886 | usage
887 | exit 1
888 | esac
889 | shift
890 | done
891 |
892 |
893 |
894 | checker
895 | main
896 |
897 |
--------------------------------------------------------------------------------
/ws_updater.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | UPDATE_VER=V3.5.0
4 |
5 | ### Farbdefinition
6 | GR='\e[1;32m'
7 | GE='\e[1;33m'
8 | WE='\e[1;37m'
9 | BL='\e[1;36m'
10 | RE='\e[1;31m'
11 |
12 |
13 | echo -e "\n\n${BL}"
14 | echo -e '
15 | _ _______ __ __ __ __
16 | | | / / ___/ / / / /___ ____/ /___ _/ /____ _____
17 | | | /| / /\__ \______/ / / / __ \/ __ / __ `/ __/ _ \/ ___/
18 | | |/ |/ /___/ /_____/ /_/ / /_/ / /_/ / /_/ / /_/ __/ /
19 | |__/|__//____/ \____/ .___/\__,_/\__,_/\__/\___/_/' ${GE}${UPDATE_VER}${BL}
20 | echo -en ' /_/'
21 | echo -e "${WE}\n"
22 |
23 |
24 | #Nicht als root...
25 | if [ $(whoami) = "root" ]; then echo -e "$RE Ausführung als \"root\" nicht möglich...!\n"; exit 1; fi
26 |
27 | #Verzeichnis feststellen + conf lesen
28 | DIR=$(pwd)
29 | if [ -f "${DIR}/wetterstation.conf" ]; then . "${DIR}/wetterstation.conf"; fi
30 |
31 |
32 | #Test ob Datei auf GitHub, sonst Fallback
33 | if [ "$1" = "" ] && ( ! curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh|grep -xq '404: Not Found' ); then
34 | 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..."
35 | sleep 2
36 | source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --menu
37 | exit 0
38 | fi
39 |
40 |
41 |
42 | checker() {
43 | #Test ob bc, jq, unzip, patch und dc installiert sind / Service im User-Kontext läuft
44 | #installierte Influx-Version
45 | #Rest-Api im ioB läuft
46 | #Service im User-Kontext?
47 | if [ ! $(cat /etc/systemd/system/wetterstation.service|grep User=) ]; then
48 | echo -e "\n$GE Service läuft nicht im User-Kontext sondern unter User ${RE}root${GE}..."
49 | jn_abfrage "\n$WE Soll nun auf User (empfohlen) umgestellt werden?"
50 | if [ -z $antwort ]; then echo -e "\n"; return; fi
51 | echo -e "\n"
52 | sudo sed -i '/\[Service\]/a User='$(whoami)'\nGroup='$(whoami) /etc/systemd/system/wetterstation.service
53 | echo -e "\n Done... Restarte Service...\n"
54 | sudo systemctl daemon-reload
55 | sudo systemctl restart wetterstation
56 | fi
57 | if [ ! -z ${INFLUX_API} ]; then check_prog influx; fi
58 | check_prog bc
59 | check_prog jq
60 | check_prog dc
61 | check_prog unzip
62 | check_prog patch
63 | check_prog restapi
64 | echo -e "\n"
65 | }
66 |
67 |
68 | check_prog() {
69 | if [ $1 == "influx" ]; then
70 | if [ ! $(curl -skL -I "${INFLUX_WEB}://${INFLUX_API}/ping" | grep X-Influxdb-Version | cut -d" " -f2 | grep v2.[0-9].[0-9]) ]; then echo -e "${RE} Offizieller Support nur noch für Influx V2.x!\n\n${WE}"; sleep 5; fi
71 | return
72 | fi
73 | if [ $1 == "restapi" ]; then
74 | if [ "$(nc -vz $(echo "${RESTAPI_URL}" | grep -o '[\.0-9]*') &> /dev/null; echo $?)" -eq "0" ]; then RESTAPI=true
75 | echo -e "\n Zugriff auf $GR'Rest-API'$WE im ioBroker: [$GR✓$WE]"
76 | else
77 | RESTAPI=false
78 | echo -e "\n Zugriff auf $GR'Rest-API'$WE im ioBroker: [$RE✗$WE]"
79 | echo -e " (Dies ist kein Problem, es können nur keine neuen Datenpunkte bei Bedarf automatisch angelegt werden."
80 | echo -e " Dies muss im Fall neuer Datenpunkte per 'wetterstation.js' von Hand im ioBroker erfolgen.)"
81 | fi
82 | return
83 | fi
84 | if [ $(which $1) ]; then
85 | echo -e " $GR'$1'$WE installiert: [$GR✓$WE]"
86 | else
87 | echo -e " $GR'$1'$WE installiert: [$RE✗$WE]"
88 | echo -e "\n\n $RE Bitte zuerst '$1' installieren [sudo apt install $1]\n"
89 | exit 1
90 | fi
91 | }
92 |
93 | backup() {
94 | echo -e "\n Lege Sicherungskopie der wetterstation.conf an..."
95 | cp ./wetterstation.conf ./wetterstation.conf.backup
96 | }
97 |
98 | FEHLER() {
99 | if [ "$UPDATE_VER" == "$VERSION" ]; then echo -e "\n$WE Version ist aktuell, nothing to do...\n"; exit 0; fi
100 | echo -e "\n Updater ist ${RE}nur${WE} für Versionen ab V1.4.0 !\n"
101 | exit 1
102 | }
103 |
104 | patcher() {
105 | echo -en "\n${WE} Soll die ${RE}wetterstation.conf ${WE}nun auf die neue Version ${GE}${UPDATE_VER}${WE} gepatcht werden? [${GR}J/N${WE}]"
106 | read -n 1 -p ": " JN
107 | if [ "$JN" = "J" ] || [ "$JN" = "j" ]; then
108 | echo -e "\n\n\n"
109 | else
110 | echo -e "\n\n\n"
111 | echo -e " $RE Abbruch... ${WE}\n\n\n"; exit 1;
112 | fi
113 |
114 | VERSION_SH=$(cat ./wetterstation.sh|grep "SH_VER"|cut -d"=" -f2|tr -d \")
115 |
116 | while [ "$VERSION_CONF" != "$VERSION_SH" ]
117 | do
118 | VERSION_CONF=$(cat ./wetterstation.conf|grep "### Settings V"|cut -d" " -f3)
119 |
120 | case ${VERSION_CONF} in
121 | V1.4.0) PATCH140 ;;
122 | V1.5.0) PATCH150 ;;
123 | V1.6.0) PATCH160 ;;
124 | V2.0.0) PATCH210 ;;
125 | V2.1.0) PATCH220 ;;
126 | V2.2.0) PATCH230 ;;
127 | V2.3.0) PATCH240 ;;
128 | V2.4.0) PATCH250 ;;
129 | V2.5.0) PATCH260 ;;
130 | V2.6.0) PATCH270 ;;
131 | V2.7.0) PATCH280 ;;
132 | V2.8.0) PATCH2100 ;;
133 | V2.9.0) echo -e "$GE Kein Patch nötig...\n" ;;
134 | V2.10.0) PATCH2110 ;;
135 | V2.11.0) PATCH2111 ;;
136 | V2.11.1) PATCH2120 ;;
137 | V2.12.0) PATCH2121 ;;
138 | V2.12.1) PATCH2130 ;;
139 | V2.13.0) PATCH2140 ;;
140 | V2.14.0) PATCH2150 ;;
141 | V2.15.0) PATCH2160 ;;
142 | V2.16.0) PATCH2170 ;;
143 | V2.17.0) PATCH2180 ;;
144 | V2.18.0) PATCH2190 ;;
145 | V2.19.0) PATCH2200 ;;
146 | V2.20.0) PATCH2210 ;;
147 | V2.21.0) PATCH2220 ;;
148 | V2.22.0) PATCH3000 ;;
149 | V3.0.0) PATCH3010 ;;
150 | V3.1.0) PATCH3011 ;;
151 | V3.1.1) PATCH3020 ;;
152 | V3.2.0) PATCH3030 ;;
153 | V3.3.0) PATCH3040 ;;
154 | V3.4.0) PATCH3050 && service_restart && exit 0;;
155 | V3.5.0) echo -e "$GE Version ist bereits aktuell...\n" && exit 0;;
156 | *) FEHLER
157 | esac
158 |
159 | done
160 | exit 0
161 | }
162 |
163 | main() {
164 | #Wetterstation im Verzeichnis vorhanden
165 | if [ ! -f ./wetterstation.sh ]; then
166 | echo -e "\n$RE Keine Version von WLAN-Wetterstation im aktuellen Verzeichnis gefunden...\n"
167 | exit 1
168 | fi
169 |
170 | #aktuelle Version von GitHub holen
171 | GitHub=$(curl -sH "Accept: application/vnd.github.v3+json" https://api.github.com/repos/SBorg2014/WLAN-Wetterstation/releases/latest)
172 | akt_ver_long=$(echo ${GitHub} | jq -r '.name' | sed -e 's/-/vom/; s/\"//g')
173 | akt_version=$(echo ${GitHub} | jq -r '.tag_name')
174 | info_version=$(echo ${GitHub} | jq -r '.body' | tr -d '*\\')
175 |
176 | echo -e " Aktuelle Version (latest) auf GitHub: ${GR}$akt_ver_long$WE"
177 | VERSION=$(cat ./wetterstation.sh|grep "SH_VER"|cut -d"=" -f2|tr -d \")
178 | echo -e " Version im aktuellen Verzeichnis : ${GR}$VERSION"
179 |
180 | if [ "$VERSION" == "$akt_version" ]; then echo -e "\n$GE Version ist bereits aktuell...\n"; exit 0; fi
181 |
182 | echo -e "\n$WE Informationen zum Release $akt_version:"
183 | echo -e " ─────────────────────────────────────────────────────────────"
184 | echo -e "\n$GE $info_version\n$WE"
185 |
186 | jn_abfrage "\n$WE Soll ein Update von WLAN-Wetterstation durchgeführt werden?"
187 | if [ -z $antwort ]; then echo -e "\n"; exit 0; fi
188 |
189 | #Update
190 | echo -e "\n\n$WE Führe Update aus...\n"
191 | DL_URL=$(echo ${GitHub} | jq -r '.assets | .[].browser_download_url')
192 | curl -LJ ${DL_URL} -o tmp.zip
193 | unzip -o tmp.zip -x wetterstation.conf
194 | sudo chmod +x wetterstation.sh ws_updater.sh
195 |
196 | rm tmp.zip
197 | source ./ws_updater.sh --patch
198 | }
199 |
200 | service_restart() {
201 | jn_abfrage "\n ${WE}Update ausgeführt. Soll der Service nun neu gestartet werden?"
202 | if [ ! -z $antwort ]; then echo -e "\n"; sudo systemctl restart wetterstation.service; fi
203 | }
204 |
205 | ########################################################################################
206 | #Patch Version V1.4.0 auf V1.5.0
207 | PATCH140() {
208 | backup
209 | echo -e "\n Patche wetterstation.conf auf V1.5.0 ..."
210 | 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
211 | sed -i 's/### Settings V1.4.0/### Settings V1.5.0/' ./wetterstation.conf
212 | echo -e " Fertig...\n"
213 | }
214 |
215 |
216 | #Patch Version V1.5.0 auf V1.6.0
217 | PATCH150() {
218 | backup
219 | echo -e "\n Patche wetterstation.conf auf V1.6.0 ..."
220 | sed -i 's/### Settings V1.5.0/### Settings V1.6.0/' ./wetterstation.conf
221 | echo -e " Fertig...\n"
222 | }
223 |
224 |
225 | #Patch Version V1.6.0 auf V2.0.0
226 | PATCH160() {
227 | backup
228 | echo -e "\n Patche wetterstation.conf auf V2.0.0 ..."
229 | 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
230 | sed -i 's/### Settings V1.6.0/### Settings V2.0.0/' ./wetterstation.conf
231 | echo -e " Fertig...\n"
232 | }
233 |
234 |
235 | #Patch Version V2.0.0 auf V2.1.0
236 | PATCH210() {
237 | backup
238 | echo -e "\n Patche wetterstation.conf auf V2.1.0 ..."
239 | 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
240 | sed -i 's/### Settings V2.0.0/### Settings V2.1.0/' ./wetterstation.conf
241 | echo -e " Fertig...\n"
242 | }
243 |
244 |
245 | #Patch Version V2.1.0 auf V2.2.0
246 | PATCH220() {
247 | backup
248 | echo -e "\n Patche wetterstation.conf auf V2.2.0 ..."
249 | sed -i 's/Chillfaktor/gefühlte Temperatur/' ./wetterstation.conf
250 | sed -i 's/### Settings V2.1.0/### Settings V2.2.0/' ./wetterstation.conf
251 | echo -e " Fertig...\n"
252 | }
253 |
254 |
255 | #Patch Version V2.2.0 auf V2.3.0
256 | PATCH230() {
257 | backup
258 | echo -e "\n Patche wetterstation.conf auf V2.3.0 ..."
259 | 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
260 | 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
261 | sed -i 's/### Settings V2.2.0/### Settings V2.3.0/' ./wetterstation.conf
262 | echo -e " Fertig...\n"
263 | echo -e " ${GE}Eventuelle Zusatzsensoren DP50/60/100 müssen neu eingetragen werden!"
264 | echo -e " Neuen Configblock für Influx beachten/konfigurieren!\n"
265 | }
266 |
267 |
268 | #Patch Version V2.3.0 auf V2.4.0
269 | PATCH240() {
270 | backup
271 | echo -e "\n Patche wetterstation.conf auf V2.4.0 ..."
272 | sed -i '/^.*ANZAHL_DP100=.*/a \ ANZAHL_DP200=0' ./wetterstation.conf
273 | sed -i 's/### Settings V2.3.0/### Settings V2.4.0/' ./wetterstation.conf
274 | echo -e " Fertig...\n"
275 | echo -e " ${GE}Eventuelle Zusatzsensoren DP200 müssen eingetragen werden!\n"
276 | }
277 |
278 |
279 | #Patch Version V2.4.0 auf V2.5.0
280 | PATCH250() {
281 | backup
282 | echo -e "\n Patche wetterstation.conf auf V2.5.0 ..."
283 | sed -i '/^.*ANZAHL_DP100=.*/i \ ANZAHL_DP70=0' ./wetterstation.conf
284 | sed -i 's/### Settings V2.4.0/### Settings V2.5.0/' ./wetterstation.conf
285 | echo -e " Fertig...\n"
286 | echo -e " ${GE}Eventuelle Zusatzsensoren DP70 müssen eingetragen werden!\n"
287 | }
288 |
289 |
290 | #Patch Version V2.5.0 auf V2.6.0
291 | PATCH260() {
292 | backup
293 | echo -e "\n Patche wetterstation.conf auf V2.6.0 ..."
294 | patch_260 && patch ./wetterstation.conf < patch
295 | rm patch
296 | echo -e " ${GE}Windy kann nun mittels \033[30m\033[47m./wetterstation.sh --windy_reg\033[0m ${GE}eingerichtet werden !\n"
297 | }
298 |
299 |
300 | #Patch Version V2.6.0 auf V2.7.0
301 | PATCH270() {
302 | backup
303 | echo -e "\n Patche wetterstation.conf auf V2.7.0 ..."
304 | sed -i '/^.*ANZAHL_DP200=.*/a \ ANZAHL_DP250=0' ./wetterstation.conf
305 | sed -i 's/### Settings V2.6.0/### Settings V2.7.0/' ./wetterstation.conf
306 | echo -e " Fertig...\n"
307 | echo -e " ${GE}Eventueller Zusatzsensor DP250/WH45 muss eingetragen werden!\n"
308 | }
309 |
310 |
311 | #Patch Version V2.7.0 auf V2.8.0
312 | PATCH280() {
313 | backup
314 | echo -e "\n Patche wetterstation.conf auf V2.8.0 ..."
315 | 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
316 | sed -i 's/### Settings V2.7.0/### Settings V2.8.0/' ./wetterstation.conf
317 | echo -e " Fertig...\n"
318 | echo -e " ${GE}Falls die Übertragung der Wetterdaten an wetter.com erfolgen soll, nun aktivieren durch eintragen von User-ID und Passwort!\n"
319 | }
320 |
321 |
322 | #Patch Version V2.8.0 auf V2.10.0
323 | PATCH2100() {
324 | backup
325 | echo -e "\n Patche wetterstation.conf auf V2.10.0 ..."
326 | patch_2100 && patch ./wetterstation.conf < patch.dat
327 | rm patch.dat
328 | echo -e " Fertig...\n"
329 | echo -e " ${GE}Eventuelle Zusatzsensoren DP300/WS68, DP40/WH32 oder WH25/WH31 müssen eingetragen werden!\n"
330 | }
331 |
332 |
333 | #Patch Version V2.10.0 auf V2.11.0
334 | PATCH2110() {
335 | backup
336 | echo -e "\n Patche wetterstation.conf auf V2.11.0 ..."
337 | sed -i 's/### Settings V2.10.0/### Settings V2.11.0/' ./wetterstation.conf
338 | sed -i '/^.*debug=.*/a \ \n #Verhalten bei Kommunikationsfehler [true/false] / default: false / Soll der Datenpunkt automatisch resettet werden?\n RESET_KOMFEHLER=false' ./wetterstation.conf
339 | echo -e " Fertig...\n"
340 | echo -e " ${GE}Parameter für Kommunikationsfehler ggf. ändern. Per Default verbleibt er im Zustand 'true' bei einem Fehler.\n"
341 | }
342 |
343 |
344 | #Patch Version V2.11.0 auf V2.11.1
345 | PATCH2111() {
346 | backup
347 | echo -e "\n Patche wetterstation.conf auf V2.11.1 ..."
348 | sed -i 's/### Settings V2.11.0/### Settings V2.11.1/' ./wetterstation.conf
349 | sed -i 's/Sainlogic Profi/DNS/' ./wetterstation.conf
350 | echo -e " Fertig...\n"
351 | }
352 |
353 |
354 | #Patch Version V2.11.1 auf V2.12.0
355 | PATCH2120() {
356 | backup
357 | echo -e "\n Patche wetterstation.conf auf V2.12.0 ..."
358 | sed -i 's/### Settings V2.11.1/### Settings V2.12.0/' ./wetterstation.conf
359 | 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
360 | echo -e " Fertig...\n"
361 | echo -e " ${GE}Parameter für FIX_AUSSENTEMP ggf. ändern. Per Default werden auch unplausible Messwerte an den ioB geschickt.\n"
362 | }
363 |
364 |
365 | #Patch Version V2.12.0 auf V2.12.1
366 | PATCH2121() {
367 | backup
368 | echo -e "${WE}\n Patche wetterstation.conf auf V2.12.1 ..."
369 | sed -i 's/### Settings V2.12.0/### Settings V2.12.1/' ./wetterstation.conf
370 | echo -e "${WE} Fertig...\n"
371 | }
372 |
373 |
374 | #Patch Version V2.12.1 auf V2.13.0
375 | PATCH2130() {
376 | backup
377 | echo -e "${WE}\n Patche wetterstation.conf auf V2.13.0 ..."
378 | sed -i 's/### Settings V2.12.1/### Settings V2.13.0/' ./wetterstation.conf
379 | sed -i '/^.*ANZAHL_WH31=.*/a \ ANZAHL_DP35=0' ./wetterstation.conf
380 | echo -e "${WE} Fertig...\n"
381 | echo -e " ${GE}Eventuelle Zusatzsensoren DP35 müssen eingetragen werden!\n"
382 | }
383 |
384 |
385 | #Patch Version V2.13.0 auf V2.14.0
386 | PATCH2140() {
387 | backup
388 | echo -e "${WE}\n Patche wetterstation.conf auf V2.14.0 ..."
389 | sed -i 's/### Settings V2.13.0/### Settings V2.14.0/' ./wetterstation.conf
390 | 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
391 | echo -e "${WE} Fertig...\n"
392 | }
393 |
394 |
395 | #Patch Version V2.14.0 auf V2.15.0
396 | PATCH2150() {
397 | backup
398 | echo -e "${WE}\n Patche wetterstation.conf auf V2.15.0 ..."
399 | sed -i 's/### Settings V2.14.0/### Settings V2.15.0/' ./wetterstation.conf
400 | 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
401 | sed -i 's/#InfluxDB-Konfiguration/#InfluxDB-Konfiguration für Influx V1.x.x/' ./wetterstation.conf
402 | echo -e "${WE} Fertig...\n"
403 | echo -e " ${GE}Die Datenübertragung an Wunderground.com kann nun aktiviert werden!\n"
404 | }
405 |
406 |
407 | #Patch Version V2.15.0 auf V2.16.0
408 | PATCH2160() {
409 | backup
410 | echo -e "${WE}\n Patche wetterstation.conf auf V2.16.0 ..."
411 | sed -i 's/### Settings V2.15.0/### Settings V2.16.0/' ./wetterstation.conf
412 | 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
413 | echo -e "${WE} Fertig...\n"
414 | echo -e " ${GE}Die Rest-API kann nun durch Eingabe der URL und den Zugangsdaten aktiviert werden!\n"
415 | }
416 |
417 |
418 | #Patch Version V2.16.0 auf V2.17.0
419 | PATCH2170() {
420 | backup
421 | echo -e "${WE}\n Patche wetterstation.conf auf V2.17.0 ..."
422 | sed -i 's/### Settings V2.16.0/### Settings V2.17.0/' ./wetterstation.conf
423 | 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
424 | if [ ${RESTAPI} == "true" ]; then make_objects ".Aussentemperatur_Trend" "Trend der Aussentemperatur der letzten Stunde" "number" "°C"; fi
425 | echo -e "${WE} Fertig...\n"
426 | 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!"
427 | echo -e " Einstellung dafür in der wetterstation.conf: ${BL}USE_AVG_WIND=true\n${WE}"
428 | }
429 |
430 |
431 | #Patch Version V2.17.0 auf V2.18.0
432 | PATCH2180() {
433 | backup
434 | echo -e "${WE}\n Patche wetterstation.conf auf V2.18.0 ..."
435 | sed -i 's/### Settings V2.17.0/### Settings V2.18.0/' ./wetterstation.conf
436 | sed -i '/^.*ANZAHL_DP35=.*/i \ ANZAHL_DP10=0' ./wetterstation.conf
437 | if [ ${RESTAPI} == "true" ]; then
438 | make_objects ".Info.Wolkenbasis" "Höhe der Wolkenbasis" "number" "m"
439 | make_objects ".Info.Shellscriptversion" "Versionsnummer des Scriptes" "string"
440 | make_objects ".Windrichtung_Text_10min" "Windrichtung Durchschnitt 10 Minuten als Text" "string"
441 | fi
442 | echo -e "${WE} Fertig...\n"
443 | echo -e " ${GE}Eventuelle Zusatzsensoren DP10/WN35 können nun eingetragen werden!\n${WE}"
444 | }
445 |
446 |
447 | #Patch Version V2.18.0 auf V2.19.0
448 | PATCH2190() {
449 | backup
450 | echo -e "${WE}\n Patche wetterstation.conf auf V2.19.0 ..."
451 | sed -i 's/### Settings V2.18.0/### Settings V2.19.0/' ./wetterstation.conf
452 | sed -i '/^.*ANZAHL_WH31=.*/a \ ANZAHL_WS90=0' ./wetterstation.conf
453 | if [ ${RESTAPI} == "true" ]; then make_objects ".Info.Wetterwarnung" "mögliche Wetterereignisse" "string"
454 | # #Abfrage starten zum Anlegen der DPs des WS90
455 | # jn_abfrage "${WE} Sollen nun Datenpunkte für den WS90 angelegt werden...(nur sinnvoll wenn man auch einen hat ;-))?"
456 | # if [ ! -z $antwort ]; then
457 | # make_objects ".WS90" "WS90 Wittboy" "folder"
458 | # make_objects ".WS90.1.aktuelle_Regenrate" "WS90 Kanal 1 aktuelle Regenrate" "number" "mm/h"
459 | # fi
460 | fi
461 | echo -e "\n${WE} Fertig...\n"
462 | echo -e " ${GE}Eventueller Zusatzsensor WS90 kann nun eingetragen werden!${WE}"
463 | # if [ ${RESTAPI} != "true" ] || [ -z $antwort ]; then echo -e " ${GE}Dazu noch 'wetterstation.js' im ioB ersetzen, konfigurieren und einmalig ausführen.\n${WE}"; fi
464 | echo -e " ${GE}Dazu noch 'wetterstation.js' im ioB ersetzen, konfigurieren und einmalig ausführen.\n${WE}"
465 | }
466 |
467 |
468 | #Patch Version V2.19.0 auf V2.20.0
469 | PATCH2200(){
470 | backup
471 | echo -e "${WE}\n Patche wetterstation.conf auf V2.20.0 ..."
472 | sed -i 's/### Settings V2.19.0/### Settings V2.20.0/' ./wetterstation.conf
473 | echo -e "\n${WE} Fertig...\n"
474 | }
475 |
476 |
477 | #Patch Version V2.20.0 auf V2.21.0
478 | PATCH2210(){
479 | backup
480 | echo -e "${WE}\n Patche wetterstation.conf auf V2.21.0 ..."
481 | sed -i 's/### Settings V2.20.0/### Settings V2.21.0/' ./wetterstation.conf
482 | sed -i '/^.*Ende Usereinstellungen.*/i \\n #############################################################################################\n ### AWEKAS - Einstellungen (nur nötig falls AWEKAS benutzt werden soll) ###\n #############################################################################################' ./wetterstation.conf
483 | sed -i '/^.*Ende Usereinstellungen.*/i \\n #AWEKAS aktivieren [true/false] / default: false\n use_awekas=false\n\
484 | #AWEKAS Login Username und Passwort\n AWEKAS_USER=\n AWEKAS_PW=\n\
485 | #############################################################################################\
486 | ### AWEKAS - Ende der Einstellungen ###################################################\
487 | #############################################################################################\n' ./wetterstation.conf
488 | if [ ${RESTAPI} == "true" ]; then
489 | make_objects ".Info.Awekas_at" "Datenübertragung an AWEKAS.at erfolgreich" "boolean"
490 | fi
491 | echo -e "\n${WE} Fertig...\n"
492 | echo -e " ${GE}Die Datenübertragung kann nun (optional) in der wetterstaion.conf nach Eintragung der Zugangsdaten aktiviert werden.${WE}"
493 | }
494 |
495 |
496 | #Patch Version V2.21.0 auf V2.22.0
497 | PATCH2220(){
498 | backup
499 | echo -e "${WE}\n Patche wetterstation.conf auf V2.22.0 ..."
500 | sed -i 's/### Settings V2.21.0/### Settings V2.22.0/' ./wetterstation.conf
501 | sed -i 's/Anzahl der vorhandenen Zusatzsensoren/Anzahl der vorhandenen Zusatzsensoren Froggit, Ecowitt und Bresser/' ./wetterstation.conf
502 | sed -i '/^.*ANZAHL_DP300=.*/a \ ANZAHL_7009999=0' ./wetterstation.conf
503 | echo -e "\n${WE} Fertig...\n"
504 | echo -e " ${GE}Eventuelle Zusatzsensoren Bresser #7009999 können nun eingetragen werden!${WE}"
505 | echo -e " ${GE}Dazu noch 'wetterstation.js' im ioB ersetzen, konfigurieren und einmalig ausführen.\n${WE}"
506 | }
507 |
508 |
509 | #Patch Version V2.22.0 auf V3.0.0
510 | PATCH3000(){
511 | echo -e "${RE}"'
512 | ___ __ __ __
513 | / | _____/ /_ / /___ ______ ____ _ / /
514 | / /| |/ ___/ __ \/ __/ / / / __ \/ __ `/ / /
515 | / ___ / /__/ / / / /_/ /_/ / / / / /_/ / /_/
516 | /_/ |_\___/_/ /_/\__/\__,_/_/ /_/\__, / (_)
517 | /____/'"${WE}"
518 |
519 | echo -e "\n${GE} ┌──────────────────────────────────────────────────────┐"
520 | echo -e " │ V3.0.0 ist ein Breaking-Release! │"
521 | echo -e " │ Es wird zwingend bei der Nutzung der Influx-Features │"
522 | echo -e " │ InfluxDB mindestens in der Version 2.x oder höher │"
523 | echo -e " │ benötigt ! │"
524 | echo -e " └──────────────────────────────────────────────────────┘${WE}\n"
525 |
526 | jn_abfrage "${WE}\n Möchten Sie ${BL}WLAN-Wetterstation${WE} auf Version V3.0.0 updaten?"
527 | if [ -z $antwort ]; then echo -e "\n ${RE}Abbruch...${WE}\n\n"; exit 1; fi
528 | unset antwort
529 |
530 | backup
531 | echo -e "${WE}\n Patche wetterstation.conf auf V3.0.0 ..."
532 | sed -i 's/### Settings V2.22.0/### Settings V3.0.0/' ./wetterstation.conf
533 | sed -i 's/#Name, User und Passwort der InfluxDB-Datenbank/#Bucket, Token und Organisation der InfluxDB/' ./wetterstation.conf
534 | sed -i 's/INFLUX_DB=/INFLUX_BUCKET=/' ./wetterstation.conf
535 | sed -i 's/INFLUX_USER=.*/INFLUX_TOKEN=/' ./wetterstation.conf
536 | sed -i 's/INFLUX_PASSWORD=.*/INFLUX_ORG=/' ./wetterstation.conf
537 | sed -i '/^.*#InfluxDB-Konfiguration \/ ohne InfluxDB alles leer lassen.*/a \ #Protokoll (HTTP oder HTTPS) / default: HTTP\n INFLUX_WEB=HTTP' ./wetterstation.conf
538 | echo -e "\n${WE} Fertig...\n"
539 | echo -e " ${GE}InfluxDB in Version 2.x kann nun in der Konfiguration aktiviert werden.\n${WE}"
540 | }
541 |
542 |
543 | #Patch Version V3.0.0 auf V3.1.0
544 | PATCH3010(){
545 | backup
546 | echo -e "${WE}\n Patche wetterstation.conf auf V3.1.0 ..."
547 | sed -i 's/### Settings V3.0.0/### Settings V3.1.0/' ./wetterstation.conf
548 | echo -e "\n${WE} Fertig...\n"
549 | }
550 |
551 |
552 | #Patch Version V3.1.0 auf V3.1.1
553 | PATCH3011(){
554 | backup
555 | echo -e "${WE}\n Patche wetterstation.conf auf V3.1.1 ..."
556 | sed -i 's/### Settings V3.1.0/### Settings V3.1.1/' ./wetterstation.conf
557 | echo -e "\n${WE} Fertig...\n"
558 | }
559 |
560 |
561 | patch_260() {
562 | cat <patch
563 | --- wetterstation.conf_250 2021-05-13 13:45:06.297750501 +0200
564 | +++ wetterstation.conf 2021-05-12 18:39:24.358821394 +0200
565 | @@ -1,4 +1,4 @@
566 | -### Settings V2.5.0 -----------------------------------------------------------
567 | +### Settings V2.6.0 -----------------------------------------------------------
568 | #Debuging einschalten [true/false] / default: false / Ausgabe der Messwerte
569 | debug=false
570 |
571 | @@ -112,5 +112,42 @@
572 | #############################################################################################
573 |
574 |
575 | +
576 | + #############################################################################################
577 | + ### Windy - Einstellungen (nur nötig falls Windy benutzt werden soll) ###
578 | + #############################################################################################
579 | +
580 | + #Windy aktivieren [true/false] / default: false
581 | + use_windy=false
582 | +
583 | + #Windy API-Key
584 | + windy_APIKey=
585 | +
586 | + #Station [number: 0 - 2147483647] / default: 0
587 | + windy_Station=
588 | +
589 | + #Name der Station [Text]
590 | + windy_Name=
591 | +
592 | + #Latitude/Breitengrad der Station
593 | + windy_Latitude=
594 | +
595 | + #Longitude/Längengrad der Station
596 | + windy_Longitude=
597 | +
598 | + #Elevation/Höhe ÜNN
599 | + windy_Elevation=
600 | +
601 | + #Montagehöhe Temperatursensor über Boden
602 | + windy_Tempheight=
603 | +
604 | + #Montagehöhe Windsensor über Boden
605 | + windy_Windheight=
606 | +
607 | + #############################################################################################
608 | + ### Windy - Ende der Einstellungen ####################################################
609 | + #############################################################################################
610 | +
611 | +
612 | ### Ende Usereinstellungen
613 | ###EoF
614 | EoD
615 | }
616 |
617 | patch_2100() {
618 | cat <patch.dat
619 | --- wetterstation.org 2021-10-26 20:01:56.772982845 +0200
620 | +++ wetterstation.conf 2021-10-26 20:04:21.625615091 +0200
621 | @@ -1,7 +1,10 @@
622 | -### Settings V2.8.0 -----------------------------------------------------------
623 | +### Settings V2.10.0 -----------------------------------------------------------
624 | #Debuging einschalten [true/false] / default: false / Ausgabe der Messwerte
625 | debug=false
626 |
627 | + #Logging einschalten [true/false] / default: false / schreibt die Datenstrings der Station in eine Datei
628 | + logging=false
629 | +
630 | #ioBroker-IP und Port der Simple-Restful-API [xxx.xxx.xxx.xxx:xxxxx]
631 | IPP=192.168.1.3:8087
632 |
633 | @@ -9,12 +12,15 @@
634 | WS_PROTOKOLL=1
635 |
636 | #Anzahl der vorhandenen Zusatzsensoren / default: 0
637 | + ANZAHL_WH31=0
638 | + ANZAHL_DP40=0
639 | ANZAHL_DP50=0
640 | ANZAHL_DP60=0
641 | ANZAHL_DP70=0
642 | ANZAHL_DP100=0
643 | ANZAHL_DP200=0
644 | ANZAHL_DP250=0
645 | + ANZAHL_DP300=0
646 |
647 | #Protokoll (HTTP oder HTTPS) / default: HTTP
648 | WEB=HTTP
649 | EofP
650 | }
651 |
652 |
653 | #Patch Version V3.1.1 auf V3.2.0
654 | PATCH3020(){
655 | backup
656 | echo -e "${WE}\n Patche wetterstation.conf auf V3.2.0 ..."
657 | sed -i 's/### Settings V3.1.1/### Settings V3.2.0/' ./wetterstation.conf
658 | sed -i '/^.*Ende Usereinstellungen.*/i \\n\n #############################################################################################\n ### WOW - Einstellungen (nur nötig falls WOW benutzt werden soll) ###\n #############################################################################################' ./wetterstation.conf
659 | sed -i '/^.*Ende Usereinstellungen.*/i \\n #WOW aktivieren [true/false] / default: false\n use_wow=false\n\
660 | #WOW Site ID und Authentication Key\n WOW_SITEID=\n WOW_AUTHKEY=\n\
661 | #############################################################################################\
662 | ### WOW - Ende der Einstellungen ######################################################\
663 | #############################################################################################\n' ./wetterstation.conf
664 | if [ ${RESTAPI} == "true" ]; then
665 | make_objects ".Info.WOW" "Datenübertragung WOW erfolgreich" "boolean"
666 | fi
667 | echo -e "\n${WE} Fertig...\n"
668 | echo -e " ${GE}Die Datenübertragung kann nun (optional) in der wetterstaion.conf nach Eintragung der Zugangsdaten und Aktivierung erfolgen.${WE}"
669 | }
670 |
671 |
672 | #Patch Version V3.2.0 auf V3.3.0
673 | PATCH3030(){
674 | backup
675 | echo -e "${WE}\n Patche wetterstation.conf auf V3.3.0 ..."
676 | sed -i 's/### Settings V3.2.0/### Settings V3.3.0/' ./wetterstation.conf
677 | echo -e "\n${WE} Fertig...\n"
678 | }
679 |
680 |
681 | #Patch Version V3.3.0 auf V3.4.0
682 | PATCH3040(){
683 | backup
684 | echo -e "${WE}\n Patche wetterstation.conf auf V3.4.0 ..."
685 | sed -i 's/### Settings V3.3.0/### Settings V3.4.0/' ./wetterstation.conf
686 | echo -e "\n${WE} Fertig...\n"
687 | }
688 |
689 |
690 | #Patch Version V3.4.0 auf V3.5.0
691 | PATCH3050(){
692 | backup
693 | echo -e "${WE}\n Patche wetterstation.conf auf V3.5.0 ..."
694 | sed -i 's/### Settings V3.4.0/### Settings V3.5.0/' ./wetterstation.conf
695 | if [ ${RESTAPI} == "true" ]; then
696 | make_objects ".Sättigungsdefizit" "(Wasserdampf-)Drucksättigungsdefizit VPD" "number" "kPa"
697 | fi
698 | echo -e "\n${WE} Fertig...\n"
699 | }
700 |
701 |
702 | jn_abfrage() {
703 | echo -en "\n$1 ${WE}[${GR}J/N${WE}]"
704 | read -n 1 -p ": " JN
705 | if [ "$JN" = "J" ] || [ "$JN" = "j" ]; then
706 | antwort=true
707 | else
708 | unset antwort
709 | fi
710 |
711 | }
712 |
713 | install() {
714 | #WLAN-Wetterstation Installationsroutine
715 | jn_abfrage "${WE}\n Möchten Sie ${BL}WLAN-Wetterstation${WE} im aktuellen Verzeichnis installieren?"
716 | if [ -z $antwort ]; then echo -e "\n ${RE}Abbruch...${WE}\n\n"; exit 1; fi
717 | unset antwort
718 |
719 | #aktuelle Version feststellen, downloaden und entpacken
720 | echo -e "\n\n\n Hole Daten von GitHub..."
721 | GitHub=$(curl -sH "Accept: application/vnd.github.v3+json" https://api.github.com/repos/SBorg2014/WLAN-Wetterstation/releases/latest)
722 | akt_version=$(echo ${GitHub} | jq -r '.name' | sed -e 's/-/vom/; s/\"//g')
723 | echo -e " Aktuelle Version: ${GR}${akt_version}${WE}"
724 | DL_URL=$(echo ${GitHub} | jq -r '.assets | .[].browser_download_url')
725 | echo -e " Lade Datei von GitHub herunter...\n"
726 | curl -LJ ${DL_URL} -o tmp.zip
727 | echo -e "\n Entpacke Dateien...\n"
728 | unzip -n tmp.zip
729 |
730 | echo -e "\n Lösche Dateidownload..."
731 | rm tmp.zip
732 |
733 | echo -e "\n Dateien ausführbar setzen..."
734 | chmod +x ws_updater.sh wetterstation.sh
735 |
736 | jn_abfrage "\n${WE} Soll WLAN-Wetterstation nun als Service eingerichtet werden?"
737 | if [ ! -z $antwort ]; then service; fi
738 |
739 | #Konfiguration öffnen
740 | jn_abfrage "\n${WE} Konfiguration nun öffnen?"
741 | if [ ! -z $antwort ]; then
742 | if [ ! -f ~/.selected_editor ]; then update-alternatives --config editor; fi
743 | $(cat ~/.selected_editor | grep SELECTED_EDITOR | cut -d"=" -f2 | tr -d \") wetterstation.conf
744 | fi
745 |
746 | #DPs im ioB anlegen...
747 | 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}]?"
748 | if [ -z $antwort ]; then echo -e "\n"; exit 1; fi
749 | unset antwort
750 |
751 | #Testlauf starten
752 | jn_abfrage "\n${WE} Einmaligen Testdurchlauf im Debug-Modus starten...(empfiehlt sich)?"
753 | if [ ! -z $antwort ]; then ./wetterstation.sh --debug; fi
754 |
755 | #enable Service
756 | jn_abfrage "\n${WE} WLAN-Wetterstation Service nun starten?"
757 | if [ ! -z $antwort ]; then sudo systemctl start wetterstation.service; fi
758 |
759 | echo -e "\n\n Fertig..."
760 | 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"
761 | }
762 |
763 | service() {
764 | #existiert der Service schon?
765 | if [ -f /etc/systemd/system/wetterstation.service ]; then
766 | echo -e "\n\n ${RE}Wetterstation-Service existiert bereits!${WE}\n"
767 | return 0
768 | fi
769 |
770 | sudo tee -a /etc/systemd/system/wetterstation.service > /dev/null <<-EoD
771 | [Unit]
772 | Description=Service für ioBroker Wetterstation
773 |
774 | [Service]
775 | User=$(whoami)
776 | Group=$(whoami)
777 | ExecStart=${DIR}/wetterstation.sh
778 |
779 | [Install]
780 | WantedBy=multi-user.target
781 | EoD
782 |
783 | echo -e "\n Aktiviere den Service nun..."
784 | sudo systemctl daemon-reload
785 | sudo systemctl enable wetterstation.service
786 | echo -e "\n ${GE}Der Service kann nun mittels ${GR}systemctl start wetterstation${GE} gestartet werden..."
787 |
788 | }
789 |
790 | usage() {
791 | echo -e "\nusage: ws_updater [[--install] | [--patch] | [--service] | [-h|--help]]\n"
792 | echo -e " --install\tinstalliert WLAN-Wetterstation im aktuellen Verzeichnis"
793 | echo -e " --patch\tpatcht die 'wetterstation.conf' auf eine neue Version"
794 | echo -e " --service\trichtet WLAN-Wetterstation als Service ein"
795 | echo -e " -h | --help\tdieses Hilfemenue\n"
796 | }
797 |
798 | menu() {
799 | clear
800 | echo -e "$WE\n\n\n"
801 | echo -e "\t Auswahlmenü für WLAN-Wetterstation:"
802 | echo -e "\t_____________________________________\n\n"
803 | echo -e "\t [${BL}1${WE}] im aktuellen Verzeichnis installieren\n"
804 | echo -e "\t [${BL}2${WE}] als Service einrichten\n"
805 | echo -e "\t [${BL}3${WE}] Konfigurationsdatei patchen\n"
806 | echo -e "\t [${BL}4${WE}] Update ausführen\n\n"
807 | echo -e "\t [${BL}E${WE}] Exit\n\n\n"
808 | echo -en "\t Ihre Auswahl: [${GR}1-4,E${WE}]"
809 |
810 | read -n 1 -p ": " MENU_AUSWAHL
811 | echo -e "\n"
812 | case $MENU_AUSWAHL in
813 | 1) source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --install
814 | exit 0 ;;
815 | 2) source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --service
816 | exit 0 ;;
817 | 3) source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --patch
818 | exit 0 ;;
819 | 4) source <(curl -s https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh) --gitup
820 | exit 0 ;;
821 | e|E) exit 0 ;;
822 | *) menu
823 | esac
824 | }
825 |
826 | make_objects(){
827 | #1: ID
828 | #2: name
829 | #3: type
830 | #4: unit
831 |
832 | echo -e "\n ${WE}Lege neues Object im ioBroker an: $BL${PRE_DP}$1$WE"
833 | local TOKEN=$(echo -n ${RESTAPI_USER}:${RESTAPI_PW} | base64)
834 |
835 | #build Data-String
836 | local DATA=$(cat <<-EOD
837 | {
838 | "_id": "${PRE_DP}$1",
839 | "type": "state",
840 | "common": {
841 | "name": "$2",
842 | "type": "$3",
843 | "role": "state"
844 | },
845 | "native": {
846 | "name": "$2",
847 | "type": "$3",
848 | "role": "state"
849 | }
850 | }
851 | EOD
852 | )
853 |
854 | #Check 4 Units
855 | if [ "$4" != "" ]; then DATA=$(echo $DATA | sed "s|\"role\": \"state\"|\"role\": \"state\", \"unit\": \"$4\"|g"); fi
856 |
857 | local RESULT=$(curl -skX 'POST' \
858 | ${RESTAPI_URL}'/v1/object/'${PRE_DP}${1} \
859 | -H 'accept: application/json' \
860 | -H 'authorization: Basic '${TOKEN} \
861 | -H 'Content-Type: application/json' \
862 | --data "$DATA"
863 | )
864 |
865 | #Fehler beim anlegen?
866 | if [[ $RESULT == *"error"* ]]; then local FEHLER_ioB=$(echo ${RESULT} | jq -r '.error')
867 | echo -e "${RE} Fehlermeldung beim Anlegen des Datenpunktes: ${FEHLER_ioB}${WE}\n"
868 | fi
869 | 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
870 |
871 | }
872 |
873 |
874 | #gibt es Parameter?
875 | while [ "$1" != "" ]; do
876 | case $1 in
877 | --install ) checker
878 | install
879 | exit 0
880 | ;;
881 | --menu ) menu
882 | exit 0
883 | ;;
884 | --service ) service
885 | exit 0
886 | ;;
887 | --gitup ) checker
888 | main
889 | exit 0
890 | ;;
891 | --patch ) checker
892 | patcher
893 | exit 0
894 | ;;
895 | -h | --help ) usage
896 | exit 0
897 | ;;
898 | * ) echo -e "\n${RE}\"$1\"${WE} wird nicht unterstützt...\n\n"
899 | usage
900 | exit 1
901 | esac
902 | shift
903 | done
904 |
905 |
906 |
907 | checker
908 | main
909 |
910 |
--------------------------------------------------------------------------------