Tuto : Integrer de manière dynamique Waze In Time à Jeedom Connect

le petit tutoriel du jour, ou comment intégrer dynamiquement le plugin-wazeintime à plugin-jeedomconnect

Version n°1 du 31/05/2022 : version initiale
version n°2 du 31/05/2022 : ajout d’une petite astuce pour calculer la durée de circulation entre 2 positions dynamiques (remontées de JC par exemple)

Introduction
C’est une intégration assez simple (pour une fois :wink:) qui vous expliquera comment avoir une page dynamique de calcul du temps de trajet en quelques secondes pour un ensemble de destinations favorites.
Il permet :

  1. De définir une liste de destinations
  2. De calculer les 3 meilleurs temps de trajet
  3. De visualiser les itinéraires
  4. De basculer vers Waze si nécessaire (pour l’itinéraire sélectionné)

Voilà le résultat final pour vous donner quelques idées de présentation

Pour une fois, c’ets une intégration assez simple :

  • un équipement Waze in time
  • un scenario
  • un virtuel
  • les widgets nécessaire : widgets scenario pour la sélection de la destination et widgets webview pour les temps de parcours

Je part du postulat que vous avez déjà installé le plugin-wazeintime

On commence par l’équipement Waze In Time
Rien de particulier sur cet équipement (sauf à passer à mettre * dans les abonnements)
Mettre n’importe quelle valeur pour les coordonnées de départ et d’arrivée afin d’enregistrer l’équipement. Ces dernières seront mises à jour par le scénario.

L’équipement virtuel
Il se compose de 3 commandes info/autre pour gérer les liens Waze et d’1 commande info/autre par destination gérée.

Les 3 commandes « Aller », « Retour » et « En cours », seront renseignées automatiquement par le scenario (Bien respecter ces noms de commande ou modifier le scénario en conséquence)

Les commandes de destination prennent en valeur les coordonnées GPS de la destination au format lon,lat
Décochez l’historique pour toutes les commandes.
ATTENTION : Ces commandes DOIVENT AVOIR LE MÊME NOM QUE LES TAGS QUI SERONT UTILISER PAR LE SCÉNARIO, DONC TOUT EN MINUSCULE, PAS D’ESPACE OU DE CARACTÈRE NON ALPHANUMÉRIQUE

Mon paramétrage :

