Итак, замес начнем с понимания смысла работы пульта-выключателя, поскольку управление работой МТ-1132 полностью находится в нашей власти.
Мой пульт называется PU311-2. Он имеет три кнопки.
Логика работы такова:
- одинарное нажатие на каждую из кнопок отправляет в эфир команду 4, значение которой — одномоментно изменить состояние забинденного силового блока на противоположное.
- долгое нажатие отправляет команду 5. Ее задача — плавно изменить состояние силового блока на противоположное. Причем, отпускание кнопки посылает команду 10 — прекратить выполнение операции. То есть, если нажатие было не слишком долгое, яркость просто изменяется в ту или иную сторону.
Однако, следует помнить, что и силовой блок может работать в двух режимах — диммирования и релейном. В релейном режиме для силового блока нет различия между командами 4 и 5 — и по той и по другой он просто меняет свое состояние на противоположное: «реле» либо включено либо выключено.
Вот это тайное знание и будем принимать во внимание при работе с модулями.
Сначала будем разбираться с релейным режимом работы силового блока и потому, что он значительно проще, и потому что … я еще даже не решил, как буду организовывать логику работы приемника в режиме диммирования. Проблема здесь вот в чем: если подана команда 5 и она существует некоторое время, а затем прерывается командой 10, то установившееся значение яркости света нам не известно. Его можно лишь приблизительно определить, если создать таймер и провести расчеты. Сделать это, конечно, можно. Но что-то подсказывает мне, что овчинка выделки не стоит. В общем, «я подумаю об этом завтра».
Чтобы ввести силовой блок в релейный режим работы — его надо просто купить. Он по умолчанию работает именно так: «вкл/выкл». Диммирование включается путем перерезания небольшой петли, которая приаттачена к устройству. И ее необходимо не только перерезать, но и хорошо заизолировать кончики проводов — все это находится под напряжением 220 вольт всегда, когда силовой блок подключен к сети. Соблюдаем меры безопасности неукоснительно! Никаких манипуляций с силовым блоком, когда он включен в сеть, за исключением его сопряжения с пультами.
Итак, в OpenHab любое устройство есть item, который определяется в файле с расширением «*.items» , который находится по адресу /opt/openhab/configurations/items/.
Создадим в этой директории файл noolite.items, а в нем создадим один элемент (он же item):
Switch Noolite "Noolite" { exec=">[OFF:python /home/pi/noolite.py 0 0] >[ON:python /home/pi/noolite.py 0 2]"}
Создадим в директории /opt/openhab/configurations/sitemaps файл noolite.sitemap с таким содержанием:
sitemap noolite label="Noolite"
{
Frame {
Switch item=Noolite
}
}
После сохранения этих двух файлов у вас должна возникнуть картинка с изображением выключателя, легкое нажатие на который будет заставлять лампочку, подключенную к силовому блоку гаснуть и выключаться.
Что мы сделали? Мы создали итем, который на канал 0 отправляет команды 0 и 2, путем вызова скрипта noolite.py, который располагается у нас в директории /home/pi
Мы можем создать в файле noolite.items столько выключателей, сколько имеем силовых блоков — различие будет заключаться лишь в номерах их каналов, к которым привязан наш МТ1132.
Таким образом, мы уже достигли нирваны включения и выключения электричества через Интернет. Но, полагаю, это только начало.
Следующим шагом должна стать информационная привязка каждого item-выключателя к информации, поступающей от RX2164 о том, не был ли нажат соответствующий пульт управления.
Мы помним, что, в общем случае, пульты управления не посылают команд 0 (выключить) и 2 (включить) привязанным блокам, а посылают команды 4 и 5 (изменить состояние на противоположное). Поэтому, прямое сопряжение нашего выключателя с пультом невозможно — выключатель будет всегда получать одну и ту же команду. Мы обойдем эту проблему следующим образом: создадим невидимый (двойник) item-приемник команды, и логически будем менять состояние основного выключателя каждый раз по получении команды на двойник.
Уточняем файл noolite.items
Switch Noolite "Noolite" { exec=">[OFF:python /home/pi/noolite.py 0 0] >[ON:python /home/pi/noolite.py 0 2]"}
Number NooliteP "Noolite - двойник [%s]" { mqtt="<[mosquitto:/myhome/noo/1/state:state:default]"}
Мы создали не выключатель, а итем типа номер — он принимает любую пришедшую информацию и выводит ее на экран. Причем этот итем получает информацию от MQTT брокера через привязку к тому номеру канала (в данном случае — 1), к которому привязан в приемнике.
(Вообще, чтобы не путаться, предлагаю в привязках модуля MT1132 не использовать нулевой канал, а лишь с 1 по 31. Надеюсь, хватит нам. Тогда и в передатчике и в приемнике каналы будут одинаковые — путаница исчезнет).
Уточняем и файл noolite.sitemap . Выведем на экран вновь созданный итем, но только информационных целях. Потом его нужно будет удалить:
sitemap noolite label="Noolite"
{
Frame {
Switch item=Noolite
Text item=NooliteP
}
}
Теперь, при каждом нажатии на пульт управления, наш итем должен показывать цифру 4. Или 5, если подержать подольше. Может, также, выдавать и цифру 10.
И последним в этой заметке шагом будет создание правила, которое соединит вместе все элементы. В папке /opt/openhab/configurations/rules создаем файл noolite.rules
import org.openhab.core.library.types.*
import org.openhab.core.persistence.*
import org.openhab.model.script.actions.*
rule "change noolite"
when
Item NooliteP received update 4 or
Item NooliteP received update 5
then
if (Noolite.state == OFF) {
Noolite.state = ON
}
else {
Noolite.state = OFF
}
end
В этом правиле написана простая вещь: если итем NooliteP получает информацию о команде 4 или 5 (но не 10!), то он анализирует состояния итема Noolite и меняет его на противоположное.
Таки образом, мы научили OpenHab соединять вместе четыре элемента — выключатель, силовой блок, приемник и передатчик. Теперь OpenHab может отправлять команды на включение и выключение освещения, а также меняет отображаемое состояние управляемого выключателя в зависимости от информации, полученной с приемника. То есть, мы, теперь готовы управлять светом через интернет, путем нажатия кнопок на экране смартфона или компьютера. Можно ли это назвать умным домом? Вряд ли.
Что дальше? Дальше попробуем разобраться с тем, как управлять диммируемыми выключателями, сделаем автоматическое включение и выключение света, когда вы приходите домой или уходите из него, а также попробуем сделать световой будильник — плавное включение света по расписанию.
Но в это в следующих заметках. А пока видео того, что у Вас должно получиться:
Пояснение. На видео, вместо нажимания кнопки пульта, я отправляю команду через MQTT брокер. Очень далеко от меня сейчас все это устройство 🙂 Пульт не «добьет».
Вы видите, что лампа включается через OpenHab вначале видео, а затем, в левой нижней части брокер изменяет значение кнопки — свет при этом не переключается. Если бы я нажимал пульт — одновременно бы переключался и свет.
Подскажите пожалуйста если я использую
mt1132 и rx2162 на одном устройстве, как файл noolite.items у меня должен выглядеть?
эту строку мне нужно поменять:
Number NooliteP «Noolite — двойник [%s]» { mqtt=»<[mosquitto:/myhome/noo/1/state:state:default]"}
НравитсяНравится
Смотрите в чем логика.
1. Любой switch (здесь — Noolite), завязанный на передачу команды модулю nooLite, передает силовому блоку на исполнение команду 0 (выключить), или 2 (включить).
2. Однако все пульты управления nooLite, исключая датчик движения, передают силовому блоку команды 4 или 5, который силовой блок интерпретирует в зависимости от своего текущего состояния. Если блок выключен — включается и наоборот.
3. Мы, посредством любого приемника, можем принять дублированные от пультов только именно эти команды (4, 5) и, как и силовой блок, должны их интерпретировать.
4. Поэтому для каждого switch создается дополнительный number (здесь — NooliteP) — именно на него принимается команда от пульта.
5. Как только от пульта приходит команда и захватывается NooliteP — в дело вступает rule (правило).
Это правило читает текущее состояние Noolite.state и в зависимости от него — меняет на противоположное.
Если Вы используете приемник и передатчик на одном устройстве — Вам, возможно, придется менять определение NooliteP в зависимости от того, на какую ячейку Вы забиндили прием данных для конкретного выключателя.
НравитсяНравится
Неплохо. Одно категорически непонятно.
Вы в своем примере отправляете данные в топик mqtt вручную и openhab конечно же реагирует. Вопрос в том, как заставить свисток RX самого свистеть в нужные mqtt топики?
Т.е. я нажимаю кнопку на привязанном пульте, в топике mqtt меняется значение. Ну а дальше я его конечно прочитаю и изменю состояние исполнительного устройства.
Вопрос не праздный, весь мозг сломал уже… Откопал такой binding OpenHABNoolite поиском ищется… Но не могу заставить его работать.
НравитсяНравится
Ничего не понял.
Тот биндинг, что кто-то написал за nooLite — зачем он? Работа OpenHAB идет с MQTT биндингом, которому безразлично что на другом конце провода.
НравитсяНравится