Системе на основе симбиоза умного дома Xiaomi и домашнего сервера с Domoticz на Raspberry Pi исполнился второй год и в датчиках начали потихоньку умирать батарейки. Поэтому попробуем разобраться с переменной Xiaomi Voltage в Domoticz и сделать уведомление на е-майл о разряженных батарейках.
Первая ласточка, что пора закупаться батарейками выглядела так:
При этом Domoticz говорит, что все Ок - у датчика еще 100% батарейка:
Домотикз позволяем добавить сенсоры Xiaomi Voltage с показаниями напряжения батареи датчиков. Для этого необходимо добавить пользовательскую переменную с именем XiaomiVoltage, тип Целое, значение 0. После этого у Вас в устройствах появится куча новых устройств с именем Xiaomi Voltage.
Для уведомления воспользуемся примером из дистрибутива Domoticz (\domoticz\scripts\dzVents\examples\check battery levels.lua). Немного переделаем его, чтобы уведомления приходили падали не в лог, как в примере, а приходило уведомление на почту. Исходя из того, что в описании производителя пишут срок службы около двух лет, то проверку будем делать раз в неделю в воскресенье, а не каждый час как в примере. Если Вам нужно чаще проверять - просто раскомментируйте нужный таймер в скрипте.
-- значение границы уровня заряда батарейки, ниже которого будем слать уведомление
local BATTERY_THRESHOLD = 80
return {
active = true,
on = {
-- ['timer'] = {'every hour'} -- каждый час
-- timer = {'at 20:47'}, -- каждый день в 20:35
timer = {'at 12:00 on sun'}, -- каждое воскресенье в 12:00
},
logging = {
level = domoticz.LOG_ERROR -- пишем в log только ошибки
},
-- когда таймер выстрелил, выполним секцию execute:
execute = function(domoticz)
local message = ''
local time = os.date('%X') -- время в формате 00:00:00
local date = os.date('%d.%m.%Y') -- дата в формате dd.mm.yyyy
-- first filter on low battery level
local lowOnBat = domoticz.devices().filter(function(device)
local level = device.batteryLevel -- level is 0-100
return (level ~= nil and -- not all devices have this attribute
level <= BATTERY_THRESHOLD)
end)
-- then loop over the results
lowOnBat.forEach(function(lowDevice)
message = message .. 'Device ' ..
lowDevice.name .. ' is low on batteries (' .. tostring(lowDevice.batteryLevel) .. '%), <br>'
end)
-- если переменная message не пустая, шлем уведомление
if (message ~= '') then
-- уведомление через все активные в настройках способы
-- если пользуемся, то лучше убрать <br> в строке формирования message
-- domoticz.notify('Low battery warning', message, domoticz.PRIORITY_NORMAL)
-- запись в log
-- если пользуемся, то лучше убрать <br> в строке формирования message
-- domoticz.log('Low battery warning: ' .. message, domoticz.LOG_ERROR)
-- уведомляем через email
local mess = 'Home time is '..time..' day is '..date..'<br><br>'..message
domoticz.email('Low battery warning',
mess,
'***@gmail.com')
end
end
}
В результате получаем вот такое письмо на e-mail, когда батарейки в датчиках сядут:
Уведомление о разряженной батарейке датчика Xiaomi оправленный умным домом Domoticz
Нерешаемые в данный момент проблемы:
К сожалению датчики температуры не формируют сенсор Xiaomi Voltage, хотя на форуме Domoticz обсуждалось, что и круглые и квадратные датчики возвращают это значение, но система пока неправильно интерпретирует их, а разработчики пока не исправили код.
Скрипт miflora.py для опроса цветочных датчиков Xiaomi Flora Monitor возвращает проценты заряда батареи, которые вообще без толку мониторить - у меня вечно там больше 80%, а потом датчик просто перестает работать пока батарейку не заменишь.
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Чтобы Вам были доступны все функции Вам необходимо либо зарегистрироваться, либо зайти на сайт под своим именем.
Группа: Журналисты
Регистрация: 25.08.2008
Статус:
Но почему все комменты на буржуйском? Мы же русские)