Passage au php

Bonjour.

Je me refusais jusqu’à présent à passer au bloc code pour des raisons évidentes (pas de mise à jour des objets dans le code si ceux-ci venaient à changer).
Aujourd’hui, j’atteins les limites de ce que peux faire le « langage » Jeedom et je tente donc l’expérience.

Le but recherché : changer la couleur et l’icône de Custom Apps sur l’afficheur Ulanzi

Après quelques recherches, il semblerait qu’il soit possible de modifier directement un topic MQTT. Je n’ai pas compris comment faire et je reviendrai vers vous ultérieurement pour ce problème.

En attendant je passe par un Virtuel pour « modifier » la Custom App.

Voici le scénario qui s’exécute site à un changement de température :

Et voici le virtuel :

Je souhaite donc pouvoir remplacer le code Jeedom par du php.
Pouvez-vous dans un premier temps m’aiguiller par rapport à la fonction lastBetween()

Je suis également preneur de tout conseil sur le code php existant.

Merci par avance.

Salut,

Heu je pilote des afficheurs awtrix via mqtt sans passer par des blocs codes.
J’ai du mal a comprendre ce que tu n’arrives pas a faire hors code ? :thinking:

Bonjour @Gigi31

C’est une légende urbaine, un objet s’il est bien mis entre # (objet au sens large, objet, équipement ou commande) est bien modifié dans un bloc code s’il vient à être renommé ou modifier (changement d’objet pour un équipement) dans jeedom

4 « J'aime »

Bonjour,

Pas besoin de bloc code ici
Le bloc code actuel peut être fait avec des blocs classiques

Vous n’avez pas atteint la limite, donc pourquoi vouloir un bloc code?

Je confirme.

Merci à tous pour vos réponses.

Je note que la mise à jour se fait correctement en cas de changement de nom d’objet. Il est étonnant dans ce cas qu’il ne se fasse pas dans les objets utilisés dans les déclencheurs de scénario… :roll_eyes:

1er problème
Comme vous pouvez le constater, je souhaite effectuer une concaténation.
Exemple : il fait 30° et la température a augmenté de x °C (qui dépasse mon seuil défini dans la variable TempChangeMin). Je veux donc utiliser l’image temperature_hot_up.gif

Dans le code php c’est :
$icon = 'temperature_' . $type . $direction;

2nd problème
Je veux modifier la Custom App de mon Ulanzi.

Pour l’instant je n’ai pas trouvé mieux que de passer par un virtuel.

Mon topic awtrix_chambre/custom/temperature est défini par :

