Design, récupération / Maj valeur id

Bonjour,

Désolé si je répète quelque chose d’existant mais je n’ai pas trouvé la solution à mon soucis.

Je suis en train de faire un design pour ma tablette. Au lieu de créer autant de virtuel qu’il y a d’infos à afficher, j’ai essayé la solution suivante:
J’ai un fichier .js avec le code que je link en début des éléments html que j’ajoute au design, pas de soucis. Dans le code js j’ai fait la fonction suivante:

function PutValueCmdId($Container,$CmdId,$Unite,$NameImg,$Height,$Width,$Convert) {

$("#"+ $Container)[0].setAttribute("data-cmd_id", $CmdId);

jeedom.cmd.update[$CmdId] = function(_options){



    jeedom.cmd.execute({ // Récupération de la valeur  

                            id: $CmdId,

                            success:  function($Result) {

                            //Si il y a une image

                            ($NameImg) ? SetImage($Container,$NameImg,$Height,$Width): null;

                            //Si il faut convertir la valeur heure (733 -> 07:33)

                            ($Convert) ? $Result=ConvertHoursFormat($Result): null;

                            //Si il y a une unitée

                            ($Unite) ? $("#"+ $Container).append(" " + $Result  + "<font size='4'> " + $Unite ):

                            //Si pas d'unité

                            $("#"+ $Container).append(" " + $Result)}

                        }); 
} //jeedom.cmd.update
jeedom.cmd.update[$CmdId]();

} //Fin function PutValueCmdId

Ceci me permet d’avoir seulement des lignes d’appel afin d’afficher une value à l’endroit désiré su mon design, exemple:

PutValueCmdId(« TempExterieurSud »,952,« °C »,« boussole_sud30_30.png »,30,30); //Température extérieure SUD

PutValueCmdId(« TempExterieurEst »,102,« °C »,« boussole_est30_30.png »,30,30); //Température extérieure EST

PutValueCmdId(« VitesseVent »,140,« km/h »,« vent30_56.png »,30,30); //Vitesse du vent

PutValueCmdId(« PressionBaro »,141,« kPa »,« pression30_30.png »,30,30); //pression barométrique

PutValueCmdId(« Humidity »,139,"%",« humidity30_30.png »,30,30); //Humidité

Déjà à ce stade les valeurs affichées ne se mettent pas à jour toutes seules mais seulement lors d’un rafraichissement complet de la page. J’ai trouvé des sujets sur ce thème mais je n’ai pas réussi à reproduire quelque chose de fonctionnel de mon côté avec ma fonction… Pourriez-vous m’aidez svp?

L’autre chose est que je désire mettre en forme les valeurs retournées par le plugin « prevision meteo ». Ce dernier n’a pas de numéro de commande id afin de récupérer une valeur. Donc pour ce cas je passe par un virtuel, qui me crée une commande id. J’essaie en vain de récupérer la valeur d’une commande id afin de la passer en variable dans mon script mais je ne trouve pas la solution. J’aimerais récupérer la valeur, la passer dans une variable du script et en faire ce que je veux après. J’ai essayé sur le même principe que mon script précédent:

//En dur:
jeedom.cmd.update[1310] = function($Resultat){
var $Value= $Resultat.display_value;
console.log("Ma valeur: " + $Value);
} //jeedom.cmd.update

Tant bien que mal j’arrive au pire à récupérer ma valeur dans la function($Resultat) mais il m’est impossible de l’assigner à une variable js. J’ai essayé un return $Value mais cela ne fonctionne pas.

Il y aurait-il une bonne âme pour me guider svp?

Merci beaucoup et une belle journée à tous!

Mais pourquoi tant de mal?

Pourquoi ne pas juste mettre les équipements sur le design? et non sans virtuel, aucun besoin de créer un virtuel pour chaque équipement.

Bonjour Mips,

Merci de ta réponse.

Je désirais faire de la mise en page avec des tableaux entre autre… En voici un aperçu:

Comme par exemple remplir mon tableau, actuellement blanc, avec les prévisions météo récupérées du plugin « prevision meteo » et de refaire une mise en page… Pour ceci j’aurais bien aimé récupérer les différentes valeurs du plugin en variables js et en faire ce que je veux d’autre :slight_smile:

Peut-être que je m’y prend mal?

Merci encore :.-)

Cela peut paraitre compliqué, mais je trouve que c’est se faciliter la vie plutôt :slight_smile:

En important des commandes, il faut appliquer des valeurs CSS sur chacune d’entre elle, police, grandeur, épaisseur… Ou alors je n’ai pas trouvé ou renseigner une class CSS à une commande?

En récupérant des valeurs et en les affectant à des variables directement dans le code, il est bien plus aisé de construire le design. Le code crée les tables (Couleur des lignes différentes par exemple) et affiche leur contenu, applique directement un CSS globale pour le Design ou récupérer des class, permet de formater des valeurs, ajouter une unité avec couleur et taille différente, faire des phrases interactives…

Si quelqu’un peut m’éclairer serait le bien venu :slight_smile:

Merci à tous de vos conseils

