[RESOLU] Need help, Network scanner


#1

bonjour,

Je suis debutant dans Gladys et linux .
J’ai neanmoins reussi a installer
-Gladys
-Module Speak
-Module network Scanner

Mes devices sont bien detectés, mon telephone android est reconnu par le scan

Je voudrais que gladys me souhaite la bienvenue quand je rentre chez moi, j’ai creer un script

gladys.modules.speak.say({language: ‘fr’, text: ‘Bonjour gaëtan.’});

Le script fonctionne manuellement

Malgres multiples configuration de scenario, je n’arrive pas a ce que gladys creer un event back-at-home pour lancer le script.

Est ce que cela fonctionne comme ca :

-wifi tel eteint - user non detecté
-wifi allumé - user detecté - back-at-home - lancement du script ?

Ou faut-il un signal supplementaire pour que gladys lance le back-at-home

je suis un peu perdu…
Merci de votre aide


Utilisation du module scan d'IP
Network scanner
[RÉSOLU] - Débutant sur Gladys
[RESOLU]Network scanner ne détecte pas le départ
#2

Faut-il creer une alarme cron comme j’ai pu lire sur un post :

Tu dois faire un script avec le code suivant :

gladys.house.checkUsersPresence()

Et déclarer la variable USER_TIME_BEFORE_CONSIDERING_LEFT_HOME dans les paramètres Gladys. Ensuite, tu créé une alarme cron qui lance le script toutes les X minutes, et ainsi Gladys vérifiera si l’utilisateur est là ou pas régulièrement ( et te mettra absent de la maison ) <<<<<<

j’ai tenter d’installer le module cron mais sans succes, si la est ma solution je reessayerai l’intall et je reviendrai vers vous pour la config car je patoge.

J’attend de vous lire
Merci par avance


#3

Hello!

Oui! Mais pas besoin du module cron qui est désormais obsolète, c’est intégré nativement à Gladys. (Regarde dans les alarmes, tu as une alarme cron native )

Oui c’est tout à fait ça :slight_smile:


#4

Merci pour ta reponse et merci pour ce projet que je trouve geniale.

Grace a ta reponse j’ai pu avancer :

J’ai donc:
Crée un parametre > USER_TIME_BEFORE_CONSIDERING_LEFT_HOME -2 <
Crée une regle cron > check presence */2 * * * * <
Crée un scenario > alarme check presence - declenche un event - left home <
Creer un scenario > user - depart de la maison - execut script - gladys.modules.speak.say({language: ‘fr’, text: ‘Gaetan est parti.’});

Cela fonctionne tres bien sauf que du coup il me répète le script toute les deux minutes
Je comprend que c’est ce que je lui ai demandé mais comment faire pour que cela ne se produise qu’une fois
Dans le cas preci cela servirai a avertir ma femme que je suis parti.

Sachant que j’aimerai faire la meme chose a l’inverse , c’est a dire :
USER_TIME_BEFORE_CONSIDERING_BACK_AT_HOME (je pense que ca doit etre ca)
Et que gladys me souhaite la bienvenue 1 seule fois.


#5

Peut etre faut-il simplement que dans le script de l’alarme :

gladys.house.checkUsersPresence() <

je rajoute des conditions:

si user detecté : gladys.modules.speak.say({language: ‘fr’, text: ‘Bonjour gaëtan.’});
si user absent : gladys.modules.speak.say({language: ‘fr’, text: ‘Gaetan est parti.’});

du coup je n’aurai pas besoin de lancer un second scenario a chaque fois ?
Mais je pense que sa ne resoudra pas le probleme de redondance ?

Je vais potasser un peu le javascript et voir si je m’en sort .


#6

Non non !

La procédure c’est :

  • Crée un parametre > USER_TIME_BEFORE_CONSIDERING_LEFT_HOME = 10 ( exemple: 10 minutes )
  • Créé une règle cron “check presence” > */2 * * * *
  • Crée un scenario > alarme check presence => declenche un script => "check user presence avec le code gladys.house.checkUsersPresence(). ( cela va lancer le script toutes les 2 minutes )

et c’est tout ! rien de plus !

Ensuite, si tu veux faire un scénario sur le départ, tu créé un scénario sur l’event left home :slight_smile:

Non non, pas la peine, si tu es vu à la maison tu es directement mis comme de retour ( pourquoi vouloir attendre ? )


#7

Merci beaucoup !

Sa fonctionne comme je voulais.

J’avais fait cette manip mais la valeur que j’avait mis sur

USER_TIME_BEFORE_CONSIDERING_LEFT_HOME

devait etre trop courte et je n’arrivait pas a retrouver mes events.

Maintenant c’est parfais merci encore, en esperant que sa en aidera d’autre.
Bon courage pour la suite du projet !!


#8

Top génial !

ça aidera surement des autres oui !


#9

Bonjour,
Je relance sur le sujet car chez moi j’ai un problème de fonctionnement avec plusieurs utilisateurs de définis.

Pour expliquer mon problème présent, le module arrive bien à trouver tous les IP de mes périphériques et m’indique bien “Utilisateur vu à la maison” pour l’ensemble des utilisateurs mais pas le “Retour à la maison” automatiquement.

En suivant les indications de @pierre-gilles pour la configuration et si j’ai bien compris, si au bout de 10 mn pas de détection alors indique automatiquement “Retour à la maison” mais chez moi rien n’est déclenché alors que si je regarde ma Timeline le dernier évènement est “Utilisateur vu à la maison” et à été détecter plusieurs heures déjà.

Voulant comprendre j’ai regarder la fonction gladys.house.checkUsersPresence() et sa commande SQL et je pense que le problème vient de celle-ci.

Dans la configuration où moi pas connecté au réseau mais le deuxième utilisateur lui est déjà présent.
En tapant directement celle-ci sur mysql, je constate que la valeur de la datetime récupérée n’est pas la mienne mais celle du deuxième utilisateur et donc ne me retourne pas au bout des 10 mn la commande “Retour à la maison” car je suis considéré comme déjà vu.

En cherchant un peu (car pas un pro en sql) et pour apporter une solution j’ai donc remplacer dans le fichier Gladys/api/core/house/house.queries.js le code

  getUserAtHomeAndNotSeenSince: 
  `
    SELECT user.id, MAX(event.datetime) as datetime  
    FROM user
    JOIN event ON event.user = user.id
    JOIN eventtype ON event.eventtype = eventtype.id
    WHERE ( eventtype.code = 'back-at-home' OR eventtype.code = 'user-seen-at-home' )
    AND house = ?
    AND user.id IN (
        SELECT user.id
        FROM user 
        WHERE ( 
            SELECT eventtype.code
            FROM event 
            JOIN eventtype ON event.eventtype = eventtype.id
            WHERE 
            ( eventtype.code = 'back-at-home' OR eventtype.code = 'left-home' )
            AND user = user.id
            AND house = ?
            ORDER BY datetime DESC LIMIT 1 ) = 'back-at-home'
    )
    HAVING datetime < DATE_SUB(NOW(), INTERVAL ? MINUTE)
  `

par celui-ci

  getUserAtHomeAndNotSeenSince: 
  `
    SELECT user.id,user.firstname, MAX(event.datetime) as datetime, eventtype.code  
    FROM user
    JOIN event ON event.user = user.id
    JOIN eventtype ON event.eventtype = eventtype.id
    WHERE ( eventtype.code = 'back-at-home' OR eventtype.code = 'user-seen-at-home' OR eventtype.code = 'left-home' )
    AND house = ?
    GROUP BY event.user
    HAVING datetime < DATE_SUB(NOW(), INTERVAL ? MINUTE)
  `

et maintenant plus de problème, je suis bien marqué comme parti au bout des 10 mn et en retour quand je suis détecté et indépendamment du deuxième utilisateur.

Mais par contre j’ai maintenant la commande “Départ” en boucle.

A+


#10

Bonjour à toi,
Alors c’est l’inverse. En fait, voilà comment ça se passe… Admettons que ta maison soit vide (donc tout le monde a quitté la maison) :

  • Un user est détecté : l’event "back-at-home est déclenché pour l’user qui est attribué aux périphériques grâce au script et au check de la présence de l’user (attention à bien attribuer des adresses IP fixes aux équipements, car il n’est pas garanti que si un périphérique se connecte il ne prenne pas l’adresse IP d’un autre équipement et donc te fausse tous tes scénarios).
  • Ensuite, chaque fois que le test sera exécuté via le script “Check user presence” si il détecte de nouveau la personne déja présente ce ne sera pas l’event “back-at-home” mais “user seen at home”, et ce, chaque fois qu’il sera détecté. A chaque détection, comme tu l’as compris, l’heure est renseignée.
  • Ensuite, si à un moment on check sa présence et si il n’est pas là, on vérifie depuis combien de temps. Si ce temps est supérieur à la valeur “USER_TIME_BEFORE_CONSIDERING_LEFT_HOME” alors on déclenche l’event (je n’ai plus le nom) pour de “départ de la maison”.

