Є завдання, вмикати освітлення у приміщенні тамбура перед квартирою, за певними персоналізованими умовами.
SONOFF S26 - Tasmota |
Умови
- ручне керування: вимикання, вмикання на короткий час, на довгий час
- віддалене керування через MQTT брокер, вимикання, вмикання на короткий час, на середній час,на довгий час.
- вимикання завжди за аварійним або контрольованим таймером
Реалізація
Модифікуємо прошивку пристрою на альтернативну - Tasmota
Після цього етап первинних налаштувань Tasmota, створення шаблону, додавання правил автоматизації.
Шаблон з модифікацію для кнопки |
Основне меню |
Надалі в меню Console виконую команди налаштувань і додавання правил.
Rules
rule1 ON power1#state=0 DO PulseTime1 444 ENDON ON event#short DO backlog0 PulseTime1 280;power 1 BREAK ON event#mid DO backlog0 PulseTime1 400;power 1 BREAK ON event#long DO backlog0 PulseTime1 1900;power 1 BREAK ON button2#state=11 DO event mid=1 BREAK ON button2#state=2 DO power 0 BREAK ON button2#state=3 DO event long=1 BREAK rule1 1 backlog PulseTime1 444;PowerOnState 0;SetOption0 0;LedState 0;sleep 75;savedata 0; restart 1
Опис правил
За зміною шаблону для Button - 1 на 2, я відокремлюю багатофункціональну обробку дій на натискання клавіші пристою.
При поодинокому натисканні клавіші - вимикання, два рази - вмикання на термін 300 секунд, довготривале натискання (4 сек) - вмикання на довгий термін 1800 секунд.
Аварійний термін ввімкненого стану є 344 сек. Він описаний в системі при старті як PulseTime1 444, а також значення оновлюється через правила при кожному вимкненні реле пристою.
ON power1#state=0 DO PulseTime1 444 ENDON
Натискання на клавішу пристрою обробляється за button2#state, де state: 2 - просте поодиноке коротке натискання, 11 - подвійне натискання, 3 - довго тривале (HOLD) натискання.
Для логіки роботи подвійного натискання, генерується нова подія - mid, для довгого натискання - long.
ON button2#state=11 DO event mid=1 BREAK ON button2#state=3 DO event long=1 BREAK
А просте натискання кнопки - вимикає реле
ON button2#state=2 DO power 0 BREAK
Події обробляються в rule1 так:
ON event#short DO backlog0 PulseTime1 280; power 1 BREAK ON event#mid DO backlog0 PulseTime1 400; power 1 BREAK ON event#long DO backlog0 PulseTime1 1900;power 1 BREAK
Де є послідовність команд без затримки для корегування таймеру PulseTime1, і ввімкнення реле - backlog0 : PulseTime1 N; power 1. Де: N - різна травились таймеру ввімкненого стану (час в секундах + 100)
Також встановленні наступні параметри через команди в консолі:
- rule1 1 - ввімкнути обробку правила 1
- PowerOnState 0 - при ввімкнені пристрою завжди реле вимкнено.
- SetOption0 0 - не зберігати зміни налаштувань автоматично
- LedState 0 - режим синього світлодіоду - максимально вимкнено
- sleep 75 - зменшення швидкості роботи контролера у сторону меншого споживання енергії
- savedata 0 - не зберігати стан стану реле.
- restart 1 - перезавантажити пристрій зі збереженням налаштувань
Віддалене керування через MQTT
За попередніми публікаціями (Перший код в LUA. Скрипт для роутера з OpenWRT. MQTT та Telegram статус підключених WiFi clients, Нотатки : Простий скрипт для MQTT в OpenWRT : відсилання Telegram повідомлень з Emoji. Tasmota. ) я описував як створив дуже простий контролер для обробки невеликої кількості команд MQTT, на базі скрипту у домашньому роутері на базі OpenWRT.
mosquitto_pub -t "cmnd/S26-01/event" -m "long=1"І тут я показую частину скрипту з роутера котрий аналізує стан дверей (door/closed, door/locked), і стан присутності людей в зоні дії WiFi (tele/wifi_users/LWT) через топіки брокера.
mosquitto_pub -t "cmnd/S26-01/power" -m "0"
iDoor=$'\xF0\x9F\x9A\xAA' iLockON=$'\xf0\x9f\x94\x90' iLockOFF=$'\xF0\x9F\x94\x93' iON=$'\xf0\x9f\x9f\xa9' iOFF=$'\xF0\x9F\x94\xB4' iCLED=$'\xF0\x9F\x94\xA6' IFS=" " while true; do mosquitto_sub -v -t 'door/#' -t 'stat/S26-01/POWER' -t 'tele/+/SENSOR' -t '+/+/LWT' -q 0 | \ while read t v; do #echo "readed topic:$t, message:$v" case "$t" in "door/closed") a=$(eval "echo \${i${v}}") notify "${iDoor}${a}" 0 if [ "$v" == "OFF" ];then publish "cmnd/S26-01/event" "long=1" "-q 1" fi ;; "door/locked") a=$(eval "echo \${i${v}}") b=$(eval "echo \${iLock${v}}") notify "${b}${a}" 0 stateLocked=$v if [ "$stateLocked" == "ON" ];then publish "cmnd/S26-01/event" "short=1" "-q 1" fi ;; "tele/wifi_users/LWT") if [ "$v" -gt 0 ]; then if [ "${stateDual2P1}" == "OFF" ]; then stateDual2P1=ON publish "cmnd/S26-01/event" "long=1" "-q 1" fi else stateDual2P1=OFF publish "cmnd/S26-01/power" "0" "-q 1" fi ;; "stat/S26-01/POWER") a=$(eval "echo \${i${v}}") notify "${iCLED}${a}" 0 ;; done sleep 5 echo "restat loop" done
Сповіщення в Telegram
Так виглядає реальне сповіщення про стан дверей, замку дверей, та освітлення приміщення за дверми квартири (S26-01).
Статуси роботи в телеграм |
P.S. Так як тамбур спільний то не було використано простий датчик руху, а застосовувано більш персональне рішення ввімкнення/вимкнення. Надалі буде додано пошук пристою за Bluetooth (телефон, розумні годинки, фітнес трекери, iBeaсon) щоб визначати чи знаходиться близько свій-чужий пристрій у додаток до знань про WiFi клієнтів.
Немає коментарів:
Дописати коментар