Enfin je trouve plus facile.

bonjour
il te manque le set attribut

Ou plusieurs tableau
1er code « carrosserie »
Et recherche et mise en place d’info
2eme code « moteur »
Même si tu peux regroupé les 2 codes (une fois fini) pour en faire une voiture ça permet d’avancer dans chaque partie sans avoir un code trop long

Les jauges fonctionnent

Bonjour,

Merci beaucoup de votre réponse :slight_smile:

J’ai bien l’affichage des valeurs retournées qui s’affichent dans mes différents élément HTML avec mon code ci-dessous:

<script type="text/javascript">
   //Définition du tableau de Commande Id
    var $ArrayCmd_id = [];

    //Définition des Commande Id dans le tableau
    // [Id de l'élément HTMl du Design, IdCmde Jeedom]
    $ArrayCmd_id[0]= ["LeverSoleil", 3];
    $ArrayCmd_id[1]= ["CoucherSoleil", 4];

    //Affectation de l'attribut "date-cmd_id" aux différents éléments HTML du Design
    for ($IndexArrayCmd_id=0; $IndexArrayCmd_id < $ArrayCmd_id.length; $IndexArrayCmd_id++) {

        SetCmd_IdAttribute_Value($ArrayCmd_id[$IndexArrayCmd_id][0], $ArrayCmd_id[$IndexArrayCmd_id][1]);

    }

    //Function d'affectation de l'attribut "data-cmd_id" et d'affichage de la valeur retournée
    function SetCmd_IdAttribute_Value($HTMlelement,$CmdId) {

        $("#" + $HTMlelement)[0].setAttribute('data-cmd_id', $CmdId);
        
        jeedom.cmd.update[$CmdId] = function(_options){
            jeedom.cmd.execute({ // Récupération de la valeur en fonctin de la Commande Id  
                                id: $CmdId,
                                success:  function($ValRetour) {
                                //Affectation de la valeur courant dans l'élément HTML
                                $("#" + $HTMlelement).empty().append($ValRetour)}                            
                                }) //Fin jeedom.cmd.execute 
        }; //Fin jeedom.cmd.update

        //Mise à jour de l'affichage
        jeedom.cmd.update[$CmdId]();


    }//Fin function SetCmd_IdAttribute_Value

</script>

Ce que je n’arrive pas à faire c’est une simple fonction qui me récupère la valeur d’une commande Id et de l’affecter à une variable que je pourrais utiliser plus loin dans mon code. Une commande équivalente à cmd::byId(xxx) dans un scénario :slight_smile:

Juste un exemple ci-dessous, d’affecter l’heure du levé du soleil à la variable $LeverSoleil. Je pourrais ainsi construire la « Carrosserie » et gérer l’affichage des valeurs retournées dans des variables en les mettant en formes, ajout des unités… et après essayer le « Moteur » avec le jeedom.cmd.updatexxx avec toutes les valeurs pour avoir une « Voiture » qui roule :slight_smile:

<script type="text/javascript">

var $LeverSoleil = jeedom.cmd.update[xxx] = function(_options){
        jeedom.cmd.execute({ // Récupération de la valeur en fonctin de la Commande Id  
                            id: xxx,
                            success:  function($ValRetour) {
                            //Affectation de la valeur courant dans l'élément HTML
                            var $ValeurRetour= $ValRetour;
                            return $ValRetour}                            
                            }) //Fin jeedom.cmd.execute
    }; //Fin jeedom.cmd.update
</script>

En effectuant des debug en console, ma variable $ValeurRetour est bien correcte à l’intérieur du jeedom.cmd.update[xxx] … success: function() mais la fonction n’est pas capable de retournée cette valeur. Si je débug ma variable ne comporte plus rien après le jeedom.cmd.update,

Merci beaucoup pour votre aide :slight_smile:

la variable global doit normalement être construite avant la fonction (variable interne)
ensuite tu l’actualise dans la fonction
des exemples

mais tu vas devoir assigné ensuite ta variable à ta class/div
donc une étape supplémentaire.
tu peux mettre ta class/div de ta carrosserie en variable

D’après la lecture que j’ai fait, vu que c’est de l’ Ajax il est impossible de récupérer la variable en dehors du « success: » de jeedom.cmd.execute. Pas grave j’ai fait autrement… :slight_smile:

Par contre j’ai des soucis pour la mise à jour automatique des valeurs encore. Je construit donc tous mes différents td avec par exemple l’attribut data-cmd_id=« 140 » selon le résultat ci dessous:

image

A la fin de mon script je mets pour chacune des commandes:

jeedom.cmd.update[140]({

        display_value: '#state#',

        valueDate: '#valueDate#',

        collectDate: '#collectDate#',

        alertLevel: '#alertLevel#'

    });

Mais rien ne se met à jour, j’ai pourtant été lire tes différents liens mais je ne trouve pas mon erreur…

Pourrais-tu me mettre sur une piste svp?

Merci beaucoup d’avance

Ben je me réponds :slight_smile:
Cela fonctionne avec des span et div mais pas des td…

1 « J'aime »

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