Intégration Astucieuse : Récupérer le Bouton de Sonnette du Portier NeoCoolCam pour des Actions Personnalisées

Nous vous avons expliqué dans un autre article que Bricomachin ne recommandait absolument pas l'utilisation de ce portier vidéo même si le prix est vraiment intéressant mais le rapport qualité prix est vraiment exécrable mais pas de chance pour vous, vous avez quand même acheté ce portier vidéo et vous souhaitez en faire quelque chose ?


Souhaitez-vous récupérer l'appui du bouton de la sonnette et exécuter une action dans le portier IP Doorbell de Neo Coolcam ?


Vous l'aurez compris, ce portier vidéo n'offre pas d'api auquel on pourrait configurer l'appui du bouton pour faire un appel vers une API extérieur.. C'est bien dommage.. Les Product Owner de ces boite électronique devrait un peu mieux se renseigner auprès de sa clientèle!


Malheureusement pour vous l'article va vous présenter une façon de faire qui est plus un workaround car la fonction de base n'existe pas et difficile de trouver quelque chose de réalisable facilement, cette méthode génère parfois quelques fausses alertes, donc vous ne pouvez malheureusement pas utiliser cette méthode pour vous avertir que quelqu'un sonne. Ici dans notre cas, nous utilisons ce système pour afficher une image de la caméra de surveillance de la porte d'entrée sur la télé (via Kodi) lorsque quelqu'un appui sur le bouton de la sonnette, s'il y'a une fausse alerte, ce n'est très pas grave car l'image de la caméra de surveillance apparaît et disparaît après quelques secondes de la télévision.


Par contre, cela marche à 100% lorsque quelqu'un sonne, il y'a 0% de marge d'erreur. C'est à chaque fois détecté. J'utilise pour ce faire une analyse avec TCPDUMP, je vous invite à faire de même, vous allez peut-être arriver à détecter une IP ou une trame qui envoie au CLOUD le fait que quelqu'un à sonner. Lors de mes analyses TCPDUMP, j'ai pu remarquer que la même IP était appelée à chaque fois qu'on appuyait sur le bouton de la sonnette avec un autre élément, le même port. J'ai pu également remarquer qu'il y'avait le résultat un chiffre (277) dans la commande qui ne changeait pas à chaque fois qu'on appuyait sur le bouton.


Avec ces constatations, vous pouvez soit vous baser sur la combinaison IP+PORT ou IP+277. Pour faire ce genre de test, vous devez avoir quelques notions réseau et une bonne connaissance de votre réseau local. Ici, on va jouer avec différentes commandes TCPDUMP pour analyser les paquets entrants et sortants du Doorbell de Neocool.


Qu'est-ce que TCPDUMP ?


TCPDUMP est un analyseur de paquet en ligne de commande. Il permet de connaître le traffic visible d'une interface réseau (dans notre exemple, l'interface est br-lan).


Pour information, dans cet article, l'analyse avec TCPDUMP est réalisé directement sur le routeur Linksys avec un OpenWRT embarqué dessus comme système d'exploitation.


tcpdump -i br-lan -l -vvv dst host 192.168.0.206

Test 1 :

  1. 11:51:13.024892 IP 47.88.6.65.10006 > 109.89.190.252.20922: UDP, length 60
  2. 11:51:13.189065 IP 47.90.49.123.10006 > 109.89.190.252.20922: UDP, length 60
  3. 11:51:13.205056 IP 139.196.111.149.10006 > 109.89.190.252.20922: UDP, length 60
  4. 11:51:13.244063 IP 115.28.10.13.10006 > 109.89.190.252.20922: UDP, length 60
  5. 11:51:13.675231 IP 202.181.238.11.10006 > 109.89.190.252.20922: UDP, length 60


Test 2 :

