Управляем домотикзом через телеграм
Здесь я опишу один из вариантов управления домотикзом через телеграм.
Если домотикз находится за NAT-ом и порты пробросить нет возможности, этот способ мне показался наименее затратный.
Если еще не создан телеграм-бот, то создаем его.
0. Если еще не установлен python-pip, то устанавливаем его:
sudo apt-get install python-pip
1. Устанавливаем телепот:
sudo pip install telepot
Далее пишем всё "своё" и сторонних компонентов не потребуется.
2. Создаем папку TelegramBot и в ней файл telegrambot.py с таким содержимым:
Не забываем вставить свои значения ключа телеграма и ID чата.
3. В домотикзе создаем кнопку с именем Alarm (на эту кнопку надо будет повесить какой-нибудь скрипт, например у меня, эта кнопка включает/отключает "сигнализацию", но это я тут описывать не буду).
4. В домотикзе создаем dzVents скрипт TelegramBot (если кнопку назвали как-то иначе, не забываем подставить своё значение):
5. Проверяем: в чате боту отправляем команду на включение кнопки:
Command: AlarmOn
И для выключение кнопки:
Command: AlarmOff
Результат:
Если домотикз находится за NAT-ом и порты пробросить нет возможности, этот способ мне показался наименее затратный.
Если еще не создан телеграм-бот, то создаем его.
0. Если еще не установлен python-pip, то устанавливаем его:
sudo apt-get install python-pip
1. Устанавливаем телепот:
sudo pip install telepot
Далее пишем всё "своё" и сторонних компонентов не потребуется.
2. Создаем папку TelegramBot и в ней файл telegrambot.py с таким содержимым:
import sys
import time
import telepot
def handle(msg):
chat_id = msg['chat']['id']
command = msg['text']
if chat_id == 585673228:
if command.startswith('Command: '):
bot.sendMessage(chat_id, 'ok')
print('%s' % command)
else:
bot.sendMessage(chat_id, 'Command not recognized')
print('CommandNotRecognized:[%s]' % command)
bot = telepot.Bot('Сюда вставляем ключ телеграма')
bot.message_loop(handle)
time.sleep(3)
Не забываем вставить свои значения ключа телеграма и ID чата.
3. В домотикзе создаем кнопку с именем Alarm (на эту кнопку надо будет повесить какой-нибудь скрипт, например у меня, эта кнопка включает/отключает "сигнализацию", но это я тут описывать не буду).
4. В домотикзе создаем dzVents скрипт TelegramBot (если кнопку назвали как-то иначе, не забываем подставить своё значение):
-- TelegramBot return { on = { timer = {'every minute'} }, logging = { level = domoticz.LOG_ERROR }, execute = function(dz, item) local DeviceAlarm = dz.devices('Alarm') function GetMessage() cmd = "python /home/pi/TelegramBot/telegrambot.py" dz.utils.osExecute('('..cmd..' > /dev/null)&') end function AlarmOn() DeviceAlarm.switchOn() end function AlarmOff() DeviceAlarm.switchOff() end if (item.isTimer) then GetMessage() --print('cmd='..cmd) local h = io.popen(cmd) local response = h:read("*a") h:close() --print('response='..response) if (response == nil or response == '') then response = '' end if (string.find(response, 'CommandNotRecognized')) then print(response) response = '' end if (response ~= '') then t = {} for k, v in string.gmatch(response, "(%w+):%s(.-)\n") do t[k] = v --print('# '..k..'='..v) end strCommand = t['Command'] if (strCommand == 'AlarmOn' and DeviceAlarm.state == 'Off') then AlarmOn() strMessage = 'Сигнализация включена по команде из телеграма' print(strMessage) elseif (strCommand == 'AlarmOff' and DeviceAlarm.state == 'On') then AlarmOff() strMessage = 'Сигнализация отключена по команде из телеграма' print(strMessage) end end end end }
5. Проверяем: в чате боту отправляем команду на включение кнопки:
Command: AlarmOn
И для выключение кнопки:
Command: AlarmOff
Результат:
Комментарии
Отправить комментарий