Vérifie bien ces informations mais ce n’est pas, comme tu l’as écrit :

“Dans la configuration où moi pas connecté au réseau mais le deuxième utilisateur lui est déjà présent.
En tapant directement celle-ci sur mysql, je constate que la valeur de la datetime récupérée n’est pas la mienne mais celle du deuxième utilisateur et donc ne me retourne pas au bout des 10 mn la commande “Retour à la maison” car je suis considéré comme déjà vu.”

-> Mais l’event “A quitté la maison”.

En espérant que cela t’aide.

PS: Essaie d’éviter de modifier du code dans le core de Gladys, c’est une opération délicate et il est possible que tout le code associé ne s’exécute plus correctement. Si vraiment tu rencontres un bug propre à Gladys (et qui n’est pas dû à ta configuration) alors tu peux poster une issue sur le Github de Gladys ou une Pull Request et seulement quand la modif sera acceptée, elle sera déployée. C’est préférable que tu t’assures que ton installation/configuration ne soit pas en cause.


#11

Bonjour et merci pour ta réponse @Lyreo0112,

Après un bon café et les idées en places oui j’ai inversé les thermes Retour et Départ, les idées confuses au bout d’un moment lol.

Pour tes deux premiers points j’ai compris le principe de fonctionnement et de ce que la fonction doit faire et affiné avec tes explications.

Par contre c’est sur le troisième point qui me pose problème car justement lors du test et si l’heure est supérieure à “USER_TIME_BEFORE_CONSIDERING_LEFT_HOME” la valeur récupérée n’est pas bonne et cela ne produit donc pas la commande “départ de la maison”.

je m’explique sur ma procédure:

  • les 2 users présents et indiqués comme présents dans la maison

  • toutes les 2 mn j’ai bien l’information Timeline “utilisateur vu”

  • j’ai donc déconnecté le wifi de mon téléphone (donc user 1)

  • c’est là où commence mon dilemme c’est que la Timeline n’as plus 'informations et ça pendant des heures (dernier événement “utilisateur vu” mais pas “départ de la maison”) alors que pour l’user 2 toutes les 2 mn est bien indiqué “utilisateur vu”

C’est là où j’ai donc fais des requêtes sql directement avec la même fonction que le core et m’affiche non pas ma dernière heure détecté mais récupère celle de l’user 2 (qui lui est toujours présent) et l’attribue à l’user 1.
Donc pour la suite du programme gladys.house.checkUsersPresence() si toujours présent donc pas besoin de définir l’user 1 comme parti.

Et ensuite lors de la réactivation de mon wifi sur le téléphone, j’ai pas l’évènement “Retour maison” également.

J’espère avoir été claire dans mes explications confuses lol,
je refais des tests ce soir en repartant avec le module d’origine et en suivant tes commentaires.

Merci en tout cas des tes lumières.


#12

D’accord je comprends mieux. Peux tu me dire ce que tu vois dans tes logs gladys ? pm2 logs gladys
Normalement, si tu as suivi la procédure, tu as configuré le network scanner pour faire un scan toutes les X minutes. Lors de ce scan, dans les logs tu verras apparaître le nombre de devices détectés. Essaie de nous montrer si il voit bien une différence entre “ton wifi connecté” et “ton wifi déconnecté”.
A partir de là, à chaque règle CRON que tu as défini, tu lances le script :
gladys.house.checkUsersPresence()
Et à ce moment, tu peux nous donner les logs voir si quelquechose de spécial apparaît.


#13

bonjour,
Donc après pas mal de tests dans tous les sens, j’ai 1 bonne et 1 mauvaise nouvelle.

Donc je commence par la bonne :slight_smile:
Quand il y a personne de présent et suis le seul détecté, le fonctionnement est correcte.
Lorsque je suis détecté après être sorti mon status change bien automatique en “retour à la maison” et quand je désactive mon wifi je passe bien et “Départ de la maison”.

Maintenant pour la mauvaise c’est qu’il y a bien un problème lorsqu’il y a déjà quelqu’un de présent et les données sont mélangées entre les utilisateurs.

Voici des captures donc de la Timeline et des logs :

