TonyC Posté(e) le 10 décembre 2014 Auteur Signaler Posté(e) le 10 décembre 2014 Ok misterBT dis moi quand tu es de retour et on si colle! A bientôt ...
kiwi Posté(e) le 10 décembre 2014 Signaler Posté(e) le 10 décembre 2014 (modifié) De mon coté, je vais faire une autre version. Un peu moins intrusive que le fping. Idée de base : - un daemon qui trainne sur une babasse unix quelconque (linux, freebsd, ...) sur laquelle tous les machines passent obligatoirement, typiquement un resolveur DNS pour éviter les censures de l'Etat Français pour certains ayants droits - Ce démon garde en cache toutes les adresses MAC qui font une requête dans un stable SQL (MySQL / sqlite / fichier plat, pas encore décidé) - Un script CGI en perl qui fait un bon JSON - Un Virtual module qui fait des query dessus avec la liste des devices a checker. Le cache des adresses MAC est pour mon coté prévu a 30 minutes ce qui me permet d'avoir une idée globale : est-ce que ce devices est ou n'est pas à portée du ou des bornes wifi. Et donc nécessairement plus précis que le ping car on n'est jamais sà»r que le machin soit à l'écoute lorsque qu'on ping... Je ne sais pas encore si je fais a base d'arpwatch (ou equivalent "hacké") ou... en utilisant bonjour (avec le daemon avahi) qui présente aussi ce type de fonctionnalités. Edit du 12/12/2014: J'abandonne le coup du avahi, car le TTL des données présentent dans bonjour a une durée trop courte pour être correctement gérée, sauf coder un machin en C avec un polling régulier (ou une gestion via dbus que avahi utilise) ce n'est pas que ça m'est impossible, mais je veux que ca soit assez simple pour moi et aussi pour tous içi. Donc, je vais m'orienter vers l'arpwatch qui me semble une meilleure idée Modifié le 12 décembre 2014 par kiwi
TonyC Posté(e) le 10 décembre 2014 Auteur Signaler Posté(e) le 10 décembre 2014 super initiative kiwi, j'espère que tu nous fera un tuto! après ça dépend de l'utilisation qu'on veut en faire, chaque solution à ses pours et ses contres ... par contre pourquoi intrusif le fping?
TonyC Posté(e) le 12 décembre 2014 Auteur Signaler Posté(e) le 12 décembre 2014 @MasterBT le pblm du script qui se barre en coquillette au bout de 10mn est dans rc.local, j'y avais laissé des paramètres de durée durant mes test, mea culpa!! remplace la ligne existante par la suivante: sudo fing -n 192.168.1.0/24 -o table,html,/var/www/ping/lan.html & Tiens moi au jus..
kiwi Posté(e) le 12 décembre 2014 Signaler Posté(e) le 12 décembre 2014 @Tony270570 le fping est pas mal, mais n'est pas aussi fiable que de jouer avec le fait que la carte wifi fait un p'tit broadcast en DHCP lors de sa présence, donc "passivement" sans encombrer le réseau plus qu'il n'est déjà on "sais" que le device est là (enfin tout le réseau sais : switch / routeurs / whatever). D'autre part faire un fping sur /24 entier est quand même pas mal bruyant au niveau reseau et pas correctement efficace (typiquement firewall sur de pc Windows), et donc dire : host down alors qu'il est vraiment présent sur le réseau. Deux méthodes a utiliser : Soit on prends un daemon / ou la capacite a faire un watch de la table ARP de certaines machines (exemple dans la freebox revolution en mode routeur, il y a liste des host découvert), c'est plus que fiable car le ping peux se perdre d'une facon ou d'une autre et donc faute a pas de chance pas detecter que le matériel est là . Utiliser les capacités des switchs intelligent type Cisco, mais tout le monde n'en as pas un nécessairement à la maison (là c'est simple : snmpwalk et le pb est réglé). C'est une technique que j'utilises au taf pour monitorer qui est la ou pas... (surtout le point 2).
TonyC Posté(e) le 12 décembre 2014 Auteur Signaler Posté(e) le 12 décembre 2014 @kiwi J'ai fait ce truc àl'arrache car ce sujet parti d'un autre post avait àl'époque intéressé la communauté, je n'ai que survolé la doc de fing, mais il me semble avoir vu qu'il était possible de créer une table d'adresse pour éviter de balayer toute la plage ip... Tu arrives àvoir les phones en veille avec ta soluce? Tiens moi au jus...
Krikroff Posté(e) le 12 décembre 2014 Signaler Posté(e) le 12 décembre 2014 @kiwi, cela revient àla solution avec le Freebox serveur mais pour les gens qui n'ont pas de Freebox ? Envoyé de mon iPhone àl'aide de Tapatalk
MasterBT Posté(e) le 13 décembre 2014 Signaler Posté(e) le 13 décembre 2014 @tony270570 J'arrives juste à la maison, je fais chauffer la bouffe, le Rasp, je vais voir ce que donne la serie Marco Polo et je test la modif. @kiwi, ta solution serait viable pour la HClite égalment? Sinon oui ca serait cool de lui faire scanner seulement une plage d'ip, car vu qu'avec cette solution on attribut une ip par adresse Mac, il suffit de laisser une petite plage de scan pour améliorer le tout. Si on réduit la plage d'ip, on peut gagner un peu en réactivitée (sans descendre en dessous des 30s si on garde un sleep à 30)? /Edit: Je vais laisser tourner le rasp, mais ca semble marcher au poil! Maintenant 2éme étape, rajouter une détection pour l'ip de madame et modifier sa Variable. J'imagine qu'il faut modifier le test_presence.sh. /edit2: Et il possible de faire afficher dans un virtual device l'état de la valeur présence? J'imagine qu'il faut faire changer l'état avec un scéne active. C'est juste par curiosité, car je commence juste avec le HCL. J'ai trouvé rapidement un topic de @jojo mais avec des variable global, ca doit pouvoir le faire, j'ai pas encore test. http://www.domotique-fibaro.fr/index.php/topic/2418-afficher-%C3%A9tat-des-variables-globales-dans-des-virtual-devices/
kiwi Posté(e) le 13 décembre 2014 Signaler Posté(e) le 13 décembre 2014 Hello, J'ai fait mon proof of concept a la maison. C'est basé avec un CGI (en perl, donc ca devrait marcher sur Syno, mais j'ai pas de syno dispo pour tests), et la table ARP de la machine. A noter que sur mon PI, la table a l'air de durer longtemps, peut-être a cause de avahi (a vérifier). J'ai fait un virtual module qui vas checker ca. Je fais du debug jusqu'à la semaine prochaine et je publie les codes (et comment les mettre sur PI / FreeBSD...). Quelles sont les dépendences ? : - /usr/sbin/arp (facile tout linux est censé avoir ca) - Un serveur web - HC2 (testé sur ma 3.591).
jojo Posté(e) le 13 décembre 2014 Signaler Posté(e) le 13 décembre 2014 Merci Kiwi, Je ne comprends rien à toute vos discussions techniques, mais je crois avoir compris que vous avez beaucoup travaillé pour améliorer encore la solution L'idéal serait si cette solution pouvait également être compatible avec HCL ?
kiwi Posté(e) le 13 décembre 2014 Signaler Posté(e) le 13 décembre 2014 @jojo: pour la HCL, vu que le virtual module fait du http et du JSON.... Ceci dit, on pourrais "facilement" adapter ca... Je mets ca dans ma TODO pour faire plus simple... Pour info, une partie de code est publié sur : https://redmine.oav.net/projects/kiwi/repository/revisions/master/show/fibaro/arp 1
TonyC Posté(e) le 13 décembre 2014 Auteur Signaler Posté(e) le 13 décembre 2014 Bon, pour suivre ce tuto va falloir s'accrocher, il y a un fork d'une autre solution. @Kiwi, sincèrement c'est cool, mais je te propose de mettre dans la todo d'ouvrir un tuto dédié c'est vraiment pour garder un minimum de lisibilité rien d'autre Si ta solution fonctionne mieux je serai le premier à faire un lien sur ta page depuis la mienne, mon but étant de trouver une solution qui convienne à chacun ... @MasterBT YO!! J'espère que ta semaine n'a pas été trop hard, que les pâtes étaient chaudes Si ça marche bien, c'est déjà une bonne chose!! Faut que ça soit stable, car chez l'ami Diuck pour le moment, faut dire les choses comme elles sont y'a du lag... A suivre. Je te donne le code pour le tel de Madame, je viens de faire ça à l'arrache à peine testé mais ça m'a l'air de tourner tant bien que mal... redémarre le service après la maj du fichier. il faudra créer les variable coté hc et les reporter dans le code ci_dessous. Je ferai du ménage lundi dans le tuto. Pour les VD to tuto de Jojo est au poil !! dans test_presence.sh remplace le contenu par : #!/bin/bash # Never ending loop # version 1.00 # Author: Tony270570 cpt=0 while ((cpt<10)) do # Tel1 grep -n "<center>UP</TD><TD>IPTEL1" /var/www/ping/lan.html if [ $? == 0 ] then curl -X PUT -d '{"name": "VARIABLE1", "value": "Present"}' http://user:password@HC2IP/api/globalVariables echo "present" sleep 10 else curl -X PUT -d '{"name": "VARIABLE1", "value": "Absent"}' http://user:password@HC2IP/api/globalVariables echo "absent" sleep 10 fi # Tel2 grep -n "<center>UP</TD><TD>IPTEL2" /var/www/ping/lan.html if [ $? == 0 ] then curl -X PUT -d '{"name": "VARIABLE2", "value": "Present"}' http://user:password@HC2IP/api/globalVariables echo "present" sleep 10 else curl -X PUT -d '{"name": "VARIABLE2", "value": "Absent"}' http://user:password@HC2IP/api/globalVariables echo "absent" sleep 10 fi # Tel3 # copier bloque entre tel1 et tel2 done exit
MasterBT Posté(e) le 13 décembre 2014 Signaler Posté(e) le 13 décembre 2014 Merci beaucoup. Ca marche au poil! Les propriétaires de HCL te remercient Pour info voici les téléphone dans mon cas: iPhone4s MotoG
Diuck Posté(e) le 13 décembre 2014 Signaler Posté(e) le 13 décembre 2014 @MasterBT Salut tu as quoi comme Box
MasterBT Posté(e) le 13 décembre 2014 Signaler Posté(e) le 13 décembre 2014 J'ai une FreeBox comme modém mais c'est pas elle qui gère mon réseau, c'est un routeur Cisco.
kiwi Posté(e) le 14 décembre 2014 Signaler Posté(e) le 14 décembre 2014 @Tony270570: Je ferai un Sujet séparé, je teste actuellement et clairement ca marche impec sur ce que j'ai fait ce week-end. Je vais aussi tester sur Linux d'abord car la plus part de mes serveurs/machines chez moi sont sur FreeBSD Pour les HCL, le support se fera une fois que j'ai terminé le sujet initial Merci pour votre patience
Diuck Posté(e) le 14 décembre 2014 Signaler Posté(e) le 14 décembre 2014 J'ai une FreeBox comme modém mais c'est pas elle qui gère mon réseau, c'est un routeur Cisco. @ MasterBT Merci pour Linfo
TonyC Posté(e) le 14 décembre 2014 Auteur Signaler Posté(e) le 14 décembre 2014 @kiwi, c'est chouette que ça avance! Certain que ça va être une tuerie!!! @MasterBT, j'espère que tu as trouvé une place hier et content que cela soit fonctionnel, reste àtrouver une soluce pour la plage ip, pas trouvé le temps aujourd'hui, mais je ne mets pas la chose de côté ....
kiwi Posté(e) le 14 décembre 2014 Signaler Posté(e) le 14 décembre 2014 @MasterBT: si tu as un cisco y a 2 methodes qu'on pourrais utiliser en jouant avec MIB SNMP de ton cisco... (enfin si c'est un *vrai* cisco, pas un Linksys) en se basant sur les adresses MAC...
MasterBT Posté(e) le 14 décembre 2014 Signaler Posté(e) le 14 décembre 2014 yep, c'est un cisco-linksys, je n'ai pas encore gagné au loto sinon j'aurais un HC2 et non une HCL C'est un pauvre truc à 35€.
Ez3kiel Posté(e) le 29 décembre 2014 Signaler Posté(e) le 29 décembre 2014 Bonjour Tony270570, J'ai suivi ton tuto et j'ai un petit soucis. Tout d'abord, les modifs que j'ai du apporter pour que ça colle avec ce que je voulais faire à la maison : Je suis parti sur la config avec 2 téléphones avec le test_presence.sh modifié récupéré en page 6. J'utilise déja le raspberry pi pour recuperer les temperatures et conso sur le rasp suivant les tuto de Lazer pour les graphs et Coolride pour la partie raspberry. Du coup, sur le pi j'ai nginx qui tourne , le rep est /srv/www j'ai créé /srv/www/ping et adapté le reste en consequence. J'ai un dossier /home/pi dans lequel j'ai mis ton script Le test_presence : #!/bin/bash # Never ending loop # version 1.00 # Author: Tony270570 cpt=0 while ((cpt<10)) do # Tel1 grep -n "<center>UP</TD><TD>192.168.1.10" /srv/www/ping/lan.html if [ $? == 0 ] then curl -X PUT -d '{"name": "Presence_flo", "value": "Present"}' http://XXXXXXX:XXXXXXX@192.168.1.32/api/globalVariables echo "present" sleep 10 else curl -X PUT -d '{"name": "Presence_flo", "value": "Absent"}' http://XXXXXXX:XXXXXXX@192.168.1.32/api/globalVariables echo "absent" sleep 30 fi # Tel2 grep -n "<center>UP</TD><TD>192.168.1.11" /srv/www/ping/lan.html if [ $? == 0 ] then curl -X PUT -d '{"name": "Presence_cat", "value": "Present"}' http://XXXXXXX:XXXXXXX@192.168.1.32/api/globalVariables echo "present" sleep 10 else curl -X PUT -d '{"name": "Presence_cat", "value": "Absent"}' http://XXXXXXX:XXXXXXX@192.168.1.32/api/globalVariables echo "absent" sleep 30 fi # Tel3 # copier bloque entre tel1 et tel2 done exit Le exec_presence : #! /bin/sh ### BEGIN INIT INFO # Provides: exec_presence # Required-Start: $all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: Run /home/tony/test_presence if it exist ### END INIT INFO # version 1.00 # Author: Tony270570 PATH=/sbin:/usr/sbin:/bin:/usr/bin . /lib/init/vars.sh . /lib/lsb/init-functions do_start() { if [ -x /home/pi/test_presence.sh ]; then [ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/home/pi/test_presence.sh )" /home/pi/test_presence.sh ES=$? [ "$VERBOSE" != no ] && log_end_msg $ES return $ES fi } case "$1" in start) do_start ;; restart|reload|force-reload) echo "Error: argument '$1' not supported" >&2 exit 3 ;; stop) ;; *) echo "Usage: $0 start|stop" >&2 exit 3 ;; esac et le rc.local : #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi sudo fing -n 192.168.1.0/24 -o table,html,/srv/www/ping/lan.html & exit 0 Logiquement j'ai modifié ce qu'il fallait car j'ai bien le raport de fing sur l'IPdupi/ping/lan.html Du coté de la HC, j'ai bien créé 2 variables prédéfinies. Par contre, impossible de faire passer une variable de Present à Absent en coupant ou en activant le wifi... en partant d'un Pi fraichement rebooté, je pense que le rc.local est bon car un ps-ef me donne bien un fing qui tourne : pi@raspberrypi /etc $ ps -ef | grep fing root 2685 1 0 18:55 ? 00:00:00 sudo fing -n 192.168.1.0/24 -o table,html,/srv/www/ping/lan.html root 2699 2685 0 18:55 ? 00:00:00 /bin/sh /usr/bin/fing -n 192.168.1.0/24 -o table,html,/srv/www/ping/lan.html root 2701 2699 1 18:55 ? 00:04:34 /usr/lib/fing/fing.bin -n 192.168.1.0/24 -o table,html,/srv/www/ping/lan.html pi 8242 7957 0 23:39 pts/0 00:00:00 grep --color=auto fing Par contre, pour les 2 autres fichiers j'ai un soucis , meme en les lancant à la main. ligne1: $'\r' : commande introuvable Je ne sais pas vraiment d’où ça vient mais je pense avoir un problème de "retour de ligne" au format DOS (\r\n) au lieu de (\n) J'ai été obligé de passer un coup de dos2unix pour convertir les fichiers.Il semble que celà arrive quand on édite un fichier avec le bloc note windows. Maintenant, je dirais que le script test_presence ne se lance pas. par contre , si je le lance moi meme c'est bon mes variables se mettent à jour ...et pas d'insulte du coté du pi par contre en lancant exec_presence j'ai cette erreur : pi@raspberrypi /etc/init.d $ sudo ./exec_presence start /home/pi/test_presence.sh: 8: /home/pi/test_presence.sh: cannot open 10: No such file /home/pi/test_presence.sh: 8: /home/pi/test_presence.sh: cpt: not found Une idée ? PS: j'ai fait le chmod pour tout le monde ( meme en 777 pour etre sur) et désolé pour ce pavé que je viens de pondre
TonyC Posté(e) le 29 décembre 2014 Auteur Signaler Posté(e) le 29 décembre 2014 Bonjour Ez3kiel! Je ne vois pas de problème dans le code, ça ressemble àun caractère de contrôle qui traine... Tu peux essayer d'éditer un nouveau fichier en y recopiant les lignes, ça devrait fonctionner. Tiens moi au jus si ça ne fonctionne pas je creuserais un peu plus loin mais vraiment àpart ça, je ne vois pas
Ez3kiel Posté(e) le 29 décembre 2014 Signaler Posté(e) le 29 décembre 2014 Bonjour Tony270570, Je viens de refaire le test_presence et ça marche. Je laisse tourner un peu mais je pense que c'est bon ! Merci Il me reste plus qu'a ajouter cela dans un module virtuel et ce sera bon
TonyC Posté(e) le 29 décembre 2014 Auteur Signaler Posté(e) le 29 décembre 2014 Hey hey hey dis moi si c'est ok !
Messages recommandés