Depuis plusieurs années, nous sommes équipés d’un système d’Alarme / télésurveillance EPS (Euro Protection Surveillance). Sans vouloir faire de publicité (chacun est libre de choisir son système d’alarme), je trouve intéressant d’en parler car ils sont n°1 de la télésurveillance en France. Filiale du groupe Crédit Mutuel, EPS compte plus de 400000 abonnées.

Les avantages selon moi:

  • Un matériel conçu et fabriqué en France.
  • Une installation et une maintenance effectuée par leurs techniciens.
  • Un système régulièrement contrôlé à distance.
  • Tout est compris dans l’abonnement (pas d’achat à faire, pas de frais en cas de dépannage d’un technicien).

Les inconvénients, parce qu’il en faut:

  • C’est un système propriétaire, loué, fermé, et donc par définition non interfaçable avec un système de domotique. Cet inconvénient peut aussi être vu comme un avantage: il s’agit de la protection de l’habitation, et EPS est garant du bon fonctionnement.
  • A long terme, cela peut revenir plus cher qu’une alarme achetée.

Personnellement j’en suis très satisfait. Seulement voilà, je voulais aller plus loin et faire communiquer mon alarme avec Domoticz, pour pouvoir déclencher des scénarios en cas de mise en ou hors service.

Prérequis

Ce matériel étant la propriété d’EPS, il n’est pas envisageable de faire un hack hardware. Autrement dit, on ne peut le modifier physiquement pour le relier à Domoticz. En revanche, on peut faire un hack software. En effet, EPS peut vous envoyer un email et/ou un SMS à chaque changement d’état (mise en service, mise hors service). Nous allons détourner cette option.

Il faut donc:

Configuration côté EPS

Dans l’espace abonnés, il faut ajouter un mode de notification par SMS pour chaque entrée/sortie, en indiquant le numéro de téléphone de la SIM utilisée pour Domoticz:

Vous pouvez aussi ajouter une notification par email si vous souhaitez recevoir un email chaque fois que l’alarme est mise en service ou hors service.

Je vous conseille dans un premier temps d’ajouter votre propre numéro de téléphone pour recevoir les SMS sur votre portable et voir ainsi ce que EPS vous envoie exactement.

Configuration côté Domoticz

Analysons les SMS envoyés par EPS:

  • Lorsque l’alarme est mise en marche totale, EPS envoie un message de ce type: « Info télésurveillance 13/03/2017 09:54:36 : mise en marche via code Damien du clavier ENTREE (zone 1) »
  • Lorsque l’alarme est mise en marche partielle, EPS envoie un message de ce type: « Info télésurveillance 12/03/2017 23:52:08 : mise en marche (mode partiel) via code Damien du clavier ENTREE (zone 1) »
  • Lorsque l’alarme est mise à l’arrêt, EPS envoie un message de ce type: « Info télésurveillance 13/03/2017 10:58:50 : mise à l’arret via code Damien du clavier ENTREE (zone 1) »

Ces messages peuvent varier en fonction du paramétrage de l’alarme pour votre habitation. Je me prénomme Damien, et mon clavier à code a été appelé « ENTREE » par le technicien qui a installé l’alarme.

Faisons un petit tour dans Domoticz. J’ai créé un interrupteur virtuel « Etat Alarme » de type « sélecteur » avec 3 états: Off, Partiel, Total.

Dans le tuto qui explique comment recevoir des SMS avec Domoticz, nous avions créé un script « script_variable_sms.lua » qui est appelé à chaque réception de SMS. Il suffit d’ajouter à ce script un filtre pour déclencher des actions lors de la réception de SMS d’EPS. Par exemple:

-- 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&param=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 = 'Je comprend: '..sendAll()   ]]   -- ne pas toucher cette ligne

liste['Ping'] =       	[[   reponse = 'Pong!'   ]]

