Ce petit script Lua permet de scruter la messagerie Telegram et de déclencher des actions en fonction du message reçu.
Il faut préalablement avoir créé un bot (voir https://www.domoticz.com/wiki/Telegram_Bot) et récupérer sa cléAPI (la même que celle indiquée dans la partie notification de Domoticz).
Code : Tout sélectionner
--Telegram : pilotage de Domoticz à partir de Telegram
-- Fonctionnement en cycle, script à jouer en mode Trigger=Time
-- utilise la variable utilisateur messageIdTelegram de type chaine (à créer)
local cleApi = '123456:ABCDEFGHIJKLMNOP'
local urlMonBotTelegram ='https://api.telegram.org/bot'..cleApi..'/getUpdates?offset=-1'
local cycle=2 --toutes les 2 minutes
local reponse=''
local idxConsigneChaudiere = 108 --id thermostat chaudiere
commandArray = {}
--scrutation
local time = os.date("*t")
if ( time.min%cycle == 0 ) then
--print('interrogation Bot Telegram ');
handler = assert(io.popen('/usr/bin/curl -m5 "'..urlMonBotTelegram..'"'))
reponse_json = handler:read('*all')
handler:close()
--print(reponse_json)
if (string.find(reponse_json,"message_id") ~= nil) then
local message_id = domoticz_applyJsonPath(reponse_json,'.result[0].message.message_id')
if (tostring(message_id) ~= uservariables["messageIdTelegram"]) then
commandArray['Variable:messageIdTelegram'] = tostring(message_id)
local message_text =domoticz_applyJsonPath(reponse_json,'.result[0].message.text')
message_text = message_text:lower()
print ('message Telegram = ' .. message_text)
-- demander les temperatures de la maison
if (message_text == 't') then
local tempSejour = tonumber(otherdevices_svalues['Temperature_Sejour'])
local tempCombles = tonumber(otherdevices_svalues['Temperature_Combles'])
local tempExterieur = tonumber(otherdevices_svalues['Temperature_Exterieur'])
local tempChambre= tonumber(otherdevices_svalues['Temperature_Chambre'])
local consigneChaudiere = tonumber(otherdevices_svalues['ConsigneTemperatureChaudiere'])
reponse = 'Sejour:'..tempSejour..' Chambre:'..tempChambre..' Exterieur:'..tempExterieur..' Combles:'..tempCombles..' Consigne:'..consigneChaudiere
end
-- Changer la consigne de la chaudiere, format : c <temperature> , exemple: c 19
if (message_text:sub(1,1) == 'c') then
local consigne = message_text:sub(-2)
--print(consigne)
commandArray['UpdateDevice'] = idxConsigneChaudiere .. '|0|' .. consigne
reponse='Consigne chaudiere mise à '..consigne
end
--Activer l'alarme, format : a on ou a off
if (message_text:sub(1,1) == 'a') then
local etat = message_text:sub(-2)
if (etat=='on') then
commandArray['SecurityPanel'] = 'Arm Away'
else
commandArray['SecurityPanel'] = 'Disarm'
end
reponse='Alarme mise à '..etat
end
--Envoyer un accusé de réception
if (reponse ~='') then
commandArray['SendNotification']=reponse..'#'..reponse..'#0#0#0#telegram'
end
end
end
end
return commandArray