1° cas
Donc j’active mon wifi et je suis bien passé en mode “retour à la maison” et je laisse tourner un moment et ensuite je désactive mon wifi et là c’est le calme plat après la dernière détection.

ainsi que les logs

0|gladys   | Network scan completed. Found 2 devices.
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Network scan completed. Found 2 devices.
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Network scan completed. Found 1 devices.
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Network scan completed. Found 1 devices.
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Network scan completed. Found 1 devices.
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Network scan completed. Found 1 devices.
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Network scan completed. Found 1 devices.
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Network scan completed. Found 1 devices.
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.

2° cas
Après un long moment je réactive mon wifi et je suis donc de nouveau détecté mais je repars tout de suite en “utilisateur vu” sans passer par un autre mode.

et les logs qui vont avec

0|gladys   | Network scan completed. Found 1 devices.
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Network scan completed. Found 2 devices.
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Network scan completed. Found 2 devices.
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Network scan completed. Found 2 devices.
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence
0|gladys   | Network scan completed. Found 2 devices.
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Event : create : new Event with code : user-seen-at-home
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Scenario : Trigger : New event : user-seen-at-home
0|gladys   | Scenario : Trigger : Found 0 launchers with code user-seen-at-home.
0|gladys   | Event : create : new Event with code : alarm
0|gladys   | Scenario : Trigger : New event : alarm
0|gladys   | Scenario : Trigger : Found 2 launchers with code alarm.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | House : checkUsersPresence

Donc la détection des périphériques sont bien identifiés mais l’analyse après pose problème quand il y a d’autres utilisateurs.

Pour infos je suis reparti d’un système d’origine en faisant un reset complet et donc rien modifié dans le core pour être sur que je n’avais pas modifier quelque chose qui poserai problème.

Une réfection qui m’ai venu pendant les tests, est-ce que cette fonction gladys.house.checkUsersPresence() ne serait pas plus judicieux de l’incorporer dans le module Network Scanner ??? plutôt qu’être dans le code de Gladys, surtout si l’utilisateur n’installe pas celui-ci et donc non utile dans le système.

J’espère que cela pourra aider à trouver le problème car je pense que je ne suis pas le seul à utiliser ce module et surtout qui est très utile.

Merci
A+


#14

Nope, justement le but est d’avoir ça nativement en se basant uniquement sur les events, qui eux sont déclenché par le module network scanner ou n’importe quel module. Après le fait de passer par un script qui fait uniquement gladys.house.checkUsersPresence() je suis d’accord que c’est pas terrible, c’est un peu temporaire et l’objectif c’était surtout de laisser une flexibilité maximale à l’utilisateur (de pouvoir scanner quand il veut et à la fréquence qu’il veut)

A l’avenir ça peut être soit dans un scénario directement, ou alors dans le module network scanner automatiser l’appel de la fonction, à voir


#15

Bonsoir @pierre-gilles, j’espère que tu as passer de bonne vacances et au moins pus te reposer convenablement.

C’est vrai qu’il peut être utile pour donne modules et plus judicieux dans le core, j’y avais pas penser aux autres solutions de détections.

