воскресенье, 22 ноября 2020 г.

Управление освещением для кухни на ESPHome с подключением к Home Assistant

 


        В данной статье описан модуль самостоятельного изготовления устройства для управления освещением на кухне с часами и датчиками движения, температуры и влажности в корпусе от старого спутникового тюнера.

    Дисплей отображает текущее время (берется с Home Assistant, а оно свое время синхронизировано со временем в интернете) 51 секунду и текущую температуру 9 секунд. Потом все повторяется.

    Со времени захода солнца и до полуночи если выключен основной свет в кухне, то при наличии движения свет в софитах включается и через 30 секунд после прекращения движения выключается. 

Комплектующие:

Спутниковый тюнер (корпус, дисплей, светодиоды, сетевой шнур)

Блок питания 12В 5А Aliexpress

DC-DC преобразователь Aliexpress

N-Мосфет CEP6060 Aliexpress

Реле SRA 12VDC – Aliexpress 

Монтажная плата 70х90 Aliexpress

Модуль Wemos D1 mini Aliexpress

Датчик движения AM312 Aliexpress

Датчик температуры и влажности DHT22 Aliexpress

Оптопары PC817 – 2шт Aliexress

Транзистор S8050 Aliexpress

Резисторы 180 Ом – 2шт

                     300 Ом – 1шт

                     10 кОм – 3шт

                     1.2кОм – 1шт

                     22к – 1шт

Диоды 1N4148 – 2шт


Также в офлайне были приобретены плафоны (3шт.) и лампочки MR16 (3шт.)

 

       Основой для данного устройства послужил старый спутниковый тюнер, купленный на olx.ua за 50грв (чуть менее 2$).

 

Из него я позаимствовал корпус, сетевой шнур и плату с дисплеем:

 

Плата представляет собой кнопки (я их не использовал), светодиоды (для подключения были выпаяны резисторы R1 и R2) и индикатор с микросхемой Winrise HBS588: 

 

      В крайнем случае данную плату вполне можно заменить двумя светодиодами и модулем tm1637 с Aliexpress:

 

Схема устройства:

 

      Канал Out2 собранный на реле резервный, в автоматизации не задействован.

О замене деталей:

1) Как я писал ранее дисплей можно заменить на модуль tm1637

2) DHT22 можно заменить на DHT11, AM2302, RHT03

3) Мосфет любой N-канальный, например CEP6060L, IRLZ44N, IRF530N и т.д.


Собран на макетной плате 70х90мм. Расположение деталей:

 

Скачать lay можно тут

Устройство в собранном виде:

 

 

Используемые выводы Wemos D1:

 

Профиль ESPHome:

esphome:
  name: kitchen
  platform: ESP8266
  board: d1_mini

wifi:
  ssid: "******"
  password: "********"
      # Static IP
  manual_ip:
    static_ip: 192.168.1.136
    gateway: 192.168.1.1
    subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Kitchen Fallback Hotspot"
    password: "********"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: "********"

ota:
  password: "********"


web_server:
  port: 80
  
time:
  - platform: homeassistant
    id: homeassistant_time

# Текущие координаты населенного пункта для вычисления времени захода и восхода Солнца
sun:
  latitude: 47.901661
  longitude: 33.451202

text_sensor:
#  Version Text Sensor
#  Датчик отображающий версию прошивки
  - platform: version
    name: "Kitchen ESPHome Version"

# Датчики времени восхода и захода Солнца
  - platform: sun
    name: Sun Next Sunrise
    type: sunrise
  - platform: sun
    name: Sun Next Sunset
    type: sunset

display:
    platform: tm1637
    id: tm1637_display
    clk_pin: GPIO12 # D6
    dio_pin: GPIO13 # D7
    update_interval: 500ms
    # Каждую минуту 9 секунд показывать температуру, а в останое время - текущее время
    lambda: |-
      if (id(homeassistant_time).now().second > 50) {
        it.printf(0, "%.1f", id(temp_dht22).state);
        it.print(3,"~");
      } else {
        static int i = 0;
        i++;
        if ((i % 2) == 0)
          it.strftime("%H.%M", id(homeassistant_time).now());
        else
          it.strftime("%H%M", id(homeassistant_time).now());
      }


