From 957987bc6c2a1f420ec4c31d64cb683feac79227 Mon Sep 17 00:00:00 2001 From: Aleksei Date: Wed, 17 Jun 2026 11:29:30 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE?= =?UTF-8?q?=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D1=81=D0=B2=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B4=D0=B8=D0=BE=D0=B4=D0=BE=D0=B2=20=D0=BC=D0=B5?= =?UTF-8?q?=D0=B6=D0=B4=D1=83=20=D0=BF=D1=83=D0=BB=D1=8C=D1=82=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20/peer=5Fled,=20v1.8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- barrier_controller/barrier_controller.ino | 30 ++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/barrier_controller/barrier_controller.ino b/barrier_controller/barrier_controller.ino index c94f90e..4796dc9 100644 --- a/barrier_controller/barrier_controller.ino +++ b/barrier_controller/barrier_controller.ino @@ -19,7 +19,7 @@ #define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT #define AP_SSID "Barrier-Setup" -#define FW_VERSION "1.7" +#define FW_VERSION "1.8" #define AP_PASS "barrier123" Preferences prefs; @@ -81,6 +81,7 @@ void loadConfig() { cfg_self_ip = prefs.getString("self_ip", ""); cfg_gateway = prefs.getString("gateway", ""); cfg_subnet = prefs.getString("subnet", "255.255.255.0"); + cfg_peer_ip = prefs.getString("peer_ip", ""); prefs.end(); } @@ -94,9 +95,19 @@ void saveConfig() { prefs.putString("self_ip", cfg_self_ip); prefs.putString("gateway", cfg_gateway); prefs.putString("subnet", cfg_subnet); + prefs.putString("peer_ip", cfg_peer_ip); prefs.end(); } +void notifyPeer(int btn) { + if (cfg_peer_ip.length() == 0) return; + HTTPClient http; + http.begin("http://" + cfg_peer_ip + "/peer_led?b=" + String(btn)); + http.addHeader("X-Token", cfg_token); + http.GET(); + http.end(); +} + void sendCommand(String ip) { if (!ethConnected && !wifiConnected) { Serial.println("Нет сети!"); @@ -187,6 +198,11 @@ input[type=text]:focus,input[type=password]:focus{outline:none;border-color:#219 +
+

Второй пульт

+ + +

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

@@ -214,6 +230,15 @@ input[type=text]:focus,input[type=password]:focus{outline:none;border-color:#219 } void setupRoutes() { + server.on("/peer_led", HTTP_GET, []() { + String token = server.header("X-Token"); + if (token != cfg_token) { server.send(401, "text/plain", "unauthorized"); return; } + digitalWrite(LED_PIN, HIGH); + lastPress1 = millis(); // блокируем debounce + lastPress2 = millis(); + server.send(200, "text/plain", "ok"); + }); + server.on("/", HTTP_GET, []() { server.send(200, "text/html", buildPage()); }); @@ -236,6 +261,7 @@ void setupRoutes() { cfg_self_ip = server.arg("self_ip"); cfg_gateway = server.arg("gateway"); cfg_subnet = server.arg("subnet"); + cfg_peer_ip = server.arg("peer_ip"); String np = server.arg("pass"); if (np.length() > 0) cfg_pass = np; saveConfig(); @@ -331,6 +357,7 @@ void loop() { digitalWrite(LED_PIN, HIGH); Serial.println("Кнопка 1"); sendCommand(cfg_ip1); + notifyPeer(1); } // Гасим светодиод когда debounce прошёл if (now - lastPress1 < DEBOUNCE || now - lastPress2 < DEBOUNCE) { @@ -344,6 +371,7 @@ void loop() { digitalWrite(LED_PIN, HIGH); Serial.println("Кнопка 2"); sendCommand(cfg_ip2); + notifyPeer(2); } delay(10);