diff --git a/hotwater.ino b/hotwater.ino index ca75a79..73d4037 100644 --- a/hotwater.ino +++ b/hotwater.ino @@ -27,10 +27,14 @@ IPAddress subnet(MY_NET); #define TCP_PORT 15000 #define T_UPDATE_INTERVAL 1000 +#define MODE_OFF 0 +#define MODE_ON 1 + #define REGISTER_TARGET_T 0 #define REGISTER_HYSTERESIS 1 #define REGISTER_CUR_TEMP 2 #define REGISTER_CUR_STATE 3 +#define REGISTER_MODE 4 ModbusIP mb; OneWire oneWire(TEMP_SENSOR_PIN); @@ -45,6 +49,7 @@ int t_target = 7000; int hyst = 200; int cur_t = 0; int cur_state = 0; +int mode = 1; bool TryLoad(char *filename) { @@ -54,6 +59,8 @@ bool TryLoad(char *filename) t_target = atoi(s.c_str()); s = f.readStringUntil('\n'); hyst = atoi(s.c_str()); + s = f.readStringUntil('\n'); + mode = atoi(s.c_str()); f.close(); if (t_target == 0) return false; return true; @@ -71,6 +78,7 @@ void SaveTo(char *filename) if (!f) return; f.println(t_target); f.println(hyst); + f.println(mode); f.close(); } @@ -114,6 +122,7 @@ void setup() mb.addHreg(REGISTER_HYSTERESIS, hyst); mb.addHreg(REGISTER_CUR_TEMP, cur_t); mb.addHreg(REGISTER_CUR_STATE, cur_state); + mb.addHreg(REGISTER_MODE, mode); // sensor.begin(); sensor.setResolution(12); @@ -141,10 +150,15 @@ void loop() mb.task(); t_target = mb.Hreg(REGISTER_TARGET_T); hyst = mb.Hreg(REGISTER_HYSTERESIS); + mode = mb.Hreg(REGISTER_MODE); if (cur_t < t_target - hyst) cur_state = 1; else if (cur_t > t_target + hyst) cur_state = 0; mb.Hreg(REGISTER_CUR_STATE, cur_state); - digitalWrite(RELAY_PIN, cur_state); + if (mode == MODE_OFF) + { + cur_state = 0; + } + digitalWrite(RELAY_PIN, cur_state); if (u) { SaveState(); @@ -157,11 +171,13 @@ void loop() lcd.print((cur_t) / 100.0, 2); lcd.print(" ("); lcd.print(t_target / 100); - lcd.print(")"); + lcd.print(") "); + if (mode == MODE_ON) lcd.print("ON"); + else lcd.print("OFF"); lcd.setCursor(0, 1); lcd.print("S: "); lcd.print(cur_state); - lcd.print("WiFi: "); + lcd.print(" WiFi: "); lcd.print(WiFi.status()); } mb.Hreg(REGISTER_TARGET_T, t_target);