Isoler des valeurs multiples, séparées par une virgule

Bonjour, je viens de découvrir le plugin Agenda Google que j’essaie d’utiliser pour une utilisation bien spécifique, et je pense avoir besoin d’aide pour en tirer quelque-chose :

Mes parents possèdent une maison qu’ils louent à des touristes et curistes dans la région, et quand il n’y à personne ils aiment ouvrir les volets le matin, et les fermer le soir, pour « faire de la présence » et éviter un éventuel cambriolage. Comme ils ont des problèmes pour se déplacer je leur ai installé des modules avec lesquels ils peuvent contrôler tout ou partie des volets roulants, ainsi depuis chez eux ils peuvent appuyer sur un bouton et ouvrir/fermer tous les volets de la maison, ou contrôler les volets d’un appartement en particulier.

Comme leur système de réservation est capable de générer des évènements Google Agenda j’aimerais leur automatiser tout ça pour les soulager, a l’aide du plugin de simulation de présence entre autres, mais il y à une chose ou je bloque :

Je récupère l’agenda lié aux réservations pour savoir si un appartement est loué, et quand il y en à un seul, pas de soucis, j’obtiens bien dans la commande « évènements du jour » le nom de l’appartement loué, mais quand il y en a plusieurs, les valeurs apparaissent à la suite séparées par une virgule, et je ne sais pas comment les « séparer » ou les interpréter …
Capture
Existe t’il une commande qui permette de déclencher une action si un mot est présent dans la valeur d’une commande par exemple ?

Pour l’exemple ma commande évènement du jour retourne « Appartement A,Appartement B,Appartement C », est il possible d’isoler ces valeurs pour en faire quelque chose ?

Hello
Variable =explode(’,’,ton_retour_avec_virgules);
tu auras Appartement A dans variable[0], Appartement B dans variable[1] et ainsi de suite

Merci pour ta réponse rapide, j’avoue qu’en 4 ans de Jeedom je n’ai jamais utilisé une variable, je vais creuser de ce coté, merci beaucoup ! :grinning:

Edit bon du coup pour l’instant je n’ai absolument pas compris comment utiliser les variables, il va falloir que je planche la dessus :confused:

Bonjour,
la fonction explode est une fonction php que tu pourras utiliser dans un bloc code de scenario.
https://community.jeedom.com/t/scenarios-petits-codes-entre-amis/5352
Le resultat sort en tableau de variable :
https://www.php.net/manual/fr/function.explode.php
puis tu peux ensuite faire un for each pour utiliser chaque variable du tableau.
bonne journée

1 « J'aime »

Merci pour les précisions, j’ai regardé un peu tes liens ca m’a l’air hyper compliqué et hors de mes compétences, je pense que je vais chercher une autre solution, ou m’entrainer sur des variables simples pour commencer, parce que là je ne comprend pas vraiment comment utiliser ce code (Dans un bloc Code d’un scenario, mais je ne vois pas quoi en faire ensuite, ni comment ces données que j’on a « explosé » pourront prendre des valeurs exploitables dans mon scenario) … je comprend le principe mais pas comment le mettre en oeuvre :sweat_smile:

Bonsoir,

on va faire simple juste pour te montrer

//soit un variable $A
$A="a,b,c";
// on décompose A en autant d'éléments que séparer par une virgule dans un tableau.
$tableau = explode(’,’,$A);

$tableau[0] aura la valeur a
$tableau[1] aura la valeur b
$tableau[2] aura la valeur c

Bonne soirée
A ton service pour aller plus loin si tu le désir.

2 « J'aime »

Merci beaucoup déjà ça m’aide à mieux comprendre l’utilisation des variables :slight_smile:

Merci aussi a @Doubledom et @PanoLyon qui m’ont proposé spontanément de l’aide par MP !

Je viendrais poster ma « solution » ici quand j’aurais bien tout compris si ca peut en aider d’autres :slight_smile:

Merci c’est le but, le MP c’est pour ne pas polluer …
Courage
:wink:

1 « J'aime »

Comme promis, mon petit retour, une fois une solution trouvée a mon problème, grâce à l’aide de @Doubledom et @PanoLyon ça a été très rapide, et j’ai compris plein de choses.

Pour résumer, si vous aussi vous avez des valeurs brutes qui arrivent sur une commande, séparées par un caractère particulier, il y a plusieurs solutions, Explode, comme montré par @olive, @Claude69 et @PanoLyon, pour séparer les valeurs dans un tableau de variables, ou Cut, comme proposé par @Doubledom, pour laquelle j’ai finalement opté pour « nourrir » un virtuel des données ainsi séparées.

$Releve_mesure= #ID_de_la_commande_info_à_récupérer#; //				//  Il faut indiquer l'ID du virtuel qui remonte la mesure  avant le point virgule ";" avec son N° 1234

$virtuel_info1 = #ID_Info_virtuel_1#; //				//  Il faut indiquer l'ID du virtuel qui remontera l'info 1
$virtuel_info2 = #ID_Info_virtuel_2#; //				//  Il faut indiquer l'ID du virtuel qui remontera l'info 2
$virtuel_info3 = #ID_Info_virtuel_3#; //				//  Il faut indiquer l'ID du virtuel qui remontera l'info 3
$virtuel_info4 = #ID_Info_virtuel_4#; //				//  Il faut indiquer l'ID du virtuel qui remontera l'info 4

