Русский
Русский
English
Статистика
Реклама

Home assistant

Cчетчик газа в Home Assistant без паяльника

16.02.2021 20:15:11 | Автор: admin

Не так давно мне пришел счёт за газ от которого стало не по себе, и я решил интегрировать обычный счетчик газа в свой умный дом на базе Raspberry Pi + Home Assistant, чтобы прогнозировать стоимость расходов и получать предупреждения сразу же как только расход начинает превышать ожидания.

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

Есть довольно интересная статья 2014 года об оптическом снятии показаний с любого счетчика с помощью смартфона, но в ней ни слова ни о Home Assistant вообще ни о его компоненте для оптического распознавания счетчиков в частности.

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

Читая эти и другие статьи (например статью 2018 года про Вотериус, или статью 2020 года Умная хрущёвка на максималках) я понял, что счетчики делятся не а два поколения (offline и online), а на три. Помимо 3-го поколения счетчиков, которое умеет отправлять показания счетчика куда надо, есть еще 2-е, которое само передавать данные по сети не умеет, но снабжено передатчиком импульсов (оптических или магнитных), позволяющим подключить к счетчику модуль, который эти импульсы считывает и передает дальше.

Погуглив свой счетчик газа (им оказался BK-G4) я с радостью обнаружил не только то, что генератор магнитных импульсов в него встроен, но и даже то, что уже есть успешные примеры его интеграции в Home Assistant. Однако перед тем как заказывать специализированный датчик импульсов IN-Z61 (1640р с доставкой), плату esp8266 (788р с доставкой), паяльник, олово, канифоль, ждать пока все это приедет, а потом канифолиться с этим конструктором я решил проверить гипотезу, нельзя ли решить задачу существенно проще и дешевле.

Удача улыбнулась мне, и вместо недели ожидания и нескольких тысяч расходов, я в тот же день интегрировал счетчик в Home Assistant обычным датчиком открытия двери Xiaomi, горсть которых когда-то приобрел на Авито по 600р за штуку.

Стоит заметить, что не снимая корпус с платы датчика, подбор положения в котором датчик справляется со считыванием импульсов требует усилий. Батарейки говорят на долго не хватит, хотя у меня за месяц-два использования не закончилась и новые продаются на AliExpress около 20р за штуку.

Для того чтобы завести счетчик в Home Assistant первым делом я создал сам счетчик в configuration.yaml

counter:  gas_counter:    step: 10

и добавил в automations.yaml автоматизацию которая увеличивает его значение в

- id: '1606010744418'  alias: Gas count  description: ''  trigger:  - entity_id: binary_sensor.openclose_gas    platform: state    from: 'on'    to: 'off'  action:  - data:      entity_id:      - counter.gas_counter    service: counter.increment

Затем добавил в configuration.yaml строку utility_meter: !include utility_meter.yaml, а в файл utility_meter.yaml следующие сущности, собирающие значения счетчика газа по интервалам (месяц, день, час)

gas_monthly:  source: sensor.gas_counter_sensor  cycle: monthly  tariffs:    - singlegas_daily:  source: sensor.gas_counter_sensor  cycle: daily  tariffs:    - singlegas_hourly:  source: sensor.gas_counter_sensor  cycle: hourly  tariffs:    - single

и уже на основе этих сущностей создал сенсоры, которые превращают кубометры в рубли

- platform: template  sensors:    gas_counter_sensor:      friendly_name: "Показания счетика газа"      unit_of_measurement: 'М3'      value_template: "{{ (states('counter.gas_counter') | float) / 1000 }}"      icon_template: mdi:counter- platform: template  sensors:    gas_last_month:      friendly_name: "Стоимость газа (прошлый месяц)"      unit_of_measurement: ''      value_template: "{{ ((state_attr('sensor.gas_monthly_single', 'last_period') | float) / 1000 * 6056.4) | round(2) }}"      icon_template: mdi:cash-100- platform: template  sensors:    gas_this_month:      friendly_name: "Стоимость газа (этот месяц)"      unit_of_measurement: ''      value_template: "{{ ((states('sensor.gas_monthly_single') | float) / 1000 * 6056.4) | round(2) }}"      icon_template: mdi:cash-100- platform: template  sensors:    gas_today:      friendly_name: "Стоимость газа (сегодня)"      unit_of_measurement: ''      value_template: "{{ ((states('sensor.gas_daily_single') | float) / 1000 * 6056.4) | round(2) }}"      icon_template: mdi:cash-100- platform: template  sensors:    gas_yesterday:      friendly_name: "Стоимость газа (вчера)"      unit_of_measurement: ''      value_template: "{{ ((state_attr('sensor.gas_daily_single', 'last_period') | float) / 1000 * 6056.4) | round(2) }}"      icon_template: mdi:cash-100- platform: template  sensors:    gas_this_hour:      friendly_name: "Стоимость газа (текущий час)"      unit_of_measurement: ''      value_template: "{{ ((states('sensor.gas_hourly_single') | float) / 1000 * 6056.4) | round(2) }}"      icon_template: mdi:cash-100- platform: template  sensors:    gas_last_hour:      friendly_name: "Стоимость газа (прошлый час)"      unit_of_measurement: ''      value_template: "{{ ((state_attr('sensor.gas_hourly_single', 'last_period') | float) / 1000 * 6056.4) | round(2) }}"      icon_template: mdi:cash-100- platform: template  sensors:    gas_hour_based_monthly_estimate:      friendly_name: "Прогноз стоимости (час->месяц)"      unit_of_measurement: ''      value_template: "{{ ((state_attr('sensor.gas_hourly_single', 'last_period') | float) / 1000 * 6056.4 * 24 * 30) | int }}"      icon_template: mdi:chart-line-variant- platform: template  sensors:    gas_day_based_monthly_estimate:      friendly_name: "Прогноз стоимости (день->месяц)"      unit_of_measurement: ''      value_template: "{{ ((state_attr('sensor.gas_daily_single', 'last_period') | float) / 1000 * 6056.4 * 30) | int }}"      icon_template: mdi:chart-line-variant

После перезагрузки Home Assistant остаётся только ввести в систему текущее показание счетчика

Подробнее..

Умный дом с нуля своими руками или путешествие длинною в год

19.02.2021 18:05:42 | Автор: admin

Данную статью пишу для думающих стоит оно того или нет и начинающих построение своего умного дома, надеюсь она поможет сделать вам свой выбор. Для тех кто думает я не программист у меня ничего не получится, я тоже, хотя имею техническое (теплоэнергетик) образование, но никогда не работал в IT, не знаю не одного языка программирования. Дорогу осилит идущий. Начнем с рассуждений что такое умный дом, поверьте на слово он не решит все ваших бытовых и семейных проблем, но точно сделает жизнь немного комфортней. Что такое умный дом в моем представлении год назад: 1. Красивый планшет со схемой дома весящий на стане в прихожей с которого можно управлять всем в доме; 2. Управление всем чем можно голосом. Откровение через год планшет не нужен, так как бегать со второго этажа на первый что бы по управлять неудобно. Что бы хорошо работало голосовое управление, требуется установка умной колонки в каждую комнату, когда их две это одно. А когда значительно больше вопрос. Сейчас для меня умный дом это то, что работает само без моего участия, и не требует управления. Все о чем пойдет речь далее сделано мною лично, может можно сделать по другому, может проще и лучше. Но таков путь.

Краткий ликбез

Системы умного дома

1.1 Mi Home

+ красивые сенсоры и устройства; хорошее мобильное приложение; простое построение автоматизаций;

- закрытая экосистема; данные хранятся на облачных серверах; автоматизации работают через облачные сервера.

1.2 Google home

+ это google, интерфейс на высшем уровне;

- закрытая экосистема; автоматизации работают через облачные сервера; в приложении есть поддержка таких решений, о которых вообще не слышал.

1.3 Domoticz

+ открытая экосистема; большое русскоговорящие сообщество; облако через которое ты можешь зайти на свой сервер; язык для автоматизаций blockly - удобный и понятный;

- не которые вещи в нем реализовать очень сложно (или я не разобрался); не успевает обновляться документация; делаешь по написанному в Вики, а не работает, так как все поменялось; частые обновления.

1.4 HomeBridge - для поклонников apple, а так как я сторонник светлой стороны силы, прошел мимо

+ это appale, интерфейс на высшем уровне и работать должно как часы;

- как мне сделать вот так, а вам это не надо мы в appale решили, что вам нужно только так.

1.5 ioBrocker - открыл интерфейс, закрыл и больше не открывал

+ были первооткрывателями много чего, хорошая поддержка многих устройств;

- такой интерфейс в 2020 году преступление.

1.6 MajorDomo - честно говоря как-то прошел мимо

+разработчики наши, мелочь а приятно;

- не знаю.

1.7 Home Assistant - вишенка на торте умного дома

+ открытая экосистема, нормальный интерфейс, который можно настроить самому как угодно, актуальная документация, поддержка всего чего угодно, может интегрироваться с Яндекс Алиса, Mi Home, Google home, HomeBridge, нет ничего не возможного для реализации, автоматизации ограничены только вашей фантазией;

- сложность освоения на первоначальном этапе.

Как вы уже догадались мой выбор пал на Home assistant и далее речь пойдет о нем.

Железо

2.1 Роутер

Я живу в частном секторе и у нас один провайдер местного масштаба, который тянет оптику и всем выдает изделие ZTE F660 два месяца я с ним мучился, каждый день что-то отваливалось и не работало, пока не поменял его на Keenetic Ultra. Все проблемы с отвалами умных устройств как рукой сняло. Так что роутер ключевой элемент умного дома. Цена вопроса зависит от стоимости роутера.

2.2 Сервер

Для работы Home Assistant требуется сервер на котором будут хранится все данные и управляться устройства умного дома. Тут есть несколько путей: можно установить Home Assistant на компьютер, старый ноутбук под Windows или на мини компьютеры под Linux или Ubuntu которых сейчас бескрайнее множество или на NAS. Тут все зависит от вашего желания и возможностей. Так как сервер должен работать в режиме 24/7, то я для себя выбрал вариант Raspberry pi 4b 4Gb. Потому что у него низкое энергопотребление, он без шумный (эксплуатирую в без вентиляторном корпусе). У меня на нем работает Home Assistant и Plex (медиа сервер) в режиме 24/7 уже пол года, проблем с производительностью нет. Но если вы кроме этого хотите использовать какие то еще ресурсы, то советую посмотреть в сторону NUC. Хотя начинал знакомится с системой на Windows 10, но у меня вызывает вопросы ее стабильность с криворукими обновлениями, от которых больше вреда, чем пользы. При использовании Raspberry pi 4b, есть несколько нюансов, должен быть хороший блок питания, который выдает честные 3 А и нельзя устанавливать в без вентиляторном корпусе в закрытые ящики, так как ее рабочая температура около 50 градусов. Цена вопроса Raspberry pi 4b 4Gb около 4 тыс. руб. на Али.

2.3 Стандарты беспроводной связи умных устройств для умного дома

WiFi- он и в Африке WiFi. Для работы нужен WiFi роутер и чтобы устройство умного дома находилось в одной локальной сети с сервером. Большое количестве WiFi устройств особенно видеокамер может влиять на скорость WiFi не умных устройств. Для стабильной работы умного дома нужен хороший WiFi роутер причину описал ранее.

Zigbee- энергоэффективный (устройство может несколько лет работать от одной батарейки) стандарт беспроводной связи, позволяет строить ячеистые надежные сети. Для связи умных устройств Zigbee с сервером умного дома нужен координатор (шлюз). Без него умные устройства работать не будут, нужен именно Zigbee шлюз. В Zigbee несколько поколений стандартов, самые распространенные сейчас 2.0 и 3.0. Будьте внимательны шлюзы с поддержкой Zigbee 2.0 не будут работать с устройствами Zigbee 3.0. Новые Шлюзы Zigbee 3.0. имеют обратную совместимость и будут работать с устройствами старого стандарта.

Bluetooth - энергоэффективный (устройство может несколько лет работать от одной батарейки) стандарт беспроводной связи, последние его разновидности в частности Mesh, так же позволяет строить ячеистые надежные сети. Для связи умных устройств Bluetooth с сервером умного дома нужен координатор (шлюз). Без него умные устройства работать не будут, при чем нужен именно Bluetooth шлюз.

2.4 Координатор или шлюз. Координатором в Home Assistant могут быть

Шлюзы различных производителей Xiaomi , Тuуа, Sonoff и д. р. Работают через облако (китайские сервера). В основном работают с умными устройствами своей экосистемы. Не поддерживают или не полностью поддерживают умные устройства других производителей. Цена вопроса около 2-3 тыс. руб. на Али.

Stick СС2531, СС2538, СС2652, вставляются в usb сервера, работают по протоколу zigbee2mqtt, поддерживают работу с устройствами большого количества различный производителей, поддержку конкретного устройства можно посмотреть у них на сайте. Работают в локальной сети, даже без интернета. Stick СС2531 не поддерживает больше 32 устройств, если планируете больше умных устройств в своей сети, обратите внимание на Stick СС2538, СС2652, они уже поддерживают более 100 устройств. Цена вопроса около 2 тыс. руб. продают их в Telegram.

SLS шлюз отдельно устройство, такое же как шлюзы Xiaomi , Тuуа, Sonoff, но так же работает по протоколу zigbee2mqtt. И работает со большим количеством различных производителей. Работают в локальной сети, даже без интернета. Цена вопроса около 3 тыс. руб. продают их в Telegram.

Мой путь

В конце 2019 года начитавшись статей на различных сайтах про умный дом приобрел стартовый набор Xiaomi для умного дома и один выключатель решил протестировать умный дом у себя в квартире. Все подключил установил Mi Home и счастливый начал эксплуатировать, так как набор был приобретен в Китае на Али, то работать в регионе Россия он отказался и пришлось его настраивать в регионе Китай. И автоматизация работала через китайские сервера, работала громко сказано. Складывалось впечатление, что майор в Китайском КГБ согласовывал включение света в моей квартире. Задержки в автоматизациях доходили до 5 секунд и работали через раз, 5 раз сработает на шестой нет (видно майор не разрешил). Помучавшись неделю, поставил крест на умном доме, снял все датчики и положил в ящик. Тут бы могла история и закончится.

