J’essai d’ajouter une fonction php dans user.function;class.php pour formatter un email.
Function très simple de rajouter un leading 0 si le nombre est < 10.
J’appelle la fonction dans le mail : fg_int2string_on_2char(#minute#) et ça fonctionne j’arrive dans ma function. Mais le paramètre que je récupère est une string de 8 caractères pour la valeur 45 envoyé. Je ne sais pas quoi faire pour convertir ce paramètre en entier.
Et la function php is_numeric($x) me répond que ce n’est pas une velur numérique.
Que faire pour nettoyer cette valeur et pourvoir l’utiliser.
Lorsque je fais le return, je retrouve bien la chaine de caractère dans le mail, ça ça marche bien.
Je sais que je peux faire ça autrement, mais de manière générale, j’ai d’autre function à écrire et je veux comprendre comment nettoyer la valeur reçu dans la function.
Merci pour votre aide.
value=44 type:string----Not an objet. Valeur non numérique strlen=8 value entier =0 ----00----
J’ai ajouté plein de test pour essayer de retrouver mes petits, sans succès pour l’instant.
Je n’ai pas de soucis avec PHP, c’est la compréhension de ce que donne Jeedom en paramètre qui me pose problème.
Merci à ceux qui connaissent de m’aider,
Bonne soirée,
c’est moi !
Oui, je suis d’accord, comme je l’ai signalé, je veux faire d’autre chose avec la valeur que je récupère dans la fonction, et pour l’instant je n’arrive pas à la récupérer.
comment faire pour récupérer une donnée exploitable en php ?
oui, mais la valeur que je récupère est une string de 8 caractères quelque soit sa valeur, ce n’est pas un entier reconnu par php, et je ne peux pas la convertir en entier.
Je ne comprends pas ce que je récupère, il y a quelque chose que je ne doit pas bien faire.
Pourquoi php me répond que ne n’est pas un entier ?
et ill y a certaine fonction php qui ne sont pas disponible, comme ord(), ou mb_strlen()… est-ce volontaire que Jeedom n’autorise pas certaine fonction php?
Merci pour votre aide.
Si j’appelle ma fonction directement avec une valeur numérique, ça fonctionne parfaitement. mais lorsque je l’appelle avec #minute# je récupère cette chaine de caractère de 8 caractères qui est inutilisable par php.
C’est le #minute# qui semble être traduit bizarrement, et que php ne comprend pas.
et pour obtenir, en PHP, les minutes de l’heure courante, c’est aussi ici que ca se passe: https://www.php.net, vous n’avez pas besoin de passer un tag qui n’existe pas à votre fonction;
Je ne sais pas comment tu as transmis ton information mais si tu le fait par exemple dans un scénario classique tu peux t’en sortir en passant par un tag (en revanche le type reste un string).
Honnêtement je sais pas trop pourquoi ça ce comporte comme ça …
mon scénario est un scénario qui envoie un mail. Dans le contenu du mail, Je veux changer certains tag en chaine de caractères plus explicite que juste o ou 1 par exemple.
J’ai pris un exemple qui peut se résoudre autrement, mais le problème persiste, comment changer la valeur d’un tag comme " #[Extérieur][Controle Piscine][Pompe]# " qui est 0 ou 1 en OFF ou ON, ou encore mieux par une icone dans mon mail. L’appel à la fonction se fait bien en intégrant la fonction directement dans le texte du mail, mais dans la fonction je récupère une chaine de caractère de 8 caractères mais qui affiche bien la valeur 5 (dans ton exemple). Je ne comprend pas.
Que ça soit une chaine de caractères ne me gêne pas, je veux juste pouvoir la manipuler.
Et comment tu expliques dans ton log 4ème ligne que la valeur 5 s’affiche alors que c’est une chaine de 8 caractères. C’est exactement ce que j’obtiens, merci de l’avoir dupliquer, et que je comprends pas.
Merci.
C’est l’éditeur de fichiers qui colorise le texte et il ne connait pas cette syntaxe → blanc
Elle est prise en compte mais votre niveau de log est > debug
Changez debug en error.
Et bien sur quand on reçoit un tag dans un paramètre de fonction, c’est à la fonction de le parser avant de l’utiliser. Voir scenarioExpression::setTags()
public static function fg_int2string_on_2char($x) {
log::add(__CLASS__, 'debug', "Paramètre recu: $x");
$x = scenarioExpression::setTags($x);
log::add(__CLASS__, 'debug', "Paramètre transformé: $x");
donne:
et dans le testeur d’expression:
Idem avec les id de commande traités par setTags:
Le log correspondant:
Merci jpty, c’est bien la solution que je cherchais !
Ou peut-on trouver cette instruction ? elle n’est pas documenté dans la page https://doc.jeedom.com/fr_FR/core/4.4/scenario
dans laquelle on trouve de la documentation php, il me manque de la documentation pour pouvoir utiliser php correctement dans Jeedom.
Et je ne sais pas comment récupérer les logs, je ne sais pas ou chercher !
Merci !
Je pense que c’est le contraire, je passe un tag, et je veux en faire une string pour l’utiliser dans la fonction php.
Oubliez que c’est le tag minute, je veux faire des fonctions php sur d’autres tag du genre #[Extérieur][Controle Piscine][Pompe]# que je veux pouvoir analyser dans uns fonction php. Comment dois-je procéder ?
Merci.