J’aimerai pouvoir ajouter dans mon SMS quotidien des infos du jour (meteo, etc) la station service locale + le coût de carburant le moins cher. J’utilise déjà le super #plugin-prixcarburants pour l’instant, avec x5 stations renseignées (Jeedom 4.3 sur RPI 4B DIY)
Dans l’idée, je vais faire un scenario qui rafraichit les prix à 6h30 le matin.
Puis, 2 minutes après, je voudrais commencer à exploiter les valeurs.
Jusque là tout va bien !
Mais pour la suite, je ne sais pas par quel bout le prendre…
Option 1: tout en interface de scenario
Option 2: avec du code (que je ne maîtrise pas bien), ce serait sans doute plus rapide et efficace…
L’idée étant d’isoler le résultat dans 1 ou plusieurs variables (1 pour le prix et 1 pour le nom de la station ?), pour récupérer l’info facilement dans les scenarios, interactions, notifications, etc.
Bon j’ai relu à nouveau ton post mais j’avoue ne pas saisir vraiment ce que tu veux faire.
Les commandes « Top x » permettant de connaitre les prix, les lieux, etc … existent déjà et donc de part leurs numéros « Top 1 », « Top 2 », etc … sont déjà triés pour t’indiquer le meilleur choix.
Il suffit donc de se faire envoyer les « Top 1, 2, 3, 4, 5 » aux heures que tu veux par mail ou bien utiliser le Top 1 dans une interaction : « Salut @alexcrp, le prix le plus bas est actuellement chez [Top 1 Adresse] à [Top 1 Prix] euros. Dernière mise à jour le [Top 1 MAJ] »
'Fin voilà je comprends pas trop ce que tu veux faire et qui n’existe pas de base
J’ai moi-même fait un scenario mais pas tout à fait pour le même besoin. Comme le dit @Bison , si on veut utiliser la valeur du carburant le moins cher dans un scenario ou virtuel, il suffit d’utiliser la commande Top1 du plugin.
Mon scenario : à chaque changement du prix du TOP1 (donc à chaque synchro si prix ou station Top1 change), je regarde si la valeur est inférieure à la dernière valeur stockée dans une variable. Si oui, alors j’envoie un slack « Prix en baisse » avec le nom et le prix du Top1 (et une copie d’écran du widget pour avoir l’ensemble (report d’une vue). Ensuite dans tous les cas je mets à jour la variable avec le nouveau prix du Top1.
Ca me permet d’être avertie en cas de baisse uniquement, et pas systématiquement à chaque synchro. Bon en ce moment il y a les prix à 0, il n’y a plus souvent de « prix en baisse »…
Merci @HermioneG, ça va dans le sens de ce que dit @Bison, j’ai pas du voir que le plugin faisait un Top 1.
Je vais me replonger dans les commandes pour le trouver
EDIT: je viens de voir que je suis en affichage par « ordre de sélection », et non par prix.
Je crois que j’avais choisis cela à l’époque pour garder le suivi des évolutions tarifaires des stations.
Si je passe en « ordre par prix », alors il me semble que les historiques ne sont plus rattachés à une station précise, mais plutôt à la valeur ? (ce que je voulais éviter)
J’ai bon ?
Ah ! ok tout s’explique, en effet je n’avais jamais testé cet ordre d’affichage mais il doit conserver on ordre suivant la distance et donc toujours le même comme ça.
Yes, désolé pour la confusion
Cela faisait un moment que je l’avais installé et je ne me souvenais plus.
En fait j’aimerai garder l’historique des stations.
Après je peux m’en passer, mais ça m’intéressait localement de regarder un peu les évolutions en fonction des marques…
Si l’ordre d’affichage est géré « par prix », il me semble que d’un coup Carrefour par exemple devient top 1 avec 1.00€/L, alors que la valeur de la veille correspond à Auchan avec 1.10€/L. Du coup, si on scrute l’historique, on voit les fluctuations de valeurs, mais les stations ne sont pas les mêmes… (je ne sais pas si je suis clair)
C’était mes conclusions à l’époque de l’installation du plugin, si quelqu’un peut me confirmer ?
Il faudrait peut-être ajouter une condition dans le code, si jamais une station est « à 0 » ou « type de carburant non vendu » ? (Cela risque de durer avec la grève actuelle et d’autres potentielles…).
Il faudrait peut-être ignorer ces stations à sec avant la comparaison ?
Comme prévu, je vous poste ci-dessous le code modifié de Bison qui m’a permis d’aller au bout de l’exercice:
$Obj_racine = '[Maison][Carburant Diesel]';
$Nb_Stations = 5;
$Variable_prix = "diesel_prix";
$Variable_station = "diesel_station";
$lowerprice = 100; $lowerid = 0;
for ($i = 1; $i < $Nb_Stations+1; $i++) {
$prix = cmd::byString('#'.$Obj_racine.'[Top '.$i.' Prix'.']'.'#')->execCmd();
if ($prix == '') {
continue;
}
if ($prix < $lowerprice) {
$lowerprice = $prix;
$lowerid = $i;
}
}
if ($lowerid == 0) {
$tags['#found_station#'] = 0;
} else {
$scenario->setLog('Prix le plus bas : '.$lowerprice);
$nom_station = cmd::byString('#'.$Obj_racine.'[Top '.$lowerid.' Adresse'.']'.'#')->execCmd();
$distance_station = cmd::byString('#'.$Obj_racine.'[Top '.$lowerid.' Distance'.']'.'#')->execCmd();
$scenario->setLog('Station : '.$nom_station.' qui se trouve à '.$distance_station.' km');
$scenario->setData($Variable_prix, $lowerprice);
$scenario->setData($Variable_station, $nom_station);
$tags['#found_station#'] = 1;
$tags['#lowerprice#'] = $lowerprice;
$tags['#nom_station#'] = $nom_station;
$tags['#distance_station#'] = $distance_station;
}
$scenario->setTags($tags);
Quelques explications
J’ai juste rajouté ligne 3 & 4 pour créer les variables diesel_prix et diesel_station que je peux exploiter partout dans Jeedom :