Від кондиціонера по таймеру до 34 автоматизацій: п’ять років розумного дому

Як блекаути, переїзд і кіт Дмитро зробили з мого хобі повноцінну домашню платформу

Все почалося з кондиціонера.

2020 рік, літо, я повертаюсь додому після роботи — а в квартирі +32°C. І я думаю: а що якби він вже працював коли я заходжу? Так з’явилась перша «автоматизація» — Mi Remote 360, ІЧ-бластер який вмів імітувати пульт. Налаштував геозону, написав сценарій. Кондиціонер починав охолоджувати за 10 хвилин до мого приходу.

Це було дрібно. Але це було магічно. І я зрозумів що не зупинюсь.

Є думка що розумний дім — це коли заходиш в Apple Home і натискаєш кнопку «увімкнути світло». На мій погляд — це просто дистанційне керування. Розумний дім — це коли нічого не треба натискати. Взагалі.

2020–2021: Aqara-ера

Після Mi Remote прийшов Aqara Hub. Потім розумні лампочки. Потім датчики руху. Потім я почав контролювати світло в кожній кімнаті — вмикати при русі, вимикати через N хвилин після того як нікого нема.

Виглядало як іграшка. Але насправді це були перші кроки в розуміння того як думає автоматизація: тригер → умова → дія.

Мінус Aqara тих часів — закрита екосистема. Все працює тільки між собою. Хочеш щось підключити ззовні — удачі.

2022: Блекаути і єСвітло

2022 рік приніс масові відключення. Графіки по 12 годин, невідомість коли повернеться. Тоді я створив проєкт «єСвітло» і написав про нього окрему статтю на DOU — ось вона.

Але автоматизація на той момент — лише сповіщення. Пуш прийшов — сам пішов вимкнув зайве. Я хотів більше.

2024: Переїзд і перший справжній розумний дім

2024-го я переїхав у власне житло — поки що сам. Нарешті можна було зробити все «по-дорослому»: поставити EcoFlow Delta 2 і АВР — автоматичний ввід резерву. Фізичний пристрій в щитку який сам перемикає квартиру між міською мережею і батареєю без участі телефону і без інтернету.

І от перша проблема: коли квартира живе від EcoFlow — ємність обмежена. Не хочу щоб при відключенні запалювалось все підряд. Потрібна умова: «якщо зараз від батареї — вмикай тільки необхідне».

Для цього треба знати стан EcoFlow. EcoFlow має API. Але як його поєднати з Aqara Home? Ніяк — Aqara Home для цього не відкрита. І тоді я знайшов Home Assistant.

Home Assistant: збираємо все в одне місце

Спочатку я просто перетягнув туди все що вже мав:

  • Датчики і лампи Aqara — через Zigbee (Sonoff Zigbee Dongle Plus)
  • Пристрої Xiaomi — більшість із них BLE, тому використовую Xiaomi BLE інтеграцію
  • Техніка Samsung — через SmartThings
  • Повітряна тривога — через офіційну інтеграцію
  • Графіки відключень — самописна інтеграція яка читає сайт Обленерго
  • EcoFlow — через самописну community-інтеграцію (офіційної досі немає)

Кожна платформа окремо — біль. Разом в HA — раптом все починає розмовляти одне з одним.

# Найважливіший сенсор всього проєкту:
# є зараз міська мережа чи ні?
template:
  - binary_sensor:
      - name: "Grid power available"
        state: 
>
          {% set v = states('sensor.vashing_machine_voltage') %}

          {{ v not in ['unknown','unavailable','none'] and v | float(0) > 150 }}

АВР до HA я не підключав — він вбудований в щиток і нічого назовні не виставляє. Тому визначаю наявність мережі непрямо: є напруга на пральній машині → є мережа. Хак, але надійний.

На цьому одному сенсорі тримається майже вся логіка квартири.

Двотарифний лічильник і розумне заряджання EcoFlow

В Україні є двотарифний облік електроенергії: вночі — з 23:00 до 07:00 — тариф вдвічі нижчий. Зараз це 2.16₴/кВт вночі проти 4.32₴/кВт вдень.

