Passerelle pour alarme RSI Videofied vers MQTT

Ayant acheté une maison avec une alarme RSI Videofied (W250CTC), cette alarme est capable de se connecter en wifi et en ethernet.

RSI_alarm_image

J’ai donc cherché s’il y avait des APIs ou quelque chose me permettant de l’intégrer à ma domotique sous Home Assistant. Malheureusement, je n’ai rien trouvé. On peut juste la connecter à un télésurveilleur ou en télémaintenance. Toujours pas possible de la connecter à ma domotique.

Par curiosité, j’ai quand même tracé ce que l’alarme envoyait comme info (car il y avait déjà une configuration vers une télésurveillance). A ma grande surprise, j’ai pu voir des choses passées en clair sur le réseau.

J’ai donc démarré un simple serveur tcp en python et changer la configuration de mon alarme pour qu’elle puisse envoyer de l’info à ce serveur.

Au fil de mes recherches, je suis tombé sur le site cybergibbons.com expliquant qu’il y avait une faille de sécurité dans ce type d’alarme (en version 2.0 uniquement). En partant de leur script servant à « faussement » s’authentifier chez un télésurveilleur (chose qui est évidemment illégale), j’ai plutôt cherché à faire l’inverse, en créant un programme permettant de « simuler » un télésurveilleur.

Vous le trouverez ici: https://github.com/Mickaelh51/rsi-alarm-gateway

C’est sous forme d’un conteneur docker. Il démarre un serveur tcp, qui va ensuite envoyer les events reçus de l’alarme vers un serveur MQTT. Avec, en plus, l’intégration à Home Assistant (configuration automatique des sensors).

ATTENTION: en aucun cas je ne pourrais être tenu pour responsable de l’utilisation que vous allez faire de mon développement, ainsi que des modifications de votre alarme. Je vous conseille vivement de sauvegarder la configuration de votre alarme avant toutes modifications. Et ne surtout pas utiliser le code disponible sur cybergibbons pour envoyer n’importe quoi à un centre de télésurveillance.

Configuration de votre alarme:

Il faudra changer le serveur ainsi que le port pour que l’alarme puisse envoyer ses events vers le docker (doc dans le readme du github).

Configuration du docker:

Il y a tout un json de configuration pour y renseigner les events que l’on veut checker et passer en MQTT, les sensors à créer dans Home Assistant, ainsi que les zones et users (doc dans le readme du github).

Les events (reverse engineering):

Après pas mal de tests, j’ai pu extraire et comprendre quelques events, voici la liste ci-dessous.

Events ID Events Remarks
EVENT,1,2,1 Intrusions detected 1 = Events ID / 2 = Device Index / 1 = Detector Index
EVENT,3,62,0 autoprotection start 3 = Events ID / 62 = Device Index / 0 = ???
EVENT,4 autoprotection end 4 = Events ID
EVENT,5,1,0 Panic button 5 = Events ID / 1 = ?? / 0 = ??
EVENT,6 5 wrong codes 6 = Events ID
EVENT,7,1,3 disarmed with duress code +1 7 = Events ID / 1 = ?? / 3 = ??
EVENT,8,1,3 armed with duress code +2 8 = Events ID / 1 = ?? / 3 = ??
EVENT,19 AC power loss 19 = Events ID
EVENT,20 AC power recovery 20 = Events ID
EVENT,24,1,3 Arm 24 = Events ID / 1 = ?? / 3 = user ID
EVENT,25,0,3 Disarm 25 = Events ID / 0 = ?? / 3 = user ID
EVENT,27 After disarm confirmation of intrusion detected 27 = Events ID

PS: il doit en manquer pas mal, mais ça me suffit pour le moment.

Si certains souhaitent participer à cette recherche, ou mieux qui ont une documentation avec l’ensemble des events de cette alarme, j’en serais plus que ravi ;).

Firmwares testés:

– 07.03.19.03859C

– 09.01.49.0203809

Pour voir l’ensemble du trafic envoyé par l’alarme, il faut passer le docker en DEBUG.

