Управляем домотикзом через телеграм
Здесь я опишу один из вариантов управления домотикзом через телеграм.
Если домотикз находится за 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
Результат:


Комментарии
Отправить комментарий