From eadd2677498d3b39da0abff3f6cc31c3c669da43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Sun, 16 Feb 2025 17:04:56 +0100 Subject: [PATCH] [WIP] Fermenter http NOT WORKING --- data/http/index.htm | 130 ++++++++++++++++++++++++++++++++++++ lib/patrix/config.cpp | 10 +-- lib/patrix/wifi.cpp | 3 +- platformio.ini | 15 +++++ src/Fermenter/Fermenter.cpp | 50 ++++++++++++++ 5 files changed, 201 insertions(+), 7 deletions(-) create mode 100644 data/http/index.htm diff --git a/data/http/index.htm b/data/http/index.htm new file mode 100644 index 0000000..85b52f7 --- /dev/null +++ b/data/http/index.htm @@ -0,0 +1,130 @@ + + + + + Gärbox + + + + + + +
+
+ Ist-Temperatur +
+
+ +
+
+ +
+
+ Ziel-Temperatur +
+
+ +
+
+
+
+
+
+ +
+ Nicht verbunden +
+ + + + + diff --git a/lib/patrix/config.cpp b/lib/patrix/config.cpp index 95c3d9e..519756b 100644 --- a/lib/patrix/config.cpp +++ b/lib/patrix/config.cpp @@ -34,7 +34,7 @@ void configReset() { } String configGetString(const char *name, const char *fallback, bool allowEmpty) { - if (!config.containsKey(name)) { + if (!config[name].is()) { return fallback; } String value = config[name]; @@ -52,7 +52,7 @@ void configPutString(const char *name, const char *value) { } double configGetDouble(const char *name, double fallback) { - if (!config.containsKey(name)) { + if (!config[name].is()) { return fallback; } return config[name]; @@ -66,7 +66,7 @@ void configPutDouble(const char *name, double value) { } uint64_t configGetUint64_t(const char *name, uint64_t fallback) { - if (!config.containsKey(name)) { + if (!config[name].is()) { return fallback; } return config[name]; @@ -80,7 +80,7 @@ void configPutUint64_t(const char *name, uint64_t value) { } uint8_t configGetUint8_t(const char *name, uint8_t fallback) { - if (!config.containsKey(name)) { + if (!config[name].is()) { return fallback; } return config[name]; @@ -97,7 +97,7 @@ void configPrint() { info("Config (%s):", lastChangeMillis == 0 ? "PERSISTED" : "TRANSIENT"); for (JsonPair pair: config.as()) { const char *key = pair.key().c_str(); - const JsonVariant &value = pair.value(); + const JsonVariant& value = pair.value(); char valueStr[64]; if (strcmp(key, "WIFI_PKEY") == 0) { diff --git a/lib/patrix/wifi.cpp b/lib/patrix/wifi.cpp index d686b30..8afe244 100644 --- a/lib/patrix/wifi.cpp +++ b/lib/patrix/wifi.cpp @@ -50,7 +50,6 @@ void wifiConnect() { sntp_stop(); if (otaInitialized) { - ArduinoOTA.end(); otaInitialized = false; } mqttDisconnect(); @@ -195,7 +194,7 @@ time_t getTime() { return epochSeconds; } -void correctTime(time_t &value) { +void correctTime(time_t& value) { if (timeSet && value < MIN_EPOCH_SECONDS) { value = getTime() - preTimeOffset + value; } diff --git a/platformio.ini b/platformio.ini index c44677b..fe60be1 100644 --- a/platformio.ini +++ b/platformio.ini @@ -7,6 +7,7 @@ usb_speed = 921600 ota_protocol = espota monitor_port = /dev/ttyUSB0 monitor_speed = 115200 +board_build.filesystem = littlefs monitor_filters = esp32_exception_decoder WIFI_SSID = HappyNet WIFI_PKEY = 1Grausame!Sackratte7 @@ -57,12 +58,26 @@ upload_protocol = ${COMMON.ota_protocol} platform = espressif8266 board = esp12e framework = ${COMMON.framework} +board_build.filesystem = ${COMMON.board_build.filesystem} monitor_port = ${COMMON.monitor_port} monitor_speed = ${COMMON.monitor_speed} monitor_filters = esp8266_exception_decoder lib_deps = ${COMMON.lib_deps} build_flags = -D FERMENTER -D HOSTNAME=\"Fermenter\" -D WIFI_SSID=\"${COMMON.WIFI_SSID}\" -D WIFI_PKEY=\"${COMMON.WIFI_PKEY}\" -D OTA_PASSWORD=\"OtaAuthPatrixFermenter\" -D BOOT_DELAY=true -D DEBUG_LOG=false +[env:FermenterUSB] +;upload_port = ${COMMON.usb_port} +;upload_speed = ${COMMON.usb_speed} +platform = espressif8266 +board = esp12e +framework = ${COMMON.framework} +board_build.filesystem = ${COMMON.board_build.filesystem} +monitor_port = ${COMMON.monitor_port} +monitor_speed = ${COMMON.monitor_speed} +monitor_filters = esp8266_exception_decoder +lib_deps = ${COMMON.lib_deps} +build_flags = -D FERMENTER -D HOSTNAME=\"Fermenter2\" -D WIFI_SSID=\"${COMMON.WIFI_SSID}\" -D WIFI_PKEY=\"${COMMON.WIFI_PKEY}\" -D OTA_PASSWORD=\"OtaAuthPatrixFermenter\" -D BOOT_DELAY=true -D DEBUG_LOG=false + [env:Greenhouse] ;upload_port = 10.0.0. ;upload_flags = --auth=OtaAuthPatrixGreenhouse diff --git a/src/Fermenter/Fermenter.cpp b/src/Fermenter/Fermenter.cpp index 9141f77..02128cc 100644 --- a/src/Fermenter/Fermenter.cpp +++ b/src/Fermenter/Fermenter.cpp @@ -1,16 +1,66 @@ #if defined(FERMENTER) || defined(TEST8266) #include +#include + #include "FermenterData.h" #include "FementerDisplay.h" #include "FermenterPID.h" #include "FermenterSensor.h" +#include "ESPAsyncWebServer.h" Cache cache; +AsyncWebServer server(80); + +void httpGet(AsyncWebServerRequest *request) { + JsonDocument json; + json["currentCelsius"] = temperature; + json["targetCelsius"] = target; + + char buffer[250]; + serializeJson(json, buffer, sizeof buffer); + request->send(200, "application/json", buffer); +} + +void change(AsyncWebServerRequest *request, double delta) { + target = max(0.0, min(40.0, target + delta)); + info("HTTP: target set to: %.1f%cC", target, char(176)); + httpGet(request); +} + +void httpUp(AsyncWebServerRequest *request) { + change(request, +0.5); +} + +void httpDown(AsyncWebServerRequest *request) { + change(request, -0.5); +} + +void httpNotFound(AsyncWebServerRequest *request) { + if (request->method() == HTTP_OPTIONS) { + request->send(200); + } else { + request->send(404, "text/plain", F("Not found")); + } +} + +void httpSetup() { + DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*"); + DefaultHeaders::Instance().addHeader("Access-Control-Allow-Methods", "GET, POST, PUT"); + DefaultHeaders::Instance().addHeader("Access-Control-Allow-Headers", "Content-Type"); + server.on("/get", httpGet); + server.on("/up", httpUp); + server.on("/down", httpDown); + server.onNotFound(httpNotFound); + server.serveStatic("/", LittleFS, "/http/"); + server.begin(); +} + void patrixSetup() { sensorSetup(); pidSetup(&temperature); + httpSetup(); } void patrixLoop() {