make a lot of things better

This commit is contained in:
2023-07-05 02:38:18 +02:00
parent e4c5ddb9ab
commit ac995522db
6 changed files with 62 additions and 33 deletions
+2 -1
View File
@@ -15,5 +15,6 @@
#define INT_HALL_PIN 2 #define INT_HALL_PIN 2
#define VALVE_COUNT 12 #define VALVE_COUNT 12
#define MAX_VALVE_OPEN 3
const uint8_t valvePins[VALVE_COUNT] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; const uint8_t valvePins[VALVE_COUNT] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
const char mainTopic[] = "LebennigHuus/Garden/Irrigation"; const char mainTopic[] = "LebennigHuus/Garden/Irrigation/Main";
+25 -17
View File
@@ -16,13 +16,14 @@ Pump::Pump(uint8_t pumpPin, uint8_t pressurePin, uint8_t flowPin, uint8_t ledPin
} }
void Pump::loop() { void Pump::loop() {
this->readSensorValues();
switch (this->state) { switch (this->state) {
case State::Off : case State::Off :
break; break;
case State::On : case State::On :
this->timerStandby = false; this->timerStandby = false;
this->checkSensors(); this->checkSensorsValues();
break; break;
case State::Timer : case State::Timer :
@@ -51,6 +52,10 @@ void Pump::activate(uint32_t duration) {
} }
} }
void Pump::activateWithoutSecurity() {
this->changeState(State::OnStupid);
}
void Pump::stop() { void Pump::stop() {
this->changeState(State::Off); this->changeState(State::Off);
} }
@@ -62,33 +67,36 @@ void Pump::clearError() {
} }
} }
uint16_t Pump::getPressure() { uint32_t Pump::getRunningTime() const {
return 0;
}
uint32_t Pump::getRunningTime() {
if (this->state == State::Off) if (this->state == State::Off)
return 0; return 0;
return (millis() - this->startTime) / 1000; return (millis() - this->startTime) / 1000;
} }
uint16_t Pump::getFlow() { uint32_t Pump::getRemainingTime() const {
return 0; if (this->state != State::Timer)
return 0;
return (this->duration * 60) - ((millis() - this->startTime) / 1000);
} }
uint8_t Pump::getStatus() { void Pump::readSensorValues() {
return (uint8_t) this->state; if (millis() - this->lastMillisReadSensor < Pump::delayReadSensor)
return;
this->lastMillisReadSensor = millis();
//TODO: read pressure
this->pressure = 12;
//TODO: read flow
this->flow = 13;
} }
bool Pump::checkSensors() { bool Pump::checkSensorsValues() {
if (millis() - this->lastMillisCheckSensor < Pump::delayCheckSensor) if (millis() - this->lastMillisCheckSensor < Pump::delayCheckSensor)
return true; return true;
this->lastMillisCheckSensor = millis(); this->lastMillisCheckSensor = millis();
//TODO: read pressure
//TODO: read flow
if (this->flow) { if (this->flow) {
return true; return true;
} }
@@ -161,10 +169,10 @@ void Pump::changeState(State state) {
} }
void Pump::stateTimer() { void Pump::stateTimer() {
if (!this->checkSensors()) if (!this->checkSensorsValues())
return; return;
if (millis() - this->lastMillisTimer < Pump::delayTimer) if (millis() - this->lastMillisTimer < this->delayTimer)
return; return;
this->lastMillisTimer = millis(); this->lastMillisTimer = millis();
@@ -174,7 +182,7 @@ void Pump::stateTimer() {
} }
void Pump::stateStandby() { void Pump::stateStandby() {
this->checkSensors(); this->checkSensorsValues();
if (this->pressure < Pump::maxPressure / 2) { if (this->pressure < Pump::maxPressure / 2) {
if (this->timerStandby) if (this->timerStandby)
this->changeState(State::Timer); this->changeState(State::Timer);
+14 -7
View File
@@ -9,6 +9,7 @@ class Pump {
On = 1, On = 1,
Timer = 2, Timer = 2,
Standby = 3, Standby = 3,
clearErrorHelper = 99,
Error = 100, Error = 100,
OnStupid = 200 OnStupid = 200
}; };
@@ -18,23 +19,27 @@ class Pump {
void loop(); void loop();
void activate(uint32_t duration = 0); void activate(uint32_t duration = 0);
void activateWithoutSecurity();
void stop(); void stop();
void clearError(); void clearError();
uint16_t getPressure(); uint16_t getPressure() const { return this->pressure; }
uint32_t getRunningTime(); uint32_t getRunningTime() const;
uint16_t getFlow(); uint32_t getRemainingTime() const;
uint8_t getStatus(); uint16_t getFlow() const { return this->flow; }
uint8_t getStatus() const { return (uint8_t) this->state; }
State getState() { return this->state; } State getState() const { return this->state; }
private: private:
static const uint8_t delayCheckSensor = 50; static const uint8_t delayCheckSensor = 100;
static const uint8_t delayReadSensor = 33;
static const uint16_t blinkTime = 1000; static const uint16_t blinkTime = 1000;
static const uint16_t maxPressure = 1000; static const uint16_t maxPressure = 1000;
static const uint16_t maxMaxPressureTime = 30000; static const uint16_t maxMaxPressureTime = 30000;
bool checkSensors(); void readSensorValues();
bool checkSensorsValues();
void handlePins(bool state); void handlePins(bool state);
void changeState(State state); void changeState(State state);
void stateTimer(); void stateTimer();
@@ -50,6 +55,7 @@ class Pump {
uint8_t flowPin; uint8_t flowPin;
uint8_t ledPin; uint8_t ledPin;
uint16_t delayTimer = 1000;
uint16_t flow; uint16_t flow;
uint16_t pressure; uint16_t pressure;
@@ -57,5 +63,6 @@ class Pump {
uint32_t duration; uint32_t duration;
uint32_t lastMillisTimer = 0; uint32_t lastMillisTimer = 0;
uint32_t lastMillisCheckSensor = 0; uint32_t lastMillisCheckSensor = 0;
uint32_t lastMillisReadSensor = 0;
uint32_t maxPressureStart = 0; uint32_t maxPressureStart = 0;
}; };
+7 -3
View File
@@ -1,7 +1,7 @@
#include "valve.h" #include "valve.h"
Valve::Valve() { Valve::Valve(uint8_t maxOpen) {
this->maxOpen = maxOpen;
} }
void Valve::loop() { void Valve::loop() {
@@ -37,6 +37,10 @@ void Valve::open(uint8_t valveNumber, uint8_t minutes) {
if (valveNumber >= this->valveCount) if (valveNumber >= this->valveCount)
return; return;
if (this->getNumOfOpen() >= this->maxOpen) {
return;
}
this->valves[valveNumber].duration = minutes; this->valves[valveNumber].duration = minutes;
this->valves[valveNumber].startTime = millis(); this->valves[valveNumber].startTime = millis();
this->setValve(valveNumber, true); this->setValve(valveNumber, true);
@@ -60,7 +64,7 @@ void Valve::closeAll() {
this->close(i); this->close(i);
} }
uint8_t Valve::getNumOfOpen() { uint8_t Valve::getNumOfOpen() const {
uint8_t res = 0; uint8_t res = 0;
for (uint8_t i = 0; i < this->valveCount; i++) for (uint8_t i = 0; i < this->valveCount; i++)
if (this->valves[i].duration) if (this->valves[i].duration)
+4 -2
View File
@@ -13,7 +13,7 @@ class Valve {
uint32_t startTime; uint32_t startTime;
}; };
Valve(); Valve(uint8_t maxOpen);
void loop(); void loop();
@@ -24,7 +24,8 @@ class Valve {
void close(uint8_t valveNumber); void close(uint8_t valveNumber);
void closeAll(); void closeAll();
uint8_t getNumOfOpen(); uint8_t getNumOfOpen() const;
uint8_t getMaxOpen() const { return this->maxOpen; }
uint16_t getTimeLeft(uint8_t valveNumber); uint16_t getTimeLeft(uint8_t valveNumber);
private: private:
@@ -33,6 +34,7 @@ class Valve {
ShiftRegister* shiftRegister = nullptr; ShiftRegister* shiftRegister = nullptr;
ValveData valves[MAX_VALVES]; ValveData valves[MAX_VALVES];
uint8_t maxOpen;
uint8_t valveCount = 0; uint8_t valveCount = 0;
uint16_t loopDelay = 1000; uint16_t loopDelay = 1000;
uint32_t loopLastMillis = 0; uint32_t loopLastMillis = 0;
+10 -3
View File
@@ -33,7 +33,7 @@ const char mqttId[] = "bewaesserungArduino123";
ShiftRegister reg(RCLK_PIN, SRCLK_PIN, SRSER_PIN, 2); ShiftRegister reg(RCLK_PIN, SRCLK_PIN, SRSER_PIN, 2);
Pump pump(SSR_PIN, PRESSURE_PIN, INT_HALL_PIN, STATUS_LED_1_PIN); Pump pump(SSR_PIN, PRESSURE_PIN, INT_HALL_PIN, STATUS_LED_1_PIN);
Valve valves; Valve valves(MAX_VALVE_OPEN);
EthernetClient ethClient; EthernetClient ethClient;
PubSubClient client(ethClient); PubSubClient client(ethClient);
@@ -126,7 +126,11 @@ void callback(char* topic, byte* payload, unsigned int length) {
} else if (doc.containsKey("pump")) { } else if (doc.containsKey("pump")) {
uint8_t mode = doc["pump"]["mode"]; uint8_t mode = doc["pump"]["mode"];
uint8_t duration = doc["pump"]["duration"]; uint8_t duration = doc["pump"]["duration"];
if (mode) if (mode == Pump::State::OnStupid)
pump.activateWithoutSecurity();
else if (mode == Pump::State::clearErrorHelper)
pump.clearError();
else if (mode)
pump.activate(duration); pump.activate(duration);
else else
pump.stop(); pump.stop();
@@ -168,6 +172,7 @@ void sendPumpStatus() {
JsonObject pumpJson = doc.createNestedObject("pump"); JsonObject pumpJson = doc.createNestedObject("pump");
pumpJson["status"] = pump.getStatus(); pumpJson["status"] = pump.getStatus();
pumpJson["duration"] = pump.getRunningTime(); pumpJson["duration"] = pump.getRunningTime();
pumpJson["remaining"] = pump.getRemainingTime();
pumpJson["pressure"] = pump.getPressure(); pumpJson["pressure"] = pump.getPressure();
pumpJson["flow"] = pump.getFlow(); pumpJson["flow"] = pump.getFlow();
@@ -183,10 +188,11 @@ void sendValveStatus(uint8_t valveNumber) {
JsonObject valve = doc.createNestedObject("valve"); JsonObject valve = doc.createNestedObject("valve");
valve["timeLeft"] = valves.getTimeLeft(valveNumber); valve["timeLeft"] = valves.getTimeLeft(valveNumber);
valve["number"] = valveNumber;
char buffer[256]; char buffer[256];
char topic[64]; char topic[64];
sprintf(topic, "%s/valve_%d", mainTopic, valveNumber); sprintf(topic, "%s/valve/%d", mainTopic, valveNumber);
size_t n = serializeJson(doc, buffer); size_t n = serializeJson(doc, buffer);
client.publish(topic, buffer, n); client.publish(topic, buffer, n);
} }
@@ -197,6 +203,7 @@ void sendInfo() {
JsonObject info = doc.createNestedObject("valve"); JsonObject info = doc.createNestedObject("valve");
info["uptime"] = millis() / 1000; info["uptime"] = millis() / 1000;
info["opened"] = valves.getNumOfOpen(); info["opened"] = valves.getNumOfOpen();
info["max"] = valves.getMaxOpen();
char buffer[256]; char buffer[256];
char topic[64]; char topic[64];