MYCSS

2022-01-15

Нотатка: Динамічний таймер на базі "розумної" розетки SONOFF S26 з Tasmota та MQTT

Є завдання, вмикати освітлення у приміщенні тамбура перед квартирою, за певними персоналізованими умовами.

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.

Таким чином я відсилаю команди брокеру MQTT для пристрою S26-01, для різних станів:
mosquitto_pub -t "cmnd/S26-01/event" -m "long=1"
mosquitto_pub -t "cmnd/S26-01/power" -m "0"
І тут я показую частину скрипту з роутера котрий аналізує стан дверей (door/closed, door/locked), і стан присутності людей в зоні дії WiFi (tele/wifi_users/LWT) через топіки брокера.
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 клієнтів.

Немає коментарів:

Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready