Définir la station carburant la moins chère du jour et la stocker dans une variable, quotidiennement?

Bonjour à tou(te)s,

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 ! :slight_smile:

Mais pour la suite, je ne sais pas par quel bout le prendre… :sweat_smile:

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.

Merci par avance pour votre aide :wink:

J’ai un peu réfléchi aujd,
je me suis dit que je pouvais voir la chose de cette façon :

  1. Stocker quotidiennement les x5 variables de prix pour les 5 stations (exemple: diesel_auchan, diesel_leclerc, etc, pour chaque station)
  2. Mettre à jour les variables tous les jours à 6h30 avec le scenario qui va bien
  3. Dans la suite du scenario, comparer les variables, isoler la moins chère et l’utiliser

Qu’en pensez-vous pour la méthode ?

Merci pour votre aide :wink:

Salut,

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 :slight_smile:

1 « J'aime »

Bonjour,

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 »…

1 « J'aime »

0 c’est bien ! C’est où ? :innocent: :arrow_right:

1 « J'aime »

Salut @Bison,

Merci pour ta réponse. De ce que je comprends, le plugin est capable de déterminer le meilleur prix déjà tout seul ?!

Chez moi, l’ordre est fixe dans le widget, indépendemment du prix, par exemple :
Capture d’écran, le 2022-10-18 à 16.52.52

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 :wink:

EDIT: je viens de voir que je suis en affichage par « ordre de sélection », et non par prix.

Capture d’écran, le 2022-10-18 à 16.57.44

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 ?

Merci :wink:

Vérifie voir l’ordre des commandes dans l’équipement ?

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 :sweat_smile:
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 ?

Bon voila tu as qu’à adapter ça avec tes 2 paramètres en entrée du bloc code et puis tu ajoutes ce qu’il te faut au besoin :

  • $Obj_racine : Attention sans les # # et juste la racine donc sans les [Top …]
  • $Nb_Stations : Le nombre de station que tu as

Je t’ai mis juste une commande log à la fin du scénario mais tu pourras faire un event ou ce que tu veux pour jouer avec les commandes qui sortent

$Obj_racine = '[Organisation][Xara Picasso SP95]';
$Nb_Stations = 2;

$lowerprice = 100; $lowerid = 0;
for ($i = 1; $i < $Nb_Stations+1; $i++) {
  $prix = cmd::byString('#'.$Obj_racine.'[Top '.$i.' Prix'.']'.'#')->execCmd();
  if ($prix < $lowerprice) {
    $lowerprice = $prix;
    $lowerid = $i;
  }  
}

$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');

$tags['#lowerprice#'] = $lowerprice;
$tags['#nom_station#'] = $nom_station;
$tags['#distance_station#'] = $distance_station;

$scenario->setTags($tags);
2 « J'aime »

Merci bcp @Bison, je teste cela rapidement et je donnerai le résultat des mes essais ici :wink:

Voila ce que cela donne en brut :

Capture d’écran, le 2022-10-18 à 17.43.37

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 ?

Merci par avance pour ton aide :wink:

Il se traduit comment le prix dans la commande pour une station qui n’a plus le carburant ? C’est 0 ? Ou vide ?

C’est vide :

Capture d’écran, le 2022-10-18 à 18.05.39

Un truc comme ça alors ?

$Obj_racine = '[Organisation][Xara Picasso SP95]';
$Nb_Stations = 2;

$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');

  $tags['#found_station#'] = 1;
  $tags['#lowerprice#'] = $lowerprice;
  $tags['#nom_station#'] = $nom_station;
  $tags['#distance_station#'] = $distance_station;
}
$scenario->setTags($tags);
1 « J'aime »

Bingo ! :relaxed: Merci @Bison :pray:

Voila ce que ça donne pour info :

Capture d’écran, le 2022-10-18 à 18.36.42

Pour le reste, je dois pouvoir me débrouiller :wink:

Je posterai ici mon résultat et le scenario complet si ça peut aider d’autres !

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 :

$Variable_prix = "diesel_prix";
$Variable_station = "diesel_station";

et les lignes suivantes pour remplir les variables au déclenchement du scenario:

$scenario->setData($Variable_prix, $lowerprice);
$scenario->setData($Variable_station, $nom_station);

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.