EcoFlow Delta 2 — це по суті великий акумулятор. Якщо заряджати його вночі по дешевому тарифу, а вдень він просто стоїть заряджений і чекає відключення — реальна вартість «запасеної» електрики вдвічі нижча. Але просто заряджати щоночі теж неправильно: якщо наступне відключення тільки завтра, можна дочекатись ночі і зарядити дешевше.

Тому я зробив бінарний сенсор ecoflow_strategic_charging — він вирішує одне питання: чи варто зараз заряджатись? І вирішує це з урахуванням кількох факторів одночасно.

Логіка пріоритетів

- name: "EcoFlow Strategic Charging"

  unique_id: ecoflow_strategic_charging

 device_class: battery_charging
  state: 
>
    {# Стан тривоги та нічний тариф #}

    {% set is_alert = is_state('binary_sensor.air_alert', 'on') %}

    {% set is_night_tariff = now().hour >= 23 or now().hour < 7 %}

    {# Обробка часу наступного відключення #}

    {% set next_outage_raw = states('sensor.rivneoblenergo_next_blackout_start') %}

    {% set next_outage = as_datetime(next_outage_raw) if next_outage_raw not in ['unavailable', 'unknown', 'none'] else none %}

{% set midnight = today_at("00:00") + timedelta(days=1) %}

    {# Виконання логіки за пріоритетами #}

    {% if is_alert %}

      on   {# Повітряна тривога — заряджаємо негайно #}

    {% elif next_outage is none %}
      off  {# Графіків немає — економимо #}

    {% elif is_night_tariff %}
      on   {# Нічний тариф — дешева електрика #}

    {% elif next_outage >= midnight %}
      off  {# Відключення тільки завтра — чекаємо ночі #}

    {% else %}
      on   {# Відключення сьогодні до півночі — краще зарядити зараз #}

    {% endif %}

Порядок перевірок важливий:

  1. Повітряна тривога — заряджаємо негайно. Після відбою може відразу прийти відключення, краще мати запас.
  2. Немає графіків — вимикаємо зарядку. Якщо не знаємо коли відключення, не витрачаємо зайвого вдень.
  3. Нічний тариф — заряджаємо. Незалежно від графіків — дешева електрика, гріх не скористатись.
  4. Відключення тільки завтра — чекаємо ночі. Навіщо заряджати вдень по 4.32₴ якщо вночі буде 2.16₴?
  5. Відключення сьогодні — заряджаємо зараз. На нічний тариф вже не встигаємо.

На цей сенсор вішаються автоматизації які виставляють Input Current і Max Charge Level безпосередньо на EcoFlow через API. Коли сенсор on — заряджаємо на повну. Коли off — ставимо мінімальний струм вхідного заряджання 200 Ват та максимальне заряджання на рівень 50% (менше Ecoflow не дозволяє).

За 15 хвилин до відключення

Окремо є автоматизація яка вмикає інвертор EcoFlow завчасно — ще до того як мережа зникне:

triggers:
  - trigger: template
    value_template: >
      {% set start_time = states('sensor.rivneoblenergo_next_blackout_start') %}
      {% if start_time not in ['unknown', 'unavailable', 'None'] %}
        {% set seconds_to_start = as_timestamp(start_time) - as_timestamp(now()) %}
        {{ 0 < seconds_to_start <= 900 }}
      {% else %}
        false
      {% endif %}
  - trigger: state
    entity_id: binary_sensor.grid_power_available
    from: 'on'
    to: 'off'

Тобто або за 15 хвилин за графіком, або миттєво по факту — якщо відключили раніше.

Холодильник теж розумний

Окрема маленька автоматизація яка непомітна, але корисна.

Під час відключення квартира живе від EcoFlow Delta 2. Ємність обмежена, і холодильник — один з найбільших споживачів. Він постійно підтримує температуру, компресор вмикається і вимикається. Що тепліше допустима температура — тим рідше він це робить.

Тому при блекауті я автоматично піднімаю допустиму температуру в холодильнику і морозилці до максимуму — продукти не зіпсуються за кілька годин, зате батарея економить. Коли мережа повертається — все повертається до звичних налаштувань:


- alias: Fridge - relaxed mode   # при відключенні
  triggers:
  - trigger: state
    entity_id: binary_sensor.grid_power_available
    to: 'off'
  actions:
  - type: set_value
    entity_id: fridge_temperature
    value: 7    # замість звичайних 3°C
  - type: set_value
    entity_id: freezer_temperature
    value: -15  # замість -19°C

- alias: Fridge - strict mode    # при поверненні мережі
  triggers:
  - trigger: state
    entity_id: binary_sensor.grid_power_available
    to: 'on'
  actions:
  - type: set_value
    entity_id: fridge_temperature
    value: 3
  - type: set_value
    entity_id: freezer_temperature
    value: -19

На графіку споживання електроенергії холодильником видно блек-аут з 7 до 11 і видно як холодильник економив електроенергію в цей час.

Дрібниця — але саме з таких дрібниць і складається різниця між «розумним домом» і просто набором гаджетів.

Виходить за межі дому: Telegram-канал

Десь в процесі я зрозумів що ця інформація корисна не тільки мені. Тепер статуси про відключення і графіки публікуються в Telegram-канал — не тільки мені в особисті повідомлення.

Але є важливий нюанс: якщо активна повітряна тривога — нічого про стан світла не публікується. Я свідомо не хочу публікувати факти відключень під час тривоги — це може бути результатом прильоту, і такі дані не повинні вилітати в публічний канал.

- alias: Blackout started
  triggers:
  - trigger: state
    entity_id: binary_sensor.grid_power_available
    to: 'off'
    for:
      minutes: 3
  conditions:
  - condition: state
    entity_id: binary_sensor.m_rivne_ta_rivnenska_teritorialna_gromada_air
    state: 'off'  # мовчимо якщо тривога
  actions:
  - action: telegram_bot.send_message
    data:
      message: >
        Немає світла 🕯
        Відновлення заплановане о {{ as_timestamp(states('sensor.rivneoblenergo_next_blackout_end'))
        | timestamp_custom('%H:%M') }}
      target:
      - '192484569'       # особисто
      - '-1002499086761'  # канал

Те саме з графіками: коли з’являється новий час відключення — канал отримує повідомлення. Людям з мого будинку та будинків на районі корисно.

Біль: Ajax і закриті системи

Окрема і незакрита тема — охоронна система Ajax. Вона встановлена в квартирі, вона непогана, але вона повністю закрита для зовнішніх інтеграцій. Жодного API, жодного webhook, нічого що можна підключити до Home Assistant.

А це означає що HA не знає чи є хтось вдома насправді. Якби Ajax міг передавати стан «система поставлена на охорону» або «хтось зайшов» — відкривались б цікаві сценарії:

  • Якщо нас немає вдома і кіт ходить по квартирі — вимикати автоматизації руху щоб не реагували на нього
  • Коли нікого немає — вимикати інвертор EcoFlow щоб не витрачати батарею на підтримку пристроїв у standby
  • Взагалі переходити в режим «порожня квартира» з мінімальним споживанням

Поки що це вирішується через GPS-трекінг телефонів, але це менш надійно. Слідкую за тим чи Ajax колись відкриє API — поки тиша.

Побутові автоматизації: про людське

Кухня вночі. Після 23:00 якщо хтось зайшов — вмикається тільки слабка підсвітка на 2 хвилини. Не осліплює, не будить нікого.

Ванна. Вентилятор вмикається при вологості > 60% і вимикається при < 55%. Жодного таймера — тільки датчик.

Праска. Вимикається через 5 хвилин після того як пішли зі спальні.

Вхідні двері. Якщо двері відкрились поки нас немає вдома — сповіщення миттєво (доповнення до сигналізації AJAX).

Що не вдалось (поки що)

Bosch Smart Controller CT200. Хотів підключити термостат опалення до HA. Є community-інтеграція, але натрапив на баг який досі відкритий: github.com/bosch-thermostat/...#542. Слідкую, чекаю.

АВР не підключений до HA. Найбільша прогалина. Вирішую непрямо через напругу на пральній машині. Рішення є — реле на допоміжний контакт АВР — але руки ще не дійшли.

Що в планах

Показники комуналки. HA поки що нічого не бачить з лічильників — вони звичайні, аналогові. Хочу зробити ESP32 з камерою яка буде фотографувати дисплей і розпізнавати цифри. Далі — автоматична подача показань.

Камери і паркомісце. Поставити камеру надвір і навчити HA розпізнавати чи зайняте наше паркомісце. Frigate + локальна модель.

Синхронізація з Google Calendar. Хтось заходить до мене в кімнату — і не знає чи я на дзвінку. Хочу: якщо в календарі активна зустріч — вмикати лампу певним кольором, який означатиме «Увага, я на мітингу» без слів.

Котячий лоток. Найамбітніший пункт. Є лоток, є мій кіт Дмитро. Хочу щоб коли він сходив у туалет — автоматично вмикалась витяжка у ванній, поки я його не приберу. Датчик вже є, автоматизація — справа найближчого вечора.

Ajax інтеграція. Якщо колись з’явиться — переписати логіку присутності повністю. Тоді можна буде коректно вимикати автоматизації руху поки вдома тільки кіт, і зупиняти інвертор коли квартира порожня.

Що це дало насправді

Блекаути стали майже непомітними: тому що система сама попереджає, сама перемикається, сама знає коли все добре. Фонова тривога зменшилась.

Реальна економія: заряджаємо вночі по 2.16₴/кВт, а не вдень по 4.32₴/кВт. За місяць відчутно.

І головне: я не думаю про побут. Не думаю чи вимкнув праску, чи горить світло в коридорі, чи встигне зарядитись батарея до відключення. Система думає замість мене. Це і є розумний дім.

Стек

КомпонентДеталі
КонтролерRaspberry Pi 4, 4GB RAM
ПлатформаRasberry Pi OS, Home Assistant Docker Container
ZigbeeSonoff Zigbee Dongle Plus
ПристроїAqara (Zigbee), Xiaomi (BLE), Samsung SmartThings
БатареяEcoFlow Delta 2
РезервАВР (фізичний, не інтегрований в HA)
ОхоронаAjax (закрита система, без інтеграції)
СповіщенняTelegram Bot + Apple Push (iPhone)
Автоматизацій34 (і ростуть)

Висновок

П’ять років тому я хотів щоб кондиціонер охолов до мого приходу. Сьогодні квартира сама знає коли заряджати батарею, коли мовчати під час тривоги, коли попередити сусідів по каналу і коли увімкнути витяжку бо кіт сходив у туалет.

Home Assistant — це не продукт «з коробки». Це конструктор який вимагає часу, терпіння і готовності читати issue на GitHub. Але якщо ви живете в Україні 2024–2025 року і маєте хоч трохи технічного бекграунду — воно того варте.

Питання і думки — в коментарях.

P.S. Ajax, якщо читаєте — будь ласка, дайте API.

Весь конфіг Home Assistant — автоматизації, шаблони, інтеграції — викладено на GitHub: github.com/p1v2/homeassistant

👍ПодобаєтьсяСподобалось16
До обраногоВ обраному5
LinkedIn
Ctrl + Enter
Ctrl + Enter

Головний недолік такого підходу — це існування єдиної точки відмови, при проблемах на якій весь розумний будинок розсипається. У мене HA на RPi5, і в один момент підключений по usb зовнішній вінчестер для бекапів почав сипатися. RPi5 почав генерувати тони флуду в оперативку, і дивно зависав (якщо підключити до монітора, можна було побачити цей флуд на екрані, але по ssh/telnet зайти було неможливо), допомагав лише reset, хоча апаратний watchdog був налаштований. Вирішив перенесенням бекапа на окремий nas, але глобально це проблему не вирішує.

Дуже хороший поінт, дякую 🙌

До речі, буквально нещодавно сам зіткнувся з частковою відмовою — почала сипатись Zigbee-антена (стара, з AliExpress, просто не витримала таку кількість датчиків).

Але навіть у такому сценарії не можу сказати, що «дім розсипався». Просто повертаєшся в режим «як раніше»:
— світло працює через фізичні вимикачі
— автоматизації частково недоступні, але певна функціональність лишається

Аналогічно, якщо повністю впаде Raspberry Pi / Home Assistant —
— вся електрика все одно має можливість керуватись вручну
— АВР працює повністю автономно і не залежить від HA

Плюс є часткове резервування:
— Xiaomi BLE пристрої можна контролювати через їх рідний додаток
— Aqara пристрої які не Zigbee теж через їх додаток

Як на мене, найболючіша відмова в такій системі — це скоріше EcoFlow, бо він уже про енергетику, а не про автоматизацію.

Тому так, single point of failure — важлива тема, і якраз такі кейси добре показують, де її треба прибирати.

Дуже люблю український бренд ZigBee координаторів SMLIGHT. У мене slzb-06, того року зявився slzb-mr3 а цого slzb-ultima

Так, працюють прекрасно. Єдиний недолік, що помітив — невідкалібровані датчики температури, але можна відкалібрувати самому

Якщо на пристрій можна поставити власну прошивку — то можна частину логіки перенести напряму (або хтось вже це зробив) — наприклад, з пристроями на Tasmota цих проблем можна дещо уникнути. А от якщо це zigbee пристрій — то лише через хаб, я не знаходив ламп/реле з zigbee і якоюсь логікою, принаймні з таймером увімкнення/вимкнення.

Home Assistant це не продукт з коробки, але він хоче ним стати і робить кроки для цього. За цим процесом цікаво спостерігати

Як вам Home Assistant Docker? Не маєте перекучого бажання пересісти на Home Assistant OS, щоб застосунки (Add-on) були доступні?

Було б цікаво почитати як з звичайного АВР зробити розумний, я нічого в цьому не розумію. Чи розглядали варіанти розумного АВР на Wi-Fi чи ZigBee, можливо знайшли якісь недоліки для себе?

З приводу присутності я так розумію використовуєте Home Assistant сенсори в телефоні? Є ще варіант використовувати присутність Apple Home (можливо, але це не точно вона буде точніша) Є ще такий проєкт як room assistant www.room-assistant.io, він наче по BLE маячках орієнтується, в тому числі і в телефоні.

Я так розумію єдине що реально з Ajax підключити в Home Assistant це реле. Можливо якось Ajax може статус вдома не вдома передаватиме на реле. Чи пробували протоколом SIA передати статус в Home Assistant? support.ajax.systems/...​e-sia-for-cms-connection www.home-assistant.io/integrations/sia Я раджу але я не тестував)

Синхронізація з календарем. Ви ж живете з котом. Хто зайде до вас у кімнату? Сумніваюсь, що якщо коту щось потрібно він мовчатиме) А насправді було б круто мати червони світильник ON AIR) на столі чи стіні.

оооо, показники комуналки автоматизувати повністю (отримувати поточні показники чере ESP-CAM і зробити якусь інтеграцію для передачі показників в Home Assistant її зараз немає) моя рожева мрія

Автоматизація з праскою крута штука. Зараз сучасні праски самі вимикаються, але для себе вирішив цю проблему елегантніше — не користуюсь праскою)

Повітряні тривоги бувають часто і вони різні. Ecoflow заряджається на будь яку тривогу?

Що означає розумний холодильник? Ви віддалено можете змінити його температуру?

Дякую за такий детальний і змістовний коментар 🙌 Дуже цінно отримати такий фідбек.

Home Assistant (Docker vs OS)
Використовую Docker, бо в мене на цьому ж Raspberry Pi вже крутяться інші сервіси (файловий сервер і т.д.).
HA в Docker працює стабільно, а якщо щось потрібно — просто додаю окремі контейнери (наприклад, Mosquitto). Поки такий підхід повністю закриває потреби.

АВР
Це скоріше «legacy-рішення», яке я поставив раніше, і зараз не дуже хочу його чіпати.
Ключова вимога — щоб перемикання на EcoFlow працювало навіть якщо Raspberry Pi / Home Assistant взагалі не працюють.
Використовую такий АВР: rozetka.com.ua/ua/375769809/p375769809
І, до речі, нещодавно помітив, що в нього є passive output контакти — тобто можна підключити до ESP32 і зробити його «розумним». Просто поки не дійшли руки.

Presence
Загальна присутність визначається через Home Assistant app.
Присутність у кімнатах — через Xiaomi presence sensors. Вони, на відміну від звичайних датчиків руху, можуть визначати, що людина є навіть без руху — це сильно змінює якість автоматизацій.

Ajax
Так, через реле можна витягнути базовий статус (на охороні / ні), але це досить обмежено.
Враховуючи, що в мене через Ajax ще й відкриття вікон і пожежна сигналізація — хотілося б значно глибшої інтеграції за ці гроші.
SIA виглядає як варіант, але не хочу втручатись у налаштування, через які хаб комунікує з охоронною компанією.

Calendar / сценарій «в кімнаті»
Тут мова не тільки про мене — ми живемо разом з дружиною, вона може зайти в кімнату під час дзвінка.
Тому ідея з індикатором (типу «ON AIR») якраз для таких сценаріїв.

EcoFlow
Зараз логіка проста — заряджається на будь-яку тривогу.
Краще хай буде заряджений, ніж ні.

Холодильник
Samsung з SmartThings.
Можна керувати як через застосунок, так і через інтеграцію в Home Assistant (температура і т.д.).
Цікаво, що навіть без HA — прямо в застосунку налаштував нічний тариф (23:00–07:00), і він у цей час робить найбільш енергозатратну операцію — випаровування конденсату.

Лічильники (ESP-CAM)
Так, повністю згоден — це теж у мене в беклозі 🙂

Ще раз дякую за коментар — дуже круто, що підняли ці теми.

Є думка що розумний дім — це коли заходиш в Apple Home і натискаєш кнопку «увімкнути світло». На мій погляд — це просто дистанційне керування. Розумний дім — це коли нічого не треба натискати. Взагалі.

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

Дякую, цікава думка 🙌
Згоден, що гнучкість системи — це ключове, бо сценарії постійно змінюються.
Я якраз у себе теж намагаюсь будувати логіку так, щоб її легко було адаптувати під нові умови.

Згоден, що гнучкість системи — це ключове, бо сценарії постійно змінюються.

Это философское. А принципиально то, что физический мир недетерминирован. Процессы происходят параллельно. Потому императивная машина, в которой команды выполняются последовательно, не подходит для моделирования физических процессов. Нужна новая машина и язык программирования. Вот я это и придумал. www.youtube.com/watch?v=qKUoCeGvXnA.
и сделал. Единственная проблема я на контроллерах не программирую.

Так сделайте пропотип на ЯВУ. Чтобы можно было это пощупать.

Пощупать можно и на .Net Только толку что? Надо виртуальную машину (мою) ставить на контроллер, загружать программы и тогда пробовать.

Вот пример из жизни.

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

Первый пример
Устанавливаем температуру в камере 50 градусов до прогревания продукта до 40, градусов. Потом следующий этап...
Устанавливаем температуру 60 градусов, до прогревания продукта до 50 градусов. Следующий этап...
Устанавливаем температуру 80 градусов, до прогревания продукта до 70 градусов.
Окончание процесса нагревания, ТЭН отключаем и подается звуковой сигнал.|

Вот так это может выглядеть на конфиге, доступном для правки юзером:

{
  "names":
  {
    "T_PRODUCT": "{mb/1/#t1}",
    "T_CAMERA": "{mb/1/#t2}",
    "HEAT": "relay_1/state1"
  },
  "scenes":
  [
    {
      "do": "HEAT={{$ON} && {T_CAMERA < ($T + {{HEAT}?0.5:0})}}"
    },
    {
      "if": "{between(T_PRODUCT, 0, 40)}",
      "do": "T_CAMERA=50"
    },
    {
      "if": "{between(T_PRODUCT, 41, 50)}",
      "do": "T_CAMERA=60"
    },
    {
      "if": "{between(T_PRODUCT, 51, 70)}",
      "do": "T_CAMERA=80"
    },
    {
      "if": "{fire {T_PRODUCT > 70}}",
      "do": "HEAT=0 api/beep"
    }
  ]
}
Устанавливаем температуру в камере 50 градусов на 20 минут. Потом следующий этап...
Далее Устанавливаем температуру 70 градусов на 90 минут
Окончание процесса нагревания, ТЭН отключаем и подается звуковой сигнал.
[
  {
    "do": [
      "HEAT={{ON} && {T_CAMERA < (T_PRODUCT + {{HEAT}?0.5:0})}}",
      "ON=1 T_CAMERA=50 {sleep 20m} T_CAMERA=70 {sleep 90m} ON=0 api/beep"
    ]
  }
]

Черговий обмежений DSL-велосипед.

Або краще наведи приклад де цей DSL не впорається.

Всі подібні велосипеди з часом стають обмеженими, заскладними, і не виконують явну чи неявну «благородну» ціль — дати можливість «простому користувачу»™ керувати автоматизацією не програмуючи. По суті, ти хочеш мати turing-повну мову програмування (маючи цикли й порівняння), але вважаєш, що це можна втулити в декларативну мову. У тебе не буде: 1) нормального інструментарію 2) нормального відлагодження (debug) 3) нормальної розширюваності. Бери Lua чи MicroPython, не створюй погану недодекларативний-недоімперативний DSL

Навіщо ж тоді Home Assistance зробили свій велосипед, дали б юзеру пітона та і все. В тому і сила DSL що він складне робить наглядно та просто. Так, не для всіх випадків, але 90% автоматизацій того і не потребує.

Правильно, «Not invented here» никто не отменял.

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

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

Тут разьясните.

Разъясняю. В машине фон Неймана команды выполняются подряд. Это называется императивное программирование. В моей машине ничего не происходит пока не адресуешься к концепту. После адресации проверяются все события концепта на истинность. Еще раз повторюсь что события в общем случае это логические выражения проверяющие текущее состояние концепта на принадлежность некоторому подмножеству состояний. Например t>15. Каждое событие может иметь множество подписок (команд). Если событие истинно, то выполняется подписки (все параллельно). Под словом выполняется подразумевается адресация. Кроме того так как выражения, проверяющие события на истинность не меняют состояние концепта то они тоже могут выполняться параллельно.
Адресация может иметь 4 типа. Для чтения, для записи, для выполнения и для инициализации. Я думаю после этого объяснения очевидно, что моя архитектура процессора ближе к моделированию физических процессов. См. пример программ у меня на канале.
res.cloudinary.com/...​/svekl8nwihhkz9cfob8e.png
Кроме того эта же архитектура реализует нейронную сеть. Где адресация это синапс, а логическое выражение -функция активации. Ну, и понятно что все это красиво реализуется на нескольких процессорах и шинах данных. Ну, последовательность выполнения формируют пары событие-подписка. В реальном времени. А не подряд как в машине фон Неймана.

Приведите пример конфига с простым примером (чтобы это было понятно юзеру).

Выше привел пример. Настройки в виде какого-то текста, который юзер может отредактировать.

Для юзера чего-то писать не надо. Надо соединить нужные события с требуемыми методами с параметром, если он есть и сохранить. Вот здесь показано как это делать. Не очень талантливо. Можно и красивше придумать, но суть понятна. www.youtube.com/watch?v=YixekWQFl8U
Для продвинутых можно программировать прям в там же.. Программирование заключается в создании новых событий и подписок либо к существующим методам и событиям, либо к вновь созданным.

«Программировать» должен юзер. Для этого и нужен понятный и предметный DSL.

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

Обьясни это владельцу коптильни (уверенный юзер ПК). Если он поймет как ему автоматизировать свои процессы с такой системой — то ок.

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

Ото так хотел. На расслабоне не получится. Надо немного напрячь голову. Куда проще рассказывать? Всего 2 понятия. Событие и подписка. Произошло событие-запускается на выполнение подписка. Это все. Что может быть не понятно?

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

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

Прочитал. До Завтра напишу. Есть вопросы. свяжись вайбер 0961135437

перші кроки в розуміння того як думає автоматизація: тригер → умова → дія.

Логика еще проще "Событие→Подписка. Событие, в общем случае, это и есть логическое выражение. А подписка это адресация. Либо на событие, либо на метод.
По поводу счетчиков, то какие проблемы, если программируете на ESP32? Давно предлагаю универсальную систему. И язык. Вот программа электросчетчика. www.youtube.com/watch?v=KMzyb7FmQDM
За подробности там же на канале или ко мне.

Дякую, що поділились
Цікавий підхід з подієвою моделлю.
У мене в статті якраз більше фокус на побутовому застосуванні і простоті налаштування для реальних сценаріїв, але ідея з подіями теж добре лягає на такі системи.

У мене в статті якраз більше фокус на побутовому застосуванні і простоті налаштування для реальних сценаріїв, але ідея з подіями теж добре лягає на такі системи.

как всегда, все гораздо проще. Сценарии отсутствуют как понятие. Настройка системы заключается в изменении подписок. Вот приблизительно так.. www.youtube.com/watch?v=QPOpHMDUt-c
есть еще распределенное программирование, но я по быстрому не нашел пример на канале. Это программирование управляющих устройств на том же языке в работающей системе. Все устройства в системе равноправны.

Стосовно лічильників. Теж хотів таке зробити, і теж намагався поставити esp32.
Але це погана ідея:
1. Якість фото
2. Освітлення- в технічній ніші його як правило немає
3. Якийсь сусід або сантехнік може похерити халабкти з камерою.
4. Вже й не кажу про ocr, але найменша проблема (в гіршому випадку можна буде підключити за копійки якийсь anticaptcha сервіс, якщо ніщо інше не підійде).

Набагато більш стабільний варіант: встановити лічильник з імпульсним в і до нього лічильник імпульсів. наприклад store.smart-maic.com/...​j-schetchik-impulsov.html

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

—-
Левел 2 це на рівні осбб встановити систему автоматичного зчитування і автоподачі. В нас так зробили із теплом- і зручно і менше приколів із перерахуванням кожного місяця.

Воду, газ і світло підключив через jomjol.github.io/...​-on-the-edge-device-docs
Працює добре, але перед відправленням деінде зробив пост собі в телеграм для перевірки про всяк випадок.

А чи відправляєте автоматично зняті показники кудись?

Так, я ж написав що перед відправкою надсилаю фото і дані для перевірки собі на телеграм і там або підтверджую або виправляю.

Мене цікавить ви якесь API використовуєте?

У кожного сервіса є публічна форма яка відправляє дані, різні флоу звісно можуть бути, але то не проблема, можна подебажити, отримати дані для відправки і автоматизувати.
Можливо колись і апі зʼявиться в цих сервісів, але поки що так.

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

AI on edge пропонує esp32 з діодом який ініціалізується щоразу при зніманні показників, яскравість якого ого теж налаштовується. Якщо будуть засвіти їх можна звичайним шматком паперу прибрати.

Наразі AJAX можна інтегрувати в сценарії з допомогою SIA DC-09. Функціонал обмежений і тільки read-only, але спрацювання датчиків та Armed/Disarmed івенти зможете в розумному будинку «ловити». Налаштовував на Athom Homey, але в HA підтримка також заявлена www.home-assistant.io/integrations/sia

Згоден із автором, особливо коли AJAX пафосно позиціонує себе як гравця на smart home — а по факту став випускати відверто сирі продукти (помітив це ще з часів ковіду).

Ще як варіант купити ajax smart socket / rele і вмикати через нього якийсь інший девайс (якийсь дрібний zigbee donglee чи хз). І по стану цього девайсу детектити під охороною/без охорони, але це певною мірою оверпрайс за таку просту функцію, та й ще резервне живлення думай

AJAX реле дуже сильний оверпрайс для такої простої потреби.

Не дивилися на інтеграцію з github.com/...​ant-addon-victoriametrics для моніторингу? Доречі, автор навіть тут постив в тому році підготовку до блекаутів з екофлоу rtfm.co.ua/...​h-prometheus-and-grafana

Додав інтеграцію в перелік українських інтеграцій dou.ua/forums/topic/49810

Підписатись на коментарі