ASTUCE : Vous pouvez aussi dans la commande de paramétrage d’une destination mettre une commande position pour avoir une destination dynamique (ex : connaitre le temps de trajet entre moi et quelqu’un d’autre qui à un JC sur son téléphone et remonte donc une position en live

Le scénario
Les 3 premières lignes doivent être adaptées à votre paramétrage.

$eqLogicWiTName     = '#[Geoloc][Waze JC]#'; // Adresse de l'équipement Waze In Time
$eqLogicVirtuelName = '#[Geoloc][Waze JC liens]#'; // Adresse de l'équipement Virtuel
$cmdPosition        = '#[Norbert][JC_Norbert][Position]#'; // position d'origine à prendre en compte pour les calculs de trajet

// Debut Bloc code
$eqLogicWiT         = eqLogic::byString($eqLogicWiTName);
$eqLogicVirtuel     = eqLogic::byString($eqLogicVirtuelName);

// Coordonnées de départ (commande position)
$coordStart         = explode(',', cmd::byString($cmdPosition)->execCmd());

// coordonnées d'arrivée
$tags               = $scenario->getTags(); // Recup des tags passés en paramètre de lancement du scenario
$destination        = $tags['#destination#'];
$coordEnd           = explode(',', cmd::byEqLogicIdCmdName($eqLogicVirtuel->getId() , $destination)->execCmd());

// Mise à jour de la commande "En cours" pour mise en surbillance coté JC - image sous condition
cmd::byEqLogicIdCmdName($eqLogicVirtuel->getId() , 'En cours')->event($destination);

// mise à jour de l'équipement Waze In Time
$eqLogicWiT->setConfiguration('geolocstart', 'none');
$eqLogicWiT->setConfiguration('latdepart', $coordStart[0]);
$eqLogicWiT->setConfiguration('londepart', $coordStart[1]);
$eqLogicWiT->setConfiguration('geolocend', 'none');
$eqLogicWiT->setConfiguration('latarrive', $coordEnd[0]);
$eqLogicWiT->setConfiguration('lonarrive', $coordEnd[1]);
$eqLogicWiT->save();

// mise à jour du trajet Waze
cmd::byEqLogicIdCmdName($eqLogicWiT->getId() , 'Rafraichir')->execCmd();

// Definition des coordonnées de depart et d'arrivée au format lat,lon
$coordAllerStart    = $coordStart[0] . ',' . $coordStart[1];
$coordAllerEnd      = $coordEnd[0] . ',' . $coordEnd[1];
$coordRetourStart   = $coordEnd[0] . ',' . $coordEnd[1];
$coordRetourEnd     = $coordStart[0] . ',' . $coordStart[1];

// generation des URL et envoi vers le virtuel
$urlNavigation_waze = 'https://waze.com/ul?';
$urlAller           = $urlNavigation_waze . 'to=ll.' . $coordAllerEnd . '&from=ll.' . $coordAllerStart . '&navigate=yes';
$urlRetour          = $urlNavigation_waze . 'to=ll.' . $coordRetourEnd . '&from=ll.' . $coordRetourStart . '&navigate=yes';
$scenario->setLog('Aller  : Depart -> ' . $coordAllerStart . ' , Retour -> ' . $coordAllerEnd);
$scenario->setLog('Retour : Depart -> ' . $coordRetourStart . ' , Retour -> ' . $coordRetourEnd);
cmd::byEqLogicIdCmdName($eqLogicVirtuel->getId() , 'Aller')->event($urlAller);
cmd::byEqLogicIdCmdName($eqLogicVirtuel->getId() , 'Retour')->event($urlRetour);
cmd::byEqLogicIdCmdName($eqLogicVirtuel->getId() , 'En cours')->event($destination);

Les widgets JC :

Widget action d’entête de page avec dernière MAJ et possibilité de MAJ manuelle du trajet

  • Action : la commande rafraichir de l’équipement Waze In Time
  • Info supplémentaire : la commande Dernier refresh de de l’équipement Waze In Time
  • Sous-titre : Dernière MAJ + la commande ci-dessus
  • Affiche forcé : mode carte
  • Bloquer la vue détail
  • mettre à jour l’image par défaut avec l’icone Waze

Widgets scénario de choix de la destination (autant que de destinations gérées)

  • scenario : celui créé, avec comme tag destination le nom de la destination (cf nom de la commande dans le virtuel sans majuscule, espace, …) sous la forme destination=saintjulienmolinmolette
  • Mettre une image par defaut (et l’éditer coté app JC pour lui appliquer un filtre greyscale
  • Mettre une image conditionnelle pour que l’icone waze blue s’affiche si c’est cette destination qui est sélectionnée
  • Mettre en info supplémentaire la commane ‹ En cours › du virtuel
  • bloquer la vue detail

Je vous conseille de créer et tester un widget et de le dupliquer ensuite pour les autres destinations en modifiant le nom, le tag et le test de l’image sous condition

Widget webview d’itinéraire, 1 pour l’aller, 1 pour le retour
Pour le widget d’affichage des trajets Aller :

  • Commande Url : la commande info Aller du virtuel (qui doit comporter , lorsqu’on la teste un lien Waze avec les coordonnées de depart et d’arrivée
  • image par defaut : une fleche Aller (mais vous pouvez mettre autre chose ;o))
  • En info supplémentaire : les 6 infos concernant le trajet et la durée pour les 3 options calculées par l’équipement Waze In Time (durée 1, trajet 1, durée 2, trajet 2, …)
  • En sous-titre personnalisé, la mise en forme des infos ci-dessus. chez moi :
#[Geoloc][Waze JC][Durée 1]# min via #[Geoloc][Waze JC][Trajet 1]#
#[Geoloc][Waze JC][Durée 2]# min via #[Geoloc][Waze JC][Trajet 2]# 
#[Geoloc][Waze JC][Durée 3]# min via #[Geoloc][Waze JC][Trajet 3]#
  • vue carte par defaut
  • en mode personnalisation coté APP JC, masquer le status et le titre et jouer sur la taille du sous-titre

Faire la même chose pour le retour

Intégrer tout ca dans une page JC et personnalisée les différents affichages pour avoir ce que vous voulez
pour ma part, j’ai aussi insérer des bannières de séparation (+ groupe avec image de fond)

Voilà, en cliquant sur une destination, les temps de parcours doivent se mettre à jour et l’icone de destinaiton doit basculer du gris au bleu
en cliquant sur le trajet, vous devez basculer en vue detail avec l’interface Web de Waze (vous pouvez ainsi visualiser tous les trajets) et ouvrir Waze su rle bon trajet avec le petit bouton Go.

Les icones utilisés :
Icones.zip.txt (3,7 Mo)

Bon courage à ceux qui se lancent … et Encore une fois postez vos réalisations dans Montrez vos créations sur l'appli - #240 par ngrataloup

7 « J'aime »

une nouvelle fois, super tuto !
merci @ngrataloup
:clap:

alors … marmite ou chaudron du coup …? :slight_smile:

1 « J'aime »

Bon tu m’obliges à tester tout ça quand j’aurai un peu de temps

30 min de travail en étant concentré :wink:

Comme a chaque fois, tu nous régales @ngrataloup
Je vais tester ça
Un grand merci pour ton partage

1 « J'aime »

C’est surtout @jared-94 et @tomitomas qu’il faut remercier et féliciter pour cette appli et le concept totalement agnostique des plugins jeedom (en plus d’être gratuit)

2 « J'aime »

Effectivement merci également à eux, ça va de soit :wink: @jared-94 @tomitomas

1 « J'aime »
Jeedom Core : 4.2.18
Version JC : 1.2.0

Equipements :
  Honor 7 : v1.2.0 sur android
  N 9 Pro : v1.2.0 sur android
  Test : v1.2.0 sur android

Bonjour,
J’ai un petit souci avec le widget action, tout à droite j’ai un icône point d’interrogation à la place de l’icône actualiser.

Sinon tout fonctionne parfaitement, merci pour ce tuto.

As-tu bien sélectionné un icone pour l’action ?
Si oui, je pense que tu as choisi un icone à partir du plugin dans une palette d’icône non disponible sur le téléphone.
Essaye d’éditer le widget et de sélectionner un icone pour l’action depuis le smartphone.
Si non, il faut sélectionner un icone manuellement.

Norbert

2 « J'aime »

Ben … non … , oups. Merci pour ta réponse.

La dernière bêta de JC intégre la possibilité de rendre actif l’ensemble de la surface d’une tuile.

Ceci autorise à supprimer le bouton de lancement des tuiles de destination pour un affichage plus sympa.
Pour mettre en place cette fonctionnalité, le suffit, en mode personnalisation des widgets de « bloquer la vue détail » (onglet général) et masquer le statut (onglet carte)

Voilà le résultat

2 « J'aime »

Bonjour.
Je dois être mal luné, ou fatigué mais je ne parviens pas au bout de ce tuto. Notamment le widget Webview. Quelqu’un pourrait il faire une saisie écran pour m’aider ? Merci

Voilà pour le widget Aller, à dupliquer pour le retour, et à personnaliser sur le téléphone

Norbert

Bonjour à tous,

Merci beaucoup @ngrataloup pour ce super tutoriel.

Je débute avec Jeedom connect, quelqu’un aurait il la possibilité de me joindre un screen de son widget action SVP, je ne suis pas sûr de comprendre correctement.

Merci :slight_smile:

1 « J'aime »

Voili-voilà :

mais pas grand chose de plus que ce qu’il y a dans le post initial. Ou se situe ton pb ?

Bonjour @ngrataloup ,

Merci beaucoup pour ton retour, mais c’était surtout le Widget Action pour lequel j’ai un doute sur la partie Sous-Titre et la MAJ par défaut avec l’icone Waze.

Merci :slight_smile:

du coup, celui là :

et pour le sous-titre, que je viens d’adapter à la nouvelle librairie moment() intégrée sur une des dernières MAj pour avoir ‹ Mis à jour il y a 1 heure ›, plutôt que « Mise à jour : 13:00 » :

'Mis à jour '+moment('#[Geoloc][Waze JC][Dernier refresh]#','H:mm',true).fromNow()

C’est vraiment super sympa !
Merci beaucoup !

1 « J'aime »

pense que tu peux maintenant aussi supprimer les icones de lancement de scenario depuis une dernière version pour rendre la page un peu plus jolie :

Bonjour à tous,

super tuto ! il permet de bien prendre en main l’application et de comprendre la logique entre les menus hauts, menus bas et widget.
Je n’affiche pas mon résultat car il est identique à celui présenté plus haut.

j’aimerais pouvoir pousser le scénario plus loin mais je n’y connais rien en code …
Mon idée est la suivante : les jours ou je dois récupérer mon fils à la crèche, je veux recevoir une notification qui m’indique quand je dois quitter mon travail.

Si je détail voici le cheminement que je visualise :

  • Test si l’enfant est a la crèche (via un calendrier par exemple)
  • Si oui, sélection de la destination « crèche ».
  • Calcule du délais avant départ (« heure d’arrivée souhaitée » - « temps trajet » = « X » minutes)
  • Notification (à partir de 16h30 par exemple, et toutes les 10 minutes) : "Attention, pour etre à l’heure, vous devrez partir dans « X » minutes.

Autant je pense pouvoir me débrouiller pour la partie calendrier et calcul du délais avant départ mais je ne vois pas comment sélectionner automatiquement ma destination « crèche ».

Cela vous parait il réalisable ?

Cordialement,

Coco69530

1 « J'aime »