{'text':'#[Aucun][Afficheur][Temp Chambre Value]#', 'icon':#[Aucun][Afficheur][Temp Chambre Icon]#}

Vous noterez la présence de simple quote pour le text et pas de quote pour l’icône.
C’est voulu/subi car dans certain cas, la valeur de l’objet est ajoutée avec des doubles quotes.

Le plus simple en effet serait de modifier le topic directement dans mon scénario plutôt que de passer par un virtuel.
J’ai bien trouvé ce sujet qui en parle mais j’avoue ne pas comprendre la solution et le code utilisé est en… php. :stuck_out_tongue_winking_eye:

Je suis donc preneur de tous vos conseils avisés. :wink:

Ben je trouves que c’est beaucoup s’embeter de faire du code et des virtuels pour formater des données …

Perso j’ai un scénario pour gérer l’affichage des messages sur mes awtrix et je fais tout directement dans le scénario avec des blocs et des tags y compris pour la génération de la chaine json.

Un exemple ci dessous :

Bonjour

Si vous êtes sur Awtrix V3, madcow a fait un super tuto avec la gestion de plusieurs applications.

2 « J'aime »

Merci à vous deux.

Je suis passé par un virtuel car l’insertion de variable dans le Json ne fonctionnait pas.
Peux-être car je ne mettais pas variable(xxxxx) entre #. :roll_eyes:

J’avoue ma méconnaissance totale de la notion de tag.
Je vais de ce pas regarder. :wink:

Ben heu franchement idem la discussion d’au dessus pourquoi faire du php pour formater une chaine en json ? un scénario en blocs sait bien faire ça tout seul cf Passage au php - #7 par Aurel

Edit : j’ai modifié ma réponse au lieu d’en ajouter une nouvelle. :sweat_smile:

Tu avais bien préfixé ton champ par json:: ?

Je ne sais plus. Ce qui est sûr c’est que je ne suis pas arrivé à construire le json à partir des valeurs :

  • hot
  • up
    pour former temperature_hot_up

Bon et pour montrer la totalité de la chaine :

Paramétrage de la commande action dans mqtt manager

Génération d’un message, reveil dans l’exemple

Envoi de ce message à la commande mqtt

Après oui on peut faire du php, des virtuels … mais bon perso je ne vois pas l’intérêt quand tout est faisable nativement dans un scénario classique

1 « J'aime »

Bonjour,

Parce que dans mon cas tu peux modifier les messages en dynamique ce qui ne met pas à genou l’Awtrix quand tu fais un changement rapide de message.

Pour certains usages ta solution convient également. Voir les débats sur le sujet des différentes approches de commande ici :

1 « J'aime »

Hello @Madcow

Merci pour les précisions :slight_smile:

J’essayerais de lire le thread si je trouve un moment parce que 129 messages quand même :sweat_smile:

Je ne dis pas que faire du code ne sert à rien hein, juste que quand c’est juste pour générer une chaine json c’est un peu overkill quoi … Après bien sur dans des cas plus complexes ça fait totalement sens.

Pour ce qui est de mettre à genou l’awtrix perso ça ne m’est jamais arrivé.
J’ai 6 customs apps et un scénario qui génère les messages, custom app par custom app, stocke la chaine json dans un tag et à la fin du scénario j’envoi le contenu des tags à la commande mqtt.

Par contre je ne fais pas du « temps réel » sur les afficheurs, par défaut j’actualise le scénario toutes les 10 minutes, plus quelques déclencheurs en plus en cas de changement de certains états

1 « J'aime »

Sauriez-vous pourquoi mes tags ne sont pas reconnu après le code php ?

Pas de message affiché.

Ben, ma boule de cristal dysfonctionne pas mal en ce moment … Ca doit être à cause de la chaleur.

Sinon avec le log du scénario, on aura peut être plus de chances de pouvoir t’aider. :man_shrugging:t2:

Oups ! Au temps pour moi.
Il manque le ; après la valeur définie en dur pour test. :upside_down_face:

Du coup le scénario fonctionne mais pas totalement en php (je n’ai pas la correspondance pour la fonction Jeedom lastBetween).

Pour que je comprenne bien la problématique de ressources du Awtrix, chaque fois que la température est envoyée de mon capteur, le scénario s’exécute et même si la température et l’icône ne changent pas, le topic reste le même mais est quant même mis à jour.
Il y a donc du temps « processeur » utilisé par l’Awtrix à chaque récupération de température du capteur ?
Si c’est le cas, stocker le json dans une variable permettrait de le comparer avec le nouveau qui ne serait envoyé à l’Awtrix que si différent ?

A quoi sert $cache dans :
cmd::byString("#[Chambre][Awtrix][App Temp Int]#")->execCmd($options, $cache=0);

Ca arrive, c’est pour ça qu’il faut toujours regarder le log :wink:

Je ne sais pas te dire, je n’ai jamais été confronté à un pb de ressources coté Awtrix.

Comme je disais, mon scénario s’exécute toutes les 10 minutes le jour, toutes les 30 minutes la nuit et avec quelques changement d’état pour ne pas attendre le cycle suivant si besoin (par exemple si le lave linge vient juste de se terminer).

Si tu comptes envoyer les données d’un capteur, tout dépend à quelle fréquence il envoi ses données. Si c’est toutes les 5 minutes franchement je vois pas l’interet de garder un cache des données, si c’est plusieurs fois par minutes ça peut faire sens.