[LUA] Script pour piloter Domoticz à partir de Telegram
Publié : 07 févr. 2023, 22:23
Bonjour,
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).
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