Но в марте 2020 году удалось приобрести частный дом в черновой отделке и решил умному дому быть начал изучать вопрос, перелопатив весь интернет приобрел stick СС2538 и установил Home Assistant на компьютер с Windows 10, сделал копипаст со статей в интернете. И о чудо все заработало задержек нет все включается моментально и работает.

Далее распланировал размещение основного электрооборудования в доме (розетки и выключатели), угадал расположение на 90 процентов, остальное решил купив накладные розетки. Приобрел Raspberry pi 4b 4Gb на Али, купил умные розетки и выключатели Xiaomi (дизайн понравился). Смонтировал все это хозяйство. Установил Home Assistant Raspberry по урокам Alex Kvazis на youtube, кстати огромное ему спасибо на начальном этапе его уроки были не заменимы делал с них полную копию. Так как другой информации взять было неоткуда, есть хорошее русскоязычное сообщество по Home Assistant в Telegram, но на первом этапе и спросить то не понимаешь чего, и на 90% вопросов получал ответ читай документацию. Я ее честно читал но ничего понять не мог, злился. Сейчас понимаю парней, так же сижу в чате и ежедневно одни и те же вопросы повторяются. Так и хочется сказать читайте документацию. На первом этапе очень помог блог https://ivan.bessarabov.ru/, за что спасибо Ивану.

Начал эксплуатировать на stick СС2538, все работало четко и стабильно. Но тут решил купить светильники на али Xiaomi bluetooth mesh красивый дизайн, регулируется яркость и цветовая температура, так как stick не поддерживает данные устройства был куплен шлюз третий версии от Xiaomi. О нем расскажу отдельно благодаря усилиям @AlexxIT и его интеграции Xiaomi Gateway 3 для Home Assistant, данный шлюз превращается в уникальный продукт, позволяет одновременно параллельно работать умным устройствам и в Home Assistant и MiHome, только умные устройства должны быть Xiaomi. Так же Home Assistant с данным шлюзом можно интегрировать с Яндекс Алисой, Google home и HomeBridge. Так же отдельное спасибо хотел сказать @AlexxITон сделал для развития популярности Home Assistant в русскоязычном сообществе очень много, является автором интеграций Sonoff LAN, Yandex.Station, Yandex Smart Home. Но есть ложка дегтя в бочке меда шлюза третий версии от Xiaomi, к сожалению производитель в новых прошивках шлюза даты производства с 10.2020г. закрыл Telnet и теперь без паяльника шлюз в Home Assistant не интегрировать (говорят 10 минут работы и все сделано), но будьте в курсе.

Как вы уже догадались начиная с сентября я переехал на Xiaomi Gateway 3, уже более полугода все работает стабильно, сейчас у меня в эксплуатации 77 устройств Xiaomi, розетки, выключатели, различные датчики.

4. Сейчас уже реализовано

Управления всеми розетками и выключателями кухня

  • управления всеми розетками и выключателями, из любой точки мира

  • автоматизировано освещение туалета, ванной, коридора, прихожей, лестницы;

  • настроено адаптивное освещение, когда автоматически в течении дня меняется яркости и цветовая температура;

Мониторинг погоды

  • мониторинг погоды и микроклимата в доме

  • автоматизировано управление батареями в зависимости от температуры;

Мониторинг сервера

  • мониторинг наличия интернета и сервера;

  • автоматизировано управление подачи воды в зависимости от времени суток;

Датчики безопасности

  • сделаны датчики безопасности и уведомления в телеграмм протечка воды, задымления, загазованность, движение в доме, выключить все розетки, выключить весь свет в доме;

  • уведомления о нежелательных событиях в доме остановился котел, с работка датчиков безопасности;

Учет электроэнергии по группам

  • учет электроэнергии по группам потребителей;

Робот пылесос, увлажнитель

  • интегрированы различные устройства, с возможностью их управления;

  • время прибытия транспорта на остановку;

  • управление умным домом голосовыми командами Алиса и Эй google.

В планах

  • автоматизировать уличное освещение;

  • интегрировать ворота Алю тех в Home assistant;

  • автоматизировать полив растений

5. Где я ошибся

  • Приобретение умных выключателей, а затем умных лампочек. Адаптивный свет это классно, поэтому умные лампочки нужны, а с ними можно было установить глупые возвратные выключатели. Можно было сэкономить.

  • Покупка видеодомофона с камерами с Али, сейчас бы купил ip камеры и интегрировал в Home assistant.

  • Приобретение WiFi видеокамеры Xiaomi внутри дома, которая не интегрируется в Home assistant, сейчас бы купил Reolink.

Заключение

Умный дом повышает комфорт жизни, но требует массу времени и главная проблема превращается в Хобби, получаешь умный дом головного мозга. Сейчас все стабильно работает, а ты сидишь и думаешь а может еще какой датчик куда поставить и чего-то автоматизировать. Плюс главный риск когда все работает хорошо все классно, но в процессе отладки или сбоев у вашей семьи должно быть терпение и готовность к определенным трудностями сколько раз за эти пол года я слышал от супруги, что как я достал с этой автоматизацией, когда в туалете или в ванной отключался свет, пока все отладил. Ну и самое главное должно быть физическое дублирование выключателями.

Это первая моя статья на habr, если тема умного дома интересна пишите в комментариях о чем хотите узнать все расскажу, просто Home assistant целая планета и в одной статье все не рассказать. Какие темы интересны, что хотите узнать подробней, если будет интерес напишу более подробный материал.

Подробнее..

Делаем систему контроля и управления доступом (СКУД) для умного дома

20.02.2021 20:08:41 | Автор: admin

Введение

Примерно год назад я начал готовиться к переезду и собирать прототип умного дома. В качестве системы управления я выбрал наиболее популярное на текущий момент и активно развивающееся решение - Home Assistant. По мере обрастания умного дома датчиками встал вопрос об охранной системе, которая в случае чего поднимет тревогу и сообщит мне (соседям) о незваных гостях. В системе от частных охранных предприятий пока не вижу необходимости, поэтому решил сделать всё сам.

Как это работает: на входной двери размещён датчик открытия, который по протоколу Zigbee сообщает серверу умного дома, что кто-то зашёл в квартиру. Срабатывает сигнализация в "тихом режиме" (событие "triggered" во встроенной интеграции; это никак не проявляется, но идёт обратный отсчёт до запуска сирены). Если за указанное в настройках время не снять блокировку (через ввод кода или NFC-меткой), запустится сирена и световая индикация.

Из чего собрано:

  • ESP32 WROOM DevKit v1 (в теории можно заменить любой ESP, изменив конфиг под неё)

  • RFID/NFC модуль PN532

  • Соединительные провода (6 штук)

  • Напечатанный на 3D-принтере корпус

  • Xiaomi Gateway 2 (который с локальным управлением) я планирую использовать как динамик и световую индикацию

  • Датчик открытия двери от Aqara

  • Опционально можно добавить люстру, LED-ленты, умные колонки и любые другие устройства на ваш вкус, цвет и возможности автоматизаций Home Assistant.

ESP32 WROOM DevKit v1 (30 контактов)ESP32 WROOM DevKit v1 (30 контактов)RFID/NFC модуль PN532. Китайцы скопировали версию от Elechouse.RFID/NFC модуль PN532. Китайцы скопировали версию от Elechouse.

Корпус мне намечал друг, у которого есть 3D-принтер. Хаб и датчики от Xiaomi вынесем за скобки. Остальные элементы покупались на Aliexpress и суммарно обошлись мне в 600 рублей.

Подключение и настройка ESP

Для начала переключим NFC-модуль в режим работы через интерфейс SPI. Ставим первый переключатель в нижнее положение (ближе к цифре 1), а второй - в верхнее (ближе к буквам). Припаиваем гребёнку на 8 контактов и готовим соединительные провода.

Включенный режим I2C и подключенные соединительные проводаВключенный режим I2C и подключенные соединительные провода

Насколько я понял из распиновки, возможно несколько вариантов подключения NFC-модуля к ESP-32: мне было удобнее подключить всё на одну сторону. Если будете использовать другие контакты, внимательно проверяйте конфиг - возможно, он немного изменится.

Распиновка для 30-контактной ESP-32Распиновка для 30-контактной ESP-32

Подключаем модуль следующим образом (слева ESP, справа PN532):

  • GPIO18 - SKC

  • GPIO19 - MSO

  • GPIO23 - MOSI

  • GPIO5 - SS

  • 3V3 - VCC

  • GND - GND

PN532 подключенная к ESP-32PN532 подключенная к ESP-32

На следующем этапе нам нужно установить аддон ESPHome и настроить нашу ESP-32. Подробно расписывать базовые моменты не буду, рекомендую следовать данному видео:

Остановлюсь лишь на итоговом конфиге:

esphome:  name: esp32  platform: ESP32  board: nodemcu-32swifi:  ssid: "My Wi-Fi"  password: "mypassword"  # Enable fallback hotspot (captive portal) in case wifi connection fails  ap:    ssid: "Esp32 Fallback Hotspot"    password: "mypassword"captive_portal:# Enable logginglogger:# Enable Home Assistant APIapi:  password: "mypassword"ota:  password: "mypassword"web_server:  port: 80spi:  clk_pin: GPIO18  miso_pin: GPIO19  mosi_pin: GPIO23pn532_spi:  cs_pin: GPIO5  update_interval: 1sesp32_ble_tracker:switch:  - platform: gpio    name: "ESP LED"    pin:      number: GPIO2      mode: OUTPUTbinary_sensor:  - platform: pn532    uid: 79-EB-08-B4    name: "NFC Card"

Обратите внимание на блоки spi и pn532_spi, где мы указывает контакты подключения. В блоке switch я задействовал светодиод на плате (им можно мигать, например, при поднесении валидной метки), а в блоке binary_sensor создал сущность для Home Assistant (при поднесении карты с указанным uid сенсор переходит в статус true; uid карты можно найти в логах вашей ESP в аддоне ESPHome). Как показали опыты, можно читать RFID-метки, банковские карты и тройку. NFC в моём телефоне нет, но скорее всего и он будет работать.

Компилируем прошивку и выгружаем её на ESP. Проверяем, что всё работает, открыв логи и поднеся к считывателю RFID-метку. Её uid должен отобразиться в логе:

[17:42:35][D][pn532:149]: Found new tag '79-EB-08-B4'

Со стороны ESP всё готово, теперь нужно настроить автоматизации в Home Assistan

Подключение сигнализации в Home Assistant

Для работы в сигнализацией в Home Assistant есть встроенная интеграция и карточка Lovelace. Начнём с интеграции - чтобы её включить, нужно добавить в configuration.yaml следующий блок:

alarm_control_panel:  - platform: manual    code: !secret alarm_pin    code_arm_required: false    # Задержка перед постановкой на охрану    arming_time: 5    # Задержка перед запуском сигнализации    delay_time: 10    # Время сигнализации    trigger_time: 600

Код для разблокировки я вынес в отдельный файл secrets.yaml. Почитать, как он устроен, можно тут.

Поскольку мы тестируем нашу СКУД, arming_time (время до включения режима охраны, за которое вы успеете выйти из квартиры и закрыть дверь) и delay_time (время после срабатывания датчика двери, через которое запустится сирена) зададим как 5 и 10 секунд соответственно. Сохраняем, перезагружаем Home Assistant.

Далее создаём карточку сигнализации в Lovelace, добавив код в нужное вам место ui-lovelace.yaml

- type: alarm-panel  name: Сигнализация  entity: alarm_control_panel.ha_alarm  states:    - arm_away

В entity указываем название объекта, который создался после подключения alarm_control_panel. В states можно указать, какие кнопки будут в карточке: я оставил только "Охрана (не дома)".

Автоматизация

Чтобы связать NFC-метки с нашим умным домом, потребуется создать 5 автоматизаций:

  • Срабатывание сигнализации (запускается, когда мы заходим в квартиру)

  • Включение режима охраны (прикладываем метку и уходим из дома)

  • Отключение режима охраны (прикладываем метку, когда пришли домой)

  • Включение сирены

  • Отключение сирены

Срабатывание сигнализации

В качестве триггера используется датчик открытия двери. Когда дверь открывается при условии, что включен режим охраны, запускается наша автоматизация. В блоке с действиями я задал мигание шлюзом Xiaomi и диодом на ESP-32. Вы можете использовать любые другие действия.

- id: '3-0001'  alias: 'Срабатывание сигнализации'  trigger:    platform: state    entity_id: binary_sensor.158d000446f3fe_contact    to: 'on'  condition:    - condition: state      entity_id: alarm_control_panel.ha_alarm      state: armed_away  action:  - service: alarm_control_panel.alarm_trigger    entity_id: alarm_control_panel.ha_alarm  - repeat:        sequence:          - service: light.turn_on            data:                entity_id: light.gateway_light_44237c82f751                color_name: red                brightness: 255          - service: switch.turn_on            entity_id: switch.esp_led          - delay:                milliseconds: 500          - service: light.turn_off            entity_id: light.gateway_light_44237c82f751          - service: switch.turn_off            entity_id: switch.esp_led          - delay:                milliseconds: 500        until:          condition: or          conditions:          - condition: state            entity_id: alarm_control_panel.ha_alarm            state: armed_away          - condition: state            entity_id: alarm_control_panel.ha_alarm            state: disarmed

Включение режима охраны

Триггер - чтение метки с заданным на этапе настройки ESP uid. Пока мы выходим из квартиры, шлюз мигает оранжевым светом. После того, как включился режим охраны, загорается диод на ESP, а шлюз включает статичный красный свет на 3 секунды и гаснет.

