Jump to content

Utiliser sa box comme capteur d'appareil connectés


jg420

Recommended Posts

Bonjour, 

Je me lance dans un projet domotique (plus par plaisir que par utilité) consistant à programmer l'activation/ désactivation d'équipements de maison (éclairage, ventilateur, etc ...) non pas avec des capteurs (ou un horodatage) comme on peut souvent le voir mais pour commencer avec l'état des équipements réseaux (PC, smartphone connectés).

Ce que je voudrais en gros, c'est que quand je me connecte au wifi de la maison avec mon téléphone, mon serveur le détecte et joue un scénario personnalisé. Et de même avec les différentes personnes de la maison ou du lieu. 

Je suis informaticien passionné de développement  et j'ai des modules Sonoff Basic R3 en ma possession (mais je n'ai que ça que pour le moment).

Je ne compte pas utiliser d'application "toute faite" puisque je vais tout refaire à la main (oui c'est mon kiff) mais je suis curieux d'avoir vos recommandations si il fallait choisir un logiciel du commerce qui répond à ce besoin

Il n'y a rien de confidentiel et c'est vraiment dans un pédagogique que je compte le faire, si il y a des intéressés je serai ravi de partager tout le code. 

Enfin, je sais a peu près vers quoi je me diriges, ce que je veux est techniquement faisable, voici comment je compte faire

Un serveur web (php ou pyton) va interroger la box (en telnet ou http) pour avoir la liste des périphériques connectés. Cette liste est comparé à la liste des périphériques enregistrés pour déterminer les utilisateurs connectés  (1 mac address=1 périphérique = 1 utilisateur). De la on vérifie avec le temps de connexion si la personne vient de se connecter, si oui on joue le scénario personnalisé incluant le changement d'état de certains équipements(api rest) 

.... 

Merci de me donner vos avis et désolé pour les fautes 

Link to comment
Share on other sites

Bonjour jg420,

Tu ne risques pas de te retrouver avec des conflits du genre User A : ventilo On - User B : ventilo Off ? Exemple très basique mais parlant.

Mais sinon ça pourrait être intéressant. User A : entrée maison > Ordi On > TV On > AV On / playlist musique ou radio > Ouverture volet fenêtres > Clim/ventilo On.

Quelque chose comme ça ?

Link to comment
Share on other sites

Bonjour iCore, 

Je dirais que d'un point de vue générale pour éviter les conflits il faut essayer de tout tester et même les cas ne correspondant pas à la réalité.

Dans l'exemple que tu cites, la mise en marche/mis en arrêt du ventilo semble être activé simplement par la présence ou non d'un utilisateur. (Une seule condition pour valider)

Si je fais cela c'est que j'aurai associé un ventilo précis à un utilisateur précis, dans le cas d'une maison, cela pourrait être le ventilo de la chambre de la personne en question, mais sinon je vois pas de cas pratique dans l'immédiat.  J'utiliserai plutôt quelque chose comme : User A : Ventilo On ,ce qui donne pour moi User["A"].present=Ventilo["A"].allume  

Si je veux faire avec seul ventilo  alors je rajoute une autre condition : User B et pas User A : ventilo Off 

Pour le scénario c'est tout bon, mais il me faut encore plein de modules .... 

Link to comment
Share on other sites

Par rapport à ZEOP, sur la INNBOX G68, on peut apparemment récupérer la liste des équipements connecté récemment sur le LAN avec telnet. L'avantage par rapport au portail web, c'est qu'il y a moins de données à échanger et c'est donc beaucoup plus rapide.  

Théoriquement il faut activer (ou au moins vérifier) le management par telnet pour pouvoir lancer la connexion telnet vers l'équipement en question mais pour ma INNBOX G68 je n'ai pas trouvé l'emplacement pour l'activer ou la désactiver ......

Ben devinez quoi, c'est quand même activer (sans que j'ai possibilité d'agir dessus sécurisé par ip etc ..) Peut être que quelqu'un à la réponse ici . 

Sur ma box en version logiciel 6.4.13g278-102.3 le telnet est activé (avec le même identifiant que pour le portail web). 

Depuis l'invite de commande, je fais "telnet 192.168.1.1" , je m'authentifie puis je fais un "lanhosts show all" et j'ai la listes des derniers connectés (mais qui ne le sont plus forcément ).

Depuis telnet, on a la main sur des options qu'on a pas forcément avec le même utilisateur depuis le portail web. Un exemple utile que j'ai trouvé  "voice show". Ca fournis la configuration SIP pour le service de téléphonie ( nécessaire pour changer son téléphone sans passer par eux) 

Link to comment
Share on other sites

Bonjour iCore, 

J'ai pu faire à peu prés ce que je voulais avec la box zeop, mais j'ai un autre routeur (netgear) qui fait point d'accès ou je dois faire pareil pour récupérer les clients connectés.  

Concernant les modules sonoff, j'avais testé juste avec le mode propriétaire ou il fallait installer ewelink depuis le store pour contrôler le on/off à distance. 

