Geofencing App Mobile V2

Hello,

C’est un peu normale ces erreurs, le plugins fait une boucle sur $transmition
Dommage qu’ont ai pas été « consulté » sur cette modif et ce quelle apporte, car j’ai du mal a saisir la finalité, doit-on comprendre que le discord/trello ouvert pour beta-test, qui fonctionnait pourtant bien, ne sera plus utilisé pour les futurs modifications ?

Lancé cette modif un vendredi après midi, tout en sachant que personnes ne sera dispo de la Team/Helpeur le W.E pour corriger est un peu dommage…

2 « J'aime »

Bon j’ai retrouvé le fonctionnement du geofencing. J’ai modifier mobile::geoloc dans mobile.api.php en attendant :

if($jsonrpc->getMethod() == 'mobile::geoloc'){
	log::add('mobile', 'debug', '|-----------------------------------');
	log::add('mobile', 'debug', '|-GeoLocV2 geofencing --');
	
	if(isset($params['transmition']) && isset($params['transmition']['event']) && $params['transmition']['event'] == 'geofence'){
        log::add('mobile', 'debug', '| event > '.$params['transmition']['event']);
		$geofence = $params['transmition']['geofence'];
		log::add('mobile', 'debug', '| event > '.json_encode($geofence));
		$eqLogicMobile = eqLogic::byLogicalId($params['Iq'], 'mobile');
		if($eqLogicMobile){
			log::add('mobile', 'debug', '| Mobile trouvé');
			$cmdgeoloc = cmd::byEqLogicIdAndLogicalId($eqLogicMobile->getId(), 'geoloc_' . $geofence['identifier']);
			if(is_object($cmdgeoloc)){
				log::add('mobile', 'debug', '| commande trouvé');
				if($geofence['action'] == 'ENTER'){
					log::add('mobile', 'debug', '| commande passé à 1');
					$cmdgeoloc->event(1);
				}elseif($geofence['action'] == 'EXIT'){
					log::add('mobile', 'debug', '| commande passé à 0');
					$cmdgeoloc->event(0);
                }
            }
          	log::add('mobile', 'debug', '|-----------------------------------');
          	$jsonrpc->makeSuccess();
		}else{
          	throw new Exception(__('EqLogic inconnu : ', __FILE__) . $params['Iq']);
		}
    } else {
        throw new Exception(__('Pas de paramètre de geofencing : ', __FILE__));
	}
}
4 « J'aime »

T’es un crack @Phpvarious, un grand merci :partying_face:
Comme la geoloc fonctionnait hyper bien, j’avais viré automate et le plugin localisation de lunarok pour n’utiliser que la nouvelle app jeedom !

1 « J'aime »

@Phpvarious, merci de ton taff, bien joué

Oki, je comprends
Maintenant, avec la modif coté serveur et app, on peut recevoir toutes les infos des points géolocalisation enregistrés sur un seul event d’une des zones, donc transmition est bien un tableau, meme si un seul element remonte

Effectivement, coté App publique, transmition ne passe pas en tableau
Je prend en charge ta modif, la pousse sur le plugin, et laisse notre version en commentaire pour la prochaine version de l’app

1 « J'aime »

Pas de soucis, mais pour comprendre :

Si on entre dans une zone, et qu’on sort d’une autre (soit 2 event), il y aura qu’un appel API ?

Avec le changement coté App, sur la librairie, il y a une option pour envoyer en batch, donc en théorie un seul appel avec toutes les zones

On a testé avec 3 zones par exemples :
Desfois il ne faisait qu’un appel avec les 3 zones dans transmission, parfois c’était un appel avec 2 zones et l’autre appel avec 1 seul (il y a une subtilité qui nous échappe encore :sweat_smile: )

mais dans touts les cas, ca permet deja de venir actualiser toutes les zones, souci qu’on avait parfois chez certains

C’est réactif, et fiable dans les tests que l’on a mené avec ce changement

Et on espère que ca fiabilisera la géolocalisation pour tout le monde