- id: '3-0002'  alias: 'Включение режима охраны'  trigger:    platform: state    entity_id: binary_sensor.nfc_card    to: 'on'  condition:    - condition: state      entity_id: alarm_control_panel.ha_alarm      state: disarmed  action:  - service: alarm_control_panel.alarm_arm_away    entity_id: alarm_control_panel.ha_alarm  - repeat:        sequence:          - service: light.turn_on            data:                entity_id: light.gateway_light_44237c82f751                color_name: orange                brightness: 255          - service: switch.turn_on            entity_id: switch.esp_led          - delay:                milliseconds: 500          - service: light.turn_off            entity_id: light.gateway_light_44237c82f751          - service: switch.turn_off            entity_id: switch.esp_led          - delay:                milliseconds: 500        until:          - condition: state            entity_id: alarm_control_panel.ha_alarm            state: armed_away  - service: switch.turn_on    entity_id: switch.esp_led  - service: light.turn_on    data:        entity_id: light.gateway_light_44237c82f751        color_name: red        brightness: 255  - delay:        seconds: 3  - service: light.turn_off    entity_id: light.gateway_light_44237c82f751

Отключение режима охраны

В этой автоматизации в качестве триггера снова используется RFID-метка. Условием является включенный или включающийся режим охраны. Последний предусмотрен на случай, если собрались уходить из дома, приложили карточку и вспомнили про включенный утюг. При валидной метке коротко включается диод на ESP и зелёная подсветка на шлюзе.

- id: '3-0003'  alias: 'Отключение режима охраны'  trigger:    platform: state    entity_id: binary_sensor.nfc_card    to: 'on'  condition:    condition: or    conditions:    - condition: state      entity_id: alarm_control_panel.ha_alarm      state: armed_away    - condition: state      entity_id: alarm_control_panel.ha_alarm      state: pending  action:  - service: alarm_control_panel.alarm_disarm    data:        entity_id: alarm_control_panel.ha_alarm        code: !secret alarm_pin  - delay:        milliseconds: 100  - service: switch.turn_off    entity_id: switch.esp_led  - service: light.turn_on    data:        entity_id: light.gateway_light_44237c82f751        color_name: green        brightness: 255  - delay:        seconds: 3  - service: light.turn_off    entity_id: light.gateway_light_44237c82f751

Включение сирены

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

- id: '3-0004'  alias: 'Запуск звука сигнализации'  trigger:  - platform: state    entity_id: alarm_control_panel.ha_alarm    to: 'triggered'  action:  - service: xiaomi_aqara.play_ringtone    data:        gw_mac: 44237C82F751        ringtone_id: 0        ringtone_vol: 3

Отключение сирены

От "отключения режима охраны" отличается лишь условием по статусу alarm_control_panel.ha_alarm (здесь triggered) и отключением сирены или другой индикации.

- id: '3-0005'  alias: 'Отключение сигнализации'  trigger:    platform: state    entity_id: binary_sensor.nfc_card    to: 'on'  condition:    - condition: state      entity_id: alarm_control_panel.ha_alarm      state: triggered  action:  - service: alarm_control_panel.alarm_disarm    data:        entity_id: alarm_control_panel.ha_alarm        code: !secret alarm_pin  - service: xiaomi_aqara.stop_ringtone    data:        gw_mac: 44237C82F751  - delay:        milliseconds: 500  - service: switch.turn_off    entity_id: switch.esp_led  - service: light.turn_on    data:        entity_id: light.gateway_light_44237c82f751        color_name: green        brightness: 255  - delay:        seconds: 3  - service: light.turn_off    entity_id: light.gateway_light_44237c82f751

Красивая обёртка

Наверное, очевидно, что две платы без какого-либо корпуса выглядят не очень красиво и безопасно. Я попросил другая спроектировать и напечатать под них корпус. Цвет выбрали белый, чтобы подходил под будущий интерьер. Уже после печати я понял, что белый корпус не гасит свет диодов на ESP, поэтому их можно использовать в автоматизациях. Даже синий диод в условиях коридора должен быть виден.

Основа, на которую ложатся платы, и прищепка (слева) для того, чтобы закрепить PN532Основа, на которую ложатся платы, и прищепка (слева) для того, чтобы закрепить PN532К ESP подключается кабель питания, поэтому она не должна болтаться внутри корпуса.К ESP подключается кабель питания, поэтому она не должна болтаться внутри корпуса.

Ух, наконец-то закончил. Спасибо, что дочитали до конца. Надеюсь, что этот гайд помог вам!

Если возникнут какие-то вопросы, задавайте в комментариях. Постараюсь ответить.

Подробнее..

Немного непортативного домашнего мониторинга, или из чего ещё можно собрать троллейбус

03.03.2021 12:06:10 | Автор: admin
КДПВ Borya_Spec (facebook.com/strangedrawings)КДПВ Borya_Spec (facebook.com/strangedrawings)

Мысль внедрить очередную свистелку в Home Assistant посетила меня, внезапно, в туалете. Бывает, сидишь, залипаешь в любимый информационный ресурс, и вдруг в глазах резко темнеет, и весь твой кругозор сужается до светящегося экранчика телефона. Снова УЗО не выдержал кухонных экспериментов, или, как говорили наши далёкие предки, "пробки выбило". И вот считаешь про себя секунды, в течение которых всё твоё драгоценное оборудование, весь твой любимый зоопарк одноплатников и показометров, противостоит беспросветной тьме силами бездушного куска свинца, именуемого "Источник бесперебойного питания". И, казалось бы, нагрузка невелика, и вроде как статью дочитать успеваешь, и до электрощита добежать, чтобы "автомат" передёрнуть, но всё равно как-то волнительно, вот бы знать, сколько минут еще в запасе осталось?

TL;DR

Далее я покажу и расскажу, как сделать беспроводной портативный роутер Kingston Mobilelite Wireless MLWG2 проводным и непортативным, с возможностью быстро вернуться к базовому состоянию (не стоит зацикливаться на рарности данной модели, руководство универсальное), а также накрутить на него OpenWrt, воткнуть кабель от APC UPS и отправлять данные в Home Assistant.

Дисклеймер: автор не несёт ответственности за сожжённое и закирпиченное вами оборудование, если решились что-то повторить - думайте своей головой. Мне обычно везёт, а повезёт ли вам?

Intro

Итак, задача поставлена: старенький бесперебойник, допустим, "APC Back-UPS ES 700", без особых финансовых затрат желает быть помониторенным и интегрированным в Home Assistant, с последующей привязкой на смену статуса каких-либо событий автоматизации. Задача осложняется достаточно коротким проприетарным шнурком, допустим, "USB-RJ45", который особо далеко не протянешь (неудобство компенсируется практически нулевой стоимостью ИБП, ввиду появления огромного количества оных на вторичном рынке). Нужна маленькая тихая железяка, способная спрятаться под столом, принимать данные по USB, и слать воздухом - под эти цели был выделен портативный роутер, он же "портативная флешка", он же Kingston MobileLite Wireless G2. Немного об MLWG2: не вдаваясь в технические подробности по поводу его внутренностей, устройство представляет собой точку доступа, способную принимать подключения по WiFi, раздавая интернет через другую точку доступа (одним радиомодулем), либо через мобильный "свисток", либо через витую пару. Оснащено крайне ограниченной функционально прошивкой, умеет шарить подключенные флешки через родное мобильное приложение. Приобреталось для временного расширения памяти нерасширяемых устройств Apple, в связи с пандемией актуальность временно утратило.

Железо

Большинство портативных роутеров, оснащенных съёмной батареей, без этой самой батареи включаться и работать отказываются, даже будучи подключенными к источнику постоянного питания. Без понятия, с чем это связано, но держать 24/7 устройство, запитанное от аккумулятора, я посчитал нецелесообразным и местами даже опасным, так как батареи имеют свойство деградировать, вздуваться и воспламеняться.

Kingston MLWG2 без верхней крышки (фото с сайта openwrt.org)Kingston MLWG2 без верхней крышки (фото с сайта openwrt.org)

Самый распространённый (в интернете) способ сделать портативное устройство непортативным - воткнуть или впаять вместо батареи опытным путём подобранный конденсатор, спаяв его с пачкой резисторов, и тем самым обманывая контроллер заряда/разряда, встроенный в роутер. Выглядит крайне ненадёжно, устройство я еще планирую использовать по назначению, а значит обманывать контроллер буду наиболее очевидным способом: подавая в него постоянное напряжение, равное напряжению полностью заряженного аккумулятора. Из устройства была изъята батарея, и путём многократных замеров штангенциркулем, гугления, чтения даташитов, и даже не с первого раза, был идентифицирован и приобретён на Алиэкспресс правильный коннектор с маркировкой JST ZH 5-pin.

Сверху вниз: JST GH 1.25 мм, JST ZH 1.50 мм, оригинальный коннектор и батареяСверху вниз: JST GH 1.25 мм, JST ZH 1.50 мм, оригинальный коннектор и батареяТермистор заменен на резистор 10 кОмТермистор заменен на резистор 10 кОм

Вооружившись мультиметром, удалось определить распиновку коннектора: два красных провода - плюс, два чёрных провода - минус. Средний жёлтый провод показывал сопротивление порядка 10 кОм и был идентифицирован, как термистор. У китайского JST-коннектора были аккуратно срезаны направляющие "рельсы", термистор заменен обычным 10 кОм-резистором, всё аккуратненько спаяно и закрыто в термоусадку.

Готовая связка коннектор - преобразовательГотовая связка коннектор - преобразователь

Полностью заряженный аккумулятор роутера давал напряжение чуть более 4 вольт, значит нужен понижающий преобразователь с 5 вольт. Как нельзя лучше подошёл миниатюрный модуль, известный как DSN-MINI-360 (360 вероятно из-за вращающегося на 360 подстроечника). Пришлось помучиться с капризным подстроечником, дабы понизить напряжение телефонной зарядки до нужных 4 вольт (делать это лучше с тем блоком питания, от которого планируете питать устройство в будущем, учитывая так же, что под нагрузкой напряжение слегка просядет). В итоге роутер благополучно обманулся, показал 100% заряд аккумулятора и без проблем загрузился. Непрерывная работа связки в течение нескольких суток так же не выявила каких-либо проблем. Родное приложение показывает полностью заряженный аккумулятор (при его отсутствии). Конструкция с легкостью возвращается к исходному состоянию.

С 4 вольт без нагрузки просел до 3.86 под нагрузкойС 4 вольт без нагрузки просел до 3.86 под нагрузкой

Прошивка

Kingston MLWG2 имеет официально поддерживаемую сообществом сборку OpenWrt последней (на текущий момент) версии, 19.07.7. Однако способ прошивки здесь слегка нестандартный. Вряд ли кто-то будет это повторять, но интереса ради можно и глянуть, я получил от процесса "колоссальное" удовольствие. Для начала нужно активировать в железяке telnet. К сожалению, я забыл вытащить init-скрипты оригинальной прошивки, но костыль там прописан знатный. Итак, форматируем флешку в FAT32, помещаем в корень сборку OpenWrt (я использовал openwrt-19.07.7-ramips-mt7620-mlwg2-squashfs-sysupgrade.bin из официального репозитория), и пустой текстовый файл с названием "mlwG2_v;telnetd; .x.x.bin" (именно так, без кавычек).

После втыкания флешки в устройство и последующей его перезагрузки, подключившись к создаваемой устройством WiFi-сети, можно подсоединиться telnet-клиентом (логин admin, без пароля, ip устройства захардкожен в прошивке):

telnet 192.168.201.254

Получаем BusyBox:

  (none) login: admin    BusyBox v1.12.1 (2014-09-18 09:46:08 CST) built-in shell (ash)  Enter 'help' for a list of built-in commands.    #

Прошиваем...

mtd_write write /media/USB1/openwrt-19.07.7-ramips-mt7620-mlwg2-squashfs-sysupgrade.bin KernelAmtd_write -r write /media/USB1/openwrt-19.07.7-ramips-mt7620-mlwg2-squashfs-sysupgrade.bin KernelB

После окончания прошивки устройство весело помигает лампочками, потом все три лампочки разом загорятся, и железяка окирпичится. Не будет ни WiFi, ни Ethernet, просто три горящих лампочки.

Вскрываем корпус устройства и на верхней плате справа видим четыре неподписанных пятнышка припоя - это и есть спасительный UART. Запаиваем на него USB-to-TTL конвертер, запускаем эмулятор терминала (под винду я использую PuTTY), подключаемся (COMx:57600,8,n,1).

Белый - TX (R конвертера), зелёный - RX (T конвертера), черный - GND, паял дрожащими рукамиБелый - TX (R конвертера), зелёный - RX (T конвертера), черный - GND, паял дрожащими руками

Видим, что устройство живо, но неправильно сконфигурированы сетевые интерфейсы. Вместо eth0 откуда-то вылез eth0.1, а WiFi вообще отключен. Исправляем несправедливость, отправляем устройство в reboot, и наслаждаемся полностью работоспособной OpenWrt (UART я отпаивать пока не рекомендую, только через него можно сделать failsafe в случае нарушения работоспособности прошивки).

root@OpenWrt:/etc/config# cat network config interface 'loopback'        option ifname 'lo'        option proto 'static'        option ipaddr '127.0.0.1'        option netmask '255.0.0.0'config globals 'globals'        option ula_prefix 'fdf0:a4ca:5192::/48'config interface 'lan'        option type 'bridge'        option ifname 'eth0.1' <--- заменяем на eth0        option proto 'static'        option ipaddr '192.168.1.1'        option netmask '255.255.255.0'        option ip6assign '60'config device 'lan_eth0_1_dev'        option name 'eth0.1'  <-- заменяем на eth0        option macaddr '00:26:b7:09:e9:32'        root@OpenWrt:/etc/config# cat wireless config wifi-device 'radio0'      option type 'mac80211'      option channel '11'      option hwmode '11g'      option path 'platform/10180000.wmac'      option htmode 'HT20'      option disabled '1' <-- убираемconfig wifi-iface 'default_radio0'      option device 'radio0'      option network 'lan'      option mode 'ap'      option ssid 'OpenWrt'      option encryption 'none'