11:52:32.303700 IP 109.89.190.252.20922 > 202.181.238.11.10006: UDP, length 60 11:52:32.305070 IP 109.89.190.252.20922 > 82.165.134.205.10006: UDP, length 60 11:52:32.305088 IP 109.89.190.252.20922 > 115.28.10.13.10006: UDP, length 60 11:52:32.306242 IP 109.89.190.252.20922 > 139.196.111.149.10006: UDP, length 60 11:52:32.306265 IP 109.89.190.252.20922 > 47.88.6.65.10006: UDP, length 60 11:52:32.306327 IP 109.89.190.252.20922 > 47.90.49.123.10006: UDP, length 60 11:52:32.336955 IP 82.165.134.205.10006 > 109.89.190.252.20922: UDP, length 60 11:52:32.474109 IP 47.88.6.65.10006 > 109.89.190.252.20922: UDP, length 60

Sh qui détecte l'appui de la sonnette et qui envoie une HTTP requête :

#!/bin/sh tcpdump -q -i br-lan -tttt | while read ligne do if echo "$ligne" | grep "sonnette" | grep "277" ; then if echo "$ligne" | grep "almeda" ; then echo 'non-action' else curl -silent 'http://requete' fi fi done

Explication du script :

Ce script est installé directement sur le routeur en OpenWrt. Il est lancé en permanence. Il lance la commande TCP. Ensuite, le script filtre le nom "Sonnette", ce nom est le nom défini dans la configuration réseau pour le Doorbell.


Le 277 est le numéro qui apparaît à chaque fois qu'on appuie sur le bouton.


Afin d'éviter une boucle sans fin, je demande à ne pas prendre en compte le client "Almeda" (serveur domotique qui gère l'ensemble de la maison et affiche la caméra sur la télé). 


root@OpenWrt:~# tcpdump -q -i br-lan -tttt | grep "sonnette" tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on br-lan, link-type EN10MB (Ethernet), capture size 65535 bytes 2017-08-26 22:23:13.828178 IP huaweip9.lan.17873 > sonnette.lan.20932: UDP, length 16 2017-08-26 22:23:14.910148 IP sonnette.lan.20932 > huaweip9.lan.17873: UDP, length 16 2017-08-26 22:23:15.837131 IP huaweip9.lan.17873 > sonnette.lan.20932: UDP, length 16 2017-08-26 22:23:16.361555 IP sonnette.lan.20932 > 47.88.6.65.10006: UDP, length 60 2017-08-26 22:23:16.362371 IP sonnette.lan.20932 > s17745602.onlinehome-server.info.10001: UDP, length 60 2017-08-26 22:23:16.362389 IP sonnette.lan.20932 > 202.181.238.11.10006: UDP, length 60 2017-08-26 22:23:16.363024 IP sonnette.lan.20932 > 139.196.111.149.10006: UDP, length 60 2017-08-26 22:23:16.363024 IP sonnette.lan.20932 > 115.28.10.13.10006: UDP, length 60 2017-08-26 22:23:16.391814 IP s17745602.onlinehome-server.info.10001 > sonnette.lan.20932: UDP, length 60 2017-08-26 22:23:16.523478 IP 47.88.6.65.10006 > sonnette.lan.20932: UDP, length 60 2017-08-26 22:23:16.691365 IP 202.181.238.11.10006 > sonnette.lan.20932: UDP, length 60 2017-08-26 22:23:16.717209 IP 139.196.111.149.10006 > sonnette.lan.20932: UDP, length 60 2017-08-26 22:23:16.735700 IP 115.28.10.13.10006 > sonnette.lan.20932: UDP, length 60


Il reste donc à améliorer ce principe pour éviter les fausses alertes. Je vous laisse réfléchir et y investiguer. À mes heures perdues, j'améliorai celui-ci, mais pour mon usage personnel, c'est totalement suffisant. 


Si vous n'aimez pas cette façon de faire car il y'a parfois des "faux positifs", vous pouvez essayer une autre méthode que nous n'avons pas encore testé avec ce portier. Installez un module qui permet de relevé la consommation électrique "en live" et lorsque vous détectez un changement de consommation (augmentation de consommation), vous avez compris qu'il y'a quelqu'un qui a sonné! Cette méthode pourrait fonctionner avec tous les types de portier non connecté (et surtout avec les portiers vidéos non connecté, la consommation électrique augmente lorsque la vidéo est en train de tourner).