renamed to Greenhouse + code clean
This commit is contained in:
parent
7041a35090
commit
df5a7b6c4a
@ -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
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
20
src/mqtt.cpp
20
src/mqtt.cpp
@ -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;
|
||||||
|
|||||||
10
src/mqtt.h
10
src/mqtt.h
@ -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;
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
28
src/wifi.cpp
28
src/wifi.cpp
@ -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();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user