Как подключить OpenWrt в режиме клиента к существующей точке доступа, думаю, писать не стоит, есть подробнейшая официальная документация. Вкратце, через LuCI: Network -> Wireless -> Scan -> Join Network -> Assign firewall-zone = lan. После чего, в целях безопасности, лучше деактивировать интерфейс точки доступа (Mode: Master), продолжая работу с устройством по IP изнутри основной сети (всё-таки написал).

Софт

Для мониторинга ИБП APC используется демон apcupsd, про его интеграцию с Home Assistant уже много где написано, для этого даже плагины не нужны, у меня всё заработало просто через configuration.yml.

Ставим поддержку USB и демона из репозитория:

opkg updateopkg install kmod-usb-hidopkg install apcupsd

Подключаем кабель ИБП в роутер, проверяем, что устройство видно:

root@OpenWrt:/# ls -la /dev/usbdrwxr-xr-x    2 root     root            60 Mar  2 21:10 .drwxr-xr-x    5 root     root          1380 Mar  2 21:10 ..crw-------    1 root     root      180,  96 Mar  2 21:10 hiddev0

Заходим в /etc/apcupsd, бэкапим конфиг apcupsd.conf, заменяя на свой. В минимуме нам достаточно вот этого (говорим, что используем USB-кабель, и будем отдавать данные по сети):

## apcupsd.conf v1.1 ##UPSCABLE usbUPSTYPE usbNETSERVER onNISIP 0.0.0.0NISPORT 3551

Cтартуем демона

/etc/init.d/apcupsd start

Выполняем команду apcaccess и в идеале видим в консоли информацию об ИБП, любуемся полем STATUS: ONLINE. Теперь по адресу роутера (при правильно сконфигурированном файрволе) можно получать инфу от бесперебойника.
С софтом закончено.

root@OpenWrt:/etc/apcupsd# apcaccessAPC      : 001,035,0824DATE     : 2021-03-03 00:23:17 +0300HOSTNAME : OpenWrtVERSION  : 3.14.14 (31 May 2016) unknownUPSNAME  : OpenWrtCABLE    : USB CableDRIVER   : USB UPS DriverUPSMODE  :STARTTIME: 2021-03-03 00:23:15 +0300SHARE    :MODEL    : Back-UPS ES 700STATUS   : ONLINELINEV    : 232.0 VoltsLOADPCT  : 42.0 PercentBCHARGE  : 100.0 PercentTIMELEFT : 31.4 MinutesMBATTCHG : 10 PercentMINTIMEL : 5 MinutesMAXTIME  : 0 SecondsSENSE    : MediumLOTRANS  : 180.0 VoltsHITRANS  : 266.0 VoltsALARMDEL : 30 SecondsBATTV    : 13.5 VoltsLASTXFER : Low line voltageNUMXFERS : 0TONBATT  : 0 SecondsCUMONBATT: 0 Seconds...

Настройка Home Assistant

Тут даже и настраивать ничего не надо, прописываем в configuration.yml, рестартуем:

apcupsd:  host: <IP устройства с apcupsd>  port: 3551sensor:  - platform: apcupsd    resources:     - bcharge     - loadpct     - status     - timeleft     - model     - linev

Получаем готовый набор entities: модель ИБП, состояния (ONLINE, ONBATT, ...), % заряда батареи, % нагрузки, примерное оставшееся время работы от батареи, напряжение в сети (перечень параметров гораздо больше, я взял основные для себя). По результатам тестов, Home Assistant получает состояние бесперебойника где-то в течение 10-40 секунд, обновление показателей идёт где-то раз в 2-3 минуты. В целом, оно того стоило.

Далеко не полный набор сущностей, которые можно вытянуть из демонаДалеко не полный набор сущностей, которые можно вытянуть из демона

Итак, кто дочитал до конца, узнал, что с помощью старого портативного роутера, спрятанного под столом, можно мониторить напряжение в сети и заряд старенького бесперебойника с Авито, а ещё стоит иметь про запас USB-to-TTL конвертер, мало ли, захочется что-нибудь перепрошить. Я же получил некоторое удовольствие от того, что заставил работать валявшуюся без дела железяку, а также без особых усилий получил очередную карточку в Lovelace своего полоумного дома. Спасибо за внимание.

Данные несколько искажены вследствие тестированияДанные несколько искажены вследствие тестирования

Ссылки.

Подробнее..

Умная хрущёвка на максималках. Продолжение

15.06.2020 06:22:39 | Автор: admin
В первой часть статьи я рассказал о том, как оснастить двухкомнатную хрущевку различными датчиками и с их помощью собирать информацию о текущем состоянии квартиры. Во второй части речь пойдет о том, как начать активно управлять всеми доступными системами. Для этого я выполнил:

  • Полную беспроводную автоматизацию всего освещения.
  • Установил кнопку выключить всё.
  • Сделал возможным полное удаленное обесточивание квартиры (включая и сам сервер управления вместе с контроллером) и обратное удаленное включение.
  • Применил электронакладки (устройства поворота) для кранов на воду.


Подъездный щит жилого дома с оборудованием для удаленного обесточивания квартиры

Представленный на фото подъездный электрощит, на мой взгляд, отражает общую идею доступной автоматизации квартиры, заключающуюся в том, что будут заменены или вновь установлены только те элементы электрической схемы, которые требуются для обеспечения работы этой части системы. А в рассматриваемой квартире, расположенной в доме, которому почти полсотни лет, изредка проводился только косметический ремонт. Это значит, что внутриквартирная электрическая проводка, с 70-х годов никогда не менялась полностью и была достаточно изношена. На мой взгляд, это не совсем разумно и даже, возможно, небезопасно, но учитывая то, что полная переделка электропроводки обходится недешево и влечет за собой общий и дорогостоящий ремонт всей квартиры, такой подход являлся скорее обычным для большинства старых советских квартир.

Беспроводная автоматизация всего света


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


Пример типовой классической схемы электропроводки для лампочек

В 2017 году я нашёл двухканальные реле Wifi IoT Relay Board Based on ESP8266 и одноканальные Sonoff Basic WiFi Wireless Switch, а ещё познакомился со свободной прошивкой Tasmota.

В настоящее время существует готовая база знаний о различных заводских реле и датчиках на базе китайских микроконтроллеров ESP8266 с Wi-Fi интерфейсом, которая очень упрощает подбор нужных элементов для автоматизации.

А поскольку при получении всех показаний с датчиков я уже не зависел от облачных сервисов производителей и работал локально только с Home Assistant, то я решил и не начинать с ними общаться. Для беспроводных модулей решил использовать открытую прошивку Tasmota, избавившись от прошивки производителя.


Распределительная коробка в квартире, в которой коммутируются ванная, кухня, коридор и туалет

Однако найденные беспроводные модули были достаточно большого размера и не вписывались в существующие распределительные коробки.
Сами модули стоили недорого, но затраты поджидали меня не их цене, а в стоимости работ электрика и строителей. Электрик определял места коммутации от выключателей в стенах, потому что подключение при постройке дома было сделано по классической схеме с использованием распределительных коробок, где коммутировались провода от выключателя, ламп и со стороны электрощитка.

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


Место в стене подготовленное под установку распределительной коробки большего размера

Ещё обнаружилось, что электрики, почти полсотни лет назад, что-то напутали и схема подключения была некорректная при выключенном выключателе фаза на некоторых лампочках оставалась.


Пробное первое подключение беспроводного модуля

После пробной автоматизации одного светильника, когда я убедился, что всё работает, решил полностью автоматизировать все 7 квартирных светильников. А раз почти все распределительные коробки находились в прихожей квартиры, то решил совместить эту процедуру со сменой обоев и при помощи строителей и электрика сделал некоторую реновацию:

  1. Оставил на старой проводке только электрические розетки в комнатах.
  2. Протянул из электрощита подъезда отдельную кабельную линию под розетки на кухне.
  3. Выполнил отдельную кабельную линию для освещения.
  4. Выполнил отдельные кабельные линии для питания датчиков.
  5. Выполнил отдельную кабельную линию под роутер.


Два двухканальных Wifi IoT Relay Board Based on ESP8266, установленные в стенной распредкоробке (2017 г.)

Я протянул отдельные кабельные линии, а том числе для питания роутера, чтобы при полном обесточивании квартиры роутер мог основаться включенным, обеспечивая обратное удаленное включению квартиры.


Вид распределительной коробки с установленными внутри беспроводными реле и кабельного канала с витыми парами от датчиков после переклейки обоев в прихожей квартиры

В 2017 году я еще использовал OpenHAB и настроил работу связки Home Assistant <-> заводское реле на базе ESP8266 через через MQTT.


Процесс загрузки прошивок на заводские реле на базе ESP8266

Изначально я выбирал из нескольких прошивок, но самое главное достоинство прошивки Tasmota для меня была полная автономность от Wi-Fi даже когда у модуля пропадала связь с сервером, неважно по какой причине может быть проблемы с Wi-Fi или просто сервер завис всегда можно было включить или выключить свет, как обычно, нажатием на физический выключатель то есть пользователь, при желании, даже мог не обращать на это внимания.


Подключенные светильники в панели управления

ОpenHAB vs Home Assistant


В самом начале работы я использовал только один исполнительный контроллер Мегу, но это был именно контроллер человеческого интерфейса в нём не было, и для красивой панели управления нужен был отдельный сервер, в качестве которого обычно используется безвентиляторный Raspberry Pi, который может работать годами, единственное только периодически испытывая проблемы с microSD (без резервной копии никуда).


Моя последняя конфигурация на openHAB

Мои полные конфигурации OpenHAB 1.8.3 и 2.2.0, в том числе items, persistence, rules, sitemaps, transform выложены на GitHub.

Первые годы, работая с умным домом, я использовал openHAB на Raspberry Pi про это я уже писал в статье на Хабре: как я 1000 дней пользовался OpenHAB, а затем перешел на Home Assistant.
Хочу отметить, что, лично для меня, написание сложных правил в Home Assistant происходит проще по сравнению с OpenHAB.


Моя текущая конфигурация на Home Assistant

Полные конфигурации Home Assistant, в том числе automations.yaml, configuration.yaml, customize.yaml, lovelace выложены на GitHub.

Автоматические отчеты на почту для подачи в управляющую компанию


Ещё используя в качестве сервера автоматизации OpenHAB, решил сделать автоматическую генерацию отчетов за пять дней до окончания месяца.
По итогу получился вот такой автоматически сгенерированный отчет:

ФИОкв. ХХХ за 12.2016Холодная вода:ХВС расход в тек.мес.: 2,57 м. куб.Текущие показания: 22,06 м. куб.Показания хол. на 1е число: 19,49 м. куб.Горячая вода:ГВС расход в тек.мес.: 1,63 м. куб.Текущие показания: 13,44 м. куб.Показания гор. на 1е число: 11,81 м. куб.Электроэнергия:Э/э расход в тек.мес.: 31,19 кВт*чТекущие показания: 253,79 кВт*чПоказания э/э на 1е число: 222,60 кВт*чТемпература воды в трубах:Мин. значение хол. трубы в месяце: 11,31СМакс. значение гор. трубы в месяце: 66,33ССредняя темп. батарей в месяце: 42,29СОтчет сформирован в пятница, 16.12.2016, 08:48 через openHAB.

Код генерации отчета представлен на GitHub.

Кнопка выключить всё


Физическая кнопка, расположенная у входной двери и которая выключает весь свет в квартире это реально удобно. В моём случае витая пара проброшена до контроллера на его входной порт. Контроллер Мега отправляет полученный сигнал о замыкании кнопки на сервер, а сервер в зависимости от правил, выключает весь свет в квартире, кроме прохожей, сразу, а свет в прихожей через 15 секунд.

Конкретные примеры правил представлены ниже для систем, которые я использовал в квартире:

  1. openHAB
  2. Home Assistant

Полное удаленное обесточивание квартиры


ТСЖ дома сделало полную замену подъездных электрических щитов, и в том числе подвело заземление, а поскольку соседние по площадке квартиры перенесли свои электрические счетчики и автоматы внутрь собственных квартир, то этажный электрический щит оказался практически пуст.


Вид этажного распределительного щита до моего вмешательства (счётчик и верхние автоматы мои)

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

Ещё мне понадобился контактор (мощное реле) на 40А и ещё один беспроводной модуль Sonoff. Также я разработал схему подключения всех электропотребителей квартиры, согласно которой мне потом и собрали всю схему в подъездном щите.


Электрическая схема подъездного электрощита, реализующая полное удаленное обесточивание квартиры

После завершения процесса монтажа электросхемы щита получилось именно так, как и было задумано.


Внешний вид электрощита в подъезде жилого дома, вместе с моим оборудованием для удаленного обесточивания квартиры

Доступ к контактору (на 40А) осуществляется не из интерфейса управления HA (который тоже обесточивается), а просто по ip адресу устройства, которое подключено к контактору.

Электронакладки для кранов на воду


У меня ранее уже был опыт установки шаровых кранов на воду с электроприводом, но их цена составляет сейчас почти 7 тыс.руб. за штуку и 15 тыс.руб. за комплект, что в данном случае это было экономически нецелесообразно.


Пример краны шаровые с электроприводом Neptun Bugatti Pro 12В , установленные в другом месте

Подобные краны на воду, с электроприводом, есть и на известном китайском сайте и цена на них в разы меньше, но раз это связано с водой я просто побоялся залить несколько нижерасположенных этажей и стал смотреть в сторону накладок на существующие краны.


Электронакладка, управляющая шаровым краном холодной воды

Контроллер может управлять данными электронакладками через драйвера мотора на L298N. Также его можно настроить в режиме SW LINK на контроллере, для того чтобы исключить одновременное включение в обе стороны.

Для корректной работы накладок трубы пришлось раздвинуть, иначе накладки мешали работе друг друга. Также они достаточно объемные и если бы трубы были закрыты коробом их вряд ли бы удалось корректно вписать.


Измерение напряжения на L298N

Краны поворачиваются, сами по себе, достаточно туго и накладки тянут, кажется, на пределе своих возможностей, но с момента установки прошло уже почти полтора года и они до сих пор исправно работают. Время закрытия-открытия около 15 секунд.

