Jeedom Netgear : Etat de connexion de vos appareils

Je vais décrire dans cet article comment remonté dans Jeedom le status des appareils connectés à un routeur Netgear. J’ai utilisé deux versions de routeur qui ont des versions firmwares différentes. Le premier était un WNR3500L et le second un WNDR3700v5. L’accès à la configuration du WNR3500L ce fait via une interface web classique alors que le WNDR3700v5 dispose d’une interface basé sur des services web SOAP. La version SOAP est très spécifique Netgear par contre la version http doit être adaptable à d’autre type de routeur qui ont une interface web de configuration.

Diagramme des composant

Partie Routeur

Les scripts sont disponible sur gitHub
Les deux scripts font la même chose seul la méthode d’accès aux données du routeur change. Le but est d’interroger le routeur pour obtenir la liste des équipements connectés et leur IP et adresse MAC.

La version http utilise la lib httplib2 pour ouvrir la page device de l’appli web. Le script va ensuite parser la page pour retrouver la liste des équipements connectés    https://github.com/chevalir/cabraJeedom/tree/master/script/netgearHttp

La version Genie utilise elle l’API Soap via un Reverse Engineering proposé ici : https://github.com/balloob/pynetgear

https://github.com/chevalir/cabraJeedom/tree/master/script/netgearGenie

L’équipement est identifié grâce à son adresse MAC ou IP au choix.

Vous aurez donc à éditer le code python pour définir les valeurs des adresses MAC. Pour mettre à jour Jeedom le script  et les ID des commandes jeedom que nous feront dans la partie Jeedom

#                     MacID            OFF  ON   setIP   Name
devicesMng = {'B4:88:P8:85:O6:5P' : (8809, 8808, 8884, 	'iPhone B')
         	, 'B8:O7:5P:A5:5O:8E' : (8844, 8840, 8880, 	'iPod')

 

Partie JEEDOM

Le plus simple est de montrer ce que cela donne en final dans Jeedom :

 

Chaque objet est un équipement créé avec le plugins Virtuel.

Deux info : une pour l’IP l’autre pour le Status ( present ).

Deux actions de type Default pour changer le status (setOn/setOff), une action de type Message (setIP) pour pouvoir définir la valeur de l’info IP.

Se sont les ID ( 2065, 2066, 2092) des actions setOn, setOff, setIP qu’il faudra reporter dans script.

 

Certains équipements n’apparaisse pas dans la liste fournie par mon routeur, les ponts Wifi par example dans ce cas j’ai utilisé le plugins Ping.

Dernière chose à faire est d’appeler le script régulièrement pour que status des équipement soit mise à jour. Une des solution est de le faire avec le plugins Script. Enfin j’ai un scénario qui lance le script et les équipement Ping toutes les 5min.

Voila grâce à tout cela j’ai l’état en temps réel des équipements connectés, cela me permet par exemple de déclencher des scénarios en fonction du retour à la maison des occupants.

chevalir

5 Comments

  1. Bonjour,
    j’ai regardé avec attention cet excellent système, que j’ai essayé de faire fonctionné, mais sans succès.
    J’ai un routeur netgear 3700v5 et une jeedom smart.
    J’ai fait un essais en http, mais j’ai des problèmes dans le script, notamment avec httplib2 qui n’est pas trouvé.
    J’ai fait un autre essais avec le soap, mais par contre je ne vois pas où installer les fichiers pynetgear.
    Si vous pouviez me donner un petit coup de pouce pour avancer.
    Merci.

    • Bonjour,
      Avec le 3700V5 seul le soap peut marcher. Pour installer pynetgear tu à l’info sur le site : https://github.com/balloob/pynetgear
      >> You can install PyNetgear from PyPi using pip3 install pynetgear (use pip if you’re still using Python 2).
      si tu ne veux pas l’installer avec pip tu peux le faire manuellement. Tu télécharge le zip de pynetgear (bouton « clone or download » sur git). Tu unzip cela dans /tmp. Tu va dans le dossier pynetgear, il doit y avoir un fichier setup.py. Depuis ce dossier tu lance la commande :

      >sudo python setup.py install

      Idem pour httplib2 dispo sur : https://github.com/httplib2/httplib2 les deux méthodes sont possibles.

  2. Bonjour, et merci pour cet excellent script
    Je l’ai mis en oeuvre avec un routeur Netgear Nighthawk AC1900 (modèle R7000)
    Ca fonctionne (j’ai toutefois du changer le numéro de port du routeur : 5000 au lieu de 80 –> bon à savoir pour d’autres utilisateurs)
    Je n’arrive par contre pas à récupérer l’adresse IP de chaque équipement : dans le fichier devStatuslist.json, je retrouve uniquement, pour chaque équipement déclaré, l’adresse MAC et l’état de connexion (True ou False)
    Du coup l’information IP n’est jamais renseignée dans Jeedom
    Aurais-je loupé un truc ?

    Une autre chose que j’ai remarqué : si au premier lancement du script tous les appareils déclarés ne sont pas connectés, ceux qui ne l’étaient pas n’apparaitront jamais par la suite (et si on rend active la ligne qui permet de faire un reset de la ligne du fichier devStatuslist.json, on se retrouve dans le même cas, avec seulement les équipements connectés au moment du déroulement du script)
    Seule solution : bien s’assurer dès le début que la ligne du fichier devStatuslist.json contient bien tous les équipements (au besoin les ajouter manuellement dans le fichier, avec un état de connexion « False »)
    Merci de vos conseils pour l’adresse IP

    • Je ne connais pas le R7000, est-ce que tu utilise API Soap ou HTTP ? Dans tous les cas l’IP n’est jamais sauvegardée dans le fichier json. Le fichier sert uniquement à sauvegarder l’état précédent pour décider si il faut mettre à jour Jeedom ou pas. L’IP est envoyée en même temps que le changement d’état. Le seul truc important c’est de bien mettre l’ID de l’info de jeedom dans le tableau « devicesMng » .

  3. Merci de ta réponse, j’utilise l’API Soap
    Mais ça y est j’ai trouvé ce qui n’allait pas : dans mes virtuels, j’avais oublié de mettre le sous-type « message » pour la commande setIP (j’avais laissé « défaut »)
    J’ai rectifié ma bêtise et ça marche maintenant, l’adresse IP remonte bien.
    Donc ça marche impeccable avec le Netgear R7000 (juste bien penser à modifier le port du routeur dans le script : 5000 au lieu de 80)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *