Au moins un Phone de détecté, mais l'état de "Tous les téléphones" est à 0

Bonjour,

Plugin Phone Détection version 0.4.0

Suite à la mise à jour d’hier en version stable de Phone_detection, j’ai un soucis avec l’état « Tous les téléphones ».

Malgré qu’il reste un Phone détecté, la variable état est à zéro mais la variable nombre de Phone est 1.

Encore un exemple:

J’ai volontairement débranché l’antenne, et la variable « Etat » de « Tous les téléphones » est à 0.

Es-ce que la formule pour déterminer la variable « Etat » a été modifié avec cette nouvelle version?
Avant, si au moins un téléphone était détecté, la variable « Etat » de « Tous les téléphones » était à 1.

Je ne sais pas quelle version du plugin tu utilises, mais la dernière est 2021-05-21 01:14:48

Perso, je n’ai pas ce souci, la variable etat se met a jour et avec au moins un tel présent tous les téléphones vaut bien 1

Dans la configuration tu as mis quoi en valeur ?

Ben, écoute, il y a eu une mise à jour effectuée le 15 octobre sur la version stable (0.4.0) avec l’introduction des antennes, et depuis j’ai ce soucis.

Je n’utilise que le plugin poussé sur le market, pas d’installation depuis Github

Je confirme qu’il y a bien eu une mise à jour vendredi 2021-10-15 15:26:28

Et pour moi aussi, cela ne fonctionne plus très bien. J’avais eu une petite optimisation ici, mais là cela ne fonctionne plus très bien maintenant. Une fois qu’un tel n’est plus détecté, il ne réapparaît plus ensuite.

Je mets mes logs.phone_detection.txt (32,2 Ko)

Ces derniers temps j’ai aussi des soucis !
Ce matin tout etait nickel je suis rentré ce soir plus de détection des téléphones, j’ai relancer les dépendances et hop c’est reparti ! mais pour combien de temps !

Bonjour,
D’après les logs fournis, le fichier /tmp/jeedom/phone_detection/xxx.sock ne peut pas être créé, ces qui empêche les communications entre le démon et le plugin.
Je regarderai demain pourquoi demain.
Benoit

3 « J'aime »

bonjour,

je viens de passer pas mal de temps a revoir le code, et a regarder les logs par rapport aux informations que vous m’avez fournies.

