RSS блога
Подписка
Устрашающе умный выключатель
Недавно я писал статью про радиовыключатели. Ну что ж, пора написать про их начальника. Встречайте, умный хаб! В начале это было дешевое wi-fi реле на основе bk7231. Теперь эта штука может управлять светом в половине дома и напичкана сверхсовременными решениями по самое не могу. Какие возможности открывает платформа ESPHome на HomeAssistant и как их применить на практике я расскажу прямо под катом!
В принципе, философия прописана в статье про сенсорные радиовыключатели, но кратко пройдемся еще раз. Умный дом построен на платформе HomeAssistant. Среди устройств есть как многофункциональные (хабы), так и выполняющие простейшие функции (slave-устройства). Над всеми ними стоит локальный сервер умного дома.
Никаких китайских управляющих серверов с задержкой в полминуты, никакой зависимости от щедрот корпораций (и их санкций), никакого компрометирования тайны личной жизни и сливов данных хакерам. Все прозрачно, чисто и быстро. А еще дешево. Конечно, есть и минусы. Например, радио и ИК-приборы не защищены от хакеров-любителей. Пока что…
Теперь к делу! На руки мне попалось вот такое умное wifi-реле.
Я решил сделать на его основе управление освещением на кухне, но «с небольшими доработками».
По заводу это крайне простое устройство. Оно состоит из блока питания на 5V, который питает реле и через стабилизатор на 3.3V wifi-чип. Блок находится прямо под чипом, который присобачен на переходной плате.
А что это у нас за чип? Маркировка чипа — WB2S. Интернет сообщает, что данный чип семейства OpenBeken bk7231t является pin-to-pin аналогом другого известного чипа умных устройств — ESP8266.
Как известно, ESP8266 отлично совместим с ESPHome — платформой, на которой можно делать вполне себе продвинутые умные устройства, совместимые с HomeAssistant (локальный умный дом). Ранее в коммерческие умные устройства поголовно пихали esp-шки, но прогресс не стоит на месте (шутка), и на их место стали пихать чипы OpenBeken. Как говорилось выше, отличия между модулями минимальные, да только так же просто они не прошиваются… Не прошивались!
С недавних пор разработчик ESPHome добавил поддержку данных чипов, а с ними и вменяемый способ взаимодействия с этими устройствами. Теперь любой коммерческий обрубок можно превратить в универсальный контроллер, сейчас покажу как.
Есть два способа прошить устройство на чипах OpenBeken в ESPHome. Первый способ подойдет тем, кто любит возиться с консолью и пакетными зависимостями. Имя ему CloudCutter. Необходимо установить данный пакет на сервер умного дома, воспользовавшись SSH-соединением. Опуская подробности, скажу, что настроив CloudCutter, все устройства, подключившиеся к сети можно будет прошить прямо по воздуху, немного помучав консоль.
Второй способ состоит в прошивке TTL-программатором, и требует пайки. Его-то я и выбрал. Прошивка довольно проста. Добавляем устройство через веб-интерфейс ESPHome, что позволит нам скомпилировать прошивку. Данную прошивку нужно загрузить, подключив чип к программатору и воспользовавшись программой ItChipTool (ссылка).
Кстати, в один момент антивирус взбесился и удалил программу. Я попытался скачать ее снова, но загрузить он ее опять почему-то не давал. Причем за пару дней до этого все было в порядке. И на 10 винде все работает, а вот 11 барахлит. Пришлось в реестре отрубать антивирус. Скорее всего у вас все будет нормально, но имейте в виду, если захотите попробовать.
Схема подключения программатора стандартная (TX программатора на RX1 чипа, RX программатора на TX1 чипа). Во время прошивки необходимо кратковременно замкнуть выход CEN чипа на GND. Единственно, стоит запитать плату от выделенного источника, потому как работать с голой платой под напряжением 220V небезопасно.
У меня программа все время сыпала ошибкой контрольной суммы, но скорее всего потому, что для чтения логов чипа OpenBeken нужен второй программатор, которого у меня нет. Так или иначе, прошивка была загружена.
Теперь стоит рассказать о том, зачем все затевалось. Идея состояла в том, чтобы управлять светом на основе данных с радарного датчика ld2420, 10 штук которых было куплено на распродаже за 1300 рублей.
Эти датчики могут обнаруживать как подвижные, так и неподвижные объекты, а также расстояние до них. Они могут калиброваться программно и общаются с контроллером по UART-шине.
Также на кухне есть лампочка с ИК-управлением. Для нее была собрана цепь передатчика на ИК-диодах.
В прихожей и туалете недавно были установлены радиореле для управления светом, а также радиовыключатель на батарейках (подробнее в статье). Я решил сделать сделать удаленное управление и для них, потому применил валявшиеся радиомодули SYN480R и SYN115R.
Гулять так гулять! В наличии у меня оказался датчик звука, который я впихнул уже чисто ради интереса.
Как видно, он был немного доработан, чтобы отсеять низкие звуковые частоты. Таким образом реагирует теперь он только на резкие звуки вроде хлопков… Как хлопковый выключатель.
Оставшийся цифровой пин я занял классическим PIR-датчиком. Просто потому, что он достаточно интересно выглядит (имхо). Так-то радарный датчик в разы точнее и лучше.
Когда все было готово, я вспомнил, что вообще-то забыл самое главное — базовый выключатель-то никак не задействован в управлении… Ну не беда, прибегнем к хитрости. Безопасных цифровых пинов не осталось (одни служебные), зато есть аналоговый. Вот такая нехитрая схема позволяет нам определить, нажат выключатель или нет.
А вот общая схема.
Время пайки! Сам модуль пришлось немного изменить. Отсоединил кнопку на модуле, убрав резистор. На ее пине теперь PIR-сенсор. На место светодиода припаял его резистор и вывел через него сигнал на транзистор для ИК-передатчика (резистор оказался как раз тот, что нужно).
Датчики я решил смонтировать на крышке распределительной коробки, вырезав в ней отверстия под PIR-сенсор и IR-диоды.
Также я распечатал декоративную крышку, потому что могу.
Провода я собрал в косу и соединил с модулем WB2S. Напаял делитель напряжения ADC прямо на модуль в виде двух резисторов. Чип пришлось выпаять, чтобы подпаяться к выводу на другой стороне платы. Потом запаял все обратно.
Поскольку с модификацией прежней крышкой он не закрывался, я распечатал новую.
Пришло время устанавливать все в коробку. Рисовать коробку мне лень, а фото внутренностей вам мало что скажет, поэтому просто замечу, что подключение не отличается от заводского. Разве что теперь выключатель подсоединен к аналоговому входу. В сборе выглядит… Ну вы видели.
Я ни слова не сказал о прошивке, потому что я ей и не панировал до этого заниматься — ведь я могу в любой момент прошить хаб прямо по воздуху. Так я думал, зашивая пробную прошивку. На деле я сильно пожалел, что не попробовал сделать этого раньше.
В этой прошивке есть один небольшой изъян. Вы его видите? Дам вам пару минут на размышление. Синтаксис довольно простой, и… Да ладно, короче, здесь не указан uart_id для подключения к радарному сенсору. «Ну и что же?» — спросите вы. А то, что он вешает радар на тот же UART1, на котором висит связь с хабом. После залития этой прошивкой ни управлять хабом, ни прошить его по воздуху не выйдет. Поэтому добавляем ма-а-аленькую строчку…
А мне же пришлось снимать хаб и прошивать его программатором еще раз…
И вот перед нами готовый хаб. Можно потыкать выключателем с телефона. Можно посмотреть на всякие сенсоры. Но что он реально умеет?
Чтобы раскрыть его возможности, нам нужны автоматизации. Во-первых, автоматизируем свет через радарный сенсор, при этом оставив управление с выключателя (принудительное отключение света по выключателю). Для этого нам нужен параметр Presenсe и данные с аналогового сенсора (у нас он отвечает за выключатель). Скрипт для включения по присутствию выходит примерно такой:
Выключение более примитивное:
Пока что подумываю сделать еще автоподсветку ночью, если идти в туалет. Но для этого нужно еще пару хабов, чтобы отслеживать присутствие в других комнатах.
Кроме того, на другом моем хабе из статьи про управления жалюзи есть датчик освещенности. Его также можно использовать в автоматизации освещения.
Также я могу отслеживать нажатие радиовыключателя, поскольку в хабе есть приемник 433 МГц. Планирую взять еще парочку, чтобы с их помощью активировать различные сценарии освещения.
В другой статье я делал управляемые по радиоканалу штору, которые можно легко активировать этим хабом.
А еще хлопковый датчик, ИК-трансмиттер, PIR… В следующих статьях я покажу еще один самодельный хаб, а также настрою сложные автоматизации на основе датчиков нескольких хабов. Новый год обещает быть интересным! Если же вам показалась вся эта возня с автоматизацией и кодом муторной, вы всегда можете воспользоваться услугами интеллектуальных чат-ботов. Просто рассказываете, что вам нужно, а он генерирует весь необходимый код.
И помните:
В принципе, философия прописана в статье про сенсорные радиовыключатели, но кратко пройдемся еще раз. Умный дом построен на платформе HomeAssistant. Среди устройств есть как многофункциональные (хабы), так и выполняющие простейшие функции (slave-устройства). Над всеми ними стоит локальный сервер умного дома.
Никаких китайских управляющих серверов с задержкой в полминуты, никакой зависимости от щедрот корпораций (и их санкций), никакого компрометирования тайны личной жизни и сливов данных хакерам. Все прозрачно, чисто и быстро. А еще дешево. Конечно, есть и минусы. Например, радио и ИК-приборы не защищены от хакеров-любителей. Пока что…
Теперь к делу! На руки мне попалось вот такое умное wifi-реле.
Я решил сделать на его основе управление освещением на кухне, но «с небольшими доработками».
По заводу это крайне простое устройство. Оно состоит из блока питания на 5V, который питает реле и через стабилизатор на 3.3V wifi-чип. Блок находится прямо под чипом, который присобачен на переходной плате.
А что это у нас за чип? Маркировка чипа — WB2S. Интернет сообщает, что данный чип семейства OpenBeken bk7231t является pin-to-pin аналогом другого известного чипа умных устройств — ESP8266.
Как известно, ESP8266 отлично совместим с ESPHome — платформой, на которой можно делать вполне себе продвинутые умные устройства, совместимые с HomeAssistant (локальный умный дом). Ранее в коммерческие умные устройства поголовно пихали esp-шки, но прогресс не стоит на месте (шутка), и на их место стали пихать чипы OpenBeken. Как говорилось выше, отличия между модулями минимальные, да только так же просто они не прошиваются… Не прошивались!
С недавних пор разработчик ESPHome добавил поддержку данных чипов, а с ними и вменяемый способ взаимодействия с этими устройствами. Теперь любой коммерческий обрубок можно превратить в универсальный контроллер, сейчас покажу как.
Есть два способа прошить устройство на чипах OpenBeken в ESPHome. Первый способ подойдет тем, кто любит возиться с консолью и пакетными зависимостями. Имя ему CloudCutter. Необходимо установить данный пакет на сервер умного дома, воспользовавшись SSH-соединением. Опуская подробности, скажу, что настроив CloudCutter, все устройства, подключившиеся к сети можно будет прошить прямо по воздуху, немного помучав консоль.
Второй способ состоит в прошивке TTL-программатором, и требует пайки. Его-то я и выбрал. Прошивка довольно проста. Добавляем устройство через веб-интерфейс ESPHome, что позволит нам скомпилировать прошивку. Данную прошивку нужно загрузить, подключив чип к программатору и воспользовавшись программой ItChipTool (ссылка).
Кстати, в один момент антивирус взбесился и удалил программу. Я попытался скачать ее снова, но загрузить он ее опять почему-то не давал. Причем за пару дней до этого все было в порядке. И на 10 винде все работает, а вот 11 барахлит. Пришлось в реестре отрубать антивирус. Скорее всего у вас все будет нормально, но имейте в виду, если захотите попробовать.
Схема подключения программатора стандартная (TX программатора на RX1 чипа, RX программатора на TX1 чипа). Во время прошивки необходимо кратковременно замкнуть выход CEN чипа на GND. Единственно, стоит запитать плату от выделенного источника, потому как работать с голой платой под напряжением 220V небезопасно.
У меня программа все время сыпала ошибкой контрольной суммы, но скорее всего потому, что для чтения логов чипа OpenBeken нужен второй программатор, которого у меня нет. Так или иначе, прошивка была загружена.
Теперь стоит рассказать о том, зачем все затевалось. Идея состояла в том, чтобы управлять светом на основе данных с радарного датчика ld2420, 10 штук которых было куплено на распродаже за 1300 рублей.
Эти датчики могут обнаруживать как подвижные, так и неподвижные объекты, а также расстояние до них. Они могут калиброваться программно и общаются с контроллером по UART-шине.
Также на кухне есть лампочка с ИК-управлением. Для нее была собрана цепь передатчика на ИК-диодах.
В прихожей и туалете недавно были установлены радиореле для управления светом, а также радиовыключатель на батарейках (подробнее в статье). Я решил сделать сделать удаленное управление и для них, потому применил валявшиеся радиомодули SYN480R и SYN115R.
Гулять так гулять! В наличии у меня оказался датчик звука, который я впихнул уже чисто ради интереса.
Как видно, он был немного доработан, чтобы отсеять низкие звуковые частоты. Таким образом реагирует теперь он только на резкие звуки вроде хлопков… Как хлопковый выключатель.
Оставшийся цифровой пин я занял классическим PIR-датчиком. Просто потому, что он достаточно интересно выглядит (имхо). Так-то радарный датчик в разы точнее и лучше.
Когда все было готово, я вспомнил, что вообще-то забыл самое главное — базовый выключатель-то никак не задействован в управлении… Ну не беда, прибегнем к хитрости. Безопасных цифровых пинов не осталось (одни служебные), зато есть аналоговый. Вот такая нехитрая схема позволяет нам определить, нажат выключатель или нет.
А вот общая схема.
Время пайки! Сам модуль пришлось немного изменить. Отсоединил кнопку на модуле, убрав резистор. На ее пине теперь PIR-сенсор. На место светодиода припаял его резистор и вывел через него сигнал на транзистор для ИК-передатчика (резистор оказался как раз тот, что нужно).
Датчики я решил смонтировать на крышке распределительной коробки, вырезав в ней отверстия под PIR-сенсор и IR-диоды.
Также я распечатал декоративную крышку, потому что могу.
Провода я собрал в косу и соединил с модулем WB2S. Напаял делитель напряжения ADC прямо на модуль в виде двух резисторов. Чип пришлось выпаять, чтобы подпаяться к выводу на другой стороне платы. Потом запаял все обратно.
Поскольку с модификацией прежней крышкой он не закрывался, я распечатал новую.
Пришло время устанавливать все в коробку. Рисовать коробку мне лень, а фото внутренностей вам мало что скажет, поэтому просто замечу, что подключение не отличается от заводского. Разве что теперь выключатель подсоединен к аналоговому входу. В сборе выглядит… Ну вы видели.
Я ни слова не сказал о прошивке, потому что я ей и не панировал до этого заниматься — ведь я могу в любой момент прошить хаб прямо по воздуху. Так я думал, зашивая пробную прошивку. На деле я сильно пожалел, что не попробовал сделать этого раньше.
Код хаба
esphome:
name: kitchen-hub
friendly_name: Kitchen Hub
bk72xx:
board: wb2s
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "!secret_key"
ota:
- platform: esphome
password: "!secret_pass"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Kitchen-Hub Fallback Hotspot"
password: "DWdZyVB9NEJ4"
captive_portal:
uart:
tx_pin: P11
rx_pin: P10
baud_rate: 115200
ld2420:
remote_transmitter:
# IR передатчик
- pin: PWM1
carrier_duty_percent: 50%
id: ir_transmitter
# RF433 передатчик
- pin: PWM2
carrier_duty_percent: 100%
id: rf_transmitter
remote_receiver:
pin: PWM3
dump: rc_switch
text_sensor:
- platform: ld2420
fw_version:
name: LD2420 Firmware
- platform: template
name: ${friendly_name}_uptime
lambda: |-
int seconds = (id(uptime_sec).state);
int days = seconds / (24 * 3600);
seconds = seconds % (24 * 3600);
int hours = seconds / 3600;
seconds = seconds % 3600;
int minutes = seconds / 60;
seconds = seconds % 60;
return { (String(days) +" д. " + String(hours) +" ч. " + String(minutes) +" мин.").c_str() };
icon: mdi:clock
update_interval: 113s
sensor:
- platform: ld2420
moving_distance:
name : Moving Distance
- platform: uptime
name: ${devicename}_uptime
id: uptime_sec
internal: true
- platform: wifi_signal
name: ${devicename}_WiFi_Signal"
update_interval: 60s
- platform: adc
pin: ADC3
name: "Kitchen Switсh"
update_interval: 0.3s
binary_sensor:
- platform: ld2420
has_target:
name: Presence
- platform: gpio
pin: PWM0
name: "PIR Sensor"
device_class: motion
- platform: gpio
pin: PWM5
name: "Clap Sensor"
filters:
- invert:
select:
- platform: ld2420
operating_mode:
name: Operating Mode
number:
- platform: ld2420
presence_timeout:
name: Detection Presence Timeout
min_gate_distance:
name: Detection Gate Minimum
max_gate_distance:
name: Detection Gate Maximum
# See "Number" section below for detail
gate_select:
name: Select Gate to Set
still_threshold:
name: Set Still Threshold Value
move_threshold:
name: Set Move Threshold Value
button:
- platform: ld2420
apply_config:
name: Apply Config
factory_reset:
name: Factory Reset
restart_module:
name: Restart Module
revert_config:
name: Undo Edits
switch:
- platform: template
name: Hall Button
turn_on_action:
then:
- remote_transmitter.transmit_rc_switch_raw:
transmitter_id: rf_transmitter
code: '000010000001111011110111'
protocol: 1
repeat:
times: 10
wait_time: 0s
- delay: 5s
turn_off_action:
then:
- remote_transmitter.transmit_rc_switch_raw:
transmitter_id: rf_transmitter
code: '111110010001111000000110'
protocol: 1
repeat:
times: 10
wait_time: 0s
- delay: 5s
optimistic: True
- platform: gpio
pin: PWM4
name: "Kitchen Main Light"
В этой прошивке есть один небольшой изъян. Вы его видите? Дам вам пару минут на размышление. Синтаксис довольно простой, и… Да ладно, короче, здесь не указан uart_id для подключения к радарному сенсору. «Ну и что же?» — спросите вы. А то, что он вешает радар на тот же UART1, на котором висит связь с хабом. После залития этой прошивкой ни управлять хабом, ни прошить его по воздуху не выйдет. Поэтому добавляем ма-а-аленькую строчку…
id: uart_ld2420
А мне же пришлось снимать хаб и прошивать его программатором еще раз…
И вот перед нами готовый хаб. Можно потыкать выключателем с телефона. Можно посмотреть на всякие сенсоры. Но что он реально умеет?
Чтобы раскрыть его возможности, нам нужны автоматизации. Во-первых, автоматизируем свет через радарный сенсор, при этом оставив управление с выключателя (принудительное отключение света по выключателю). Для этого нам нужен параметр Presenсe и данные с аналогового сенсора (у нас он отвечает за выключатель). Скрипт для включения по присутствию выходит примерно такой:
alias: Управление светом на основе выключателя и присутствия
description: Включение света, если ток меньше 1.1 В и присутствие.
trigger:
- platform: state
entity_id: binary_sensor.kitchen_hub_presence
to: "on"
- platform: numeric_state
entity_id: sensor.kitchen_hub_kitchen_swit_h
below: 1.1
condition:
- condition: numeric_state
entity_id: sensor.kitchen_hub_kitchen_swit_h
below: 1.1
- condition: state
entity_id: binary_sensor.kitchen_hub_presence
state: "on"
action:
- entity_id: switch.kitchen_hub_kitchen_main_light
action: switch.turn_on
mode: single
Выключение более примитивное:
alias: Выключение света выключателем
description: Выключение света, если ток больше 1.1 В.
trigger:
- platform: numeric_state
entity_id: sensor.kitchen_hub_kitchen_swit_h
above: 1.1
action:
- entity_id: switch.kitchen_hub_kitchen_main_light
action: switch.turn_off
mode: single
Пока что подумываю сделать еще автоподсветку ночью, если идти в туалет. Но для этого нужно еще пару хабов, чтобы отслеживать присутствие в других комнатах.
Кроме того, на другом моем хабе из статьи про управления жалюзи есть датчик освещенности. Его также можно использовать в автоматизации освещения.
Также я могу отслеживать нажатие радиовыключателя, поскольку в хабе есть приемник 433 МГц. Планирую взять еще парочку, чтобы с их помощью активировать различные сценарии освещения.
В другой статье я делал управляемые по радиоканалу штору, которые можно легко активировать этим хабом.
А еще хлопковый датчик, ИК-трансмиттер, PIR… В следующих статьях я покажу еще один самодельный хаб, а также настрою сложные автоматизации на основе датчиков нескольких хабов. Новый год обещает быть интересным! Если же вам показалась вся эта возня с автоматизацией и кодом муторной, вы всегда можете воспользоваться услугами интеллектуальных чат-ботов. Просто рассказываете, что вам нужно, а он генерирует весь необходимый код.
И помните:
Будущее
Осталось в прошлом
Самые обсуждаемые обзоры
+152 |
3205
71
|
На esp32s3 говорят даже Linux умельцы ставят)
wiki.osll.ru/doku.php/etc:users:jcmvbkbc:linux-xtensa:esp32s3
Даже S3 или C6 с маттером уже ставят ставят.
Модули ESP32-C3 на том же Али примерно по $1,60-$2,00 можно найти. А там сразу дюжина IO, нормальный PWM и прочие радости.
Если ESP-01 уже есть в наличии с покупок многолетней давности, то можно понять. Но для новых проектов закупаться ESP-01 очень сомнительно. Экономия 50 рублей? Но ради каких плюшек?
Я перестал покупать ESP8266 уже года как три-четыре назад. У меня есть в закромах несколько ESP-12, но даже их использовать я не собираюсь.
Если мне выходов хватает, то использую эти C3. Если не хватает, то беру ESP32-S3-DevKitC-1.
Как простой вариант можно в коробке поставить переключатель который замкнёт цепь в обход контроллера. Так хоть легко восстановить тупую работу можно вручную, например на время техобслуживания вайфая или обновления сервера.
Либо перенести автоматизацию на устройство, так можно уменьшить точки отказа, останется только чип. Более сложных вариантов тоже много.
Код локального управления прилагаю:
Вряд ли что более существенное… это эе не хирургия и не РВСН