146 lines
3.7 KiB
C++
146 lines
3.7 KiB
C++
#include <header.h>
|
|
#include <ArduinoNvs.h>
|
|
|
|
#include <string>
|
|
//using namespace std;
|
|
extern "C" {
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
}
|
|
|
|
#define MQTT_MOISTURE MQTT_PATH_PUB "moisture"
|
|
#define MQTT_TEMPERATURE MQTT_PATH_PUB "temperature"
|
|
#define MQTT_HUMIDITY MQTT_PATH_PUB "humidity"
|
|
#define MQTT_BRIGHTNESS MQTT_PATH_PUB "brightness"
|
|
|
|
char buffer[16];
|
|
|
|
// Feldkapazität des Bodens in Prozent: Standard ist Humus
|
|
int fieldCapacity = 44;
|
|
// PWP des Bodens in Prozent: Standard ist Humus
|
|
int permanentWiltingPoint = 25;
|
|
// Boden vollständig gesättigt bei (Prozent): Standard ist Humus
|
|
int soilSaturation = 69;
|
|
|
|
void readSensors() {
|
|
float lxValue = readLightSensorValue();
|
|
Serial.print("Light intensity: ");
|
|
Serial.print(lxValue);
|
|
Serial.println(" lx");
|
|
sprintf(buffer, "%f", lxValue);
|
|
publishMessage(MQTT_BRIGHTNESS, buffer);
|
|
|
|
int mstValue = readCapacitiveSoilMoistureSensor();
|
|
Serial.print("Soil moisture: ");
|
|
Serial.println(mstValue);
|
|
sprintf(buffer, "%i", mstValue);
|
|
publishMessage(MQTT_MOISTURE, buffer);
|
|
|
|
float humidityValue = readHumidity();
|
|
Serial.print("Humidity: ");
|
|
Serial.println(humidityValue);
|
|
sprintf(buffer, "%f", humidityValue);
|
|
publishMessage(MQTT_HUMIDITY, buffer);
|
|
|
|
float temperatureValue = readTemperature();
|
|
Serial.print("Temperature: ");
|
|
Serial.println(temperatureValue);
|
|
sprintf(buffer, "%f", temperatureValue);
|
|
publishMessage(MQTT_TEMPERATURE, buffer);
|
|
Serial.print("\n");
|
|
}
|
|
|
|
bool openValve() {
|
|
digitalWrite(PIN_VALVE, HIGH);
|
|
digitalWrite(PIN_LED_G, LOW);
|
|
digitalWrite(PIN_LED_B, HIGH);
|
|
return true;
|
|
}
|
|
|
|
bool closeValve() {
|
|
digitalWrite(PIN_VALVE, LOW);
|
|
digitalWrite(PIN_LED_G, HIGH);
|
|
digitalWrite(PIN_LED_B, LOW);
|
|
return false;
|
|
}
|
|
|
|
void valveTask(void *parameter) {
|
|
unsigned long valveTimeoutTimer = millis();
|
|
bool valveOpen = openValve();
|
|
|
|
while (valveOpen) {
|
|
delay(500);
|
|
int mstValue = readCapacitiveSoilMoistureSensor();
|
|
|
|
if (millis() - valveTimeoutTimer >= MAX_VALVE_TIMEOUT) {
|
|
valveOpen = closeValve();
|
|
}
|
|
// if (mstValue > 80) {
|
|
// valveOpen = closeValve();
|
|
// }
|
|
}
|
|
vTaskDelete(NULL);
|
|
}
|
|
|
|
void toggleValve() {
|
|
xTaskCreate(
|
|
valveTask, /* Task function. */
|
|
"valveTask", /* String with name of task. */
|
|
512, /* Stack size in bytes. */
|
|
NULL, /* Parameter passed as input of the task */
|
|
1, /* Priority of the task. */
|
|
NULL); /* Task handle. */
|
|
}
|
|
|
|
void persistSoilProps(int FC, int PWP, int SAT) {
|
|
Serial.println("persistSoilProps");
|
|
bool f = NVS.setInt("fieldCapacity", FC);
|
|
bool p = NVS.setInt("permanentWilt", PWP);
|
|
bool s = NVS.setInt("soilSaturation", SAT);
|
|
if (f && p && s) {
|
|
Serial.println("Soil properties sucessfully stored.");
|
|
NVS.commit();
|
|
}
|
|
else {
|
|
Serial.println("error occured while trying to persist soil properties");
|
|
}
|
|
}
|
|
|
|
void restoreSoilProps() {
|
|
Serial.println("restoreSoilProps");
|
|
int fc = NVS.getInt("fieldCapacity");
|
|
int pwp = NVS.getInt("permanentWilt");
|
|
int sat = NVS.getInt("soilSaturation");
|
|
if (fc != 0) {
|
|
fieldCapacity = fc;
|
|
}
|
|
if (pwp != 0) {
|
|
permanentWiltingPoint = pwp;
|
|
}
|
|
if (sat != 0) {
|
|
soilSaturation = sat;
|
|
}
|
|
Serial.print(fieldCapacity);
|
|
Serial.print(permanentWiltingPoint);
|
|
Serial.print(soilSaturation);
|
|
}
|
|
|
|
void setupStore() {
|
|
NVS.begin("store");
|
|
restoreSoilProps();
|
|
}
|
|
|
|
void setSoilProperties(int FC, int PWP, int SAT) {
|
|
fieldCapacity = FC;
|
|
permanentWiltingPoint = PWP;
|
|
soilSaturation = SAT;
|
|
persistSoilProps(FC, PWP, SAT);
|
|
Serial.print("new fieldCapacity: ");
|
|
Serial.println(fieldCapacity);
|
|
Serial.print("new permanentWiltingPoint: ");
|
|
Serial.println(permanentWiltingPoint);
|
|
Serial.print("new soilSaturation: ");
|
|
Serial.println(soilSaturation);
|
|
}
|
|
|