Фотографии квартиры


Привожу несколько фотографий, чтобы можно было оценить размеры и внешний вид квартиры и масштабы проделанной работы:


Прихожая квартиры

На левой стене прихожей, рядом с входной дверью, установлен OLED-дисплей SSD1306 в фабричном корпусе, куда выводится текущее время и температура окружающей среды, на улице.


Спальная комната квартиры

Чтобы я сделал по другому, если бы знал это заранее


Проектирование всего на первом этапе


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

Счетчики с интерфейсом RS485


В первую очередь я бы установил все счетчики с интерфейсом RS485 с импульсным выходом довольно много возни из-за того что периодически надо сверять реальность показаний на счетчике и в интерфейсе и особенно если были какие-то сбои на сервере. При считывании по протоколу RS485 счетчик отдает не только актуальные текущие показания, но и имеет память прошлых показаний, которые можно считывать. Пусть это дороже, но мне кажется это более технологично и точно. Настораживает в случае с RS485 только другое хотя протоколы некоторых производителей расшифрованы энтузиастами, а протоколы других производителей опубликованы в свободном доступе, но готовых модулей интеграции в openHAB или Home Assistant практически нет. Особенно заметно это в случае со счетчиками воды.

Возможно ZigBee вместо Wi-Fi


Возможно я бы стал использовать ZigBee вместо Wi-Fi для беспроводных реле. Но устанавливал бы всё равно в увеличенного размера распределительные коробки достаточно практичное решение и всегда можно откатиться назад на обычную схему электропроводки. Тем более что сейчас существует база знаний совместимых ZigBee устройств.

Возможно Wiren Board вместо Меги


Экономику я не считал и с самим Wiren Board знаком лишь очень поверхностно, но у них довольно много готовых модулей. Интересно было бы посмотреть как это выглядит в работе.

Итоговые выводы


Очень важный фактор, который играл значение в выборе компонентов для автоматизации квартиры цена. И хотя здесь у меня был микроскопический бюджет и довольно много желаний я считаю, что практически все необходимые функции умных домов для квартиры удалось реализовать в полном объеме:

  1. Полное управление освещением квартиры.
  2. Учёт энергоресурсов с единой панели управления.
  3. Мониторинг всех показателей квартиры: температуры стояков, батарей, жилых комнат.
  4. Возможность отследить и показать другим людям объективные уровни шума.
  5. Возможность оперативного удаленного вмешательства: полностью обесточить квартиру и перекрыть воду. И произвести обратную операцию.


Автор: Михаил Шардин

15 июня 2020 г.
Подробнее..

Управление Яндекс.Станцией и другими колонками с Алисой из Home Assistant

26.06.2020 10:22:09 | Автор: admin

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


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


В январе 2020 кто-то обнаружил, что Яндекс.Станция поддерживает некий локальный протокол. На GitHub начали появляться проекты по управлению Яндекс.Станцией. Мне хватило пару часов, чтоб разобраться и выпустить первую версию компонента для Home Assistant. Это достаточно популярная система домашней автоматизации, написанная на языке Python.


На сегодняшний день компонент поддерживает управление всеми колонками с Яндекс Алисой и при желании может выглядеть так:



Или так:



А работать так:



Инструкции по установке, настройке и использованию компонента можете найти на GitHub странице проекта.


Локальный протокол


Устройства Яндекса обнаруживаются в локальной сети по протоколу mDNS и имени _yandexio._tcp.local..


Локальный протокол представляет собой подключение к станции по WebSocket и обмен JSON-сообщениями в две стороны. Создавался он для приложения Яндекс.Музыки и поддерживает полный перечень команд управления станцией, как медиа-устройством: включить песню по ID из каталога Яндекс.Музыки, перемотать, изменить громкость и т.п.


Первым сообщением нужно отправить на станцию токен, полученный с серверов Яндекса, используя акаунт Яндекса, к которому привязана станция. Так что кому угодно управлять вашей станцией не получится.


Кстати подключение к колонкам Google через протокол Chromecast не ограничено какими-либо паролями или аккаунтами. Управление колонкой доступно любому пользователю той же локальной сети.


К многим устройствам с AirPlay первой версии подключение также не ограничено паролем.


Помимо медиа команд протокол поддерживает функцию, делающую Яндекс.Станцию совершенно уникальным устройством на рынке. Это возможность отправить на колонку текстовую команду. И колонка её выполнит, будто услышала команду через микрофон.


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


И вишенкой на торте вы можете попросить станцию произнести любую фразу голосом Алисы. Это тот самый голос, который по праву признан лучшим голосом TTS для русского языка на сегодняшний день. Этот голос является эксклюзивом Яндекс Алисы и его нет даже в Yandex SpeechKit.


Но и это ещё не всё! Помимо зачечательного голоса вам доступна настройка генератора речи и библиотека звуков из платформы Яндекс.Диалоги.


Облачное управление


На сегодняшний день локальный протокол поддерживает только большая станция и модуль. Почти пол года сообщество ждало появление протокола в остальных колонках с Алисой, но это так и не случилось.


В начале мая Яндекс выпустил очень интересное обновление для своей платформы. В сценарии умного дома добавили возможность отправить на любую колонку пользователя любую текстовую команду. Как и в случае с большой станцией колонка её выполняет.


По задумке авторов сценарий выполняется по заданной активационной фразе, которую пользователь произносит своему устройству с Алисой. Это может быть колонка, мобильное приложение Яндекс или Яндекс.Браузер с Алисой на компьютере. Но в интерфейсе управления сценариями есть кнопка ручного запуска любого пользовательского сценария.


Интерфейс умного дома Яндекса представляет собой обычное веб-приложение, которое можно запустить в том числе на компьютере.


Я ранее сталкивался с внутренними API этого приложения для реализации функции управления HDMI выходом большой станции. Да, есть ещё такая недокументированная возможность и компонент её поддерживает.


Научить компонент создавать сценарии и выполнять их не составило особого труда. Через сценарии можно как выполнять команды, так и произносить любые фразы.


Единственным большим минусом такого подхода является отсутствие обратной связи от колонки. Неизвестно что играет станция на данный момент и вообще играет ли она что-либо. У локального протокола такой проблемы нет, там выводится полная информация о исполнителе и красивая обложка из Яндекс.Музыки.


YandexStation 2.0


Некоторое время ушло на объединение локального и облачного режима работы. При старте Home Assistant все колонки включаются в облачном режиме и запускается поиск колонок, поддерживающих локальный режим. mDNS довольно капризный протокол и иногда может искать колонку довольно долго. Но благодаря наличию облачного режима управление станцией сохранится, пусть и в обрезанном режиме без обратной связи. При обнаружении локальной колонки управление переключается на локальный протокол.


Похожим образом работает другой мой компонент для управления устройствами eWeLink (Sonoff) на оригинальной прошивке SonoffLAN. В линейке популярных китайских реле также есть устройства, которые поддерживают локальное и облачное управление. И устройства, которые поддерживают только облачное управление.


Могу написать отдельную статью про компонент, если интересно.


Home Assistant Windows Portable


Для пользователей, испытывающих трудности в установке Home Assistant, я собрал портативную версию Home Assistant под Windows на базе WinPython HassWP. Эта версия подойдёт для ознакомления и экспериментов. В ней уже установлен Home Assistant Community Store (HACS) и компоненты YandexStation и SonoffLAN.


Демонстрация

Для повседневного использования всё же рекомендую установить Hass.io на Raspberry Pi, NUC (или аналог) или виртуальную машину с Linux. Но слышал у VirtualBox есть проблемы с Multicast. Это тот самый mDNS без которого в локальной сети НЕ найдутся ваши Яндекс.Станции, устройства Sonoff, колонки Google, плееры с поддержкой AirPlay и многие другие полезные гаджеты.


Заключение


Я знаю довольно много людей, кто купил колонки с Алисой благодаря выходу этого компонента. Решение показывает, что при наличии фукнционального API эти колонки могут стать почти обязательным устройством в каждом умном доме.


Это далеко не все крутые вещи, на которые способны колонки с Алисой и экосистема умного дома Яндекса. Просто у меня пока ещё не дошли руки реализовать всё задуманное.


За инсайдами можете следить на канале в Telegram. На моей странице GitHub вы можете найти и другие полезные компоненты для Home Assistant.

Подробнее..

Получение данных с датчика углекислого газа Даджет в системы умного дома

05.07.2020 20:11:11 | Автор: admin
Датчик углекислого газа Даджет KIT MT8057S давно зарекомендовал себя как достаточно надежный и недорогой прибор. Один недостаток, на мой взгляд официально данные с него можно получать только фирменной программой под windows, и никак иначе.

Тем не менее, получить данные в linux относительно несложно. Пришлось использовать небольшой костыль, но в итоге показатели co2 и температуры можно получить в консоль, и отправить дальше.
В этой статье рассмотрена отправка данных в IoBroker и Home Assistant.



Потребуется библиотека libhidapi и небольшая программка co2mon, размещена на гитхабе.

apt-get install git cmake g++ pkg-config libhidapi-dev

Скачиваем и компилируем программу co2mon

mkdir co2
cd co2
git clone github.com/dmage/co2mon.git
cd co2mon
mkdir build
cd build
cmake
make
cd co2mond
mv co2mond ../../../co2mond

Возможно, пути придется подкорректировать под вашу систему.

Программа эта работает в двух режимах постоянное получение данных в консоли, и в режиме демона. Будучи запущенной без параметров, программа постоянно выводит в консоль текущие показания, пока не будет принудительно закрыта. Немного странное решение, может я не разобрался, но работаем с тем что имеем.
В обоих режимах программа может сохранять данные в текстовые файлы, достаточно добавить ключ -D и указать путь к каталогу.

Я не хотел вешать на и без того слабенький сервер умного дома еще один демон, да и данные об углекислом газе не меняются быстро. Поэтому накидал простенький скрипт, который запускает программу, ждет пять секунд, и убивает ее.

#!/bin/bash
cd /home/server/co2
./co2mond -D /home/server/co2 > log.txt &
sleep 5
pkill co2mond
rm log.txt


Добавляем скрипт в cron, я запускаю его раз в минуту, этого более чем достаточно.
Готово! Теперь в двух текстовых файлах, которые создает программа, есть текущие показания климата.
Важный момент для получения данных с usb нужны администраторские права, то есть cron надо запускать от root'a, соответственно создаваемые текстовые файлы будут тоже рутовыми, это надо учитывать.

Теперь вторая часть отправляем полученные данные в системы умного дома. Начнем с IoBroker. Для начала с него, так как на тот момент, когда я задался этой задачей, пользовался им.

Там все просто есть адаптор systeminfo, который умеет читать в том числе и файлы с файловой системы. Не то, чтобы данные температуры были нужны, но почему бы и нет.

Сохраняем, и вуаля:


А потом я перешел на Home Assistant. В нем я использую mosquitto, и данные решил отправлять через него, нацеливаясь на разделение компьютеров в будущем или добавление датчиков. Установку и настройку брокера не рассматриваю, это выходит за пределы статьи.

На компьютер, к которому подключен датчик, надо установить клиент mosquitto, если он не стоит:
apt-get install mosquitto-clients

В конфиг Home Assistant добавляем два сенсора, и перезагружаем:
platform: mqtt
state_topic: co2/co2
name: co2.co2
unit_of_measurement: ppm

platform: mqtt
state_topic: co2/temp
name: co2.temp
unit_of_measurement: C

В скрипт, который получает данные, добавляем четыре строчки:
read co2 /home/server/co2/CntR
read temp /home/server/co2/Tamb
mosquitto_pub -h localhost -t co2/co2 -m $co2 -u пользователь -P пароль
mosquitto_pub -h localhost -t co2/temp -m $temp -u пользователь -P пароль

Готово, вы прекрасны) Теперь наш крон раз в минуту публикует показания датчиков в топик co2, и которого Home Assistant в свою очередь их считывает:


Теперь мы имеем в системе умного дома данные датчиков, и можно запланировать автоматизацию. У меня включается вытяжка, управляемой приточной вентиляции у меня пока нет, но если включить вытяжку, воздух постепенно обновляется.
Подробнее..

Подключаем новый Xiaomi Gateway 3 к Home Assistant без паяльника и смс

18.09.2020 10:20:14 | Автор: admin

Новый хаб от Xiaomi с поддержкой технологий Zigbee 3, Bluetooth Mesh, HomeKit и его подключение к достаточно популярной системе умного дома Home Assistant, интересует?



Введение


Устройства умного дома можно встретить на разных беспроводных протоколах.


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


Wi-Fi


Чаще всего новички выбирают устройства на технологии Wi-Fi. Ведь Wi-Fi роутер сегодня есть у всех. Умным устройством можно пользоваться сразу после покупки. Но тут есть нюанс: в количестве устройств слабость Wi-Fi. Роутеры от провайдеров в большинстве своём тот ещё хлам, способный справиться с 1-2 десятками устройств. И пять новых умных лампочек могут быть проблемой для всей сети.


Здесь выходом будет хороший двухдиапазонный роутер. Весь умный дом можно повесить на диапазон 2.4 ГГц, а мультимедиа-устройства (смартфоны, ноутбуки, телевизоры, колонки) на 5 ГГц.


Bluetooth


Устройства на Bluetooth новички выбирают так же охотно, ведь сегодня смартфоны есть почти у всех. Проблема в том, что дальность Bluetooth весьма ограничена. Уже из соседней комнаты вы не сможете посмотреть температуру на датчике или включить чайник или лампочку.


В таких случаях производители рекомендуют покупать BLE Gateway. Это устройство, которое будет посредником между Bluetooth и серверами производителя. Здесь уже далеко не все пользователи соглашаются на дополнительные траты и лишнюю железку в доме.


Некоторые производители встраивают возможности BLE Gateway в камеры и лампы, закрывая проблему лишних затрат и лишнего устройства в доме.


Zigbee


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


Дополнительную проблему составляет, что каждый такой Gateway поддерживает только дочерние устройства своего производителя. Купив устройства Philips Hue, IKEA, Sonoff, Xiaomi и Tuya, вы, скорее всего, должны будете докупить пять Gateway соответственно.