output:
# Светодиод индикаторный, красный
  - platform: esp8266_pwm
    id: kichen_red_led
    pin:
      number: GPIO5 # D1

  - platform: esp8266_pwm
    id: kichen_led_pwd
    pin:
      number: GPIO14  # D5  

switch:
  - platform: gpio
    name: "Relay"
    pin: GPIO4 # D2
    id: relay

light:
  - platform: monochromatic
    name: "Red kichen LED"
    output: kichen_red_led
    id: red_l
    
  - platform: monochromatic
    name: "Kichen LED Out"
    output: kichen_led_pwd
    id: Light_1


binary_sensor:
  - platform: gpio
    pin: GPIO16 # D0
    name: "kitchen_motion"
    device_class: motion
    id: kichen_motion
    on_press:
      - if:
          condition:
              - sun.is_below_horizon:
              - binary_sensor.is_off: light_on
              - lambda: |-
                  return id(homeassistant_time).now().hour > 14;
          then:
            - light.turn_on: Light_1
# По сигналу с PIR датчика включаем и выкоючаем красный светодиод
      - light.turn_on: red_l
    on_release:
      - light.turn_off: red_l 
    
      
  - platform: template
    name: temp_motion
    lambda: 'return id(kichen_motion).state;'
    filters:
      - delayed_off: 30s # или, например 1min
    on_release:
      - if:
          condition:
              - light.is_on: Light_1
          then:
            - light.turn_off: Light_1  

  - platform: homeassistant
    name: "Light From Home Assistant"
    entity_id: binary_sensor.kichen_light
    id: light_on

sensor:
  - platform: dht
    pin: GPIO2 # D4
    temperature:
      name: "Living Room Temperature"
      id: temp_dht22
    humidity:
      name: "Living Room Humidity"
    update_interval: 10s
#  WiFi Signal Sensor
#  Датчик отображающий уровень сигнала Wifi
  - platform: wifi_signal
    name: "kitchen WiFi Signal"
    update_interval: 60s
#  Uptime Sensor
#  Датчик отображающий время работы
  - platform: uptime
    name: "kitchen WiFi Signal"
  

 

Отображение в Home Assistant:




       Для определения времени захода солнца используются координаты Вашего дома. Прописываются они в строке:

sun:
  latitude: 47.901661
  longitude: 33.451202

Координаты можно узнать, указав место дома на google карте:


     Время, в течение которых свет включен после срабатывания датчика движения задается в строке:

- delayed_off: 30s # или, например 1min

     Для того, чтоб свет автоматически включался только тогда, когда выключен общий свет на кухне с home assistant считывается binary_sensor.kichen_light (on – когда общий свет в кухне включен, off – когда выключен)

     Для его создания из выключателя (switch) в home Assistant нужно создать виртуальный выключатель, который запрещает одновременное включение основного света и софитов:

input_boolean:
      kichen_or:
         name: kichen OR
         icon: mdi:food-variant

Добавляем его в ui-lovelace.yaml:

    cards:
      - type: entities
        show_header_toggle: false
        entities:
          - entity: input_boolean.kichen_or
            name: Кухня - свет или софиты
            secondary_info: last-changed
            icon: 'mdi:floor-lamp-dual'


 

И далее создаем binary_sensor.kichen_light

binary_sensor:
    # Датчик включения света в кухне
    - platform: template
      sensors:
        kichen_light:
          value_template: >-
            {{ is_state('switch.sonoff_t0eu3c_relay_3', 'on') 
               and is_state('input_boolean.kichen_or', 'on')   }}

Вот как все это выглядит на кухне:

 

На все адекватные вопросы постараюсь ответить в комментариях.

2 комментария:

  1. а почему бы не сделать инфо часы на max7219 https://aliexpress.ru/item/4001131640516.html
    будет заметнее часы и можно выводить разную инфу из НА, например температуры в комнатах.

    ОтветитьУдалить
    Ответы
    1. Можно конечно. Просто в моем случае я использовал корпус от тюнера, а в нем был уже встроенный дисплей. Поэтому я решил его задействовать. Основная цель была управление освещением, а дисплей это вторично.
      Ддя max7219 нужен другой корпус, в тюнер он просто не влезет.

      Удалить