Aller au contenu

Ping Téléphone En Veille Ou Tester Votre Présence 2 Le Retour


TonyC

Recommended Posts

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é par kiwi
Lien vers le commentaire
Partager sur d’autres sites

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?

Lien vers le commentaire
Partager sur d’autres sites

@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..

Lien vers le commentaire
Partager sur d’autres sites

@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 : 

  1. 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à .
  2. 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).

Lien vers le commentaire
Partager sur d’autres sites

@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...

Lien vers le commentaire
Partager sur d’autres sites

@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

Lien vers le commentaire
Partager sur d’autres sites

@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/

Lien vers le commentaire
Partager sur d’autres sites

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).

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

@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

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

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 
Lien vers le commentaire
Partager sur d’autres sites

@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 :D Pour les HCL, le support se fera une fois que j'ai terminé le sujet initial :) Merci pour votre patience :)

Lien vers le commentaire
Partager sur d’autres sites

@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é ....

Lien vers le commentaire
Partager sur d’autres sites

@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...

Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

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 :15:

post-1261-0-93948900-1419809796_thumb.png

Lien vers le commentaire
Partager sur d’autres sites

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 :(

Lien vers le commentaire
Partager sur d’autres sites

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  ^_^

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...