Suivre et gérer ses livraisons via JeedomConnect et ParcelTracking
Voici un tuto permettant d'afficher les colis gérés par le plugin ParcelTracking dans JeedomConnect. Ce tuto se base énormément sur ce tuto réalisé par ngrataloup et utilisant le plugin SuivreUnColis qui n'est plus maintenu.
Ce tuto va permettre via JeedomConnect :
- Ajouter un colis
- Supprimer un colis
- Visualiser les colis
L'installation et la configuration des plugins JeedomConnect (autre que la configuration nécessaire au suivi des colis) et ParcelTracking ne seront pas traités dans ce tuto.
Vous aurez besoin de ces icônes : icones_colis.zip. Ce ne sont pas les miennes, elles proviennent du tuoriel de ngrataloup.
1) Création des virtuels
Pour faire le lien entre les JeedomConnect, le plugin ParcelTracking et les scénario, nous allons avoir besoin de créer plusieurs virtuels. Tous les virtuels que je vais créer sont associés à un objet parent “Colis”. Je vous conseille de faire de même et de nommer tous les virtuels exactement comme indiqué dans ce tutoriel pour vous éviter trop de modification dans les blocs code des scénarios.
virtuel pour la création d’un nouveau colis
Nom de l'équipement : Nouveau Colis Commandes : - Nom (type info / Autre) - Numéro suivi (type info / Autre) - Commentaire (type info / Autre) - Transporteur (type action/liste) et la commande info associée Transporteur (valeur) (données de la liste : 100304|Mondial Relay;6051|La Poste (Colissimo);100002|UPS;100005|GLS;100356|Geodis;100072|DPD;100273|Chronopost)
virtuels pour la gestion de chacun des colis
Il faut en créer 6 sur ce modèle :
Nom de l'équipement : Colis 1 Commandes : - Nom (type info / Autre) - Etat (type info / Autre) - Horodatage (type info / Autre) - Code suivi (type info / Autre) - Suppression suivi colis (type action/binaire) et la commande info associée Suppression suivi colis (valeur) - Transporteur (type action/liste) et la commande info associée Transporteur (valeur)
Dupliquez le premier virtuel afin de créer les 5 autres virtuels Colis 2, …, Colis 6.
Voici les virtuels que vous devez avoir :
2) Création des widgets sur JeedomConnect pour le suivi des colis
Nous allons devoir créer 6 séries de 4 widgets sur JeedomConnect. Le plus simple est de créer la première série de widget puis de les dupliquer pour les 5 autres séries. Il faut donc bien faire attention lors de la création de la première série. Les commandes viennent toutes du virtuel Colis 1
Widgets type évènement pour la mise à jour du numéro de suivi
Widgets type liste de choix pour la mise à jour du transporteur
Widgets type générique actionpour la suppression du colis
Widgets type générique texte pour l’affichage du suivi
Les widgets dans la partie Widgets supplémentaires sont les widgets que nous venons de créer.
Ces 4 widgets doivent être dupliqués et adaptés pour chaques colis (1 à 6).
3) Création des widgets sur JeedomConnect pour la création de colis
Ces widgets ne doivent être créés qu'en un seul exemplaire et serviront à la création de nouveaux colis. Toutes les commandes de ces widgets viennent du virtuel Nouveau Colis
Widget type évènement pour le champ commentaire
Widget type évènement pour le champ nom
Widget type évènement pour le champ numéro de suivi
Widget type liste de choix pour le champ transporteur
4) Création des scénarios
Nous allons devoir créer 3 scénarios :
- Liste à puceSuivi Colis - Ajout colis =⇒ pour ajouter un colis
- Suivi Colis - Résumé =⇒ pour afficher les colis dans l’app JC
- Suivi Colis - Suppression colis =⇒ pour supprimer un colis
Contrairement à ngrataloup, je n'ai pas créé de scénario pour la modification du colis car je ne m'en servais quasiment jamais au final et les peu de fois où j'ai besoin de modifier un colis, je supprime le colis et le re-crée.
Scenario résumé colis
Le déclenchement de ce scénario doit être en mode programmé toutes les heures. Créez un bloc code et collez-y le contenu suivant :
require_once dirname(__FILE__) . '/../../plugins/JeedomConnect/core/class/JeedomConnectWidget.class.php'; $i = 1 ; // Recupéraiton de la liste des colis //$list_equipements = eqLogic::byType('parcelTracking') ; //$nb_colis = count($list_equipements) - 1 ; // Nb de colis // pour chaque equipement de type colis (sauf 'MesColis' qui est l'equipement générique) foreach(eqLogic::byType('parcelTracking', true) as $eqLogicparcelTracking) { $eq_humanname = $eqLogicparcelTracking->getHumanName(); // recupération du nom de l'équipement $eq_name = $eqLogicparcelTracking->getName(); $eq_colis_virtuel = '#[Colis][Colis '.$i.']' ; if ( $eq_name != 'Widget Suivi Colis' ) { $eq_etat = cmd::byString('#'.$eq_humanname.'[Dernier état]#')->execCmd() ; $eq_heure = date('d M Y H:i',strtotime(cmd::byString('#'.$eq_humanname.'[Dernier évènement]#')->execCmd())) ; $scenario->setLog('Ancienne heure est'.$eq_heure); $eq_heure2 = date('d M Y H:i',strtotime($eq_heure)); $scenario->setLog('Nouvelle heure est'.$eq_heure2); $numSuivi= $eqLogicparcelTracking->getConfiguration()['trackingId']; $scenario->setLog('Colis N°'.$i); $scenario->setLog(' - Colis : '.$eq_name); $scenario->setLog(' - Numéro : '.$numSuivi); // pour chaque equipement de type colis (sauf 'MesColis' qui est l'equipement générique) foreach(eqLogic::byType('parcelTracking', true) as $eqLogicparcelTracking) { $eq_humanname = $eqLogicparcelTracking->getHumanName(); // recupération du nom de l'équipement $eq_name = $eqLogicparcelTracking->getName(); $eq_colis_virtuel = '#[Colis][Colis '.$i.']' ; if ( $eq_name != 'Widget Suivi Colis' ) { $eq_etat = cmd::byString('#'.$eq_humanname.'[Dernier état]#')->execCmd() ; $eq_heure = date('d M Y H:i',strtotime(cmd::byString('#'.$eq_humanname.'[Dernier évènement]#')->execCmd())) ; $scenario->setLog('Ancienne heure est'.$eq_heure); $eq_heure2 = date('d M Y H:i',strtotime($eq_heure)); $scenario->setLog('Nouvelle heure est'.$eq_heure2); $numSuivi= $eqLogicparcelTracking->getConfiguration()['trackingId']; $scenario->setLog('Colis N°'.$i); $scenario->setLog(' - Colis : '.$eq_name); $scenario->setLog(' - Numéro : '.$numSuivi); // $eq_codesuivi = cmd::byString('#'.$eq_humanname.'[Horodatage]#')->execCmd() ; // cmd::byString($eq_colis_virtuel.'[Equipement]#')->event($eq_humanname) ; cmd::byString($eq_colis_virtuel.'[Nom]#')->event($eq_name) ; cmd::byString($eq_colis_virtuel.'[Code Suivi]#')->event($numSuivi) ; cmd::byString($eq_colis_virtuel.'[Suppression suivi colis (valeur)]#')->event(0) ; if ( $eq_etat == '' ) { // Si Etat vide --> Pas de suivi et horodatage à l'heure courante cmd::byString($eq_colis_virtuel.'[Etat]#')->event('Pas de suivi') ; cmd::byString($eq_colis_virtuel.'[Horodatage]#')->event(date("d-m-Y H:i")) ; $scenario->setLog(' - Etat : Pas de suivi'); $scenario->setLog(' - Heure : '.date("d-m-Y H:i")); } else { // Si Etat non vide on renseigne l'état et l'heure de chgt d'etat cmd::byString($eq_colis_virtuel.'[Nom]#')->event($eq_name) ; cmd::byString($eq_colis_virtuel.'[Code Suivi]#')->event($numSuivi) ; cmd::byString($eq_colis_virtuel.'[Suppression suivi colis (valeur)]#')->event(0) ; if ( $eq_etat == '' ) { // Si Etat vide --> Pas de suivi et horodatage à l'heure courante cmd::byString($eq_colis_virtuel.'[Etat]#')->event('Pas de suivi') ; cmd::byString($eq_colis_virtuel.'[Horodatage]#')->event(date("d-m-Y H:i")) ; $scenario->setLog(' - Etat : Pas de suivi'); $scenario->setLog(' - Heure : '.date("d-m-Y H:i")); } else { // Si Etat non vide on renseigne l'état et l'heure de chgt d'etat // Si l'état fait plus de 127 caractères, on le tronque pour ne pas dépasser la capacité de la colonne value de la table history (127 caractère max) if ( strlen($eq_etat) > 127 ) { $eq_etat = mb_strimwidth($eq_etat, 0, 127, "..."); } cmd::byString($eq_colis_virtuel.'[Etat]#')->event($eq_etat) ; cmd::byString($eq_colis_virtuel.'[Horodatage]#')->event($eq_heure) ; $scenario->setLog(' - Etat : '.$eq_etat); $scenario->setLog(' - Heure : '.$eq_heure); } switch ($i) { // on active l'équipement JC concerné case 1: JeedomConnectWidget::updateConfig(169 , 'enable' , true ); //WidgetID Colis 1 JeedomConnectWidget::updateConfig(152 , 'enable' , true ); //widgetID supp colis 1 sleep(1) ; break; case 2: JeedomConnectWidget::updateConfig(159 , 'enable' , true ); JeedomConnectWidget::updateConfig(153 , 'enable' , true ); sleep(1) ; break; case 3: JeedomConnectWidget::updateConfig(160 , 'enable' , true ); JeedomConnectWidget::updateConfig(154 , 'enable' , true ); sleep(1) ; break; case 4: JeedomConnectWidget::updateConfig(161 , 'enable' , true ); JeedomConnectWidget::updateConfig(156 , 'enable' , true ); sleep(1) ; break; case 5: JeedomConnectWidget::updateConfig(162 , 'enable' , true ); JeedomConnectWidget::updateConfig(155 , 'enable' , true ); sleep(1) ; break; case 6: JeedomConnectWidget::updateConfig(163 , 'enable' , true ); JeedomConnectWidget::updateConfig(157 , 'enable' , true ); sleep(1) ; break; } $i++ ; } } for ($j = $i; $j <= 6; $j++) { // on desactive les équipements JC non utilisés switch ($j) { case 1: JeedomConnectWidget::updateConfig(169 , 'enable' , false ); //WidgetID Colis 1 JeedomConnectWidget::updateConfig(152 , 'enable' , false ); //widgetID supp colis 1 sleep(1) ; break; case 2: JeedomConnectWidget::updateConfig(159 , 'enable' , false ); JeedomConnectWidget::updateConfig(153 , 'enable' , false ); sleep(1) ; break; case 3: JeedomConnectWidget::updateConfig(160 , 'enable' , false ); JeedomConnectWidget::updateConfig(154 , 'enable' , false ); sleep(1) ; break; case 4: JeedomConnectWidget::updateConfig(161 , 'enable' , false ); JeedomConnectWidget::updateConfig(156 , 'enable' , false ); sleep(1) ; break; case 5: JeedomConnectWidget::updateConfig(162 , 'enable' , false ); JeedomConnectWidget::updateConfig(155 , 'enable' , false ); sleep(1) ; break; case 6: JeedomConnectWidget::updateConfig(163 , 'enable' , false ); JeedomConnectWidget::updateConfig(157 , 'enable' , false ); sleep(1) ; break; } }
Il vous faudra adapter toutes les lignes “JeedomConnectWidget::updateConfig(XXX, 'enable' ,…” afin de remplacer les XXX par les ID des widgets JeedomConnect Colis 1 à 6 et Supp colis 1 à 6 que vous avez créé. Tous les widgets qui ne sont pas associés à un colis seront désactivés (invisible sur l'interface JeedomConnect) et ne s'activeront que lorsqu'un colis y sera associé.
Scenario ajout de colis
Le déclenchement de ce scénario doit être en mode Provoqué sans déclencheur. C'est le widget qu'il nous reste à créer qui le déclenchera. Créez un bloc code et collez-y le contenu suivant :
require_once dirname(__FILE__) . '/../../plugins/JeedomConnect/core/class/JeedomConnectWidget.class.php'; require_once dirname(__FILE__) . '/../../plugins/parcelTracking/core/class/parcelTracking.class.php'; // Virtuel Nouveau Colis $eqNewColis = '[Colis][Nouveau Colis]'; // recupération des données du colis $nomNewColis=cmd::byString('#'.$eqNewColis.'[Nom]#')->execCmd() ; $numSuiviNewColis=cmd::byString('#'.$eqNewColis.'[Numéro suivi]#')->execCmd() ; $comNewColis=cmd::byString('#'.$eqNewColis.'[Commentaire]#')->execCmd() ; $transporteurNewColis=cmd::byString('#'.$eqNewColis.'[Transporteur (valeur)]#')->execCmd() ; parcelTracking::addParcel($nomNewColis, $numSuiviNewColis, $transporteurNewColis, $comNewColis);
Après le code bloc, ajoutez un bloc action pour lancer le scénario résumé colis créé précédemment.
Scenario suppression de colis
Ce scénario doit être déclenché par les évenements #[Colis][Colis 1][Suppression suivi colis (valeur)]# == 1 (refaire un évènement pour chaque colis) :
Pour le contenu du scénario, créez un bloc code et collez-y le contenu suivant :
require_once dirname(__FILE__) . '/../../plugins/JeedomConnect/core/class/JeedomConnectWidget.class.php'; // determination de l'équipement concerné en focntion du trigger $trigger = cmd::cmdToHumanReadable($scenario->getRealTrigger()); $cmd = cmd::byString($trigger); $value = $cmd->execCmd(); $eqLogicHumanName = $cmd->getEqLogic()->getHumanName(); // renvoi --> [objet][equipement] // recupération du nom du colis $nomcolis=cmd::byString('#'.$eqLogicHumanName.'[Nom]#')->execCmd() ; foreach(eqLogic::byType('parcelTracking', true) as $eqLogicparcelTracking) { if ( $nomcolis == $eqLogicparcelTracking->getName() ) { $scenario->setLog('Suppression Suivi Colis : ' .$nomcolis); $eqLogicparcelTracking->remove(); // remise à 0 du virtuel cmd::byString('#'.$eqLogicHumanName.'[Nom]#')->event('') ; cmd::byString('#'.$eqLogicHumanName.'[Code Suivi]#')->event('') ; cmd::byString('#'.$eqLogicHumanName.'[Suppression suivi colis (valeur)]#')->event(0) ; cmd::byString('#'.$eqLogicHumanName.'[Etat]#')->event('') ; cmd::byString('#'.$eqLogicHumanName.'[Horodatage]#')->event('') ; } }
Ajoutez un bloc action pour lancer le scénario résumé.
5) Création du dernier widget
Maintenant que nos scénario sont créés, nous pouvons créer le dernier widget JeedomConnect qu'il nous manque. Le widget est de type Scénario.
Le scénario à appeler est le scénario Ajout colis que nous avons créé précédement.
Il ne vous reste plus qu'à agencer les différents widgets Nouveau colis, Supp Colis [1-6] et Suivi Colis [1-6] comme vous le voulez dans JeedomConnect.
Pour créer un colis, il vous suffira de cliquer sur le widget Nouveau Colis dans JeedomConnect, de remplir tous les champs puis de cliquer sur le bouton Action pour lancer la création du colis :
Faites-moi un retour si vous avez un problème.