Recuperation d'une valeur parmi 5 à partie d'une commande info

Bonjour ,

Je souhaiterais récupérer dans une commande info ,type autre, via le plugin virtuel, une valeur spécifique parmi 5 remontées d’un téléphone mobile.
Ces valeurs sont séparées par une virgule .Peux t’on directement réaliser à partir de la fenetre « valeur » de cette commande ? (voir ci dessous)

J’ai essayé avec la fonction explode => explode(« , »,#nom de la value#) mais cela ne me remonte rien ,il me manque certainement une autre fonction à insérer dans cette ligne de calcul pour selectionner la position de la valeur (fonction array?) mais je ne sais pas faire !!

Quelqu’un a t’il une idée?

d’avance merci pour vos retour

C’est toujours la meme champ que tu souhaite recupérer ?

Oui c’est le meme numéro ou champs

Du coup, un scénario avec comme déclencheur ta commande et un bloc code qui fait un explose puis le choix du champ dans l’ arrray créé.

// commande cible
$cmdCible = '#[Ta][commande][cible]#' ;

// champ à recupérer
$nbChamp = 3 ;

// recup de la valeur du declencheur
$trigger = cmd::cmdToHumanReadable($scenario->getRealTrigger()) ;
$value = cmd::byString($trigger)->execCmd();  // id de l'equipement

// envoi du resultat dans la commande cible
$result = explode(';',$value) ;
cmd::byString($cmdCible)->event($result[$nbChamp-1]) ;

IL suffit dans le bloc code que tu renseigne la commande cible et le numéro du champ et qui tu mette ta commande source en declencheur du scénario

Norbert

Merci pour votre retour et votre reactivité ,je vais étudier cela …

PS:J’avais fait un scénario que me récupérer cette info mais avec un déclencheur programmé à la minute mais compte tenu de ce qui a été évoqué par Loic de jeedom et d’autre dévelopeurs sur les déclencheurs inférieur à la minute(ici ,il pourrait étre toutes les 5 secondes rafraichissement du telephone ) ,je voulais passer directement par une formule de calcul dans le plugin virtuel ! A priori en vous lisant je pense que cela n’est pas possible

Salut,

Je lis que le but est de récupérer une valeur parmi 5 dans une chaîne de caractères et toujours la même.
Sachant que ce sont des numéros de téléphone, donc toujours du même nombre de caractères, il me semble plus simple d’utiliser la fonction substr qui va permettre d’aller chercher ce que tu souhaites puisqu’il suffira de fournir la position de départ et le nombre de caractères à récupérer.

Bonjour ,

Merci de votre retour

Malheureusement ce ne sont pas des numéros de telephone mais des valeurs numeriques signées ,coordonnées géoraphiques et Altitude mais qui hélas varient dans le temps .Ici ,sauf erreur de ma part , le fonction substr ne conviendrait pas … :worried:

Tu peux juste préciser d’où vient cette info et le contenu exact ?
Peut être qu’on connaissant le contexte, il y aura d’autres solutions !

Norbert

Pas de problème ,ces informations viennent d’un telephone et sont rafraichies toutes les X secondes ( définies sur l’application mobile jeedomconnect ).
Ne passant pas par un scénario ce groupe de données est immédiatement reçu par le plugin d’ou ma question …de pouvoir les isoler séparement à partir de celui ci si possible bien entendu .

J’ai vu sur internet qu’il n’existait pas de fonction spécifique sous php pour faire cette action , mais avec jeedom il est peut etre possible de passer par un autre language pour faire cela dans le plugin ?.

NB; ce groupe de données est constitué de 5 champs séparés par des virgules …
La latittude et la longitude en dégré ( 15 caracteres maxi pour un ios et 9 caracteres maxi pour un andoid hors signe) ,l’altitude en mètre (6 caracteres maxi) ,un état mobile du telephone (type texte avec x caracteres) ,et le niveau de la batterie en % (x caractères)

Ha pardon j’ai lu trop vite … j’avais interprété que c’était des numéros de mobile alors que ce sont des données qui viennent de ton mobile :laughing:

Bon alors autre solution si tu souhaites éviter le scénario.

Définition d’une fonction getMyData à mettre (depuis l’éditeur de fichier) dans le fichier data/php/user.function.class.php :

Juste sous : class userFunction {

  public static function getMyData($_arg1 = '', $_arg2 = 0) {
    	$_arg1 = cmd::byString($_arg1)->execCmd();
     	$arr = explode(',', $_arg1);
      	return "'".$arr[$_arg2]."'";      
   }

Si tu mets ça dans une commande info/autre : getMyData(#ta_commande_source#,1) tu récupèreras le champs n°2

Possible de ne pas préciser le 2eme argument : getMyData(#ta_commande_source#) et ce sera le 1er élément qui sortira (sinon mettre 0 évidemment).

2 « J'aime »

Ah Ouais!!! trop puissant …cela fonctionne pour tous les champs , il suffit de sélectionner le numéro du champ voulu de 1 à 5 et la valeur du champ est sélectionnée

Chapeau bas :+1:et vraiment bravo à toi :muscle: :clap:

Et merci encore une nouvelle fois pour ton investissement personnel à mon problème !

PS:Je suppose que c’est à cet endroit là que l’on peut enregistrer des fonctions dites personnalisées que l’on rappelle soit dans des scénario ou des commandes comme ici…?

Encore merci à tous les contributeurs ( ngrataloup et Bison) pour la résolution de ce problème !:hugs:

:slight_smile:

Plutôt de 0 à 4 :slight_smile:

Absolument

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