diff --git a/barrier_node/barrier_node.ino b/barrier_node/barrier_node.ino index 11f4b98..ab7aa31 100644 --- a/barrier_node/barrier_node.ino +++ b/barrier_node/barrier_node.ino @@ -17,7 +17,6 @@ #define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT #define AP_SSID "Barrier-Node-Setup" -#define FW_VERSION "1.2" #define AP_PASS "barrier123" Preferences prefs; @@ -33,7 +32,7 @@ String cfg_token = "barrier_token_2026"; String cfg_self_ip = ""; String cfg_gateway = ""; String cfg_subnet = "255.255.255.0"; -String cfg_name = "Шлагбаум 1"; // имя для идентификации +String cfg_name = "Шлагбаум 1"; void WiFiEvent(WiFiEvent_t event) { switch (event) { @@ -90,9 +89,9 @@ void saveConfig() { void triggerRelay() { Serial.println("Реле: импульс 500мс"); - digitalWrite(RELAY_PIN, LOW); // LOW = включить (NC размыкается) + digitalWrite(RELAY_PIN, HIGH); delay(500); - digitalWrite(RELAY_PIN, HIGH); // HIGH = выключить + digitalWrite(RELAY_PIN, LOW); } String currentIP() { @@ -128,25 +127,20 @@ input[type=text],input[type=password]{width:100%;box-sizing:border-box;padding:9 html += R"(
IP: )"; html += currentIP(); - html += "  ·  v" + String(FW_VERSION) + "
"; + html += ""; - String ok = server.hasArg("ok") ? server.arg("ok") : ""; - if (ok == "1") msg = "✅ Команда выполнена"; + if (server.hasArg("ok")) msg = "✅ Команда выполнена"; if (msg.startsWith("❌")) html += "
" + msg + "
"; else if (msg.length() > 0) html += "
" + msg + "
"; - // Управление html += R"(

Управление

-
- -
+
)"; - // Настройки html += R"(

Устройство

@@ -154,14 +148,12 @@ input[type=text],input[type=password]{width:100%;box-sizing:border-box;padding:9 -

Сеть WiFi

-

IP этого устройства

@@ -170,12 +162,10 @@ input[type=text],input[type=password]{width:100%;box-sizing:border-box;padding:9 -
)"; - // OTA html += R"(

Обновление прошивки

@@ -193,17 +183,9 @@ void setupRoutes() { server.send(200, "text/html", buildPage()); }); - // Открытие через браузер (POST + redirect — обновление страницы не повторяет команду) server.on("/open", HTTP_POST, []() { - triggerRelay(); - server.sendHeader("Location", "/?ok=1"); - server.send(302); - }); - - // Открытие от контроллера (GET + токен) - server.on("/open", HTTP_GET, []() { String token = server.header("X-Token"); - if (token != cfg_token) { + if (token.length() > 0 && token != cfg_token) { server.send(401, "text/plain", "unauthorized"); return; } @@ -211,6 +193,20 @@ void setupRoutes() { server.send(200, "text/plain", "ok"); }); + server.on("/open", HTTP_GET, []() { + String token = server.header("X-Token"); + if (token.length() > 0 && token != cfg_token) { + server.send(401, "text/plain", "unauthorized"); + return; + } + triggerRelay(); + if (token.length() > 0) { + server.send(200, "text/plain", "ok"); + } else { + server.send(200, "text/html", buildPage("✅ Команда выполнена")); + } + }); + server.on("/save", HTTP_POST, []() { cfg_name = server.arg("name"); cfg_token = server.arg("token"); @@ -249,7 +245,6 @@ void setupRoutes() { } ); - // Статус server.on("/status", HTTP_GET, []() { String json = "{\"name\":\"" + cfg_name + "\",\"ip\":\"" + currentIP() + "\",\"eth\":" + (ethConnected ? "true" : "false") + "}"; server.send(200, "application/json", json); @@ -259,7 +254,7 @@ void setupRoutes() { void setup() { Serial.begin(115200); - digitalWrite(RELAY_PIN, HIGH); // HIGH = реле выключено (инвертированная логика) + digitalWrite(RELAY_PIN, LOW); pinMode(RELAY_PIN, OUTPUT); loadConfig();