// Wasserstandspegel via WLAN erfragen auf Seite:
// https://www.wasserstaende.de/webservices/rest-api/v2/stations/MAXAU/W/currentmeasurement.json
// Geliefert wird ein JSON-String der ausgewertet wird (Infos s.u.)
// Autor: Michael Busch mit der Hilfe des WWW
#include <WiFi.h> // Diese Bibliothek muss nicht extra eingebunden werden
#include <HTTPClient.h> // Notwendig für die Funktion als HTTP-Client
const char *WIFI_SSID = "Wokwi-GUEST"; // Standard SSID bei Wokwi, genutzt wird das
const char *WIFI_PWD = ""; // WLAN mit dem der PC verbunden ist
WiFiClient wifiClient; // Ein Objekt der Klasse WifiClient wird erzeugt
HTTPClient Obj_HTTPClient; // Das Objekt HTTPClient wird erzeugt
int int_HttpCode = 0; // Der HTTP-Errorcode wird auf 0 gesetzt
String StringPegelwert;
String JSONkomplett;
// Verbindung zum WLAN herstellen ***********************************************************
void ConnectToWiFi()
{
Serial.print("Connecting to WiFi ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PWD); // Wifiverbindung aufbauen
while (WiFi.status() != WL_CONNECTED) // gibt so lange "." aus bis Verbindung steht
{
Serial.print(".");
delay(500);
}
Serial.print("\nConnected to ");
Serial.println(WIFI_SSID); // Die SSID wird ausgegeben
}
void setup()
{
Serial.begin(115200);
Serial.println("Setup begin");
ConnectToWiFi();
Serial.println("Setup end");
}
void loop()
{
// Die Webseite wird kontaktiert, mit der GET() Methode wird der JSON-String eingeholt. Dieser wird auf dem
// ESP32 gespeichert und kann mit der .getString()-Methode genutzt und weiterverarbeitet werden.
// Das macht aber nur Sinn, wenn die Übertragung fehlerfrei war. Dies wird mit dem HTTP_CODE_OK quittiert.
Serial.println("Kontaktiere Maxau");
Obj_HTTPClient.begin("https://www.wasserstaende.de/webservices/rest-api/v2/stations/MAXAU/W/currentmeasurement.json"); //HTTP
int_HttpCode = Obj_HTTPClient.GET();
if (int_HttpCode > 0)
{
Serial.print("HTTP Code: ");
Serial.println(int_HttpCode);
// Datei auf dem Server gefunden
if (int_HttpCode == HTTP_CODE_OK) // HTTP_CODE_OK = 200
{
// Daten vom Server als JSON-String
JSONkomplett = Obj_HTTPClient.getString();
Serial.println("StringPegelwert: " + JSONkomplett);
// Aus dem String werden die Zeichen 56 bis 60 extrahiert
StringPegelwert = JSONkomplett.substring(56, 60);
Serial.println("Pegel: " + StringPegelwert + " cm");
}
else
{
Serial.println("HTTP Fehler: " + Obj_HTTPClient.errorToString(int_HttpCode));
}
}
Obj_HTTPClient.end();
delay(2000);
}
/* JSON-Sring komplett:
"timestamp": "2023-06-08T23:00:00+02:00", 43 Zeichen
"value": 466.0, 56tes bis 60tes Zeichen = Wasserstand
"stateMnwMhw": "normal",
"stateNswHsw": "normal"
*/