Ось простий і дешевий спосіб автоматизувати активування електричного бойлера. На OLX є багато «розмних розеток». Особливо від компанії tuya. Наприклад, мені вдалося купити таку за 300 ₴ (~$8). Вона прийшла без будь-якої писаної інструкції чи навіть без ідентифікації. Проте є багато посібників і керівництв в інтернеті, і після кількох спроб і помилок вдалося заставити прилад відкрити точку доступу WiFi. Після приєднання до неї, можна скористатися застосунком Андроїду Smart Life, щоб сконфігурувати з’єднання із WiFi локальної мережі. Цього цілком досить, щоб почати керувати розеткою вручну, наприклад, вмикати і вимикати за розкладом.

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

Я взяв першу-ліпшу бібліотеку мовою Python, що з’явилася в пошуку: tinytuya. Вона має детальні інструкції про те, як зареєструватися розробником, виявити ідентифікатор пристрою і отримати необхідний ключ для керування. Зрештою, я трохи адаптував програму з прикладів, щоб увімкнути реле:

#!/usr/bin/env python

import tinytuya, time

while True:
    try:
        d = tinytuya.OutletDevice(dev_id="<id>", address="<addr>", local_key="<key>", version=3.3)
        status = d.status()
        if status['dps']['1']:
            break
        print("Turn on")
        d.turn_on()
        time.sleep(60)
    except Exception as e:
        print(f"Exception {e}")
        time.sleep(10)

Після цього скрипт обгортається у службу systemd:

[Unit]
Description=Запуск бойлера
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
User=sakhnik
Group=users
ExecStart=/usr/bin/python /home/sakhnik/work/boiler/boiler.py
StandardOutput=journal

[Install]   
WantedBy=default.target

Служба повинна запускатися таймером:

[Unit]
Description=Запустити бойлер через певний час

[Timer]
OnBootSec=15min

[Install]
WantedBy=timers.target

І таймер потрібно активувати:

systemctl daemon-reload
systemctl enable boiler.timer

Нарешті, реле потрібно сконфігурувати у застосунку Smart Life, щоб завжди починало роботу у вимкненому стані. Коли відновлено живлення, перемикач початково вимкнено і комп’ютер завантажується. Через 15 хвилин, таймер запускає службу, яка виконає програму увімкнення перемикача. Це одноразова дія, тож можна продовжити керувати вимикачем будь-яким іншим способом.

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