From 2554c35090e001f7d962d09309eb0fa5fc5a1184 Mon Sep 17 00:00:00 2001 From: Fisch Date: Sun, 29 Jun 2025 19:25:17 +0200 Subject: [PATCH] add valve and pump --- include/wifi_functions.h | 68 ++++++++++++++++++++++++++++++++++++++++ platformio.ini | 12 +++++-- src/main.cpp | 63 +++++++++++++++++++++++++++++++++++-- 3 files changed, 138 insertions(+), 5 deletions(-) diff --git a/include/wifi_functions.h b/include/wifi_functions.h index 1f199c2..4de4c12 100644 --- a/include/wifi_functions.h +++ b/include/wifi_functions.h @@ -7,6 +7,9 @@ #include "wifi_settings.h" #include "helpfunctions.h" +#if defined(RELAISCOUNT) || defined(VALVECOUNT) +#include "pump.h" +#endif bool force_ec_measurement=false; @@ -32,6 +35,7 @@ bool enableTiming=true; bool publishValueTimed(String topic,float value,uint8_t decimals,mqttValueTiming &mqttvt,unsigned long loopmillis); void publishValue(String topic,float value,uint8_t decimals); void publishInfo(String topic,String text); +bool isInt(String str); void connect() { Serial.print("checking wifi..."); @@ -57,9 +61,25 @@ void connect() { }else{ Serial.println("\nconnected!"); client.subscribe((String)client_id+"/sendall"); + #ifdef EC_CALIBRATION_POLYNOM client.subscribe((String)client_id+"/ec/trigger"); + #endif client.subscribe((String)client_id+"/errorack"); client.subscribe((String)client_id+"/reboot"); + + #ifdef RELAISCOUNT + client.subscribe((String)client_id+"/pump"); + #endif + #ifdef VALVECOUNT + client.subscribe((String)client_id+"/pump1"); + client.subscribe((String)client_id+"/pump2"); + client.subscribe((String)client_id+"/pump3"); + client.subscribe((String)client_id+"/pump4"); + client.subscribe((String)client_id+"/pump5"); + client.subscribe((String)client_id+"/pump6"); + client.subscribe((String)client_id+"/pump7"); + client.subscribe((String)client_id+"/pump8"); + #endif } @@ -73,10 +93,12 @@ void messageReceived(String &topic, String &payload) { sendallnext_flag=true; Serial.println("Send all values next time"); } + #ifdef EC_CALIBRATION_POLYNOM if (topic==((String)client_id+"/ec/trigger") && payload=="true") { force_ec_measurement=true; Serial.println("Forced EC Measurement"); } + #endif if (topic==((String)client_id+"/errorack") && payload=="true") { //error acknowledge valueError=false; Serial.println("Reset value error flag"); @@ -86,6 +108,44 @@ void messageReceived(String &topic, String &payload) { delay(100); ESP.restart(); } + + #if defined(VALVECOUNT) || defined(RELAISCOUNT) + if (topic.startsWith((String)client_id+"/pump")) { + + if (isInt(payload)){ + int duration=payload.toInt(); //duration in seconds + + if (duration>0 && duration<=10*60) { + String valveidStr=topic.substring( ((String)client_id+"/pump").length() ); + + if (valveidStr.length()==0) { //topic is "/pump" without number + //Turn on just the pump for duration time + Serial.print("Turning on just the pump for "); Serial.println(duration); + enableRelais(1,duration*1000); //Only relais 1 for pump used at the moment + }else{ + if (isInt(valveidStr)){ + int valveid=valveidStr.toInt(); + //Turn on pump and valve for duration time + Serial.print("Turning on pump and valve "); Serial.print(valveid); Serial.print("for "); Serial.println(duration); + bool res=enableValve(valveid,duration*1000+500); + enableRelais(1,duration*1000); //Only relais 1 for pump used at the moment + if (!res) { + publishInfo("error/pump","failed to set valve"); + } + }else{ + publishInfo("error/pump","topic id not int"); + } + } + }else{ + publishInfo("error/pump","duration too high or low"); + } + + }else{ + publishInfo("error/pump","payload not int"); + } + + } + #endif } bool mqtt_loop(unsigned long loopmillis) { @@ -145,4 +205,12 @@ void publishInfo(String topic,String text) { Serial.print("Publish Topic="); Serial.print((String)client_id+"/"+topic); Serial.print(" Message="); Serial.println(text); } +bool isInt(String str){ + bool isnumeric=true; + for (uint8_t i=0;i