Эта технология заслуживает внимания по следующим причинам:


  • Беспроводные датчики довольно маленькие и в последнее время не такие и дорогие: 500 рублей за простейший датчик или кнопку это реальность, Xiaomi и AliExpress сделали своё дело.
  • Беспроводные датчики могут продержаться на одной батарее несколько лет, без шуток лет!
  • В количестве Zigbee устройств их сила: технология поддерживает Mesh, проводные устройства, скорее всего, будут ретрансляторами сигнала между Gateway и удалёнными датчиками, заодно снимая нагрузку с самого Gateway.
  • Технология поддерживает прямое управление в обход Gateway, можно связать кнопку и лампочку. В случае выхода Gateway из строя управление светом продолжит работать. Правда далеко не все кнопки это умеют.

Xiaomi


Фирма Xiaomi сделала многое для продвижения технологии Zigbee в альтернативных системах умного дома. Их старенький Xiaomi Gateway 2 (DGNWG02LM, lumi.gateway.v3) имел на борту "режим разработчика", который открывал локальный протокол доступа к управлению Zigbee устройствами этого шлюза. Интеграции этого протокола есть в множестве open source систем.


В евро-версии этого шлюза Xiaomi Gateway EU (DGNWG05LM, lumi.gateway.mieu01), а также в обновлённой версии Xiaomi Gateway 3 (ZNDMWG03LM, lumi.gateway.mgl03) этого протокола нет.


Обновлённая версия шлюза получила новый чип на Zigbee 3 (EFR32MG1B), а также поддержку технологии Bluetooth Mesh и HomeKit. В HomeKit поддерживаются не все устройства, будьте внимательны.


Xiaomi Gateway 3


В отличие от всех остальных шлюзов, обновлённая версия имеет уникальную особенность: на ней программно можно открыть Telnet-доступ. Доступ открывается только при наличии Mi Home токена, так что всё вполне секьюрно.


В этом шлюзе стоит чип серии EFR32 от фирмы Silicon Labs. Те в свою очередь поставляют вместе с чипом набор SDK. В составе SDK есть MQTT-транспорт, обеспечивающий доступ к Zigbee проколу из любого ПО, установленного как на шлюзе, так и за его пределами.


По умолчанию MQTT-брокер не доступен извне, но у нас ведь теперь есть Telnet!


В брокере есть два корневых топика: это "сырые" данные Zigbee и обработанные данные от Xiaomi. Я решил взять за основу обработанные данные. Там атрибуты устройств хоть и описаны псевдокодами, но в них всё же проще разобраться человеку, ничего не понимающему в Zigbee.


В итоге получился такой вот компонент для Home Assistant XiaomiGateway3.


Он автоматически включает Telnet и публичный MQTT, используя токен Mi Home.


Сейчас токен нужно получать нехитрым образом (инструкция в readme). Но в будущем я планирую добавить получение токена с серверов Xiaomi, используя аккаунт Mi Home. Ведь недавно в сети появилась рабочая реализация авторизации в их облаке.


Сейчас компонент получает список устройств и последние значения их атрибутов с Хаба. Но в дальнейшем я планирую добавить получение списка устройств из облака. Там есть пользовательские названия всех устройств.


BLE Gateway


С этим пришлось повозиться. Работа с Bluetooth-устройствами не отражается в MQTT. Зато все данные отражаются в консоли. Поэтому компонент подключается к хабу через Telnet отдельным потоком, перезапускает утилиту работы с Bluetooth и читает её вывод в реальном времени. Это самый стабильный способ, что я нашёл. В syslog данные от этой утилиты попадают с перебоями. Моих знаний Linux не хватает, чтоб понять, почему так происходит.


Первым делом компонент научился поддерживать стандартный набор Bluetooth-устройств Xiaomi: датчики температуры, анализаторы почвы и освещенности, фумигатор.


А пару дней назад в нём появилась поддержка умных Bluetooth-замков. На сегодняшний день это единственный из известных мне способов подключить BLE-умный замок Xiaomi в альтернативную систему умного дома.


Чайника у меня нет, но присылайте логи добавлю и его. Правда чайники Xiaomi не поддерживают функцию удалённого включения, это большой минус.


BLE-устройства и их атрибуты отображаются по мере поступления данных. Когда появится поддержка облака полный список BLE устройств с их моделями, именами и последними посланными данными можно будет получить оттуда. Такая информация на хабе не хранится.


Поддержка Bluetooth Mesh ламп пока в разработке. Работа с ними сильно отличается от BLE-устройств.


Планы


Грандиозные.


Нужно отладить работу хаба со всем списком официально поддерживаемых Zigbee-устройств. Добавить возможность настройки "тонких" параметров:


  • настройки хаба: например, мощность (и её можно сильно увеличить!),
  • изменение настроек дочерних устройств: режим логических кнопок на выключателях, чувствительность датчика вибрации и многое другое.

Нужно добавить поддержку облака для получения токена хаба и полного списка Zigbee и Bluetooth-устройств.


Нужно добавить поддержку Bluetooth Mesh ламп.


И самое главное добавить поддержку устройств других производителей. Да, это возможно. Мне удалось подключить все сторонние устройства, что у меня были, и управлять ими. Такие устройства не отображаются в Mi Home и HomeKit. Но управлять ими можно с помощью "сырых" Zigbee-команд.


Для понимания полного масштаба проблемы такой поддержки загляните в исходники замечательного проекта zigbee2mqtt: devices, fromZigbee, toZigbee.


Почти каждое устройство требует свой собственный обработчик. В случае с Xiaomi Gateway 3 и официально поддерживаемыми устройствами роль такого обработчика выполняет софт хаба.


Другие мои разработки можно найти на GitHub. Среди русскоговорящей аудитории наиболее популярный проект YandexStation. Глобально очень хорошо себя зарекомендовал SonoffLAN. Но, думаю, XiaomiGateway3 его легко обгонит. За развитием этого и других моих проектов можно следить на моём канале Telegram.

Подробнее..

Плюсы интеграции Xiaomi Gateway 3 в Home Assistant

30.12.2020 14:14:51 | Автор: admin

Первая версия компонента XiaomiGateway3 для Home Assistant вышла 4 месяца назад, и с тех пор много всего изменилось. В прошлой статье я писал про создание компонента. А в этой статье расскажу, почему это решение так заинтересовало сотни пользователей.

Прошивка шлюза

Эта модель шлюза действительно получилась очень удачной. Иначе как можно объяснить, что компания Xiaomi уже два раза успела обновить прошивку шлюза на своих заводах. Это единственная модель шлюза, у которой прошивка теперь обновляется настолько оперативно на производстве.

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

В миг шлюз превратился из простого Plug and Play устройства в устройство, которое нужно обязательно вскрыть и прошить для интеграции в альтернативные системы умного дома.

Но шлюз хорош не только своим современным Zigbee-чипом и наличием чипа Bluetooth. Выбранный компанией-производителем SoC от Realtek позволяет в любой момент записать на шлюз любую прошивку, подключив всего три провода UART.

Если вы не любите паять, можно воспользоваться специальной прищепкой с контактами. Есть даже удачные примеры прошивки с бельевой прищепкой. Главное помнить, что обрыв контактов во время прошивки или UART на 5 В вместо 3.3 В вполне могут спалить микросхемы шлюза.

В развитии этого хаба участвует довольно много крутых людей. @serrj-sv собрал скрипт под Windows, который может прошить шлюз в полуавтоматическом режиме. А @zvldz собрал альтернативную версию прошивки, которая на 99% соответствует оригинальной. В ней поправлено недоразумение с закрытым Telnet и ещё пара мелочей. По особенностям прошивки и другим вопросам можно писать в этот чат Telegram.

Все полезные ссылки можно найти в вики проекта.

Поддержка Mi Home

Многие гики не любят облака и стараются с ними не связываться. Идеология облаков нарушает и главный девиз Home Assistant: конфиденциальность прежде всего (privacy first).

С другой стороны, если при данном подходе сохраняется полноценное локальное управление (local control, вторая часть девиза Home Assistant), то ничего страшного в облаках нет.

Экосистемы производителей добавляют устройствам больше свободы и возможностей управления, включая внешний доступ из коробки и прямое подключение к популярным голосовым ассистентам вроде Яндекс.Алисы и Google Assistant.

Также с этим подходом новые пользователи могут плавно осваивать Open Source системы умного дома: если что-то не получается, можно легко продолжить пользоваться устройством в экосистеме производителя.

Да, где-то на китайском сервере будет хранится информация, включен ли у вас в туалете свет. Так ли много на вас компромата у лампочки? Особенно если сравнивать с данными в вашем браузере или смартфоне. А полный доступ к прошивке шлюза позволяет пытливому уму легко отследить, какая именно информация отправляется на родину.

Поддержка Zigbee устройств Xiaomi

Компонент поддерживает:

  • все популярные устройства: выключатели, кнопки, розетки, реле, лампочки, датчики движения, температуры, открытия, протечки, вибрации, газа, дыма, шторы и замки;

  • редкие устройства вроде термостата Aqara Thermostat S2 (KTWKQ03ES) такой термостат пока не поддерживается даже в zigbee2mqtt;

  • самые свежие устройства вроде новых: реле Aqara Relay T1 и высокоточный датчик присутствия Aqara Hight Precision Motion Sensor (RTCGQ13LM).

Альтернатива: разнообразные DIY и коммерческие Zigbee-стики и DIY-хабы. Вот довольно большое русскоязычное сообщество в Telegram, где могут ответить на ваши вопросы по поводу Zigbee.

Поддержка BLE-датчиков Xiaomi

Компонент поддерживает:

  • все популярные датчики: разнообразные датчики температуры с экраном, датчик ухода за растениями, фумигатор, ночник и умный кубик Рубика;

  • редкие устройства вроде сейфа Xiaomi Safe Box (BGX-5/X1-3001) да, есть и такое устройство;

  • самые свежие датчики вроде новых датчиков двери, протечки и движения на технологии BLE;

  • различные дверные замки экосистемы Xiaomi.

Компонент не поддерживает не BLE устройства вроде чайника и самоката Xiaomi.

Альтернатива: шлюз на основе ESP32 или встроенный Bluetooth на сервере умного дома. Обычно этими способами поддерживаются только популярные датчики температуры альтернативной поддержки дверных замков я не встречал.

Поддержка Bluetooth Mesh-ламп

Компонент поддерживает новые Mesh-лампы экосистемы Xiaomi под брендами MiJia и Yeelight. И один китайский пользователь уже второй месяц пытается добавить поддержку Mesh-выключателей. А я никак не найду время рассмотреть его pull request.

Новые лампы очень выгодно отличаются ценой и функциями от аналогов на технологиях Wi-Fi и Zigbee, поэтому к ним стоит присмотреться. Об одной из таких ламп я рассказываю в своей статье про адаптивное освещение.

Альтернатива: на ум приходит только новый хаб Yeelight и подключение его к Home Assistant через протокол HomeKit. Open Source проекты с поддержкой Mesh-ламп я не встречал.

Поддержка Zigbee Home Automation

Пользователи не любят хабы крупных компаний из-за того, что они поддерживают только устройства своего производителя. Так вот Xiaomi Gateway 3 лишен этого недостатка.

Я добавил в него режим, в котором Home Assistant напрямую подключается к Zigbee-чипу хаба через интеграцию Zigbee Home Automation.

Конечно, у подхода есть минусы:

  • Zigbee-чип перестаёт работать с Mi Home и начинает работать только с Home Assistant;

  • по количеству поддерживаемых устройств ZHA сильно уступает проекту zigbee2mqtt.

Но есть и плюсы:

  • в Китае не узнают, включен ли у вас в туалете свет;

  • в любой момент можно вернуть хаб в обычный режим работы c Mi Home без последствий для родной прошивки хаба;

  • BLE-датчики и Mesh-лампы продолжают работать в этом режиме;

  • команда Home Assistant активно развивает проект ZHA в рамках своей основной работы.

Альтернатива: шлюз Sonoff ZBBridge, прошитый Tasmota.

Поддержка сторонних устройств в Mi Home

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

Изучая проблему, почему лампы IKEA E27 из российских магазинов не подключаются к хабам Xiaomi, я пришел к выводу, что в хабах зашита поддержка лишь семи моделей ламп, хотя проект zigbee2mqtt поддерживает более 30 моделей ИКЕА.

Дело осталось за малым вместо настоящей модели лампы подсунуть хабу ту, которую он поддерживает. Реализовать код, организующий подмену модели устройства в момент добавления устройства в хаб, оказалось несложно. Как оказалось, этот способ отлично подошёл для диммеров и реле других фирм.

И самое интересное в данном способе то, что устройства работают и управляются в Mi Home без участия Home Assistant. И могут участвовать в автоматизациях.

Конечно, не стоит рассчитывать, что таким образом заработают любые устройства. Например, у меня не получилось заставить работать лампочки и датчик Philips Hue, а также кнопку Sonoff. А умные розетки, добавленные таким образом, не показывают энергопотребление.

Интеграция с облаком

Компонент поддерживает опциональную интеграцию с облаком. При этом компонентом можно пользоваться и без интеграции с облаком, просто добавив шлюз по IP-адресу и токену Mi Home.

Но если вы авторизуетесь в облаке Xiaomi, все данные о шлюзе загрузятся автоматически. Кроме адреса и токена шлюза из облака загрузятся все имена ваших Zigbee, BLE и Mesh-устройств. Вам не придётся снова заполнять их в Home Assistant, выясняя, что за устройство скрывается за именем 0x00158D0007396A5D.

Получение токенов любых Xiaomi устройств

Помимо получения данных о шлюзе и его устройствах - облачная интеграция позволяет получить Mi Home токены от любых Wi-Fi устройств в вашем аккаунте. Если ваш аккаунт использует одновременно разные сервера (например, европейский и китайский), это тоже поддерживается.

Функция получения токенов работает даже если у вас нет шлюза Xiaomi Gateway 3.