Par contre je pense qu’il y a vraiment un problème sur la récupération des infos dans la base et donc fonctionnement aléatoire (mais j’ai l’impression qu’il y a que 'est moi que cela fais sa :cry:) mais reproduit sur 2 sessions Gladys différentes.

Donc en faisant pas mal d’essais en tapant directement en sql les infos sont données erronnées quand il y a plusieurs utilisateurs.

Donc en partant de ta requette :

SELECT user.id, MAX(event.datetime) as datetime
FROM user
JOIN event ON event.user = user.id
JOIN eventtype ON event.eventtype = eventtype.id
WHERE ( eventtype.code = ‘back-at-home’ OR eventtype.code = ‘user-seen-at-home’ )
AND house = ?
AND user.id IN (
SELECT user.id
FROM user
WHERE (
SELECT eventtype.code
FROM event
JOIN eventtype ON event.eventtype = eventtype.id
WHERE
( eventtype.code = ‘back-at-home’ OR eventtype.code = ‘left-home’ )
AND user = user.id
AND house = ?
ORDER BY datetime DESC LIMIT 1 ) = ‘back-at-home’
)
HAVING datetime < DATE_SUB(NOW(), INTERVAL ? MINUTE)

et en la modifiant pour avoir les bonnes infos, cela donne ça :

SELECT user.id,user.firstname,MAX(event.datetime) as datetime  
FROM user
JOIN event ON event.user = user.id
JOIN eventtype ON event.eventtype = eventtype.id
WHERE ( eventtype.code = 'back-at-home' OR eventtype.code = 'user-seen-at-home' )
AND event.house = ?
AND user.id IN (
    SELECT device.user
    FROM device
    WHERE ( 
        SELECT eventtype.code
        FROM event 
        JOIN eventtype ON event.eventtype = eventtype.id
        WHERE 
        ( eventtype.code = 'back-at-home' OR eventtype.code = 'left-home' )
        AND event.user = device.user
        AND event.house = ?
        ORDER BY datetime DESC LIMIT 1 ) = 'back-at-home'
    AND device.service = ?
    GROUP BY device.user
)
GROUP BY user.id 
HAVING datetime < DATE_SUB(NOW(), INTERVAL ? MINUTE)

déjà j’ai ajouter GROUP BY user.id pour avoir tous les résultats et pas un seul utilisateur (ça me donnais que les infos de l’utilisateur 1 quand il y en avais plusieurs de présents) et aussi user.firstname je sais pas pourquoi sans ça sa tournait pendant des heures sans me donner le résultat.

et aussi dans “AND user.id IN” j’ai préféré plutôt faire un select sur device plutôt que dans la table user car j’ai constaté aussi que si un utilisateur n’est pas suivi par le scan il le mettait aussitôt en mode sorti car il passait pas par le mode utilisateur vu.
En tout cas ça marche chez moi avec cette petite modification.

Pour la fonction gladys.house.checkUsersPresence() j’ai préféré la mettre dans le module avec un setInterval sa évite de crée plusieurs éléments pour juste lancer celle-ci.

J’espère que tu aura quelques secondes pour voir s’il y a bien un problème ou si c’est moi qui me prend mal pour utiliser ce module.

Merci d’avance

et bon retour encore.


#16

bonjour à tous,

petit détartrage du topic, j’aimerais alléger mes Device avec network scanner, mais je n’arrive pas a voir la bonne combinaison pour les adresse ip.

j’ai essayer plusieurs façon mais aucune n’est la bonne.

pouvez me dire quelle est la bonne formule ( niveau des virgules de séparation ).

d’avance je vous remercie


#17

Alors ce module sous le capot utilise “nmap”, voilà donc une petite aide sur le sujet => https://www.packtpub.com/mapt/book/networking_and_servers/9781786467454/1/ch01lvl1sec16/scanning-an-ip-address-ranges

Tu voudrais limiter à quel IP ?


#18

merci Pierre Gilles, je vais regarder a cela courant de semaine.
pour le moment j’aimerais limite au iPhone de la famille… après on verra… car j’ai beaucoup de choses sur le réseaux domestique et ca encombre un peu les Devices.


#19

Bonjour à tous
J’ai un soucis avec ce module moi aussi. C’est certainement dû à une mauvaise utilisation de ma part.

Contexte:
2 utilisateurs
2 smartphones

Utilisation:
Utilisateur 1 et 2 à la maison => Box who’s at home OK
Utilisateur 1 parti et 2 à la maison => Box who’s at home KO (Les 2 sont toujours affichés comme présents)
Utilisateur 1 à la maison et 2 parti => Box who’s at home KO (Les 2 sont toujours affichés comme présents)
Utilisateur 1 et 2 parti => Box who’s at home KO (Les 2 sont toujours affichés comme présents)

J’ai bien crée le paramètre pour définir le temps de départ (10). Dans le network scan dans les logs je vois bien mon téléphone ne plus être scanné.
J’ai l’impression au vu des logs que je suis jamais considéré comme left at home. Dans la timeline il ne me voit plus, mais la bow who’s at home considère toujours que je suis là.

J’ajoute à ça que la timeline n’ajoute pas les évènements mais les mets à jour. En gros je n’ai qu’un évènement depuis le début, qui est Utilisateur vu à la maison et il est mis à jour si je suis vu en WiFi dans la maison.

Avez vous une petite idée du soucis ?


#20

Hello! Quelle est ta version de Gladys?

Je crois que c’est un problème qu’on a eu et qui a été corrigé dans une version plus récente/ou peut être pas encore publié.

En attendant, un quick fix pour toi c’est de créer un événement “left-home” pour chacun des deux utilisateurs pour amorcer le système, ensuite tu seras vu comme de retour, et après ça fonctionnera nickel!