Je viens de d'installer le nouveaux firmware pour le mode DIY (Do It Yourself) qui permet d'allumer ou d'éteindre via une simple requette http (via le navigateur ou autre) du type http://xxx.xxx.xxx.xxx/?m=1&o=1

Ben franchement ça vaut largement les 9€ que j'ai payé frais de port inclus ..... J'attend encore les minicaméras du même prix et j'espère que ce sera de la même qualité.

Donc j'ai un programme qui tourne en permanence sur un serveur et qui détecte quand je me connecte (via 2 mac address pour 1 PC et 1 smartphone) et qui peut allumé un interrupteur précis comme précité plus haut. 

Maintenant bien que je ne voulais pas, et comme on dis seul les imbéciles ne changent pas d'avis, j'ai décidé d'utiliser un outils  pour faire tout le reste à savoir l'interface a proprement parlé.

Un collègue m'a convaincu d'utiliser Jeedom. Mes scripts sont en python (apparemment ça devrait marcher). 

Il y a plein de plugins pour jeedom qui est ni plus ni moins qu'un serveur de domotique, mais j'en ai pas trouvé pour le routeur de chez zeop, et le plugins pour sonoff coute 4€ (ça vaut le coup si c'était pas aussi simple que saisir une addresse web pour allumer/éteindre). On peut faire de joli tableau de bord, automatiser plein de chose, et il y a une bonne documentation pour faire ses plugins d'après le peu que je vais vu

Je vais voir pour adapter ce que j'ai fais à jeedom, mais pour ça faut encore télécharger/installer faire un peu de veille, prendre du temps commencer encore un nouveau truc quoi. 😕 

Edited by jg420
  • Like 1
Link to comment
Share on other sites

Après un rapide test de Jeedom 4.1 sous Debian 9.1 (virtualisé par HyperV sous Win10)

- Il y a un plugin network (il y en a surement d autre encore mieux) qui permet de tester le ping vers un équipement. Si le firewall autorise le ping c'est un bon moyen de vérifier si la présence d'un équipements.

- C'est assez intuitif, on peut faire des graphiques facilement sans avoir à suivre des tutos (pour bien faire il vaut mieux je pense quand même d'en utiliser)

Je n'ai encore fait la partie scénario déclencheur etc ... mais j'ai hate de commencer. 

J'attend que mon Raspberry 4 arrive, pour installer jeedom proprement et avancer comme je veux. (Sur le site chronopost c'est déjà écrit : "taxe à récolter" = raquettage avec préméditions) 

La solution de passer par le plugins network (qui ping en permanence tout les équipements concernés) fonctionne dans presque tout les cas et très rapide à mettre en place.

Les cas ou ça marchera pas ce sera quand le firewall est activé sur le PC et/ou bloquant les pings. Dans ce cas, il faut que ce soit le serveur DHCP qui ping ou la passerelle. Il vaut mieux alors passer la box qui vérifie la mac address (ou l'hote) et qui ping l'ip correspondant (ou directement l'hôte) . 

Voila, je publierai une capture bientôt 

Edited by jg420
Link to comment
Share on other sites

  • 3 weeks later...

Bonjour, 

Voici quelques captures, j'installé le raspberry et jeedom.  Voici le bout de code python qui me permet de pinguer une addresse ip depuis la box zeop.

On peut facilement le réutiliser pour faire pareil sur un autre routeur (on peut déduire en étant un logique).  J'ai changé mon mot de passe mais j'ai mis user:user pour que tout le monde comprenne ( et pas divulguer le mien surtout). 

import telnetlib
import sys

HOST = "192.168.1.1"
IP = sys.argv[1].encode('ascii')
tn = telnetlib.Telnet(HOST)

tn.read_until(b"Login: ")
tn.write(b"user\n")

tn.read_until(b"Password: ")
tn.write(b"user\n")
 
tn.read_until(b"> ")
tn.write(b"ping  -c 1 -W 1 ")
tn.write(b""+IP)
tn.write(b"\n")

tn.read_until(b"packets transmitted,")
#time.sleep(2)

#tn.read_until(b"\r\n").decode('ascii')

brut=tn.read_until(b"\r\n") 
#print("brut "+str(brut))

reponse_ping=str(brut.decode('ascii'))

reponse_ping=reponse_ping[reponse_ping.index(","):reponse_ping.index("%")]
reponse_ping=reponse_ping.replace(", ","")

resultat=""

if(int(reponse_ping)==0):
    resultat="OUI"
else :resultat="NON"


tn.close()
#reponse_ping=reponse_ping.split()

print(resultat)
 

On peut clore le sujet ou le déplacer. C'est que de la domotique jeedom maintenant. 

Pour ceux que ça intéresse, je suis entrain de meubler virtuellement mon habitation 3D de 0, après ça je pourrai allumer/éteindre ce que je veux depuis un plan 3D.

Je regarde aussi pour les commandes vocales avec openJarvis. Il me donne déja la météo le matin et les infos de clicanoo.  

2021-02-15_14h24_12.png

jeedom.jpg

Edited by jg420
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.