-- liste des utilisateurs autorisés
local user={}
user['Toto'] = '+336xxxxxxxx'
user['Tata'] = '+336yyyyyyyy'

-- 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..'\"')"
   -- Debut EPS --
    if string.find(sms, "du clavier ENTREE") then
        if string.find(sms, "en marche") then
            if string.find(sms, "mode partiel") then
                commandArray['Etat Alarme']='Set Level 10'
                print ("Alarme partiel")
            else
                commandArray['Etat Alarme']='Set Level 20'
                print ("Alarme total")
            end
        elseif string.find(sms, "l'arret") then
            commandArray['Etat Alarme']='Set Level 0'
            print ("Alarme arret")
        end
   else
   -- Fin EPS --
        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)()
        if (reponse ~= guess) then
            print('SMS : reponse -> '..reponse)
            os.execute ('sudo -u gammu gammu-smsd-inject TEXT "'..from..'" -text "'..reponse..'"')
        else
            print('SMS : expéditeur inconnu ==> On répond pas') -- Evite de répondre à EPS alors que leur numéro court n'est pas sensé interroger Domoticz
        end
    end -- EPS
end

return commandArray

Explications: si le message reçu contient le texte « du clavier ENTREE », alors en fonction de son contenu on va mettre à jour l’interrupteur virtuel.

Et voilà, maintenant cet interrupteur changera d’état à chaque fois que quelqu’un activera ou désactivera l’alarme. Attention toutefois, ceci n’est pas immédiat. En général, il faut environ 15 secondes pour que le SMS arrive après avoir fait une action sur l’alarme.

Pour terminer, voici un exemple de script LUA permettant de déclencher des scénarios en fonction des modes d’alarme:

-- script_device_alarme.lua

package.path = package.path..";/root/domoticz/scripts/lua/?.lua"
require "modules"

time = os.date("*t")
local day = os.date("*t").wday -- 1 for Sunday, 2 for Monday

-- liste des utilisateurs recevant les notifications
local user={}
user['Toto'] = '+336xxxxxxxx'
user['Tata'] = '+336yyyyyyyy'

function send_sms(message)
    horodatage = "["..os.date('%d').."/"..os.date('%m').."/"..os.date('%Y').." @ "..os.date('%H')..":"..os.date('%M').."] "
    for name, number in pairs(user) do
        os.execute ('sudo -u gammu gammu-smsd-inject TEXT "'..number..'" -text "'..horodatage..message..'"')
    end 
end

commandArray = {}

	if (devicechanged['Etat Alarme'] == 'Total') then
            -- sms
            send_sms('Alarme en service total')
            -- Lumieres
            switchOff('Lumiere entree')
            switchOff('Lumiere escalier')
    
        elseif ( devicechanged['Etat Alarme'] == 'Partiel' ) then
            -- sms
            send_sms('Alarme en service partiel')
            -- Lumieres
            commandArray['Mode lumiere salon']='Off'
    
	elseif ( devicechanged['Etat Alarme'] == 'Off' ) then
            -- sms
	    send_sms('Alarme hors service')

	end

return commandArray

A vous de créer vos propres scénarios!

Alarme / télésurveillance EPS: retour d’état dans Domoticz

Alarme / télésurveillance EPS: retour d’état dans Domoticz

EPS propose une solution de télésurveillance efficace, indépendante et sûre. Avec quelques astuces, nous pouvons connaître l'état de l'alarme dans Domoticz et déclencher des scénarios en conséquence.

Pros

  • Matériel conçu et fabriqué en France
  • Installation et maintenance effectuée par leurs techniciens
  • Système régulièrement contrôlé à distance
  • Tout est compris dans l'abonnement

Cons

  • Système propriétaire donc par définition non interfaçable avec un système de domotique
  • A long terme, cela peut revenir plus cher qu'une alarme achetée
  • Délai entre l'activation ou la désactivation de l'alarme et la réception de l'information

Laisser un commentaire