contrôler domoticz par SMS, ou comment recycler avantageusement un vieux smartphone...
je suis tombé sur l'application android SMS gateway ultimate
cette app permet de transférer tout SMS reçu vers un serveur web...

Ainsi que d'envoyer un sms sur réception d'une requette http.. chouette passerelle pour le système de notification de domoticz
j'ai donc sorti mon vieux smartphone du placard où il attendait gentiment le futur vide grenier..
bien sure une carte sim et l'abonnement qui va avec est indispensable mais grâce à FREE ça passe dans le budget..
le tel est donc branché sur secteur et connecté en permanence à mon réseau wifi.
-- dans domoticz, créez une variable utilisateur de type chaîne et nommez la 'sms' (c'est elle qui va recevoir notre sms)
cette commande le fera pour vous
-- sur le smartphone, installer et configurer l'application pour transférer les sms vers cette adressehttp://USER:PASS@IP:PORT/json.htm?type=command¶m=saveuservariable&vname=sms&vtype=2&vvalue=ready;123
USER: votre nom d'utilisateur (si nécessaire)http://USER:PASS@IP:PORT/json.htm?type=command¶m=updateuservariable&idx=IDX&vname=sms&vtype=2&vvalue=%body%;%from%
PASS: votre mot de pass (si nécessaire)
IP: ip de domoticz
PORT: port de domoticz
IDX: idx de la variable utilisateur 'sms'
-- puis placez le script suivant dans le dossier lua et nommez le script_variable_sms.lua
Code : Tout sélectionner
-- script_variable_sms.lua
--
-- un smartphone connecté au réseau wifi de la maison
-- avec l'application 'sms gateway ultimate' installée
-- https://play.google.com/store/apps/details?id=com.icecoldapps.smsgatewayultimate
--
-- dès qu'un sms est reçu, l'application met à jour une variable utilisateur nommée 'sms' via la requette json suivante
-- http://USER:PASS@IP:PORT/json.htm?type=command¶m=updateuservariable&idx=IDX&vname=sms&vtype=2&vvalue=%body%;%from%
--
-- dès que la variable 'sms' est modifiée, ce script est exécuté.
-- suivant une correspondance avec l'un des messages de la liste ci dessous,
-- si la personne y est autorisée,
-- l'action associée est lancée
--
-- un message de réponse est retourné
--
-- la commande 'Help' retourne un SMS contenant la liste
--
--------------------------------
------ Tableau à éditer ------
--------------------------------
-- liste des messages à comprendre et leurs actions associées
local liste={}
--liste['message'] = "action"
liste['Help'] = [[ reponse = sendAll() ]] -- ne pas toucher cette ligne
liste['Temp salon'] = [[ reponse = 'Il fait '..string.sub(otherdevices_svalues['salon'],1,4)..'°C dans le salon' ]]
liste['Temp chambre'] = [[ reponse = 'Il fait '..string.sub(otherdevices_svalues['chambre'],1,4)..'°C dans la chambre' ]]
liste['Temp sdb'] = [[ reponse = 'Il fait '..string.sub(otherdevices_svalues['salle de bain'],1,4)..'°C dans la salle de bain' ]]
liste['Temp'] = [[ reponse = 'Salon : '..string.sub(otherdevices_svalues['salon'],1,4)..'°C'..'\n'..
'Chambre : '..string.sub(otherdevices_svalues['chambre'],1,4)..'°C'..'\n'..
'Salle de bain : '..string.sub(otherdevices_svalues['salle de bain'],1,4)..'°C' ]]
liste['Temp ext'] = [[ reponse = 'Il fait '..string.sub(otherdevices_svalues['exterieur'],1,4)..'°C dehors' ]]
liste['Douche'] = [[ commandArray['douche'] = 'On'
reponse = 'Je mets le salle de bain en chauffe' ]]
liste['Tout éteindre'] = [[ commandArray['Group:toute la maison'] = 'Off' ]]
liste['Chauffage'] = [[ commandArray['mv salon'] = 'On' ]]
liste['Café'] = [[ commandArray['la cafetiere'] = 'On'
reponse = 'Café en préparation' ]]
liste['Alarme on'] = [[ commandArray['SecPanel'] = 'Arm Away'
reponse = 'Alarme activée dans 30s' ]]
liste['Alarme off'] = [[ commandArray['SecPanel'] = 'Disarm'
reponse = 'Alarme désactivée' ]]
liste['Spoon'] = [[ os.execute('/home/vil1driver/domoticz/scripts/lua/spoon.sh') ]]
liste['Cpu'] = [[ reponse = 'Charge processeur : '..otherdevices_svalues['CPU_Usage']..'%' ]]
liste['Pc on'] = [[ commandArray['windows on'] = 'On' ]]
liste['Pc off'] = [[ commandArray['windows off'] = 'On'
reponse = 'Arrêt en cours' ]]
liste['Ya qqn'] = [[ function timedifference(d)
s = otherdevices_lastupdate[d]
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
if (timedifference('mv salon') + 120) > timedifference('la porte') and (timedifference('mv chambre') + 120) > timedifference('la porte') then
reponse = 'Non, il n\'y a plus personne depuis '..os.date("!%X",timedifference('la porte'))
else
reponse = 'Oui, il y a du monde'
end ]]
-- liste des utilisateurs autorisés
local user={}
user['olivier'] = '+336xxxxxxx'
user['delphine'] = '+336xxxxxxx'
-- etc..
-- paramètres du serveur SMS Gateway Ultimate
local gateway = '192.168.1.70:41047' -- url du serveur sms gateway
-- réponses par défaut
local good = 'Ok..' -- réponse en cas de commande correcte
local notGood = 'Je ne comprends pas, essayez \'Help\'' -- réponse en cas de commande non comprise
local guess = 'Je ne vous connais pas !' -- réponse aux utilisateurs non autorisés
--------------------------------
-- Fin du tableau à éditer --
--------------------------------
function spairs(t)
local keys = {}
for k in pairs(t) do keys[#keys+1] = k end
table.sort(keys)
local i = 0
return function()
i = i + 1
if keys[i] then
return keys[i], t[keys[i]]
end
end
end
function url_encode(str)
if (str) then
str = string.gsub (str, "\n", "\r\n")
str = string.gsub (str, "([^%w %-%_%.%~])",
function (c) return string.format ("%%%02X", string.byte(c)) end)
str = string.gsub (str, " ", "+")
end
return str
end
function sendAll()
for message, action in spairs(liste) do
if message ~= 'Help' then
if rst == nil then
rst = message
else
rst = rst..'\n'..message
end
end
end
return rst
end
commandArray = {}
if(uservariablechanged['sms']) then
sms,from = uservariables['sms']:match("([^;]+);([^;]+)")
local msg = "print('SMS reçu du N° '..from..' : \"'..sms..'\"')"
for name, number in pairs(user) do
reponse = guess
if number == from then
print('SMS reçu de '..name..' : \"'..sms..'\"')
reponse = notGood
msg = "print('SMS, commande invalide')"
for message, action in pairs(liste) do
if sms == message then
reponse = good
msg = "print('SMS, commande correcte')"
load(action)()
break
end
end
break
end
end
load(msg)()
--print('SMS : réponse -> '..reponse)
--print('SMS : réponse -> '..url_encode(reponse))
commandArray['OpenURL']=gateway..'/send.html?smsto='..from..'&smsbody='..url_encode(reponse)..'&smstype=sms'
end
return commandArray
sans oublier l'ip et le port du serveur SMS gateway pour que le script puisse vous répondre par sms.
voila c'est tout =)
ps: respectez bien la casse dans vos messages
un grand merci au développeur de cette application gratuite