ah ok, je comprend mieux la finalité. :+1:

Exemple la :

Un appel avec 1 seul, et dans la foulée, l’autre avec 2 zones ^^

1 « J'aime »

Commande trouvée, il ne manquerai pas un e à la fin
C’est juste des logs je sais

C’est pas faux :sweat_smile:

Du coup à passé aussi :innocent:

Je modifie ^^

1 « J'aime »

Bonjour
Je le glisse rapidement, au cas où ça dépannerait certains en attendant.
Pour les utilisateurs d’iOS :
Apple a modifié sa règles sur les déclencheurs d’Automations (application Raccourcis) sur la dernière version ios.
Il est maintenant possible d’avoir une automation que se déclenche sur une zone géographique
« En arrivant » et « en partant »
Il suffit de piloter un virtuel via une commande API pour donner l’info à Jeedom.
Ça fonctionne tres bien !!!

Salut,
Je péte un boulon :smiley:
J’ai ajouté la géloc sur le téléphone de ma compagne il a quelques jours et depuis tout est KO.
J’ai cru que cétait cette action mais visiblement il problème de géoloc est plus « général ».
De mon côté j’ai tanté ta modification, mais c’est KO chez moi !
En fait je me rend compte qu’il n’arrive pas à « trouvé » le mobile par son « Iq » … du coup les infos arrivent bien à Jeedom … mais la commande n’est pas mise à jour :(.
Je viens de passé le plugin en mode « béta » dans l’espoir mais pas mieux …
Edit: Pour complété le $params[‹ Iq ›] chez moi est vide :frowning: pas étonnant qu’il trouve pas le mobile et la commande !

Il faut que tu mettes les logs pour que l on comprenne

[2024-05-20 12:02:38] DEBUG  : |------------------------------------------------------------------------------------------------------|
[2024-05-20 12:02:38] DEBUG  : |                                   Appel API Mobile > mobile::geoloc
[2024-05-20 12:02:38] DEBUG  : | paramètres passés > {"apikey":"MON_API","plugin":"mobile","transmition":{"event":"geofence","is_moving":false,"uuid":"MON_UID","timestamp":"2024-05-20T10:01:46.516Z","age":50048,"odometer":0,"coords":{"latitude":36.4432589,"longitude":15.1560546,"accuracy":52.4,"speed":0.08,"speed_accuracy":1.5,"heading":-1,"heading_accuracy":-1,"altitude":105.3,"ellipsoidal_altitude":105.3,"altitude_accuracy":100,"age":50067},"activity":{"type":"still","confidence":100},"battery":{"is_charging":false,"level":0.28},"geofence":{"identifier":"0","action":"ENTER","timestamp":"2024-05-20T10:02:36.582Z"},"extras":[]}}
[2024-05-20 12:02:38] DEBUG  : |-----------------------------------
[2024-05-20 12:02:38] DEBUG  : |-----------------------------------
[2024-05-20 12:02:38] DEBUG  : |-GeoLocV2 geofencing --
[2024-05-20 12:02:38] DEBUG  : | event > geofence
[2024-05-20 12:02:38] DEBUG  : | event > {"identifier":"0","action":"ENTER","timestamp":"2024-05-20T10:02:36.582Z"}
[2024-05-20 12:02:38] DEBUG  : | event >
[2024-05-20 12:02:38] DEBUG  : | poils poils !!

J’ai ajouté la ligne pour faire un display de la variable $param[Iq] et elle apparait juste après la ligne « event > geofence » … et la var est vide :frowning:
Les « poils poils » … c’est un echo dans le bloc ELSE qui va avec le if($eqLogicMobile).
Donc comme il trouve pas le mobile … pas d’update de commande.
Après les autres lignes de logs ne semblent pas en rapport avec le géoloc

Bon en même temps en copier/collant les logs je me rend compte en effet que le « Iq » n’est pas passer en params … alors … mystère …

Sii tu regardes @DaBoss les logs qu’a mis @Sekiro, on voit qu’il y a une ligne qui indique que le « mobile trouvé » dans les logs

On ne voit pas dans tes logs Mobile trouvé

Tu peux regarder si l’équipement « Ton téléphone » est crée dans le plugin. Pour vérifier tu vas dans l’onglet « Notification », si le champ « Id Mobile » correspond à ton uuid de tes logs « MON_UID » alors c’est bon

@JAG
Oui, mon mobile est bien enregistré dans le plugin-mobile.
J’ai bien un « Id Mobile » … MAIS
Comme je le disais dans mon post précédent, dans les logs… l’id n’est même pas passé à priori par l’application mobile vers le plugin… j’ai fais quelque modif de code pour faire des prints supplémentaires… et la variable $params[iq] qui devrait contenir cette ID du mobile et ainsi pouvoir « trouvé le mobile » n’est pas dans les params :frowning:
Le champ que j’ai remplacé par « MON_UID » ne correspond pas à l’ « id mobile » ni dans le contenu ni dans la forme d’ailleurs.
Mon mobile discute pourtant bien avec le plugin … j’ai bien les notifications. Et dans d’autre log je vois bien dans les params le « IQ » qui correcpond à mon « Id Mobile » … mais pas pour la géoloc.
Et avant de posté ici évidement, j’ai refais de zéro la procédure … reset de l’app mobile … clear du cache … delete du mobile côté plugin etc…

Dans je lis dans code :

		$eqLogicMobile = eqLogic::byLogicalId($params['Iq'], 'mobile');
		if($eqLogicMobile){

Mais comme dans les params … « Iq » n’existe pas dans ce qui est à priori reçu de l’app mobile … donc je n’ai pas la log « Mobile trouvé » …
Voici mes logs customisé pour faire un print sérialisé des params réçu par le plugin :

[2024-05-20 17:48:28] DEBUG  : |-GeoLocV2 geofencing --
[2024-05-20 17:48:28] DEBUG  : | event > geofence
[2024-05-20 17:48:28] DEBUG  : | event > {"identifier":"0","action":"ENTER","timestamp":"2024-05-20T15:48:27.669Z"}
[2024-05-20 17:48:28] DEBUG  : | paramJsonFormat > {"apikey":"MON_APIKEY","plugin":"mobile","transmition":{"event":"geofence","is_moving":false,"uuid":"de70766a-5165-4216-9605-UNTRUCENPLUS","timestamp":"2024-05-20T15:48:26.741Z","age":919,"odometer":0,"coords":{"latitude":9.4432511,"longitude":4.1560262,"accuracy":26.4,"speed":-1,"speed_accuracy":1.5,"heading":-1,"heading_accuracy":45,"altitude":105.3,"ellipsoidal_altitude":105.3,"altitude_accuracy":46.1,"age":927},"activity":{"type":"still","confidence":100},"battery":{"is_charging":false,"level":0.92},"geofence":{"identifier":"0","action":"ENTER","timestamp":"2024-05-20T15:48:27.669Z"},"extras":[]}}


J’ai laissé un bout de UUID pour que tu vois le format … j’ai replacé que la dernière zone. et donc j’ai pas de IdMobile la dedans.

Bonjour la comue.

J’ai mise à jour ce week-end et aujourd’hui encore le plugin mobile officiel → Géolocalisation toujours KO sur mes deux téléphones samsung s22+ et xiaomi 11t pro

Je continu de penser que le problème viendrait plutôt de l’app mobile pour une raison que j’ignore … mais ces téléphones n’envoi définitivement plus leur « iq » donc c’est KO :(.
Y a -t-il un moyen d’avoir un quelconque log côté Application Android ?

Merci à vous

Hello,

Peux-tu tester cette étape pour avoir plus de log :

  • Ferme l’app.
  • Ouvre l’app.
  • regarde le log mobile qui a du ajouter des lignes de log.
  • recherche la ligne Appel API Mobile > setConfigs, en dessous tu devrais avoir Paramètres passés
  • fait le ménage sur les données sensible et post le résultat de Paramètres passés stp.

Sinon envoi en MP le log brut.