jg420 Posted January 25, 2021 Share Posted January 25, 2021 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 Quote Link to comment Share on other sites More sharing options...
iCore Posted January 27, 2021 Share Posted January 27, 2021 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 ? Quote Link to comment Share on other sites More sharing options...
jg420 Posted January 27, 2021 Author Share Posted January 27, 2021 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 A 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 .... Quote Link to comment Share on other sites More sharing options...
jg420 Posted January 28, 2021 Author Share Posted January 28, 2021 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) Quote Link to comment Share on other sites More sharing options...
iCore Posted January 30, 2021 Share Posted January 30, 2021 Tu nous diras comment ça avance, c'est intéressant ton truc. Quote Link to comment Share on other sites More sharing options...
jg420 Posted January 30, 2021 Author Share Posted January 30, 2021 (edited) 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 February 4, 2021 by jg420 1 Quote Link to comment Share on other sites More sharing options...
jg420 Posted January 31, 2021 Author Share Posted January 31, 2021 (edited) 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 January 31, 2021 by jg420 Quote Link to comment Share on other sites More sharing options...
jg420 Posted February 15, 2021 Author Share Posted February 15, 2021 (edited) 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. Edited February 15, 2021 by jg420 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.