Блог

Добавляем ума съемной квартире

К удобствам умного дома привыкаешь довольно быстро.

Но так уж вышло, что сейчас живем на съемной квартире, естественно с совковой проводкой.

Для того, чтоб сделать квартиру умнее были установлены лампы от Sonoff B1, которые отлично управлялись с помощью телефона и разумеется, что для их работы выключатель всегда должен быть включен. А для того, чтоб включить лампу выключателем, приходилось выключать и включать заново. Поднадоело...

Для начала поставил малинку возле роутера с mosquitto и пришлось перешить лампы на прошивку tasmota. Настроил homebridge, подключил лампы через плагин homebridge-sonoff-tasmota-http.

"accessories": [ { "accessory": "SonoffTasmotaHTTP", "name": "Первая лампочка", "hostname": "192.168.80.115" }, { "accessory": "SonoffTasmotaHTTP", "name": "Вторая лампочка", "hostname": "192.168.80.252" }, { "accessory": "SonoffTasmotaHTTP", "name": "Третья лампочка", "hostname": "192.168.80.253" } ]

Заработало! Теперь лампы управляются не только локально, но и через интернет, но выключатель по прежнему постоянно включен.Имея в наличии ESP8266-01 было принято решение сделать умный выключатель по mqtt (так как прокладывать заново проводку в съемной квартире не вариант). Сняв старый выключатель для люстры в зале обнаружил три провода (выключатель был двухклавишный). Фаза, которая идет со щитка и два провода от ламп. Было принято решение, управлять люстрой с помощью выключателя с одной клавишей (обычный выключатель-кнопка без фиксации за 2$). А оставшийся провод использовать для питания самого выключателя (правда пришлось на потолке над люстрой один провод подключить на ноль, чтоб в подрозетник выключателя приходили и фаза, и ноль для питания выключателя).

В результате для ESP8266-01 был написан скетч в Arduino IDE, который при нажатии на кнопку (GPIO2 на землю) отправлял в топик cmnd/livingroom/POWER команду TOGGLE.

#include <GyverButton.h> #include <ESP8266WiFi.h> #include <PubSubClient.h> GButton myButton (2); const char* ssid = "YOUR WI-FI SSID";//put your wifi ssid here const char* password = "YOUR PASS";//put your wifi password here. const char* mqtt_server = "YOUR MOSQUITTO IP"; WiFiClient espClient; PubSubClient client(espClient); long lastMsg = 0; char msg[50]; void setup_wifi() { delay(100); // We start by connecting to a WiFi network Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } randomSeed(micros()); Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void callback(char* topic, byte* payload, unsigned int length) { } //end callback void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Create a random client ID String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); // Attempt to connect //if you MQTT broker has clientID,username and password //please change following line to if (client.connect(clientId,userName,passWord)) if (client.connect(clientId.c_str())) { Serial.println("connected"); //once connected to MQTT broker, subscribe command if any client.subscribe("stat/livingroom/POWER"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } //end reconnect() void setup() { Serial.begin(115200); myButton.setDebounce(100); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); long now = millis(); int status; myButton.tick(); if(myButton.isPress()) { Serial.println("Pressed!"); //publish sensor data to MQTT broker client.publish("cmnd/livingroom/POWER", "TOGGLE"); } }

Все заработало идеально после того, как добавил библиотеку обработки нажатия кнопок от AlexGyver.

Пока что все навесным монтажом, но БП 3.3 вольта и ESP отлично прилипнут на двусторонний скотч к задней стенке выключателя =)

Из дополнительных плюшек - очень минимальная задержка и при отсутствии интернета локально все работает.

P.S.: Возможно кому-то пригодиться как дублирующий выключатель...


Оригинально! Для тех, кто захочет повторить, можно не писать свой скетч, а залить на esp-01 так же тасмоту. Настроив одинаковые топики на люстре и выключателе можно управлять люстрой через выключатель. 


Пробовал настраивать с тасмотой на одинаковые топики - у меня не заработало. Настраивал одинаковые топики, но при нажатии через веб морду на ESP лампа молчала. Хотя если с компа публикую в канал - срабатывали и ESP и лампа( Так что и было принято решение писать свой скетч. Если у вас выйдет - поделитесь результатом. Тасмотой пользоваться намного удобнее. 

Нужно просто в консоле ESP-01 прописать следующее правило:


Rule1 on button1#state do publish cmnd/sonoff/POWER TOGGLE endon


В настройках для ESP-01 можно выбрать конфигурацию Sonoff Basic либо самому прописать на каких пинах что находится. И все, теперь при нажатии на кнопку ESP-01 будет переключаться все, что содержит общий топик на тасмоте cmnd/sonoff, тоесть люстра в данном случае. 

16:00:37 CMD: Rule1 on button1#state do publish cmnd/sonoff/POWER TOGGLE endon


16:00:37 MQT: stat/livingroom/RESULT = {"Rule1":"OFF","Once":"OFF","StopOnError":"OFF","Free":453,"Rules":"on button1#state do publish cmnd/sonoff/POWER TOGGLE endon"}

Подправь еще топик, у тебя он не sonoff, а livingroom. И еще, включи созданное правило. 

Не знаю что я не так делаю - не пашет и все(
16:12:53 CMD: Rule1
16:12:53 MQT: stat/livingroom/RESULT = {"Rule1":"ON","Once":"OFF","StopOnError":"OFF","Free":449,"Rules":"ON button1#state DO Publish cmnd/livingroom/POWER TOGGLE ENDON"}

Ты это на ESP-01 делаешь? На сонофф на люстре полный топик соответствует? Кнопка на esp-01 правильно сконфигурирована с правильным именем? В общем, поразбирайся, если не получится - лучше в чатике все обсудить. 

Спасибо огромное! Тасмота действительно справляется на ура!
Выставляем в настройках модуля Sonoff Basic, правим топик для MQTT и пишем 2 строчки в консоль по очереди:
Rule1 ON

Rule1 ON button1#state DO Publish cmnd/livingroom/POWER TOGGLE ENDON
Кнопка получается у нас должна замыкать GPIO0 и землю)



https://sprut.ai/static/media/cache/00/34/17/5/1559538/44552/1000x_image.png?1569856680" alt="1000x_image.png?1569856680" />https://sprut.ai/static/media/cache/00/34/17/5/1559538/44553/1000x_image.png?1569856684" alt="1000x_image.png?1569856684" />https://sprut.ai/static/media/cache/00/34/17/5/1559538/44554/1000x_image.png?1569856685" alt="1000x_image.png?1569856685" />

Вернуться назад
Вернуться назад