
ça fonctionne parfaitement !!!
Merci encore à Keros pour son Tuto.
voici mon fichier gammu_get_unread_sms.py
que j'ai edité de la façon suivante:
Code : Tout sélectionner
pi@DomPi2:~ $ sudo -i
root@DomPi2:~# nano /usr/share/raspisms/bin/gammu_get_unread_sms.py
root@DomPi2:~# exit
De cette façon je n'ai pas besoin de modifier les droits sur le fichier: gammu_get_unread_sms.py
Code : Tout sélectionner
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
# vim: expandtab sw=4 ts=4 sts=4:
#
from __future__ import print_function
import gammu
import sys
import json
import requests
def main():
state_machine = gammu.StateMachine()
if len(sys.argv) < 2:
sys.exit(1)
else :
state_machine.ReadConfig(Filename=sys.argv[1])
del sys.argv[1]
state_machine.Init()
status = state_machine.GetSMSStatus()
remain = status['SIMUsed'] + status['PhoneUsed'] + status['TemplatesUsed']
start = True
try:
while remain > 0:
if start:
sms = state_machine.GetNextSMS(Start=True, Folder=0)
start = False
else:
sms = state_machine.GetNextSMS(
Location=sms[0]['Location'], Folder=0
)
remain = remain - len(sms)
for m in sms :
if m['State'] != 'UnRead' :
continue
#Mise a jour dans Domoticz
r = requests.get("http://192.168.0.21:9186/json.htm?type=command¶m=updateuservariable&idx=8&vname=sms&vtype=2&vvalue="+m['Text']+";%2B"+m['Number'][1:])
print(json.dumps({
'number': m['Number'],
'at': str(m['DateTime']),
'status': m['State'],
'text': m['Text'],
}))
except gammu.ERR_EMPTY:
#do noting
return True
if __name__ == '__main__':
main()
et mon fichier script Lua 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 = 'liste des commandes : \n'..sendAll() ]] -- ne pas toucher cette ligne
--liste['Ping'] = [[ reponse = 'Pong!' ]]
liste['Armaway'] = [[ reponse = 'Alarme en Absence activée dans 40s !' ]]
liste['Alarme off'] = [[ reponse = 'Alarme désactivée !' ]]
liste['Armhome'] = [[ reponse = 'Alarme home activée dans 10s' ]]
liste['Sirstop'] = [[ reponse = 'Sirènes et Flash Stoppés' ]]
liste['Sendsms off'] = [[ reponse = 'Envoi de sms type1 désactivé !' ]]
liste['Sendsms on'] = [[ reponse = 'Envoi de sms type1 activé !' ]]
liste['Initsiren'] = [[ reponse = 'Hard Reset des sirènes' ]]
-- liste des utilisateurs autorisés
local user={}
user['Nom1'] = '+336XXXXXXXX'
user['Nom2'] = '+336XXXXXXXX'
user['Nom3'] = '+336XXXXXXXX'
-- 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
function sendsms(smsto, smsbody)
smsbody = urlencode(smsbody)
os.execute("curl -X POST http://192.168.0.21/raspisms/api/scheduled/ -H 'X-Api-Key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxx -d text="..smsbody.." -d numbers=%2B"..smsto)
end
function char_to_hex(c)
return string.format("%%%02X", string.byte(c))
end
function urlencode(url)
if url == nil then
return
end
url = url:gsub("([^%w ])", char_to_hex)
url = url:gsub(" ","%%20")
return url
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 : reponse -> '..reponse)
--os.execute ('sudo -u gammu gammu-smsd-inject TEXT "'..from..'" -text "'..reponse..'"')
sendsms(from, reponse)
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