Pour être plus facile à utiliser quand on a la mémoire qui flanche,
j'ai fait 3 listes de commandes :
liste1 concernant les actions sur l'alarme
liste2 concernant les actions sur les sondes
liste3 concernant les actions sur les switchs
avec les commandes Helpalarme Helpsonde helpswitch correspondantes:
nouveau script mis à jour:
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 liste1={} -- actions sur l'alarme
--liste1['message'] = "action"
liste1['Helpalarme'] = [[ reponse = sendAll1() ]] -- ne pas toucher cette ligne
liste1['Amhome on'] = [[ commandArray['MA_alarme'] = 'Arm Home'
reponse = 'Alarme activée dans 10s' ]]
liste1['Alarme on'] = [[ commandArray['MA_alarme'] = 'Arm Away'
reponse = 'Alarme activée dans 10s' ]]
liste1['Alarme off'] = [[ commandArray['MA_alarme'] = 'Disarm'
reponse = 'Alarme désactivée' ]]
local liste2={}-- actions sur les sondes
--liste2['message'] = "action"
liste2['Helpsonde'] = [[ reponse = sendAll2() ]] -- ne pas toucher cette ligne
liste2['Tsalon'] = [[ reponse = 'Temp Salon: '..string.sub(otherdevices_svalues['CrestaRfxSalon'],1,4)..'°C'..'\n'..
'Hum Salon: '..string.sub(otherdevices_svalues['CrestaRfxSalon'],6,8)..'%' ]]
liste2['Tsdb'] = [[ reponse = 'Temp SDBain: '..string.sub(otherdevices_svalues['CrestaRfxSDB'],1,4)..'°C'..'\n'..
'Hum SDBain: '..string.sub(otherdevices_svalues['CrestaRfxSDB'],6,8)..'%' ]]
liste2['Tetage'] = [[ reponse = 'Temp Ch Etage: '..string.sub(otherdevices_svalues['CrestaRfxEtage'],1,4)..'°C'..'\n'..
'Hum Ch Etage: '..string.sub(otherdevices_svalues['CrestaRfxEtage'],6,8)..'%' ]]
liste2['Tchderr'] = [[ reponse = 'Temp Ch Derr: '..string.sub(otherdevices_svalues['OregonChDerr'],1,4)..'°C'..'\n'..
'Hum ChDerr: '..string.sub(otherdevices_svalues['OregonChDerr'],6,8)..'%' ]]
liste2['Tbas'] = [[ reponse = 'Temp Salon: '..string.sub(otherdevices_svalues['CrestaRfxSalon'],1,4)..'°C'..'\n'..
'Temp SDBain: '..string.sub(otherdevices_svalues['CrestaRfxSDB'],1,4)..'°C']]
liste2['Tch'] = [[ reponse = 'Temp Ch Etage: '..string.sub(otherdevices_svalues['CrestaRfxEtage'],1,4)..'°C'..'\n'..
'Temp Ch Derr: '..string.sub(otherdevices_svalues['OregonChDerr'],1,4)..'°C']]
local liste3={} -- actions sur les switchs
--liste['message'] = "action"
liste3['Helpswitch'] = [[ reponse = sendAll3() ]] -- ne pas toucher cette ligne
liste3['Pzbur on'] = [[ commandArray['PriseZwave_Bureau'] = 'On'
reponse = 'PriseZwave_Bureau Allumée' ]]
liste3['Pzbur off'] = [[ commandArray['PriseZwave_Bureau'] = 'Off'
reponse = 'PriseZwave_Bureau Eteinte' ]]
liste3['Pzbur7 on'] = [[ commandArray['PriseZwave_7Bureau'] = 'On'
reponse = 'PriseZwave_7Bureau Allumée' ]]
liste3['Pzbur7 off'] = [[ commandArray['PriseZwave_7Bureau'] = 'Off'
reponse = 'PriseZwave_7Bureau Eteinte' ]]
-- liste des utilisateurs autorisés
local user={}
user['Nom1xxx'] = '+336XXXXXX'
user['Nom2xxx'] = '+336XXXXXX'
user['Nom3xxx'] = '+337XXXXXX'
-- etc..
-- paramètres du serveur SMS Gateway Ultimate
local gateway = 'http://xxx.xxx.xxx.xx:XXXX' -- 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 \'Helpalarme ou Helpsonde ou Helpswitch\'' -- 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 sendAll1()
for message, action in spairs(liste1) do
if message ~= 'Helpalarme' then
if rst == nil then
rst = message
else
rst = rst..'\n'..message --'; '..message
end
end
end
return rst
end
function sendAll2()
for message, action in spairs(liste2) do
if message ~= 'Helpsonde' then
if rst == nil then
rst = message
else
rst = rst..'\n'..message --'; '..message
end
end
end
return rst
end
function sendAll3()
for message, action in spairs(liste3) do
if message ~= 'Helpswitch' then
if rst == nil then
rst = message
else
rst = rst..'\n'..message --'; '..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(liste1) do
if sms == message then
reponse = good
msg = "print('SMS, commande correcte')"
load(action)()
break
end
end
for message, action in pairs(liste2) do
if sms == message then
reponse = good
msg = "print('SMS, commande correcte')"
load(action)()
break
end
end
for message, action in pairs(liste3) 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
Raspberry Pi2 VPN, Pi 3, Pi4 ,RFXCom, 6 volets BLYSS, sondes Temp_humid Attiny85, zigbee, Mysensors, RFLINK , Zwave capteurs portes Prises, Alarme avec 2 sirènes maison esp8266, Thermostat NETAMO vannes thermostatiques