$mesures = cmd::byString($Releve_mesure)->execCmd();// on récupère la mesure que l'on veut traiter
$scenario->setLog("Info ".$mesure);// pour avoir la mesure dans log au cas ou problème

cmd::byString($virtuel_info1)->event((`echo "$mesures"| cut -d',' -f1`)[12]);// récupère le 13eme (o->13)caractère (la lettre x)
cmd::byString($virtuel_info2)->event((`echo "$mesures"| cut -d',' -f2`)[12]);
cmd::byString($virtuel_info3)->event((`echo "$mesures"| cut -d',' -f3`)[12]);
cmd::byString($virtuel_info4)->event((`echo "$mesures"| cut -d',' -f4`)[12]);

// Ce qui est ci-dessous peut-être masqué sert pour test retour dans log
$info1 = cmd::byString($virtuel_info1)->execCmd();// pour verif de ce qui est enregistré
$info2 = cmd::byString($virtuel_info2)->execCmd();
$info3 = cmd::byString($virtuel_info3)->execCmd();
$info4 = cmd::byString($virtuel_info4)->execCmd();
$scenario->setLog($info1);// log pour verif
$scenario->setLog($info2);
$scenario->setLog($info3);
$scenario->setLog($info4);

Depuis cette première partie de scenario mes 4 infos virtuelles sont alimentées par des valeurs exploitables (A, B, C ou D dans mon cas), ou par une valeur nulle.

Comme il me fallait une info binaire j’ai bêtement ajouté un scénario « SI » qui vient tester les différentes valeurs, et alimenter 4 nouvelles infos virtuelles binaires, pour chacune j’ai fait un bloc de ce genre :

Et avec l’aide de ce scénario les informations binaires arrivent maintenant a bon port et sont exploitables pour mon usage :
5 4 3 2 1

Ainsi quand un appartement est libre sa valeur est a 0, et elle passe a 1 les jours ou il est occupé, me permettant de gérer individuellement et automatiquement les ouvertures des volets roulants pour simuler une présence dans les appartements libres.

Je t’ai envoyer la version modifier [en MP], pour ne pas avoir à créé d’autres virtuels …

La version
$Releve_mesure= #ID_de_la_commande_info_à_récupérer#; //				//  Il faut indiquer l'ID du virtuel qui remonte la mesure  avant le point virgule ";" avec son N° 1234

$virtuel_info1 = #ID_Info_virtuel_1#; //				//  Il faut indiquer l'ID du virtuel qui remontera l'info 1
$virtuel_info2 = #ID_Info_virtuel_2#; //				//  Il faut indiquer l'ID du virtuel qui remontera l'info 2
$virtuel_info3 = #ID_Info_virtuel_3#; //				//  Il faut indiquer l'ID du virtuel qui remontera l'info 3
$virtuel_info4 = #ID_Info_virtuel_4#; //				//  Il faut indiquer l'ID du virtuel qui remontera l'info 4
cmd::byString($virtuel_info1)->event(0);// pour remettre à "0" les valeurs
cmd::byString($virtuel_info2)->event(0);
cmd::byString($virtuel_info3)->event(0);
cmd::byString($virtuel_info4)->event(0);
$mesures = cmd::byString($Releve_mesure)->execCmd(); // on récupere la mesure que l'on veut traitée
$scenario->setLog("Info ".$mesures); // pour avoir la mesure dans log au cas ou probleme

$mesures = str_replace ('Appartement ','',$mesures); // Pour supprimer certains caractéres indésirables au besoin (je garde que la lettre de l'appartement A ou B ou C ou D) 

cmd::byString($virtuel_mesure)->event($mesures); // pour avoir la mesure épurée dans virtuel si besoin

$locations = explode(",", $mesures); //on transfert la variable dans le tableau $locations

foreach ($locations as $loc) { //on traite le contenu du tableau $locations avec each qui permet de ne pas s'occuper du nombre de resultat dans celui ci
    
    if($loc=='A'){ cmd::byString($virtuel_info1)->event(1); } //comparaison des noms pour savoir lesquels sont occupés, retour dans les virtuels

    if($loc=='B'){ cmd::byString($virtuel_info2)->event(1); }
  
    if($loc=='C'){ cmd::byString($virtuel_info3)->event(1); }
  
    if($loc=='D'){ cmd::byString($virtuel_info4)->event(1); }

}

//-Fin du traitement- Les lignes ci-dessous pour vérification seulement
$info1 = cmd::byString($virtuel_info1)->execCmd();// pour vérification de ce qui est enregistré
$info2 = cmd::byString($virtuel_info2)->execCmd();
$info3 = cmd::byString($virtuel_info3)->execCmd();
$info4 = cmd::byString($virtuel_info4)->execCmd();

$scenario->setLog("Appartement A =>".$info1);// Affichage dans le log du résultat
$scenario->setLog("Appartement B =>".$info2);
$scenario->setLog("Appartement C =>".$info3);
$scenario->setLog("Appartement D =>".$info4);
1 « J'aime »

Merci bien ! Je regarde tout ça en rentrant du boulot :wink:

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