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

29 сентября 2019, 20:41

К удобствам умного дома привыкаешь довольно быстро. 
Но так уж вышло, что сейчас живем на съемной квартире, естественно с совковой проводкой. 
Для того, чтоб сделать квартиру умнее были установлены лампы от 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.

1600x_image.png?1569789694

Пока что все навесным монтажом, но БП 3.3 вольта и ESP отлично прилипнут на двусторонний скотч к задней стенке выключателя =)
Из дополнительных плюшек - очень минимальная задержка и при отсутствии интернета локально все работает.
P.S.: Возможно кому-то пригодиться как дублирующий выключатель...


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @Soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Антон Киселёв (Whilser)
    Антон Киселёв (Whilser) отредактировано 8 месяцев назад

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

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

      • Антон Киселёв (Whilser)
        Антон Киселёв (Whilser) отредактировано 8 месяцев назад

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

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

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

        • Дмитрий Брылев (fuzytsfcrew)
          Дмитрий Брылев (fuzytsfcrew) 8 месяцев назад

          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"}

          • Антон Киселёв (Whilser)
            Антон Киселёв (Whilser) 8 месяцев назад

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

            • Дмитрий Брылев (fuzytsfcrew)
              Дмитрий Брылев (fuzytsfcrew) отредактировано 8 месяцев назад
              Комментарий удален
              • Антон Киселёв (Whilser)
                Антон Киселёв (Whilser) 8 месяцев назад

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

                • Дмитрий Брылев (fuzytsfcrew)
                  Дмитрий Брылев (fuzytsfcrew) 8 месяцев назад
                  Спасибо огромное! Тасмота действительно справляется на ура!
                  Выставляем в настройках модуля Sonoff Basic, правим топик для MQTT и пишем 2 строчки в консоль по очереди:
                  Rule1 ON
                  
                  Rule1 ON button1#state DO Publish cmnd/livingroom/POWER TOGGLE ENDON
                  Кнопка получается у нас должна замыкать GPIO0 и землю)

            • Дмитрий Брылев (fuzytsfcrew)
              Дмитрий Брылев (fuzytsfcrew) отредактировано 8 месяцев назад
              Комментарий удален
К списку блогов

Скидки для сообщества

Ноотехника

+375 17 233-25-45
Промокод:
Sprut
Размер скидки:
10%
Действует у всех официальных представителей. Для применение необходимо указать в поле комментария или при звонке менеджеру.

УЮТНЫЙ ДОМ

+7 495 797-21-74
Промокод:
SPRUT
Размер скидки:
5%

Z-Wave Ukraine

+380 68 641 9670
Промокод:
Sprut-UA
Размер скидки:
15%

Интернет-магазин yourhomekit.ru

+7 914 550-51-11
Промокод:
SPRUT-BLG
Размер скидки:
8%
Cамый большой ассортимент в России аксессуаров Apple HomeKit

LifeControl

+7 495 240-81-01
Промокод:
sprut10
Размер скидки:
10%
На весь ассортимент Lifecontrol

Тематические чаты

Похожие записи

05 февраля 2019, 00:29
Строю свой первый дом и рассказываю о муках выбора, проводке под умный дом, оборудовании. 05.09.2019 - лето
25 марта 2019, 05:02
Нативный Homekit на ESP8266 Relay_8CH
19 августа 2019, 20:21
Сервис для изготовления удобной маркировки в электрический щиток
19 апреля 2019, 20:53
Требуется ваше мнение!
26 апреля 2019, 08:32
Обновление Умного зеркала, доработали, причесали, и теперь почти закончили наворачивать функционал зеркала.
20 января 2019, 17:39
Создание очень бюджетной автоматизации рулонных штор
06 февраля 2019, 12:02
Автоматизированное открытие/закрытие окна
31 марта 2019, 11:37
Нативный HomeKit датчик температуры и влажности своими руками самый бюджетный вариант.
16 февраля 2019, 02:12
в процессе разработки