la partie de code qui gère le démon local n’a pas changé, donc cela devrait fonctionne comme avant. On voit d’ailleurs dans les logs, que l’état des téléphones sont bien envoyés au plugin (Frédéric est présent puis absent, et on note que updateGlobalDevice est appelé pour mettre a jour l’état global.
J’ai note que APIKEY est inconnu, alors qu’il devrait être rempli.

il faudrait :
1/ vérifier dans Réglages → Configuration → Systeme → API qu’une clé est bien présente pour « Clé API : Détection de téléphone (Bluetooth) »
2/ mettre le plugin en debug (sauvegarde), et ensuite, redémarrer le démon.

Dans les traces, il est possible de suivre le l’état du mobile tel que vu par le démon, et les informations transmises par le démon au plugin. Si cela vous semble illisible, vous pouvez poster les traces, je jetterai un coup d’œil. Pour les mises a jour du plugin, il faut chercher « Update value to . yy for XXXX[Etat_XXXX] » dans les logs. yy vaut 0 pour téléphone absent, et 1 pour téléphone présent.

En ce qui concerne les mises a jour de l’état global, l’algorithme n’a pas change : l’état est a 1 si le nombre de téléphone présent est > 0, sinon l’état est a 0. Je vais rajouter des traces essayer d’identifier le problème. Si cela arrive a nouveau, il faudrait vérifier l’état de tous les téléphones , et ensuite rafraîchir les téléphones pour voir si cela met a jour l’état global.

De mon cote, je confirme que je n’ai pas de problème sur mon jeedom de développement, avec une antenne locale, et pas d’antenne distance, et sur mon jeedom de production avec uniquement des antennes distantes, et pas d’antenne locale. Je tourne avec 4 antennes distantes, 4 téléphones depuis plus d’un an sans problème.

Cordialement
Benoit

Bonjour,

Ma config: Local et Antenne en même temps.
J’ai reproduit le soucis en déconnectant mon antenne:

  • Local OK et Antenne OK >> La présences est correcte
  • Local OK et Antenne KO >> La présence est fausse

Les logs en PJ.phone_detection_PiZero.log (18,5 Ko) phone_detection.log (23,8 Ko)

J’ai volontairement modifier les infos sensibles

Nicolas,
peux tu developper un peu plus, « La presence est fausse »

Dans les logs, je vois local : téléphone Nico présent, téléphone Mag absent. Ces valeurs ne changent pas quand tu arrêtes l’antenne distante, et l’état global ne change pas non plus (il n’y a pas d’appel a updateGlobalStatus).
As-tu vérifié les états de tous les téléphones (Etat, Etat_local, Etat_PiZero) et l’état global dans les 2 cas.

La détection de la perte de l’antenne n’est pas immédiate, cela peut prendre 2 minutes. Ensuite, on force le recalcule de l’état toutes les 5 minutes (les antennes et le local renvoie l’état des différents téléphones). Est ce que l’état est bon au bout de 6 minutes ?

Dans le fichier phone_detection PiZero.log, il y a des erreurs (500), car le nom n’est pas fournis (source:’’), alors qu’après, dans le même fichier, le nom est correct (source: ‹ PiZero ›). Quand le process est relance sur le PI, il est indique qu’un autre processus utilise déjà la même socket. Comment arrêtes-tu ton PI ? tu fais bien un shutdown ?

benoit

Hello,

J’ai arrêté l’Antenne à l’Américaine, en la débranchant
Comme si la Comm entre Jeedom et l’Antenne était interrompu involontairement.

Mes Etats qui tournent depuis plusieurs heures:

Pour Mag:
Etat: 0
Etat_local: 0
Etat_PiZero: 0

Pour Nico:
Etat: 1
Etat_local: 1
Etat_PiZero: 0

Pour Tous les téléphones:
Etat: 0 <<<< L’état n’est pas correct
Nombre de téléphones présents: 1

Je ne sais pas quoi dire d’autre :sweat_smile:

Sauf si je n’ai pas compris le principe, et je m’en excuse d’avance:

  • Si au moins une antenne détecte ma présence, l’état de « Tous les téléphones » est à 1 ou 0
  • Faut-il que l’ensemble des antennes détectent ma présence pour que l’état « Tous les téléphones » soit à 1?

non, non, c’est bien ça le principe. C’est juste l’état qui est faux, malgré le nombre de téléphone présent a 1 dans une des antennes. Pourtant, cette partie de code n’a pas change, et l’état est a 1 si le nombre de téléphone présent est > 0, sinon 0.
Avec toutes les valeurs, ça permet de cibler la partie de code d’ou peut provenir l’erreur, c’est plus précis que « ça ne fonctionne pas » :smiley:

Est -ce que tu peux remplacer le fichier phone_detection.php dans /var/www/html/plugins/phone_detection/core/php/ par le fichier attache (en le renommant bien sur, ou en faisant un copier/coller du contenu) ?
La modification permet de forcer la mise a jour du calcul du téléphone et de l’état global, sur réception d’un changement sur le téléphone, quelque soit l’état précédent. Il faudra attendre au moins 5 minutes qu’un des téléphones force un « refresh ».

Benoitphone_detection.txt (8,9 Ko)

Bonjour @benoit5672

Merci d’avoir pris le temps de regarder.
Pour le clé Api, c’est moi qui l’ait retiré du fichier :sweat_smile:

Du coup, je pense que c’est le défaut sous nuc qui ressort suite à la mise à jour. J’ai essayé de remettre le fichier que tu m’avais modifié dans l’autre sujet, mais il ne fonctionne plus.

J’ai fait les tests avec ton nouveau fichier, il y a dû mieux mais ça bagotte tout seul (changement de l’état 0 à 1 puis 1 à 0) alors que mon phone est bien détecté.

Lorsque j’ai çà, dans le log:

[2021-10-18 13:26:02][INFO] : Restarting daemon on remote PiZero
[2021-10-18 13:26:02][INFO] : Lancement du démon distant
[2021-10-18 13:26:02][INFO] : Arret du demon distant 2
[2021-10-18 13:26:02][DEBUG] : callDaemon (tcp://192.168.1.0:55009) {"apikey":"8HvmYjQRFXI8x","action":"stop","args":""}

J’ai tout de suite l’état qui change à 0 (J’ai fait un scénario juste pour avoir la date et heure du changement):

[2021-10-18 13:26:03][SCENARIO] Start : Scenario execute automatiquement sur evenement venant de : [Variables][Tous les telephones][Etat].
[2021-10-18 13:26:03][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-10-18 13:26:03][SCENARIO] [Erreur] Aucune commande trouvée pour 
[2021-10-18 13:26:03][SCENARIO] Exécution d'un bloc élément : 370
[2021-10-18 13:26:03][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-10-18 13:26:03][SCENARIO] Evaluation de la condition : [0 == 1] = Faux
[2021-10-18 13:26:03][SCENARIO] Exécution du sous-élément de type [action] : else
[2021-10-18 13:26:03][SCENARIO] Fin correcte du scénario

Pour te montrer que ca bagotte:
scenario80(1).log (10,7 Ko)

Bonjour @dsigmoun,
bravo pour l’Apikey. Je me demandai même comment cela pouvait fonctionner :slight_smile:

le nouveau fichier contient les modifications que je t’avais faites, donc le problème ne vient pas de la.
Passe en debug, et ensuite, traque les ‹ update value to yy for … › dans le fichier log. Cette ligne reporte les changements d’état reçu par les antennes. Je la mettrai d’ailleurs en info dans la version suivante…
tu peux ensuite allumer / éteindre le bluetooth de ton telephone pour effectuer des tests, et voir si les changements d’état sont bien reçus par le plugin, ou si c’est la detection qui ne fonctionne pas.

benoit

@nniccollas,
ça serait bien d’avoir les autres états (ceux des téléphones, Etat, Etat_local, xxx) pour voir ce qui change. Car la clairement, on voit que la condition ‹ State › global est bien calculée est en tout cas.
Donc, les résultats de son scénario complété avec les états des téléphones, et le log du plugin en debug pour la même période.
S’il faut je te retransmettrai un fichier avec des logs additionnels.

Benoit

Hello,

J’ai refait un protocole de test:

  • 14h41, lancement des Démons
  • 14h43, tout va bien, j’execute manuellement le scénario pour récolter les variables
  • 14h47, je débranche l’antenne PiZero

On voit que dans les logs du scénario, la variable « Tous les téléphones/Etat » tombe à zéro immédiatement avec l’Etat de « Nico » sur PiZero, puis « Tous les téléphones/Etat » bagotte (reviens à 1 au bout de 5 mins puis de nouveau à 0 après 30 sec ).

Logs anonymisés:
phone_detection.log (81,2 Ko) scenario80.log (6,6 Ko)

Incroyable ! Le nombre de téléphone est bien a 1, mais l’état global change de 0 a 1 et 1 a 0.
J’ai mis un fichier en document attache, avec plus de debug pour comprendre ce qui se passe. Peux-tu l’installer dans /var/www/html/plugins/phone_detection/core/class apres l’avoir renommer en phone_detection.class.php

phone_detection.class.txt (34,1 Ko)

Benoit