renamed to Greenhouse + code clean

This commit is contained in:
Patrick Haßel 2025-02-14 09:02:06 +01:00
parent 7041a35090
commit df5a7b6c4a
6 changed files with 61 additions and 28 deletions

View File

@ -1,12 +1,12 @@
[env:Helligkeit] [env:Greenhouse]
platform = espressif8266 platform = espressif8266
board = esp12e board = esp12e
framework = arduino framework = arduino
lib_deps = https://github.com/adafruit/Adafruit_TSL2561 lib_deps = https://github.com/adafruit/Adafruit_TSL2561
https://github.com/knolleary/pubsubclient https://github.com/knolleary/pubsubclient
build_flags = -DHOSTNAME=\"Helligkeit\" build_flags = -DHOSTNAME=\"Greenhouse\"
monitor_speed = 115200 monitor_speed = 115200
upload_protocol = espota upload_protocol = espota
upload_port = 10.0.0.160 upload_port = 10.0.0.169
;upload_port = /dev/ttyUSB0 ;upload_port = /dev/ttyUSB0
;upload_speed = 460800 ;upload_speed = 460800

View File

@ -1,6 +1,6 @@
#include "wifi.h"
#include "tsl2561.h"
#include "mqtt.h" #include "mqtt.h"
#include "tsl2561.h"
#include "wifi.h"
void setup() { void setup() {
delay(500); delay(500);

View File

@ -17,7 +17,7 @@ void mqttLoop() {
mqtt.setServer("10.0.0.50", 1883); mqtt.setServer("10.0.0.50", 1883);
if (mqtt.connect(HOSTNAME, HOSTNAME, 0, false, "disconnected\n")) { if (mqtt.connect(HOSTNAME, HOSTNAME, 0, false, "disconnected\n")) {
yield(); yield();
mqttPublish("garten/log", "connected\n"); mqttPublish(HOSTNAME, "connected\n");
MySerial.printf("MQTT connected as \"%s\"\n", HOSTNAME); MySerial.printf("MQTT connected as \"%s\"\n", HOSTNAME);
mqttFailureMillis = 0; mqttFailureMillis = 0;
} else { } else {
@ -27,6 +27,24 @@ void mqttLoop() {
} }
} }
void mqttPublish(const char *topic, const int32_t value, const char *unit) {
if (!isTimeSet()) {
return;
}
char buffer[200];
snprintf(buffer, sizeof buffer, R"({"timestamp": %lld, "value": %d, "unit": "%s"})", time(nullptr), value, unit);
mqttPublish(topic, buffer);
}
void mqttPublish(const char *topic, const uint32_t value, const char *unit) {
if (!isTimeSet()) {
return;
}
char buffer[200];
snprintf(buffer, sizeof buffer, R"({"timestamp": %lld, "value": %d, "unit": "%s"})", time(nullptr), value, unit);
mqttPublish(topic, buffer);
}
void mqttPublish(const char *topic, const float value, const char *unit) { void mqttPublish(const char *topic, const float value, const char *unit) {
if (!isTimeSet()) { if (!isTimeSet()) {
return; return;

View File

@ -7,11 +7,15 @@
void mqttLoop(); void mqttLoop();
void mqttPublish(const char *topic, int32_t value, const char *unit);
void mqttPublish(const char *topic, uint32_t value, const char *unit);
void mqttPublish(const char *topic, float value, const char *unit); void mqttPublish(const char *topic, float value, const char *unit);
void mqttPublish(const char *topic, const char *payload); void mqttPublish(const char *topic, const char *payload);
class MySerialClass : public Stream { class MySerialClass final : public Stream {
PubSubClient& mqtt; PubSubClient& mqtt;
@ -31,7 +35,7 @@ public:
Serial.begin(115200); Serial.begin(115200);
} }
size_t write(uint8_t data) override { size_t write(const uint8_t data) override {
Serial.write(data); Serial.write(data);
if (bufferWrite < bufferLast) { if (bufferWrite < bufferLast) {
*bufferWrite++ = data; *bufferWrite++ = data;
@ -46,7 +50,7 @@ public:
mqtt.publish(HOSTNAME, "\n### LOG BUFFER OVERFLOW BY %d BYTES ###\n"); mqtt.publish(HOSTNAME, "\n### LOG BUFFER OVERFLOW BY %d BYTES ###\n");
overflow = 0; overflow = 0;
} }
mqtt.publish(HOSTNAME, (const char *) buffer); mqtt.publish(HOSTNAME, reinterpret_cast<const char *>(buffer));
bufferWrite = buffer; bufferWrite = buffer;
*bufferWrite = 0; *bufferWrite = 0;
due = false; due = false;

View File

@ -1,11 +1,13 @@
#include "tsl2561.h" #include "tsl2561.h"
#include "mqtt.h" #include "mqtt.h"
#include <Wire.h>
#include <Adafruit_Sensor.h> #include <Adafruit_Sensor.h>
#include <Adafruit_TSL2561_U.h> #include <Adafruit_TSL2561_U.h>
#include <Wire.h>
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345); #define TSL2561_INTERVAL_MS 5000
auto tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT);
void sensorSetup() { void sensorSetup() {
if (tsl.begin()) { if (tsl.begin()) {
@ -18,19 +20,22 @@ void sensorSetup() {
} }
void sensorRead() { void sensorRead() {
sensors_event_t event; uint16_t broadband;
if (!tsl.getEvent(&event)) { uint16_t ir;
tsl.getLuminosity(&broadband, &ir);
const auto illuminance = tsl.calculateLux(broadband, ir);
if (illuminance == 65536) {
MySerial.printf("TSL2561: Failed to read.\n"); MySerial.printf("TSL2561: Failed to read.\n");
sensorSetup(); sensorSetup();
} else { } else {
mqttPublish("garten/helligkeit", event.light, "lux"); mqttPublish("garden/illuminance", illuminance, "lux");
} }
} }
void sensorLoop() { void sensorLoop() {
unsigned long now = millis(); const auto now = millis();
static unsigned long last = 0; static unsigned long last = 0;
if (last == 0 || now - last >= 2000) { if (last == 0 || now - last >= TSL2561_INTERVAL_MS) {
last = max(1UL, now); last = max(1UL, now);
sensorRead(); sensorRead();
} }

View File

@ -1,26 +1,31 @@
#include <TZ.h>
#include <ArduinoOTA.h>
#include "wifi.h" #include "wifi.h"
#include <ArduinoOTA.h>
#include <TZ.h>
#include "mqtt.h" #include "mqtt.h"
bool wifiConnected = false; #define WIFI_TIMEOUT_MS 10000
#define WIFI_SSID "HappyNet"
#define WIFI_PASSWORD "1Grausame!Sackratte7"
#define NTP_SERVER "107.189.12.98" /* pool.ntp.org */
bool timeSet = false; auto wifiConnected = false;
unsigned long wifiSince = 0; auto timeSet = false;
unsigned long wifiConnectBeginMillis = 0;
void wifiConnect() { void wifiConnect() {
wifiSince = max(1UL, millis()); wifiConnectBeginMillis = max(1UL, millis());
WiFi.setHostname(HOSTNAME); WiFi.setHostname(HOSTNAME);
WiFi.begin("HappyNet", "1Grausame!Sackratte7"); WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
configTime(TZ_Europe_Berlin, "107.189.12.98"); configTime(TZ_Europe_Berlin, NTP_SERVER);
ArduinoOTA.begin(); ArduinoOTA.begin();
yield(); yield();
} }
void timeLoop() { void timeLoop() {
const time_t now = time(nullptr); const auto now = time(nullptr);
const time_t nowHour = now / 3600; const auto nowHour = now / 3600;
static unsigned long lastHour = 0; static unsigned long lastHour = 0;
if (!timeSet) { if (!timeSet) {
if (now > 1700000000) { if (now > 1700000000) {
@ -43,7 +48,7 @@ void wifiLoop() {
wifiConnected = false; wifiConnected = false;
MySerial.printf("WiFi disconnected.\n"); MySerial.printf("WiFi disconnected.\n");
wifiConnect(); wifiConnect();
} else if (wifiSince == 0 || millis() - wifiSince >= 10000) { } else if (wifiConnectBeginMillis == 0 || millis() - wifiConnectBeginMillis >= WIFI_TIMEOUT_MS) {
WiFi.disconnect(); WiFi.disconnect();
yield(); yield();
wifiConnect(); wifiConnect();
@ -51,6 +56,7 @@ void wifiLoop() {
} else { } else {
if (!wifiConnected) { if (!wifiConnected) {
wifiConnected = true; wifiConnected = true;
wifiConnectBeginMillis = 0;
MySerial.printf("WiFi connected as \"%s\" (%s)\n", HOSTNAME, WiFi.localIP().toString().c_str()); MySerial.printf("WiFi connected as \"%s\" (%s)\n", HOSTNAME, WiFi.localIP().toString().c_str());
} }
timeLoop(); timeLoop();
@ -73,4 +79,4 @@ bool isWifiConnected() {
bool isTimeSet() { bool isTimeSet() {
return timeSet; return timeSet;
} }