relay1 independent from ohrana, both relays saved

This commit is contained in:
UA1ZBE
2026-07-22 14:09:15 +03:00
parent e68a762e88
commit 1430bba3f4

View File

@@ -39,6 +39,7 @@ DallasTemperature ds18b20(&oneWire);
static bool g_armed = false;
static bool g_hall_alert = false;
static bool g_motion_alert = false;
static bool g_relay1_state = false;
static bool g_relay2_state = false;
static bool g_temp_requested = false;
static unsigned long g_temp_last_request = 0;
@@ -65,11 +66,11 @@ static bool g_startup_msg_sent = false;
static unsigned long g_auto_status_interval = 0;
static unsigned long g_last_auto_status = 0;
struct SecurityConfig { uint32_t magic; uint8_t armed; uint8_t relay2; };
static const uint32_t CFG_MAGIC = 0x53454355;
struct SecurityConfig { uint32_t magic; uint8_t armed; uint8_t relay1; uint8_t relay2; };
static const uint32_t CFG_MAGIC = 0x53454356;
bool saveSecurityConfig() {
SecurityConfig cfg = { CFG_MAGIC, g_armed ? 1 : 0, g_relay2_state ? 1 : 0 };
SecurityConfig cfg = { CFG_MAGIC, g_armed ? 1 : 0, g_relay1_state ? 1 : 0, g_relay2_state ? 1 : 0 };
File f = InternalFS.open(CONFIG_FILE, FILE_O_WRITE);
if (!f) return false;
bool ok = f.write((const uint8_t*)&cfg, sizeof(cfg)) == sizeof(cfg);
@@ -83,7 +84,7 @@ bool loadSecurityConfig() {
if (f.read(&cfg, sizeof(cfg)) != sizeof(cfg)) { f.close(); return false; }
f.close();
if (cfg.magic != CFG_MAGIC) return false;
g_armed = cfg.armed; g_relay2_state = cfg.relay2;
g_armed = cfg.armed; g_relay1_state = cfg.relay1; g_relay2_state = cfg.relay2;
return true;
}
@@ -172,20 +173,20 @@ public:
if (strcmp(cmd, "help") == 0) {
defer_response("help:ohrana on,ohrana off,relay1 on,relay1 off,relay2 on,relay2 off,relay,status,ver,scan,snr,uptime,kontrol,time,reboot");
} else if (strcmp(cmd, "ohrana on") == 0) {
g_armed = true; digitalWrite(PIN_RELAY_1, LOW); saveSecurityConfig(); defer_response("ohrana on ok");
g_armed = true; saveSecurityConfig(); defer_response("ohrana on ok");
} else if (strcmp(cmd, "ohrana off") == 0) {
g_armed = false; digitalWrite(PIN_RELAY_1, HIGH); saveSecurityConfig(); defer_response("ohrana off ok");
g_armed = false; saveSecurityConfig(); defer_response("ohrana off ok");
} else if (strcmp(cmd, "relay1 on") == 0) {
digitalWrite(PIN_RELAY_1, LOW); defer_response("relay1 on ok");
g_relay1_state = true; digitalWrite(PIN_RELAY_1, LOW); saveSecurityConfig(); defer_response("relay1 on ok");
} else if (strcmp(cmd, "relay1 off") == 0) {
digitalWrite(PIN_RELAY_1, HIGH); defer_response("relay1 off ok");
g_relay1_state = false; digitalWrite(PIN_RELAY_1, HIGH); saveSecurityConfig(); defer_response("relay1 off ok");
} else if (strcmp(cmd, "relay2 on") == 0) {
g_relay2_state = true; digitalWrite(PIN_RELAY_2, LOW); defer_response("relay2 on ok");
g_relay2_state = true; digitalWrite(PIN_RELAY_2, LOW); saveSecurityConfig(); defer_response("relay2 on ok");
} else if (strcmp(cmd, "relay2 off") == 0) {
g_relay2_state = false; digitalWrite(PIN_RELAY_2, HIGH); defer_response("relay2 off ok");
g_relay2_state = false; digitalWrite(PIN_RELAY_2, HIGH); saveSecurityConfig(); defer_response("relay2 off ok");
} else if (strcmp(cmd, "relay") == 0) {
char r[32]; snprintf(r, sizeof(r), "relay:1%s 2%s",
digitalRead(PIN_RELAY_1) == LOW ? "on" : "off",
g_relay1_state ? "on" : "off",
g_relay2_state ? "on" : "off");
defer_response(r);
} else if (strcmp(cmd, "status") == 0) {
@@ -309,7 +310,7 @@ void setup() {
InternalFS.begin();
loadSecurityConfig();
if (g_armed) digitalWrite(PIN_RELAY_1, LOW); else digitalWrite(PIN_RELAY_1, HIGH);
digitalWrite(PIN_RELAY_1, g_relay1_state ? LOW : HIGH);
digitalWrite(PIN_RELAY_2, g_relay2_state ? LOW : HIGH);
if (!radio_init()) {