Flusspegel: Unterschied zwischen den Versionen
Curt (Diskussion | Beiträge) (→Integration in FHEM: überflüssiges raus) |
K (Sichtung / Bearbeitung der letzten Änderung; Formatierung der Einfügung auf Syntaxhighlight umgestellt) |
||
(10 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Der [[{{PAGENAME}}|Artikel "Flusspegel"]] beschreibt das Vorgehen zur Integration eines amtlichen deutschen Flusspegels in FHEM. | |||
Der [[{{PAGENAME}}|Artikel "Flusspegel"]] | |||
==Etwas Theorie== | ==Etwas Theorie== | ||
Zeile 7: | Zeile 5: | ||
==Datenlieferant== | ==Datenlieferant== | ||
Es gibt mehrere Bundesämter, die die Daten der offiziellen deutschen Flusspegel vorhalten. Von Interesse sind die Daten der Wasserstraßen- und Schifffahrtsverwaltung des Bundes: Sie werden im json-Format bereitgestellt. Damit ist die Integration in FHEM problemlos möglich. Zudem kann Pegelonline mit 200 Millionen Abfragen im Jahr als stabiler, langfristig verfügbarer Dienst angesehen werden. | Es gibt mehrere Bundesämter, die die Daten der offiziellen deutschen Flusspegel vorhalten. Von Interesse sind die Daten der Wasserstraßen- und Schifffahrtsverwaltung des Bundes: Sie werden im json-Format bereitgestellt. Damit ist die Integration in FHEM problemlos möglich. Zudem kann '''Pegelonline''' mit 200 Millionen Abfragen im Jahr als stabiler, langfristig verfügbarer Dienst angesehen werden. | ||
==Pegeldaten finden== | ==Pegeldaten finden== | ||
Einen konkreten amtlichen Pegel findet man, indem man im ersten Schritt die UUID des gewünschten Pegels in https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json herausfindet. Für den Pegel Elbe, Lutherstadt Wittenberg ist das die UUID "5c47b0ce-f33f-769b-1a02-89bf7772cb0d2878". Im zweiten Schritt wird die URL-Vorlage | Einen konkreten amtlichen Pegel findet man, indem man im ersten Schritt die UUID des gewünschten Pegels in https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json herausfindet. Für den Pegel Elbe, Lutherstadt Wittenberg ist das die UUID "5c47b0ce-f33f-769b-1a02-89bf7772cb0d2878". Im zweiten Schritt wird die URL-Vorlage | ||
< | <syntaxhighlight lang="html"> | ||
https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/[UUID]/W/currentmeasurement.json | https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/[UUID]/W/currentmeasurement.json | ||
</ | </syntaxhighlight> | ||
mit der gefundenen UUID konkretisiert. Im Ergebnis erhält man eine URL mit den Daten (mehr als nur die Pegelhöhe selbst) des gewünschten Pegels, beispielsweise für den Pegel Elbe, Lutherstadt Wittenberg, den man im Browser testweise aufruft: | mit der gefundenen UUID konkretisiert. Im Ergebnis erhält man eine URL mit den Daten (mehr als nur die Pegelhöhe selbst) des gewünschten Pegels, beispielsweise für den Pegel Elbe, Lutherstadt Wittenberg, den man im Browser testweise aufruft: | ||
< | <syntaxhighlight lang="html"> | ||
https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/070b1eb4-3872-4e07-b2e5-e25fd9251b93/W/currentmeasurement.json | https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/070b1eb4-3872-4e07-b2e5-e25fd9251b93/W/currentmeasurement.json | ||
</ | </syntaxhighlight> | ||
Da sich | Da sich Flusspegel nicht sprunghaft ändern, sollte die Abfragehäufigkeit eine Stunde (3600) nicht unterschreiten. | ||
==Integration in FHEM== | ==Integration in FHEM== | ||
< | Zur regelmäßigen Abfrage der Daten wird das Modul [[HTTPMOD]] verwendet. | ||
<syntaxhighlight lang="html"> | |||
define ElbePegelWittenberg HTTPMOD https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/070b1eb4-3872-4e07-b2e5-e25fd9251b93/W/currentmeasurement.json 3600 | define ElbePegelWittenberg HTTPMOD https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/070b1eb4-3872-4e07-b2e5-e25fd9251b93/W/currentmeasurement.json 3600 | ||
attr ElbePegelWittenberg alias Pegel Wittenberg | attr ElbePegelWittenberg alias Pegel Wittenberg | ||
attr ElbePegelWittenberg enableControlSet 1 | attr ElbePegelWittenberg enableControlSet 1 | ||
attr ElbePegelWittenberg event-on-change-reading | attr ElbePegelWittenberg event-on-change-reading stateMnwMhw,stateNswHsw,timestamp,trend | ||
attr ElbePegelWittenberg event-on-update-reading | attr ElbePegelWittenberg event-on-update-reading pegel,value | ||
attr ElbePegelWittenberg extractAllJSON 1 | attr ElbePegelWittenberg extractAllJSON 1 | ||
attr ElbePegelWittenberg timeout 5 | attr ElbePegelWittenberg timeout 5 | ||
attr ElbePegelWittenberg | attr ElbePegelWittenberg stateFormat {sprintf("%.0f",ReadingsVal($name,"pegel",0))} | ||
</ | attr ElbePegelWittenberg userReadings pegel:value.* {ReadingsVal($name,"value",0)} | ||
</syntaxhighlight> | |||
Ein dazugehöriges Logfile könnte so definiert sein: | Alternative: Verwendung des Moduls [[JsonMod]]. | ||
<syntaxhighlight lang="text"> | |||
define ElbePegelWittenberg JsonMod https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/070b1eb4-3872-4e07-b2e5-e25fd9251b93/W/currentmeasurement.json | |||
attr ElbePegelWittenberg alias Pegel Wittenberg | |||
attr ElbePegelWittenberg readingList single((jsonPathf('$.value', '%0.2f')/100), 'pegel', 0);; | |||
attr ElbePegelWittenberg stateFormat pegel | |||
</syntaxhighlight> | |||
Ein dazugehöriges [[FileLog|Logfile]] könnte so definiert sein: | |||
< | <syntaxhighlight lang="html"> | ||
define FileLog_ElbePegelWittenberg FileLog ./log/ElbePegelWittenberg-%Y.log ElbePegelWittenberg | define FileLog_ElbePegelWittenberg FileLog ./log/ElbePegelWittenberg-%Y.log ElbePegelWittenberg | ||
attr FileLog_ElbePegelWittenberg logtype text | attr FileLog_ElbePegelWittenberg logtype text | ||
</ | </syntaxhighlight> | ||
Die grafische Darstellung ließe sich dann so realisieren: | Die [[SVG|grafische Darstellung]] ließe sich dann so realisieren: | ||
< | <syntaxhighlight lang="html"> | ||
define SVG_FileLog_ElbePegelWittenberg SVG FileLog_ElbePegelWittenberg:SVG_FileLog_ElbePegelWittenberg:CURRENT | define SVG_FileLog_ElbePegelWittenberg SVG FileLog_ElbePegelWittenberg:SVG_FileLog_ElbePegelWittenberg:CURRENT | ||
</ | </syntaxhighlight> | ||
Die dazugehörige Grafikdatei SVG_FileLog_ElbePegelWittenberg.gplot | |||
<syntaxhighlight lang="html"> | |||
# Created by FHEM/98_SVG.pm, 2018-04-09 21:30:11 | |||
set terminal png transparent size <SIZE> crop | |||
set output '<OUT>.png' | |||
set xdata time | |||
set timefmt "%Y-%m-%d_%H:%M:%S" | |||
set xlabel " " | |||
set title 'Pegel Wittenberg' | |||
set ytics | |||
set y2tics | |||
set grid y2tics | |||
set ylabel "" | |||
set y2label "Pegel" | |||
set yrange [0:8] | |||
set y2range [0:800] | |||
#FileLog_ElbePegelWittenberg 4:ElbePegelWittenberg.pegel\x3a:: | |||
plot "<IN>" using 1:2 axes x1y2 title 'Pegel Wittenberg' ls l2fill lw 1 with steps | |||
</syntaxhighlight> | |||
==Abflussmenge== | |||
Die eigentlich interessantere Abflussmenge kann über eine geringfügig andere URL abgefragt werden: in der ermittelten URL ist lediglich das "W" durch "Q" zu ersetzen, im obigen Beispiel also | |||
<syntaxhighlight lang="html"> | |||
https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/070b1eb4-3872-4e07-b2e5-e25fd9251b93/Q/currentmeasurement.json | |||
</syntaxhighlight> | |||
==Einzelwert "trend"== | |||
Der bei beiden URL auch gelieferte Wert "trend" ist laut Aussage ITZBund "künftig wegfallend". | |||
== | == Links == | ||
* vollständige Dokumentation der WebServices von [https://www.pegelonline.wsv.de/webservice/guideRestapi PegelOnline] | |||
* Diskussion über das Thema in {{Link2Forum|Topic=97570|LinkText=diesem Forenthread}} | |||
[[Kategorie:Code_Snippets]] | [[Kategorie:Code_Snippets]] |
Aktuelle Version vom 26. November 2021, 15:23 Uhr
Der Artikel "Flusspegel" beschreibt das Vorgehen zur Integration eines amtlichen deutschen Flusspegels in FHEM.
Etwas Theorie
Ein Pegel ist eine willkürliche amtliche Höhenfestlegung. Der Nullpunkt des Pegels sagt wenig über die reale Gewässertiefe. Pegelstände werden oft bei Hochwassersituationen interessant. Für die Vorhersage ist aber die sogenannte Abflussmenge (in Kubikmeter je Sekunde) eines höher gelegenen Pegels von Interesse. Pegelhöhen sind lediglich indirekte Indizien.
Datenlieferant
Es gibt mehrere Bundesämter, die die Daten der offiziellen deutschen Flusspegel vorhalten. Von Interesse sind die Daten der Wasserstraßen- und Schifffahrtsverwaltung des Bundes: Sie werden im json-Format bereitgestellt. Damit ist die Integration in FHEM problemlos möglich. Zudem kann Pegelonline mit 200 Millionen Abfragen im Jahr als stabiler, langfristig verfügbarer Dienst angesehen werden.
Pegeldaten finden
Einen konkreten amtlichen Pegel findet man, indem man im ersten Schritt die UUID des gewünschten Pegels in https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json herausfindet. Für den Pegel Elbe, Lutherstadt Wittenberg ist das die UUID "5c47b0ce-f33f-769b-1a02-89bf7772cb0d2878". Im zweiten Schritt wird die URL-Vorlage
https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/[UUID]/W/currentmeasurement.json
mit der gefundenen UUID konkretisiert. Im Ergebnis erhält man eine URL mit den Daten (mehr als nur die Pegelhöhe selbst) des gewünschten Pegels, beispielsweise für den Pegel Elbe, Lutherstadt Wittenberg, den man im Browser testweise aufruft:
https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/070b1eb4-3872-4e07-b2e5-e25fd9251b93/W/currentmeasurement.json
Da sich Flusspegel nicht sprunghaft ändern, sollte die Abfragehäufigkeit eine Stunde (3600) nicht unterschreiten.
Integration in FHEM
Zur regelmäßigen Abfrage der Daten wird das Modul HTTPMOD verwendet.
define ElbePegelWittenberg HTTPMOD https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/070b1eb4-3872-4e07-b2e5-e25fd9251b93/W/currentmeasurement.json 3600
attr ElbePegelWittenberg alias Pegel Wittenberg
attr ElbePegelWittenberg enableControlSet 1
attr ElbePegelWittenberg event-on-change-reading stateMnwMhw,stateNswHsw,timestamp,trend
attr ElbePegelWittenberg event-on-update-reading pegel,value
attr ElbePegelWittenberg extractAllJSON 1
attr ElbePegelWittenberg timeout 5
attr ElbePegelWittenberg stateFormat {sprintf("%.0f",ReadingsVal($name,"pegel",0))}
attr ElbePegelWittenberg userReadings pegel:value.* {ReadingsVal($name,"value",0)}
Alternative: Verwendung des Moduls JsonMod.
define ElbePegelWittenberg JsonMod https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/070b1eb4-3872-4e07-b2e5-e25fd9251b93/W/currentmeasurement.json
attr ElbePegelWittenberg alias Pegel Wittenberg
attr ElbePegelWittenberg readingList single((jsonPathf('$.value', '%0.2f')/100), 'pegel', 0);;
attr ElbePegelWittenberg stateFormat pegel
Ein dazugehöriges Logfile könnte so definiert sein:
define FileLog_ElbePegelWittenberg FileLog ./log/ElbePegelWittenberg-%Y.log ElbePegelWittenberg
attr FileLog_ElbePegelWittenberg logtype text
Die grafische Darstellung ließe sich dann so realisieren:
define SVG_FileLog_ElbePegelWittenberg SVG FileLog_ElbePegelWittenberg:SVG_FileLog_ElbePegelWittenberg:CURRENT
Die dazugehörige Grafikdatei SVG_FileLog_ElbePegelWittenberg.gplot
# Created by FHEM/98_SVG.pm, 2018-04-09 21:30:11
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Pegel Wittenberg'
set ytics
set y2tics
set grid y2tics
set ylabel ""
set y2label "Pegel"
set yrange [0:8]
set y2range [0:800]
#FileLog_ElbePegelWittenberg 4:ElbePegelWittenberg.pegel\x3a::
plot "<IN>" using 1:2 axes x1y2 title 'Pegel Wittenberg' ls l2fill lw 1 with steps
Abflussmenge
Die eigentlich interessantere Abflussmenge kann über eine geringfügig andere URL abgefragt werden: in der ermittelten URL ist lediglich das "W" durch "Q" zu ersetzen, im obigen Beispiel also
https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/070b1eb4-3872-4e07-b2e5-e25fd9251b93/Q/currentmeasurement.json
Einzelwert "trend"
Der bei beiden URL auch gelieferte Wert "trend" ist laut Aussage ITZBund "künftig wegfallend".
Links
- vollständige Dokumentation der WebServices von PegelOnline
- Diskussion über das Thema in diesem Forenthread