Seite 2 von 3
Re: Weewx und Ecowitt Stationen/Geräte
Verfasst: 24 Jan 2023, 12:58
von Werner
funktioniert (zumindest für mich) leider nicht. Es kommt ein ERROR 500: Internal Server Error. Könntest Du Dein GitHub Repository updaten?
Tut mir leid. Im Dezember 2022 konnte man noch direkt auf die *.py - Dateien zugreifen.
Habe jetzt alle py-Datei gezippt.
Wer alle meine Weewx-Erweiterungen (und -Änderungen) in einer Zip-Datei möchte /weewx/usr.zip
GitHub ist jetzt aktualisiert.
Re: Weewx und Ecowitt Stationen/Geräte
Verfasst: 24 Jan 2023, 22:03
von speerwerfer
Hallo Werner,
ich muss jetzt doch noch mal etwas nachfragen ... bin noch nicht so sattelfest in der weewx Welt. Ich hab in einem Linux-Container einer neue Weewx Instanz mit Simulator installiert und im Anschluss den gw1000 Treiber von hier
https://github.com/gjr80/weewx-gw1000/releases in der Version v0.5.0b5 heruntergeladen und mit
Code: Alles auswählen
wee_extension --install=/var/tmp/gw1000-0.5.0b5.tar.gz
installiert.
Danach dann mit
weewx vom Simulator auf den gw1000 Treiber umkonfiguriert.
Wird mit dem wee_config schon die Datenbank angepasst - ich denke ja, denn im HTML Export von weewx sehe ich meine Sensoren. Aber die Felder aus add_ecowitt_to_wview_database.sh fehlen noch in der weewx Sqlite DB.
Auf deiner Webseite findet sich ja die Versin 0.5.0b6 des gw1000 Treibers. Ist die DB Anpassung erst für diese neuere Version notwendig? Ich steige da irgendwie nicht durch - sorry.
Martin
Re: Weewx und Ecowitt Stationen/Geräte
Verfasst: 25 Jan 2023, 11:41
von Werner
Wird mit dem wee_config schon die Datenbank angepasst - ich denke ja,
Nein.
Der GW1000-Treiber liefert nur die Daten/Werte, wie diese dann in eine Datenbank kommen liegt am Anwender.
Ausser man nutzt mein konfiguriertes Datenbank-Schema weewx_ecowitt.schema.
Wenn man dann Weewx
erstmalig startet mit diesen Einstellungen in der
weewx.conf
ohne vorhandene sdb-Datei oder man löscht/umbenennt die vorhandene sdb-Datei
Code: Alles auswählen
[DataBindings]
[[wx_binding]]
# The database must match one of the sections in [Databases].
# This is likely to be the only option you would want to change.
database = archive_sqlite
table_name = archive
manager = weewx.manager.DaySummaryManager
schema = schemas.wview_ecowitt.schema
dann erzeugt Weewx die Datenbank mit eben allen Werten für eine Ecowitt-Station.
Bei einer
vorhandenen normalen Weewx-Datenbank muss man die Datenbank mit meinen Script erweitern!
Ist die DB Anpassung erst für diese neuere Version notwendig?
Die Datenbank-Anpassung ist immer notwendig - ausser siehe vorher.
Re: Weewx und Ecowitt Stationen/Geräte
Verfasst: 26 Jan 2023, 14:33
von speerwerfer
Hallo Werner,
vielen Dank für deine Antwort - das hat jetzt geholfen. Ich hab das mal alles konfiguriert und mit einer neuen Datenbank begonnen. Die wurde dann auch vollständig eingerichtet.
Zu den Daten die von einer Wetterstation kommen noch eine Frage - eher eine Grundlagenfrage: Woher weiß weewx, wohin z.B. die Daten des Bodenfeuchtesensors des gw2000 in der Tabelle archive in der sqlite Datenbank geschrieben werden sollen. Ist das Aufgabe der field_map in der Datei/dem Treiber gw1000.py - dort findet ja ein mapping statt: "WeeWX field name: Gateway device field name". Und WeeWX field name ist dann gleich dem Namen der Tabellenspalte?
Ist das irgendwo in der WeeWX Doku beschrieben und ich finde es nur nicht?
Martin
Re: Weewx und Ecowitt Stationen/Geräte
Verfasst: 26 Jan 2023, 17:37
von Gyvate
speerwerfer hat geschrieben: ↑26 Jan 2023, 14:33
eher eine Grundlagenfrage: Woher weiß weewx, wohin z.B. die Daten des Bodenfeuchtesensors des gw2000 in der Tabelle archive in der sqlite Datenbank geschrieben werden sollen. Ist das Aufgabe der field_map in der Datei/dem Treiber gw1000.py - dort findet ja ein mapping statt: "WeeWX field name: Gateway device field name". Und WeeWX field name ist dann gleich dem Namen der Tabellenspalte?
Ist das irgendwo in der WeeWX Doku beschrieben und ich finde es nur nicht?
Martin
Ja, es ist in der weewx Doku beschrieben - Google Stichwort github, gw1000, wiki bringt Dir
https://github.com/gjr80/weewx-gw1000/wiki
Zunächst ist es zielführend, den Datenfluß zu verstehen:
Ecowitt Gateway API --> Ecowitt Gateway Treiber --> weewx Hauptprogramm ("Loop") --> Datenbank
Im WiKi findest Du die Fieldmap - die Fieldmap des Ecowitt Gateway API interfaces (das, was der Ecowitt-Gateway-Treiber als API Antwort vom der GW1000, GW1100, GW2000, WN19x0, WH2650 Konsole erhält, das dann einem weewx Feld (intern) zugeordnet wird).
Es gibt nun mehrere Wege, die weewx Felder einem Datenbankfeld zuzuordnen kann (sollte entweder im Ecowitt Gateway WiKi, s.o., oder in der weewx HauptDoku (
www.weewx.com/docs.html) beschrieben sein.
Wenn eine solche Zuweisung existiert (z.B. via FieldMap in weewx.conf), füllt weewx am Ende eines Loop-Intervalls (Konsolenabfrageintervalls, in dem mehrere Abfragen stattfinden können und dann gemäss der sogenannten Akkumulatoren zusammengefasst werden [z.B. min, max, avg, sum, ....]) die interne Datenbankschnittstelle und speichert diesen Datensatz ab - d.h. jedes zugeordnete Feld wird mit den Intervalldaten gefüllt, mit dem Zeitstempel versehen, und in die Datenbankfelder des Datenbankdatensatzes übertragen (abgespeichert, archiviert).
Re: Weewx und Ecowitt Stationen/Geräte
Verfasst: 26 Jan 2023, 19:23
von speerwerfer
Erstmal vielen Dank für die ausführliche Antwort!
Gyvate hat geschrieben: ↑26 Jan 2023, 17:37
Zunächst ist es zielführend, den Datenfluß zu verstehen:
Ecowitt Gateway API --> Ecowitt Gateway Treiber --> weewx Hauptprogramm ("Loop") --> Datenbank
Im WiKi findest Du die Fieldmap - die Fieldmap des Ecowitt Gateway API interfaces (das, was der Ecowitt-Gateway-Treiber als API Antwort vom der GW1000, GW1100, GW2000, WN19x0, WH2650 Konsole erhält, das dann einem weewx Feld (intern) zugeordnet wird).
OK, der Datenfluss war mir schon klar. Und die Fieldmap im Ecowitt Treiber gw1000.py hatte ich ja auch gefunden. Ich war nur davon ausgegangen, das mit "WeeWX field name" bei dieser Fieldmapp schon ein Datenbankfeld in der Archivtabelle gemeint ist. Das scheint aber nicht der Fall zu sein. Wenn ich dich richtig verstanden habe, kann dieses weewx Feld (intern), welches über den Loop in WeeWX landet, innerhalb von weewx noch mal auf ein Datenbankfeld gemappt werden. Dass muss ich mir noch mal genauer ansehen.
Da in der Fieldmap in der gw1000.py aber als "WeeWX Field" Bezeichner auftauchen, die sicher Ecowittspezifisch sind und in einer nackten WeeWX Installation unbekannt sein dürften, scheint es so zu sein, das ich mir beliebige WeeWX Feldnamen (intern) in einem Treiber ausdenken kann und damit dann Daten an die Loop weitergereicht werden. Die Daten werden ja vom Treiber per Python Dictionary an WeeWX in den Loop übergeben. Wenn das stimmt müsste WeeWX dann generisch alle im Dictionary vorhandenen Wertepaare versuchen in die Datenbank zu schreiben. Und dazu muss ja dann auch ein mapping vorhanden sein. Ich werde mir die WeeWX Doku noch mal genauer ansehen. Bisher hab ich dazu nicht das richtige gefunden.
Martin
Re: Weewx und Ecowitt Stationen/Geräte
Verfasst: 26 Jan 2023, 19:38
von Gyvate
speerwerfer hat geschrieben: ↑26 Jan 2023, 19:23
Ich war nur davon ausgegangen, das mit "WeeWX field name" bei dieser Fieldmapp schon ein Datenbankfeld in der Archivtabelle gemeint ist. Das scheint aber nicht der Fall zu sein. Wenn ich dich richtig verstanden habe, kann dieses weewx Feld (intern), welches über den Loop in WeeWX landet, innerhalb von weewx noch mal auf ein Datenbankfeld gemappt werden. Dass muss ich mir noch mal genauer ansehen.
Richtig - weewx hält ja durchaus Daten vor [kann vorhalten] ($current), die nicht in der Datenbank abgespeichert werden (müssen), sich aber in einem Report (Skin) sehr wohl darstellen lassen.
Erst wenn ein Mapping (z.B. FieldMap Extension in weewx.conf - wobei es für jede Ebene eine FieldMap gibt/geben kann - hier ist die in weewx.conf gemeint, die das Mapping macht. StdCalculate wäre auch eine Möglichkeit) existiert, werden die Akkumulator-Daten auch in die/der Datenbank abgespeichert.
Wenn man keine neuen/eigenen DB-Felder in der DB anlegt sondern vorhandene umwidmet (repurpose), findet die Zuweisung in [StdCalculate] statt.
Ich habe das bei meinen Sensoren so gemacht - es gibt ja genügend Felder im wview_extendend DB-Schema.
Allerdings ist ein neues Schema mit den jeweils passenden Feldern sicherlich übersichtlicher und sozusagen state-of-the-art
Re: Weewx und Ecowitt Stationen/Geräte
Verfasst: 26 Jan 2023, 19:42
von Werner
Hier ist das komplette Mapping für den GW1000 und Interceptor -Treiber damit die Datenbank mit dem ecowtt-schema befüllt wird.
in der Datei
weewx.conf
Code: Alles auswählen
[GW1000]
[[field_map_extensions]]
batteryStatus1 = wh31_ch1_batt
batteryStatus2 = wh31_ch2_batt
batteryStatus3 = wh31_ch3_batt
batteryStatus4 = wh31_ch4_batt
batteryStatus5 = wh31_ch5_batt
batteryStatus6 = wh31_ch6_batt
batteryStatus7 = wh31_ch7_batt
batteryStatus8 = wh31_ch8_batt
lightning_distance = lightningdist
lightning_disturber_count = lightningdettime
lightning_Batt = wh57_batt
co2_Temp = temp17
co2_Hum = humid17
pm10_0 = pm10
pm2_5 = pm255
co2_Batt = wh45_batt
pm25_1 = pm251
pm25_2 = pm252
pm25_3 = pm253
pm25_4 = pm254
pm25_Batt1 = wh41_ch1_batt
pm25_Batt2 = wh41_ch2_batt
pm25_Batt3 = wh41_ch3_batt
pm25_Batt4 = wh41_ch4_batt
soilTemp1 = temp9
soilTemp2 = temp10
soilTemp3 = temp11
soilTemp4 = temp12
soilTemp5 = temp13
soilTemp6 = temp14
soilTemp7 = temp15
soilTemp8 = temp16
soilTempBatt1 = wn34_ch1_batt
soilTempBatt2 = wn34_ch2_batt
soilTempBatt3 = wn34_ch3_batt
soilTempBatt4 = wn34_ch4_batt
soilTempBatt5 = wn34_ch5_batt
soilTempBatt6 = wn34_ch6_batt
soilTempBatt7 = wn34_ch7_batt
soilTempBatt8 = wn34_ch8_batt
soilMoistBatt1 = wh51_ch1_batt
soilMoistBatt2 = wh51_ch2_batt
soilMoistBatt3 = wh51_ch3_batt
soilMoistBatt4 = wh51_ch4_batt
soilMoistBatt5 = wh51_ch5_batt
soilMoistBatt6 = wh51_ch6_batt
soilMoistBatt7 = wh51_ch7_batt
soilMoistBatt8 = wh51_ch8_batt
leak_1 = leak1
leak_2 = leak2
leak_3 = leak3
leak_4 = leak4
leak_Batt1 = wh55_ch1_batt
leak_Batt2 = wh55_ch2_batt
leak_Batt3 = wh55_ch3_batt
leak_Batt4 = wh55_ch4_batt
leafWetBatt1 = wn35_ch1_batt
leafWetBatt2 = wn35_ch2_batt
leafWetBatt3 = wn35_ch3_batt
leafWetBatt4 = wn35_ch4_batt
leafWetBatt5 = wn35_ch5_batt
leafWetBatt6 = wn35_ch6_batt
leafWetBatt7 = wn35_ch7_batt
leafWetBatt8 = wn35_ch8_batt
rainBatteryStatus = wh40_batt
#windBatteryStatus = ws80_batt
windBatteryStatus = ws80_batt
hailBatteryStatus = ws90_batt
#ws80_batt = ws80_batt
#ws90_batt = ws90_batt
outTempBatteryStatus = wh24_batt
# outTempBatteryStatus = wh26_batt
# outTempBatteryStatus = wh65_batt
# outTempBatteryStatus = wh68_batt
inTempBatteryStatus = wh25_batt
consBatteryVoltage = ws1900batt
maxdailygust = daymaxwind
pm25_24h_co2 = pm255_24h_avg
pm10_24h_co2 = pm10_24h_avg
pm25_avg_24h_ch1 = pm251_24h_avg
pm25_avg_24h_ch2 = pm252_24h_avg
pm25_avg_24h_ch3 = pm253_24h_avg
pm25_avg_24h_ch4 = pm254_24h_avg
lightningcount = lightningcount
co2_24h = co2_24h_avg
barometer = relbarometer
rainrate = rainrate
totalRain = raintotal
eventRain = rainevent
hourRain = t_rainhour
dayRain = t_rainday
weekRain = t_rainweek
monthRain = t_rainmonth
yearRain = t_rainyear
rain_piezo = p_rain
erain_piezo = p_rainevent
rrain_piezo = p_rainrate
hrain_piezo = p_hourrain
drain_piezo = p_rainday
wrain_piezo = p_rainweek
mrain_piezo = p_rainmonth
yrain_piezo = p_rainyear
hail = p_rain
hailRate = p_rainrate
wh24_sig = wh24_sig
wh25_sig = wh25_sig
wh31_ch1_sig = wh31_ch1_sig
ws80_sig = ws80_sig
ws90_sig = ws90_sig
wh40_sig = wh40_sig
wh45_sig = wh45_sig
wh57_sig = wh57_sig
wh51_ch1_sig = wh51_ch1_sig
wn35_ch1_sig = wn35_ch1_sig
wn34_ch1_sig = wn34_ch1_sig
rain_source = rain_source
rain_day_reset = rain_day_reset
rain_week_reset = rain_week_reset
rain_annual_reset = rain_annual_reset
raingain = raingain
gain0 = gain0
gain1 = gain1
gain2 = gain2
gain3 = gain3
gain4 = gain4
gain5 = gain5
gain6 = gain6
gain7 = gain7
gain8 = gain8
gain9 = gain9
##############################################################################
[Interceptor]
driver = user.interceptor
device_type = ecowitt-client
[[sensor_map_extensions]]
co2 = co2
co2_Temp = tf_co2
co2_Hum = humi_co2
co2_Batt = co2_batt
pm10_0 = pm10_co2
pm2_5 = pm25_co2
pm25_1 = pm25_ch1
pm25_2 = pm25_ch2
pm25_3 = pm25_ch3
pm25_4 = pm25_ch4
pm25_Batt1 = pm25batt1
pm25_Batt2 = pm25batt2
pm25_Batt3 = pm25batt3
pm25_Batt4 = pm25batt4
batteryStatus1 = battery_1
batteryStatus2 = battery_2
batteryStatus3 = battery_3
batteryStatus4 = battery_4
batteryStatus5 = battery_5
batteryStatus6 = battery_6
batteryStatus7 = battery_7
batteryStatus8 = battery_8
soilMoist5 = soil_moisture_5
soilMoist6 = soil_moisture_6
soilMoist7 = soil_moisture_7
soilMoist8 = soil_moisture_8
soilMoistBatt1 = soilbatt1
soilMoistBatt2 = soilbatt2
soilMoistBatt3 = soilbatt3
soilMoistBatt4 = soilbatt4
soilMoistBatt5 = soilbatt5
soilMoistBatt6 = soilbatt6
soilMoistBatt7 = soilbatt7
soilMoistBatt8 = soilbatt8
soilTemp1 = tf_ch1
soilTemp2 = tf_ch2
soilTemp3 = tf_ch3
soilTemp4 = tf_ch4
soilTemp5 = tf_ch5
soilTemp6 = tf_ch6
soilTemp7 = tf_ch7
soilTemp8 = tf_ch8
soilTempBatt1 = tf_batt1
soilTempBatt2 = tf_batt2
soilTempBatt3 = tf_batt3
soilTempBatt4 = tf_batt4
soilTempBatt5 = tf_batt5
soilTempBatt6 = tf_batt6
soilTempBatt7 = tf_batt7
soilTempBatt8 = tf_batt8
leafWet1 = leafwetness_ch1
leafWet2 = leafwetness_ch2
leafWet3 = leafwetness_ch3
leafWet4 = leafwetness_ch4
leafWet5 = leafwetness_ch5
leafWet6 = leafwetness_ch6
leafWet7 = leafwetness_ch7
leafWet8 = leafwetness_ch8
leafWetBatt1 = leaf_batt1
leafWetBatt2 = leaf_batt2
leafWetBatt3 = leaf_batt3
leafWetBatt4 = leaf_batt4
leafWetBatt5 = leaf_batt5
leafWetBatt6 = leaf_batt6
leafWetBatt7 = leaf_batt7
leafWetBatt8 = leaf_batt8
leak_1 = leak_ch1
leak_2 = leak_ch2
leak_3 = leak_ch3
leak_4 = leak_ch4
leak_Batt1 = leakbatt1
leak_Batt2 = leakbatt2
leak_Batt3 = leakbatt3
leak_Batt4 = leakbatt4
lightning_distance = lightning
lightning_disturber_count = lightning_time
lightning_strike_count = lightning_num
lightning_Batt = wh57batt
maxdailygust = maxdailygust
winddir_avg10m = winddir_avg10m
windspdmph_avg10m = windspdmph_avg10m
pm25_24h_co2 = pm25_24h_co2
pm10_24h_co2 = pm10_24h_co2
pm25_avg_24h_ch1 = pm25_avg_24h_ch1
pm25_avg_24h_ch2 = pm25_avg_24h_ch2
pm25_avg_24h_ch3 = pm25_avg_24h_ch3
pm25_avg_24h_ch4 = pm25_avg_24h_ch4
consBatteryVoltage = ws1900batt
rainBatteryStatus = wh40batt
hailBatteryStatus = wh90batt
windBatteryStatus = wh80batt
ws90_batt = wh90batt
ws80_batt = wh80batt
outTempBatteryStatus = wh65batt
# outTempBatteryStatus = wh26batt
inTempBatteryStatus = wh25batt
rainrate = rainratein
totalRain = rain_total
eventRain = rainevent
hourRain = hourlyrainin
dayRain = dailyrainin
weekRain = weeklyrainin
monthRain = monthlyrainin
yearRain = rainyear
rain_piezo = rain_piezo
rrain_piezo = rrain_piezo
erain_piezo = erain_piezo
hrain_piezo = hrain_piezo
drain_piezo = drain_piezo
wrain_piezo = wrain_piezo
mrain_piezo = mrain_piezo
yrain_piezo = yrain_piezo
ws90cap_volt = ws90cap_volt
ws90_ver = ws90_ver
runtime = runtime
ws_interval = interval
##############################################################################
Wenn man den Piezo-Regen (WS90) und die vorgesehenen 8 Signale auch in die Datenbank überführen möchte, sind entsprechende
Einträge unter
Code: Alles auswählen
[StdCalibrate]
[[Corrections]]
hail = rain_piezo if rain_piezo is not None else None
hailRate = rrain_piezo if rrain_piezo is not None else None
signal1 = ws80_sig * 25 if ws80_sig is not None else None
signal2 = wh31_ch1_sig * 25 if wh31_ch1_sig is not None else None
signal3 = wn34_ch1_sig * 25 if wn34_ch1_sig is not None else None
signal4 = wh40_sig * 25 if wh40_sig is not None else None
signal5 = wh45_sig * 25 if wh45_sig is not None else None
signal6 = wh57_sig * 25 if wh57_sig is not None else None
signal7 = wh51_ch1_sig * 25 if wh51_ch1_sig is not None else None
signal8 = wn35_ch1_sig * 25 if wn35_ch1_sig is not None else None
notwendig.
Einige Einträge davon (z.B. raingain) gehen von dem von mir abgeänderten GW1000-Treiber bzw. Interceptor-Treiber (z.B. runtime) aus.
Re: Weewx und Ecowitt Stationen/Geräte
Verfasst: 26 Jan 2023, 19:57
von Gyvate
Werners Darstellung ist ein gutes (real existierendes) Beispiel für die Kombination von neuen DB-Feldern mit Hilfe von field map extensions und StdCalibrate (weil hier der Hagel in piezo-Regen umgewidmet wird).
In der pure and applied approach hätte man für den Piezo-Regen ebenfalls neue Felder angelegt - aber so geht's natürlich auch - und gesonderte Hagelsensoren haben wir bislang bei Ecowitt noch nicht.
Re: Weewx und Ecowitt Stationen/Geräte
Verfasst: 27 Jan 2023, 08:56
von speerwerfer
Ich danke Euch für Eure Antworten. Das ist jetzt auch alles soweit klar.
Was mich etwas wundert: Die Doku von weewx ist ja sehr umfangreich. Aber zu dem Thema Mapping schweigt sie sich meiner Meinung nach doch aus. Ich hab jetzt noch einmal gezielt in der Doku gesucht und mit den Begriffen mapping und fieldmap bzw. field_map nicht wirklich erleuchtendes gefunden. Da es sich hier ja um einen grundlegenden Mechanismus in weewx handelt, den man verstehen muss, wenn man über die Standardinstallation hinaus etwas anpassen will, hätte ich schon erwartet, das dazu etwas niedergeschrieben ist. Oder suche ich mit den falschen Begriffen?
https://www.google.de/search?q=mapping+site%3Aweewx.com
https://www.google.de/search?q=fieldmap ... Aweewx.com
https://www.google.de/search?q=%22field ... Aweewx.com