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() {