docker run --rm -i -t -p 888:888 -e loglevel=DEBUG --name rsigwalarm mickaelh51/rsimqttgateway:latest

Event FILE:

L’alarme (si configurée pour envoyer des fichiers) est capable d’envoyer du json avec la liste des zones, détecteurs etc … Ce fichier n’est pas traité par le script, mais en mode DEBUG vous pourrez le voir.

Vous pouvez trouver un exemple ici:

https://github.com/Mickaelh51/rsi-alarm-gateway/blob/master/documentations/json_sended_by_alarm.json

Prochaines étapes:

  • Etre capable de récupérer le stream video des détecteurs de mouvements.
  • Etre capable de streamer et d’écouter du flux audio.
  • Etre capable d’envoyer des ordres à l’alarme (armer et désarmer) à distance.

Rendu Home Assistant:

Rendu rapide pour le moment, il faut que j’embellisse le tout.

screenshot-2020.01.03-18_57_18

On peut y voir:

  • Autoprotection: quel élément de l’alarme s’est mis en autoprotection.
  • Armement / désarement: qui a armé l’alarme.
  • Intrusion détectée: quel capteur a détecté l’intrusion.
  • Alarme alimentée.

Les logs:

[2020-01-02 20:59:08,282] - server - INFO - We received EVENT: EVENT,3,62,0
[2020-01-02 20:59:08,284] - server - INFO - Received update from alarm (autoprotection !) update MQTT / source of event (Panel) / zone of event (Living room)

On peut voir que l’event 3,62,0 correspond à une mise en autoprotection, provenant de la centrale elle-même, qui se trouve dans la zone du salon.

N’hésitez pas à revenir vers moi pour m’aider à améliorer ce dev, qui n’en est qu’au début. D’ailleurs, si certains ont une alarme RSI récente, je serais curieux de voir si leur protocole a évolué et si oui, si il y a de la rétro-compatibilité avec la version 2.0.

8 Commentaires

  1. Bonjour,
    Je viens d’emménager dans un appartement disposant de ce type d’alarme, ton travail va beaucoup m’aider à l’intégrer dans ma domotique. Merci beaucoup.
    Si j’ai des RETEX ou si j’arrive à développer des améliorations je reviendrai les partager.
    Camille

    1. Merci pour ton message. N’hésites pas a en parler a d’autres.

  2. Hello,
    Sorry I don’t speak french.

    Great work but seems that is not compatible with newer versions of pyton.
    This error is reported in the degug mode:

    AttributeError: module ‘time’ has no attribute ‘clock’

    Additionally homeassistant does not recognize the new mqtt sensors, I use mosquitto server and in configuration.yalm I have:

    mqtt:
    discovery: true
    discovery_prefix: homeassistant
    broker: localhost
    port: 1883
    username: mosquitto
    password: passw

    Any clue? I’ve seen in config.json that no username/password is set for mqtt connection. Maybe is related.

    Regards,

    1. Hi,
      What is your python version ?
      If you have username and pwd on HA (server) and not in client ( my code) it can’t work. You can change code to add username feature.
      ++

  3. Merci pour ce travail, j ai une vieille alarme de 2012 que j aimerais domotiser, je vais regarder tout ça.

    Je me demande si il est techniquement possible de faire sonner la sirène depuis home assistant, je pense qu il est compliqué d envoyer des ordres sans API..

    1. Bonsoir, il y a des pseudo api sur l’alarme pour l’activer et autres, mais je n’ai jamais regardé de ce côté là.

  4. Salut, beau travail, as tu réussi à récupérer les flux vidéos et audio car c’est un peu l’intéret de cette centrale de pouvoir effectuer une levée de doute ?

    1. Non je n’ai pas pu encore décoder ce flux. Pas vraiment eu le temps. C’est du base64 mais ensuite je ne sais pas quel format. Bon après une levée de doute avec un dev perso je doute que ça marche, il faut plutôt un véritable organisme référencé.

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :