Я решил оповещения сделать на основе jabber, тем более, что данный вариант позволяет даже управлять openHABом из jabber. Создаем учетную запись (xmpp или jabber). Ищем секцию xmpp в openhab.cfg. Прописываем сервер, логин, пароль.
Отправляем команду help:
(15:22:48) I: help (15:22:49) my****@jabber.org: Usage: update ⟨item⟩ ⟨state⟩ - sends a status update for an item send ⟨item⟩ ⟨command⟩ - sends a command for an item status ⟨item⟩ - shows the current status of an item items [⟨pattern⟩] - lists names and types of all items matching the pattern say ⟨sentence to say⟩ - Says a message through TTS on the host machine ⟩ ⟨script to execute⟩ - Executes a script
Теперь разберемся, как нам послать сообщение о смене статуса открытого замка. Для этого просто создадим новое правило в home.rules:
rule "Door Check Lock Send" when Item Main_Door_Lock changed then if(Main_Door_Lock.state==1) { sendXMPP("jabber@jabber.org", "Замок двери открыт!") } else if(Main_Door_Lock.state==0) { sendXMPP("jabber@jabber.org", "Замок двери закрыт!") } else{ sendXMPP("jabber@jabber.org", "Неполадки с датчиком замка двери!") } end
Очень помогает в написании правил функция авто-дополнения в дизайнере (Ctrl+Space), ибо документация по этому поводу хромает.
Поэкспериментировав понимаем, что время отклика оставляет желать лучшего. Смотрим лог owfs - датчик опрашивается openHAB'ом раз в минуту - это как раз настройка в openHAB. К сожалению на данный момент время обновления едино для всех датчиков 1-wire в openHAB. Поэтому ничего не остается, как сменить частоту обновления хотя бы на раз в 10 секунд.
Кеш owfs для датчиков по умолчанию 15 секунд. Поэтому, чтобы получать свежие значения, надо изменить его на 10 секунд. Пропишем в owfs.conf:
timeout_volatile = 10 #error_print = 1 error_print = 3 error_level = 2
error_print = 3 обозначает подавление логов - при опросе раз в 10 секунд из слишком много.
Протестировав я понял, что и 10 секунд слишком много. Но дальше увеличивать частоту опросов всех датчиков накладно. И вообще неплохо бы использовать unchached значения из owfs для датчиков, а кеш использовать только для датчиков, данные которых не критичны в времени опроса - например, датчики температуры. Но в openHAB пока с этим проблемы. Поэтому будем использовать небольшой хак. Для датчиков мы будем использовать exec binding и получать данные с файловой системы. Формат запроса:
in: exec:"<[<commandline execute="" to="">:<refreshintervalinmilliseconds>:<transformationrule>]"
items:
Number Main_Door_Lock "Замок в двери C: [MAP(ru.map):%s]"<door>(Doors) { exec="<[/bin/cat /mnt/1wire/uncached/12.A214B2000000/sensed.A:5000:REGEX((.*?))]" }
В принципе, тут можно использовать и Contact.
Результат срабатывания правила:
Последний штрих - теперь нам надо настроить запуск приложения файловой системы owfs, потому что мы с него получаем данные. (Проверьте, что у вас запускается при старте в директориях rc.d).
# update-rc.d owfs defaults 30
Не забудьте выставить очередь запуска после owserver (у меня, как видно 30, а у owserver 20)!