Расширенные настройки устройств

Один из самых популярных Zigbee-датчиков в экосистеме Xiaomi это датчик движения. Ранее я пользовался вторым шлюзом Xiaomi и писал автоматизации для этого датчика в Node-RED.

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

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

Логика работы показана на картинке

Мониторинг работы устройств

Радиосвязь всегда менее надёжнее провода. Сигнал от датчика может по разным причинам не дойти в центр. Zigbee и Bluetooth работают на той же частоте, что Wi-Fi и микроволновки.

Для обнаружения возможных проблем в компоненте есть опциональная статистика по каждому Zigbee и BLE устройству.

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

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

Именно этот показатель помог мне выпустить две заплатки и уменьшить количество пропусков срабатывания у популярного датчика движения Aqara Motion Sensor. Одна заплатка попала в компонент Home Assistant, а вторая в проект zigbee2mqtt.

Перспективы развития

За четыре месяца компонент оброс огромным количеством функционала и успел получить более 400 звёзд на GitHub. Но мысли по дальнейшему развитию и не думают кончаться.

Ещё остаётся добавить корректную работу с Bluetooth-устройствами при использовании нескольких хабов на одном сервере Home Assistant. Дело в том, что BLE датчики и Mesh-лампы не привязаны к какому-либо одному хабу. Все хабы могут получать данные с окружающих сенсоров и управлять окружающими лампами. Кстати огромный плюс в сравнении с технологией Zigbee.

Так же в планах добавить настройку параметров дочерних устройств - режим interlock в реле Aqara (переключатель пропал в последних версиях приложения Mi Home), чувствительность и задержки между срабатываниями нового датчика присутствия Aqara и многие другие.

Отдельным направление развития остаётся поддержка конвертеров проекта zigbee2mqtt. Если его удастся довести до релиза, пользователь сможет выбрать, как именно подключать имеющиеся у него устройства:

  • оригинальное ПО Xiaomi - готово

  • интеграция Zigbee Home Automation - готово

  • конвертеры zigbee2mqtt - есть рабочий прототип

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

На моём GitHub можно найти ссылки на другие компоненты и статьи. А за их развитием можно следить на моём канале в Telegram.

Подробнее..

Мониторинг показателей linux сервера в Home Assistant через mqtt

15.03.2021 04:23:51 | Автор: admin

Возникла необходимость поставить дома еще один сервер, и я задался целью мониторить его показатели в домашнем умном доме, в качестве которого используется Home Assistant. Быстрое и потом вдумчивое гугление не дало устраивающих меня универсальных решений, поэтому построил свой велосипед.

Вводные: мониторить будем загрузку и температуру процессора, загрузку оперативной памяти и свопа, свободное место на дисках, продолжительность аптайма, общую загрузку системы, температуру и состояние smart дисков по отдельности, и состояние raid (на сервере с ubuntu server 20 поднят простой софтовый raid1). Диски WD Green, материнская плата GA-525 со встроенным atom525.
На сервере умного дома уже поднят брокер mosquitto, поэтому в качестве метода передачи данных выбран mqtt.
В первых разделах сего труда приведены принципы примененных методов сбора данных, а в конце - скрипты передачи данных и настройки HA.
Все команды в примерах выполняются от пользователя root

Оглавление
Сбор показаний системных датчиков
Сбор данных о нагруженности системы
Сбор данных о состоянии жестких дисков
Сбор данных о состоянии RAID
Передача собранных данных
Настройка Home Assistant

Показания системных датчиков

Для получения встроенных датчиков воспользуемся утилитой sensors

Если она не установлена, поставим ее:
apt-get install lm-sensors

Сначала надо найти все имеющиеся датчики. Запускаем команду
sensors-detect
и отвечаем y на все вопросы. После этого можно поглядеть что получилось:
sensors

Надо отметить, что лично у меня sensors стал выводить все найденные датчики только после перезагрузки. Может какой то баг, не знаю.

Надо бы как то формализовать вывод. К счастью у sensors есть удобный режим вывода в json, и можно скрыть название адаптора.
sensors -A -u -j
Выдаст длинный json. Вот мой, например.

Ну вот, с этим работать удобнее. Для передачи показаний дальше надо разобрать данные. Для разбора json прямо в консоли есть шикарнейшая утилита - jp. Если она не установлена - для ubuntu она есть в пакетах:
apt-get install jq

Определяем xpath нужного параметра. Можно глазами, можно с помощью например этого удобного онлайн-инструмента.

Теперь прямо одной строкой можно получить интересующие нас данные. Я хочу сохранять температуру процессора, одного ядра хватит, частоту вращения кулера, и еще какой то третий сенсор temp3, который показался мне подходящим для косвенной оценки температуры внутри корпуса:
sensors -A -u -j | jq '.["coretemp-isa-0000"]["Core 0"].temp2_input'
sensors -A -u -j | jq '.["it8720-isa-0290"].fan1.fan1_input'
sensors -A -u -j | jq '.["it8720-isa-0290"].temp3.temp3_input'

Нагруженность системы

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

Утилизация памяти. Самый простой способ по моему - воспользоваться командой free. Чтобы не ломать глаза, есть параметр -m, выводящий все значения в мегабайтах.

Берем знаничения всего и использовано, и из них вычисляем процент использования. Наверное можно где-нибудь добыть готовый процент, но вдруг понадобится потом исходное значение.
free -m | grep "Mem" | awk '{print $2}'

Соответственно в параметр grep отдаем название строки, а в параметр awk - номер столбца, в результате получаем готовую цифру. Дальше по аналогии можно получить остальные данные, а процент вычислить по формуле. В разделе передача данных в скрипте можно найти алгоритм расчета.

Свободное место на дисках получаем по аналогии, с помощью команды df. Нужные мне данные уже посчитаны в процентах, просто берем готовое, используя тот же подход, что и с памятью. Есть только одно отличие - нам нужна цифра, а тут получится строка. Для удаления символа процента последняя команда:
df
df | grep "/dev/md127p1" | awk '{print $5}' | sed 's/%$//'
df | grep "/dev/md126p1" | awk '{print $5}' | sed 's/%$//'

Суммированную загрузку системы можно получить в файле /proc/loadavg. Надо понимать, что цифры там - показатель, измеренный в попугаях. Первые три строки означают среднее количество процессов или потоков, которые выполняются, находятся в очереди на выполнение или ждут завершения операций ввода/вывода за 1, 5 и 15 минут. То есть это не процент и не доля от целого. Просто если это значение представить в виде числа, то большое (больше единицы) число там это плохо, п'нятненько?
Я буду брать за 15 минут:
cat /proc/loadavg | awk '{print $3}'

Аптайм нам даст команда uptime:
uptime | awk '{print $3}' | sed 's/,$//'

Ну и наконец загрузку процессора возьмем у программы mpstat. Я использую именно эту программу, потому что она по умолчанию суммирует ядра, кроме того выдает информацию и тут же заканчивает свой процесс. Тут тоже потребуются арифметические вычисления, потому что все распространенные утилиты отдельно считают задачи пользователя и системы, но зато суммируют время простоя. Таким образом, если мы хотим получить просто цифру загруженности, то надо или из единицы вычесть простой, или сложить все направления. Если mpstat у вас не установлена, то это можно сделать командой apt install sysstat. Итак,
mpstat | grep all | awk '{print $13}'

Получение из этого числа конкретного процента загрузки процессора реализовано почти так же как и в случае с вычислением занятой памяти будет в скрипте выгрузки, но есть нюанс.
Дело в том, что му почти наверняка получим нецелое число, и в зависимости от текущей локали там может быть не запятая а точка. Да и вообще bash бывает плохо умеет работать в числами с точкой. Поэтому вычисление текущей загрузки передано программе bc
cpuidle=$(mpstat | grep all | awk '{print $13}')
cpuload=$(echo "100-$cpuidle" | bc -l)
echo "Текущая загрузка процессора: $cpuload"

Показания состояния жестких дисков

Для получения температуры дисков воспользуемся утилитой hddtemp. Если ее нет, ставим:
apt-get install hddtemp

Работать вообще просто: для получения температуры ей указывается устройство, и с параметром -n не будет лишних данных:

Для получения данных со SMART воспользуемся smartmontools
apt-get install smartmontools

Для использования надо указать на какой диск смотреть, и ключ -a, иначе будет выведена просто короткая справка о диске.
smartctl -a /dev/sda
Утилита вываливает целую гору информации, несколько экранов. Не буду приводить тут скриншоты, слишком много. Из всей этой кучи надо выделить интересующие показатели. Я для себя выделил эти:

Raw_Read_Error_Rate количество ошибок чтения. Ненулевые значения уже требуют внимания, а большие говорят о скором выходе диска из строя. В интернетах пишут, что у некоторых моделей большое значение в этом поле является нормальным. В общем случае значение должно быть равно нулю. А поскольку мы все таки мониторим, нас будет волновать увеличение этого числа;
Reallocated_Sector_Ct количество перераспределённых секторов. Большое значение говорит о большом количестве ошибок диска;
Seek_Error_Rate количество ошибок позиционирования. Большое значение говорит о плохом состоянии диска;
Spin_Retry_Count количество попыток повторной раскрутки. Большое значение говорит о плохом состоянии диска;
Reallocated_Event_Count количество операций перераспределения секторов;
Offline_Uncorrectable количество неисправных секторов. Большое значение говорит о повреждённой поверхности.

Чтобы их вытащить из ответа утилиты, можно воспользоваться удобной функцией - вывод значений в формате json. Для этого к строке запуска добавляем параметр -j, вот так:
smartctl -a -j /dev/sda

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

Получив xpath, выделяем конкретную цифру с помощью той же утилиты jq, вот так (в конце в комментарии имя параметра):

smartctl -a /dev/sda -j | jq '.ata_smart_attributes.table[0].raw.value' #Raw_Read_Error_Rate
smartctl -a /dev/sda -j | jq '.ata_smart_attributes.table[3].raw.value' #Reallocated_Sector_Ct
smartctl -a /dev/sda -j | jq '.ata_smart_attributes.table[4].raw.value' #Seek_Error_Rate
smartctl -a /dev/sda -j | jq '.ata_smart_attributes.table[6].raw.value' #Spin_Retry_Count
smartctl -a /dev/sda -j | jq '.ata_smart_attributes.table[12].raw.value' #Reallocated_Event_Count
smartctl -a /dev/sda -j | jq '.ata_smart_attributes.table[14].raw.value' #Offline_Uncorrectable

Кроме того, есть такой ответ на вопрос типа "ты нормально скажи - здоров ты или нет" - запустив утилиту с параметром -H, можно получить суммарный вывод о здоровье диска. У режима тоже есть параметр -j, выводящий структурированный json.

Также выделям его из json:
smartctl -a /dev/sda -j | jq '.smart_status.passed' #smart_status

Не забываем о необходимости вовремя тестировать диск, само себя оно не протестирует (наверное)

Некоторые модели дисков тестируют себя сами автоматически, некоторые нет, поэтому чтобы застраховаться, надо запланировать в cron запуск теста. В общем случае достаточно короткого ежедневно и длинного еженедельно.
smartctl -t short /dev/sda
быстрое тестирование, занимает около 2 минут
smartctl -t long /dev/sda
расширенный тест, занимает около 1 часа.
Если этот вариант не нравится, у программы есть режим демона, smartd, который сам будет запускать тестирование, и может даже слать отчеты. Отчетов нам не нужно, а вот автотестирование пригодится. Настройку smartd легко нагуглить.

Показания состояния RAID

Дисклеймер

На контролируемом сервере поднят просто raid на mdadm. На разделах дисков создано два массива, для системы и для /var. Рассматривается мониторинг именно такой конфигурации, для иной конфигурации на mdadm можно адаптировать, а про аппаратный raid ничего не знаю.
Самый простой способ узнавать что происходит, что я нашел - это брать уже готовые данные в виртуальной файловой системе sys. [1] [2]
Тут есть определенная проблема - я не нашел способа проверить работоспособность этого метода. Буду исходить из мысли что все хорошо.

Итак, получаем названия разделов
cat /proc/mdstat

Вижу что то такое:

Сначала надо вызвать проверку
echo 'check' >/sys/block/md126/md/sync_action
echo 'check' >/sys/block/md127/md/sync_action

А потом просто взять готовое
cat /sys/block/md126/md/mismatch_cnt
cat /sys/block/md127/md/mismatch_cnt

если команды возвращают 0, то все ок.

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

Сбор и передача данных

Если на сервере не установлен клиент mosquitto, то ставим его:
apt-get install mosquitto-clients

Создаем где-нибудь скрипты, куда сведем все команды сбора и публикации. Я разделил все операции на три группы - частые (показатели системы), средние (состяние raid и свободного места), и редкие (данные smart):
touch system.sh && touch drives.sh && touch smart.sh
chmod u+x system.sh &&chmod u+x drives.sh &&chmod u+x smart.sh

В созданные файлы пишем:

system.sh
#!/bin/bash#Укажите адрес вашего брокера и учетные данныеip=xx.xx.xx.xxusr="xx"pass="xx"tempdrive1=$(hddtemp "/dev/sda" -n)echo "Температура диска 1: $tempdrive1"tempdrive2=$(hddtemp "/dev/sdb" -n)echo "Температура диска 2: $tempdrive2"tempcpu=$(sensors -A -u -j | jq '.["coretemp-isa-0000"]["Core 0"].temp2_input')echo "Температура процессора: $tempcpu"fan=$(sensors -A -u -j | jq '.["it8720-isa-0290"].fan1.fan1_input')echo "Скорость кулера процессора: $fan"temp3=$(sensors -A -u -j | jq '.["it8720-isa-0290"].temp3.temp3_input')echo "Температура системы: $temp3"totalram=$(free -m | grep "Mem" | awk '{print $2}')echo "Всего памяти: $totalram"usedram=$(free -m | grep "Mem" | awk '{print $3}')echo "Всего использовано памяти: $usedram"usedrampercent=$(($usedram * 100 / $totalram))echo "Всего использовано памяти в процентах: $usedrampercent"totalswap=$(free -m | grep "Swap" | awk '{print $2}')echo "Всего свопа: $totalswap"usedswap=$(free -m | grep "Swap" | awk '{print $3}')echo "Всего использовано свопа: $usedswap"usedswappercent=$(($usedswap * 100 / $totalswap))echo "Всего использовано свопа в процентах: $usedswappercent"averageload=$(cat /proc/loadavg | awk '{print $3}')echo "Средняя загрузка системы: $averageload"uptimedata=$(uptime | awk '{print $3}' | sed 's/,$//')echo "Аптайм: $uptimedata"cpuidle=$(mpstat | grep all | awk '{print $13}')cpuload=$(echo "100-$cpuidle" | bc -l) #небольшой костыль, для того чтобы bash нормально обработал точку в поданных данныхecho "Текущая загрузка процессора: $cpuload"echo " "echo "Публикация данных"mosquitto_pub -h $ip -t "srv/tempdrive1" -m $tempdrive1 -u $usr -P $passmosquitto_pub -h $ip -t "srv/tempdrive2" -m $tempdrive2 -u $usr -P $passmosquitto_pub -h $ip -t "srv/tempcpu" -m $tempcpu -u $usr -P $passmosquitto_pub -h $ip -t "srv/fan" -m $fan -u $usr -P $passmosquitto_pub -h $ip -t "srv/temp3" -m $temp3 -u $usr -P $passmosquitto_pub -h $ip -t "srv/usedrampercent" -m $usedrampercent -u $usr -P $passmosquitto_pub -h $ip -t "srv/usedswappercent" -m $usedswappercent -u $usr -P $passmosquitto_pub -h $ip -t "srv/averageload" -m $averageload -u $usr -P $passmosquitto_pub -h $ip -t "srv/uptimedata" -m $uptimedata -u $usr -P $passmosquitto_pub -h $ip -t "srv/cpuload" -m $cpuload -u $usr -P $pass
drives.sh
#!/bin/bash#Укажите адрес вашего брокера и учетные данныеip=xx.xx.xx.xxusr="xx"pass="xx"raid_system_status=$(cat /sys/block/md126/md/mismatch_cnt)echo "Исправность RAID системного раздела: $raid_system_status"raid_var_status=$(cat /sys/block/md127/md/mismatch_cnt)echo "Исправность RAID раздела данных: $raid_var_status"freesystemdisk=$(df | grep "/dev/md127p1" | awk '{print $5}' | sed 's/%$//')echo "Занято места на системном разделе: $freesystemdisk"freedatadisk=$(df | grep "/dev/md126p1" | awk '{print $5}' | sed 's/%$//')echo "Занято места на разделе данных: $freedatadisk"echo " "echo "Публикация данных"mosquitto_pub -h $ip -t "srv/raid_system_status" -m $raid_system_status -u $usr -P $passmosquitto_pub -h $ip -t "srv/raid_var_status" -m $raid_var_status -u $usr -P $passmosquitto_pub -h $ip -t "srv/freesystemdisk" -m $freesystemdisk -u $usr -P $passmosquitto_pub -h $ip -t "srv/freedatadisk" -m $freedatadisk -u $usr -P $pass
smart.sh
#!/bin/bash#Укажите адрес вашего брокера и учетные данныеip=xx.xx.xx.xxusr="xx"pass="xx"Raw_Read_Error_Rate1=$(smartctl -a /dev/sda -j | jq '.ata_smart_attributes.table[0].raw.value')echo "SMART Raw_Read_Error_Rate диска 1: $Raw_Read_Error_Rate1"Reallocated_Sector_Ct1=$(smartctl -a /dev/sda -j | jq '.ata_smart_attributes.table[3].raw.value')echo "SMART Reallocated_Sector_Ct диска 1: $Reallocated_Sector_Ct1"Seek_Error_Rate1=$(smartctl -a /dev/sda -j | jq '.ata_smart_attributes.table[4].raw.value')echo "SMART Seek_Error_Rate диска 1: $Seek_Error_Rate1"Spin_Retry_Count1=$(smartctl -a /dev/sda -j | jq '.ata_smart_attributes.table[6].raw.value')echo "SMART Spin_Retry_Count диска 1: $Spin_Retry_Count1"Reallocated_Event_Count1=$(smartctl -a /dev/sda -j | jq '.ata_smart_attributes.table[12].raw.value')echo "SMART Reallocated_Event_Count диска 1: $Reallocated_Event_Count1"Offline_Uncorrectable1=$(smartctl -a /dev/sda -j | jq '.ata_smart_attributes.table[14].raw.value')echo "SMART Offline_Uncorrectable диска 1: $Offline_Uncorrectable1"smart_status1=$(smartctl -a /dev/sda -j | jq '.smart_status.passed')echo "Исправность диска 1: $smart_status1"Raw_Read_Error_Rate2=$(smartctl -a /dev/sdb -j | jq '.ata_smart_attributes.table[0].raw.value')echo "SMART Raw_Read_Error_Rate диска 2: $Raw_Read_Error_Rate2"Reallocated_Sector_Ct2=$(smartctl -a /dev/sdb -j | jq '.ata_smart_attributes.table[3].raw.value')echo "SMART Reallocated_Sector_Ct диска 2: $Reallocated_Sector_Ct2"Seek_Error_Rate2=$(smartctl -a /dev/sdb -j | jq '.ata_smart_attributes.table[4].raw.value')echo "SMART Seek_Error_Rate диска 2: $Seek_Error_Rate2"Spin_Retry_Count2=$(smartctl -a /dev/sdb -j | jq '.ata_smart_attributes.table[6].raw.value')echo "SMART Spin_Retry_Count диска 2: $Spin_Retry_Count2"Reallocated_Event_Count2=$(smartctl -a /dev/sdb -j | jq '.ata_smart_attributes.table[12].raw.value')echo "SMART Reallocated_Event_Count диска 2: $Reallocated_Event_Count2"Offline_Uncorrectable2=$(smartctl -a /dev/sdb -j | jq '.ata_smart_attributes.table[14].raw.value')echo "SMART Offline_Uncorrectable диска 2: $Offline_Uncorrectable2"smart_status2=$(smartctl -a /dev/sdb -j | jq '.smart_status.passed')echo "Исправность диска 2: $smart_status2"echo " "echo "Публикация данных"mosquitto_pub -h $ip -t "srv/Raw_Read_Error_Rate1" -m $Raw_Read_Error_Rate1 -u $usr -P $passmosquitto_pub -h $ip -t "srv/Reallocated_Sector_Ct1" -m $Reallocated_Sector_Ct1 -u $usr -P $passmosquitto_pub -h $ip -t "srv/Seek_Error_Rate1" -m $Seek_Error_Rate1 -u $usr -P $passmosquitto_pub -h $ip -t "srv/Spin_Retry_Count1" -m $Spin_Retry_Count1 -u $usr -P $passmosquitto_pub -h $ip -t "srv/Reallocated_Event_Count1" -m $Reallocated_Event_Count1 -u $usr -P $passmosquitto_pub -h $ip -t "srv/Offline_Uncorrectable1" -m $Offline_Uncorrectable1 -u $usr -P $passmosquitto_pub -h $ip -t "srv/Raw_Read_Error_Rate2" -m $Raw_Read_Error_Rate2 -u $usr -P $passmosquitto_pub -h $ip -t "srv/Reallocated_Sector_Ct2" -m $Reallocated_Sector_Ct2 -u $usr -P $passmosquitto_pub -h $ip -t "srv/Seek_Error_Rate2" -m $Seek_Error_Rate2 -u $usr -P $passmosquitto_pub -h $ip -t "srv/Spin_Retry_Count2" -m $Spin_Retry_Count2 -u $usr -P $passmosquitto_pub -h $ip -t "srv/Reallocated_Event_Count2" -m $Reallocated_Event_Count2 -u $usr -P $passmosquitto_pub -h $ip -t "srv/Offline_Uncorrectable2" -m $Offline_Uncorrectable2 -u $usr -P $passmosquitto_pub -h $ip -t "srv/smart_status1" -m $smart_status1 -u $usr -P $passmosquitto_pub -h $ip -t "srv/smart_status2" -m $smart_status2 -u $usr -P $pass

Запускаем, убеждаемся что в логах Mosquitto broker в Home Assistant светятся обращения

Если не светятся, то или неверо заданы параметры подключения, или брокер закрыт для обращения извне, или не знаю.

Настройка в Home Assistant

Ну, почти все. Осталось в конфиге Home Assistant добавить датчики.

Длинный кусок конфига
sensor:  - platform: mqtt    state_topic: "srv/tempdrive1"    name: "Сервер nextcloud температура диска 1"    unit_of_measurement: C  - platform: mqtt    state_topic: "srv/tempdrive2"    name: "Сервер nextcloud температура диска 2"    unit_of_measurement: C  - platform: mqtt    state_topic: "srv/tempcpu"    name: "Сервер nextcloud температура процессора"    unit_of_measurement: C  - platform: mqtt    state_topic: "srv/fan"    name: "Сервер nextcloud частота кулера"    unit_of_measurement: ppm  - platform: mqtt    state_topic: "srv/temp3"    name: "Сервер nextcloud температура системы"    unit_of_measurement: C  - platform: mqtt    state_topic: "srv/usedrampercent"    name: "Сервер nextcloud использовано RAM"    unit_of_measurement: "%"  - platform: mqtt    state_topic: "srv/usedswappercent"    name: "Сервер nextcloud использовано SWAP"    unit_of_measurement: "%"  - platform: mqtt    state_topic: "srv/freesystemdisk"    name: "Сервер nextcloud занято места на системном разделе"    unit_of_measurement: "%"  - platform: mqtt    state_topic: "srv/freedatadisk"    name: "Сервер nextcloud занято места на разделе данных"    unit_of_measurement: "%"  - platform: mqtt    state_topic: "srv/averageload"    name: "Сервер nextcloud средняя загрузка системы"  - platform: mqtt    state_topic: "srv/uptimedata"    name: "Сервер nextcloud аптайм"  - platform: mqtt    state_topic: "srv/cpuload"    name: "Сервер nextcloud текущая загрузка процессора"    unit_of_measurement: "%"  - platform: mqtt    state_topic: "srv/Raw_Read_Error_Rate1"    name: "Сервер nextcloud диск 1 SMART Raw_Read_Error_Rate"  - platform: mqtt    state_topic: "srv/Reallocated_Sector_Ct1"    name: "Сервер nextcloud диск 1 SMART Reallocated_Sector_Ct"  - platform: mqtt    state_topic: "srv/Seek_Error_Rate1"    name: "Сервер nextcloud диск 1 SMART Seek_Error_Rate"  - platform: mqtt    state_topic: "srv/Spin_Retry_Count1"    name: "Сервер nextcloud диск 1 SMART Spin_Retry_Count"  - platform: mqtt    state_topic: "srv/Reallocated_Event_Count1"    name: "Сервер nextcloud диск 1 SMART Reallocated_Event_Count"  - platform: mqtt    state_topic: "srv/Offline_Uncorrectable1"    name: "Сервер nextcloud диск 1 SMART Offline_Uncorrectable"  - platform: mqtt    state_topic: "srv/smart_status1"    name: "Сервер nextcloud диск 1 SMART статус"  - platform: mqtt    state_topic: "srv/Raw_Read_Error_Rate2"    name: "Сервер nextcloud диск 2 SMART Raw_Read_Error_Rate"  - platform: mqtt    state_topic: "srv/Reallocated_Sector_Ct2"    name: "Сервер nextcloud диск 2 SMART Reallocated_Sector_Ct"  - platform: mqtt    state_topic: "srv/Seek_Error_Rate2"    name: "Сервер nextcloud диск 2 SMART Seek_Error_Rate"  - platform: mqtt    state_topic: "srv/Spin_Retry_Count2"    name: "Сервер nextcloud диск 2 SMART Spin_Retry_Count"  - platform: mqtt    state_topic: "srv/Reallocated_Event_Count2"    name: "Сервер nextcloud диск 2 SMART Reallocated_Event_Count"  - platform: mqtt    state_topic: "srv/Offline_Uncorrectable2"    name: "Сервер nextcloud диск 2 SMART Offline_Uncorrectable"  - platform: mqtt    state_topic: "srv/smart_status2"    name: "Сервер nextcloud диск 2 SMART статус"  - platform: mqtt    state_topic: "srv/raid_system_status"    name: "Сервер nextcloud RAID статус системного раздела"  - platform: mqtt    state_topic: "srv/raid_var_status"    name: "Сервер nextcloud RAID статус раздела данных"

Перезагружаем, запускаем еще разок скрипты на сервере, чтобы данные опубликовались первый раз, и все! Для красоты можно создать карточку на дашборде. Смысла в ней особенно нет, какие то критические показатели можно вынести на главный дашборд, а остальные использовать только в автоматизациях. Но пусть будет:

Убедившись что все работает, добавляем скрипты в крон. Системные показатели я передаю раз в полчаса, состояние дисков раз в час, а состояние smart раз в сутки.

Приведенное решение - не панацея, для других конфигураций настройку очевидно надо корректировать на месте. Кроме того, по аналогии можно интегрировать любой параметр. Получаем нужный параметр той или иной программой -> приводим его к простому виду -> передаем через mqtt.
В следующей статье я опишу свой вариант обратной интеграции - когда linux компьютер выступает в качестве исполнительного элемента для умного дома, то есть меняет состояние устройств, выводит сообщения, воспроизводит звуки.

Также для многих будет не очевидна необходимость контролировать состояние сервера на умном доме - имея задачей только рассылку уведомлений проще делать это непосредственно на контролируемом сервере. Хотя некоторые данные хорошо бы хранить исторически, так что смысл все же есть. Кроме того, я интересно и с пользой провел воскресный вечер.

На скриншоте видно, что обсуждаемый сервер запланирован под nextcloud. Его внутренние показатели тоже можно прекрасно добавить в HA, для этого там есть чудесный api. А у HA есть встроенная интеграция.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru