Rafraichissement auto non fonctionnel dans un design

Bonjour,
J’utilise le plugin Téléinfo (version beta) depuis de nombreuses années et il fonctionne très bien, mais j’ai remarqué que depuis le passage en v4 de Jeedom l’équipement affiché dans un design ne se rafraîchit plus tout seul.
J’utilise les Design pour afficher des pages de gestion sur une tablette fixée au mur (sous android, avec fullyKiosk).
Depuis à peux prêt le passage en version V4 de Jeedom le bloc affichant ma conso instantanée de mon compteur ne se rafraîchit pas régulièrement et je suis obligé de forcer le rafraîchissement de toute la page pour que le compteur affiche la valeur réelle et pas simplement celle au moment du dernier rafraîchissement.
dans la config du composant j’ai tout masqué sauf :
[Systeme][Compteur EDF][HEALTH]
[Systeme][Compteur EDF][PAPP]
[Systeme][Compteur EDF][PTEC]

le PAPP est configuré ainsi :
Configuration > Type générique : Puissance Electrique
Configuration > Historique > Historiser : coché
Configuration > Historique > Mode de lissage : Moyenne
Configuration > Historique > Purger l’historique : Jamais
Configuration > Autres > Répéter les valeurs identiques : Non
Affichage > Widget (Dashboard et Mobile) : Teleinfo/Teleinfo_bleu_teleinfo_conso_inst

Dans l’observateur d’événement, j’ai bien des appels event.ajax.php et cmd.ajax.php régulièrement. Les autres blocs se mettent bien à jour.

Une idée d’où pourrait venir le souci ?

Merci par avance

Jeedom 4.3.19
plugin-teleinfo : 27-09-2023

Bonsoir, je viens de tester (je n’utilise jamais les widget dans teleinfo) et cela me fait la même chose. Il doit y avoir un truc à modifier qq part. Je regarde ça dès que je peux.

++

Apparemment il faut un

Jeedom.cmd.update['#id#'] = function(_options){

...

}

mais j’y perd un peu mon latin. Si qq1 peut m’aiguiller ça serait sympa

j’ai trouvé çà si ca peux t’aider :
https://doc.jeedom.com/fr_FR/dev/core4.3#Modifications%20optionnelles
La déclaration de la fonction d’update évolue:

jeedom.cmd.update['#id#'] = function(_options) {
      $('.cmd[data-cmd_id=#id#]').attr('title', ' : '+_options.valueDate+'<br/> : '+_options.collectDate)
      $('.cmd[data-cmd_id=#id#] .state').empty().append(_options.display_value)
    }

jeedom.cmd.refreshValue([{cmd_id :'#id#',display_value: '#state#', valueDate: '#valueDate#', collectDate: '#collectDate#', alertLevel: '#alertLevel#'}])

Devient:

jeedom.cmd.addUpdateFunction('#id#',function(_options) {
      $('.cmd[data-cmd_id=#id#]').attr('title', ' : '+_options.valueDate+'<br/> : '+_options.collectDate)
      $('.cmd[data-cmd_id=#id#] .state').empty().append(_options.display_value)
      $('.cmd[data-cmd_id=#id#] .unit').empty().append(_options.unit)
    });

jeedom.cmd.refreshValue([{cmd_id :'#id#',display_value: '#state#', valueDate: '#valueDate#', collectDate: '#collectDate#', alertLevel: '#alertLevel#', unit: '#unite#'}])

Notez le nouveau paramètre unit , qui permet au Core de transformer, par exemple, 3500W en 3.5kW.

il y a aussi ce post : Jeedom.cmd.update['#id#'] - #2 par kiboost
N’hésite pas à me dire si tu veux que je fasse des tests

j’ai trouvé une trace de cette fonction dans un Template de jauge du core :

J’avais trouvé un peu tout ça mais comment le mettre en musique, j’ai fait qq essais et ce n’est pas très concluant.

J’ai trouvé une solution mais pas certain que ce soit très académique.

Tu peux éditer le fichier …/plugins/teleinfo/core/dashboard/Teleinfo_bleu_teleinfo_conso_inst et remplacer le code par:

<div style="min-width : 20px;min-height : 60px;" class="cmd #history# container-fluid tooltips cmd-widget conso#id#" data-type="info" data-subtype="numeric" data-cmd_id="#id#" title="#collectDate#">
	<div id="gauge#id#" style="width:100px; height:55px"></div>
</div>
<script>
     jeedom.cmd.addUpdateFunction('#id#',function(_options) {
      $('.cmd[data-cmd_id=#id#]').attr('title','{{Date de valeur}} : '+_options.valueDate+'<br/>{{Date de collecte}} : '+_options.collectDate)
	
	$('#gauge#id#').highcharts({
            chart: {
                events: {
                    click: function (event) {
                        if (!$.mobile && '#history#' == 'history cursor') {
                            $('#md_modal').dialog({title: "Historique"});
                            $("#md_modal").load('index.php?v=d&modal=cmd.history&id=#id#').dialog('open');
                        }
                    }
                },
                type: 'solidgauge',
                height : 80,
                plotBackgroundColor: null,
                plotBackgroundImage: null,
                backgroundColor: null,
                plotBorderWidth: 0,
                plotShadow: false,
                spacingTop: 0,
                spacingLeft: 0,
                spacingRight: 0,
                spacingBottom: 0,
                borderWidth : 0
            },
            title: null,
            pane: {
                center: ['50%', '60%'],
                size: '100%',
                startAngle: - 90,
                endAngle: 90,
                background: {
                    backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || '#EEE',
                    innerRadius: '60%',
                    outerRadius: '100%',
                    shape: 'arc'
                }
            },
            tooltip: {
                enabled: false
            },
                // the value axis
                yAxis: {
                    stops: [
                [0.1, '#55BF3B'], // green
                [0.5, '#DDDF0D'], // yellow
                [0.9, '#DF5353'] // red
            ],
                    lineWidth: 0,
                    minorTickInterval: null,
                    tickPixelInterval: 400,
                    labels : {enabled: false},
                    tickWidth: 0,
                    min: #minValue#,
                    max: #maxValue#,
                    title: {
                        text: '',
                        y: - 0
                    }
                },
                labels : {enabled: false},
                plotOptions: {
                    solidgauge: {
                        dataLabels: {
                            y: 5,
                            borderWidth: 0,
                            useHTML: true
                        }
                    }
                },
                credits: {
                    enabled: false
                },
                exporting : {
                    enabled: false
                },
                series: [{
                    name: '',
                    data: [Math.round(parseFloat(_options.value) * 10) / 10],
                    dataLabels: {
						y:-20,
                        format: '<span style="color : white;">{y}</span> <span style="font-size:10px;color:white">#unite#</span>'
                    },
                }]
            });
      });
    jeedom.cmd.refreshValue([{cmd_id :'#id#',display_value: '#state#', valueDate: '#valueDate#', collectDate: '#collectDate#', alertLevel: '#alertLevel#', unit: '#unite#'}])

</script>

L’appel régulier se fait bien, je vois la gauge descendre et remonter sur sa valeur donc le rafraîchissement du graphique se fait bien, mais la valeur de #state# ne change pas.

J’ai ajouté cette ligne avant la fermeture de addUpdateFonction pour tracer la valeur dans la console

console.log('charts: '+[Math.round(parseFloat('#state#') * 10) / 10]+' | '+'{{Date de valeur}} : '+_options.valueDate+' | '+'{{Date de collecte}} : '+_options.collectDate);

les ValueDate et collectDate évoluent bien dans le tps mais la valeur #state# ne change pas (j’allume un radiateur pour changer la valeur de PAPP).

En tout cas merci beaucoup pour la rapidité de prise en compte de ma demande et pour ton aide. :+1:

Oups, je n’avais pas vu le changement dans la ligne data: avec _options.value au lieu de #state#.
Voici une petite correction pour que la jauge s’affiche dès le premier affichage (sinon elle restait vide jusqu’au premier rafraîchissement).
Je vais regarder s’il est possible que l’animation de montée de la jauge ne se fasse plus, car dans ce cas à chaque rafraîchissement ça repart de zéro.
Sinon il faudrait voir si c’est possible de faire seulement évoluer la valeur au lieu de recharger tout le graphique.

En tout cas, c’est peux être pas opti mais ça marche.

<div style="min-width : 20px;min-height : 60px;" class="cmd #history# container-fluid tooltips cmd-widget conso#id#"
    data-type="info" data-subtype="numeric" data-cmd_id="#id#" title="#collectDate#">
    <div id="gauge#id#" style="width:100px; height:55px"></div>
</div>
<script>
    jeedom.cmd.addUpdateFunction('#id#', function (_options) {
        if (isNaN(_options.value)) { _options.value = '#state#' };
        $('.cmd[data-cmd_id=#id#]').attr('title', '{{Date de valeur}} : ' + _options.valueDate + '<br/>{{Date de collecte}} : ' + _options.collectDate)
        $('#gauge#id#').highcharts({
            chart: {
                events: {
                    click: function (event) {
                        if (!$.mobile && '#history#' == 'history cursor') {
                            $('#md_modal').dialog({ title: "Historique" });
                            $("#md_modal").load('index.php?v=d&modal=cmd.history&id=#id#').dialog('open');
                        }
                    }
                },
                type: 'solidgauge',
                height: 80,
                plotBackgroundColor: null,
                plotBackgroundImage: null,
                backgroundColor: null,
                plotBorderWidth: 0,
                plotShadow: false,
                spacingTop: 0,
                spacingLeft: 0,
                spacingRight: 0,
                spacingBottom: 0,
                borderWidth: 0
            },
            title: null,
            pane: {
                center: ['50%', '60%'],
                size: '100%',
                startAngle: - 90,
                endAngle: 90,
                background: {
                    backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || '#EEE',
                    innerRadius: '60%',
                    outerRadius: '100%',
                    shape: 'arc'
                }
            },
            tooltip: {
                enabled: false
            },
            // the value axis
            yAxis: {
                stops: [
                    [0.1, '#55BF3B'], // green
                    [0.5, '#DDDF0D'], // yellow
                    [0.9, '#DF5353'] // red
                ],
                lineWidth: 0,
                minorTickInterval: null,
                tickPixelInterval: 400,
                labels: { enabled: false },
                tickWidth: 0,
                min: #minValue#,
                max: #maxValue#,
                title: {
                    text: '',
                    y: - 0
                }
            },
            labels: { enabled: false },
            plotOptions: {
                solidgauge: {
                    dataLabels: {
                        y: 5,
                        borderWidth: 0,
                        useHTML: true
                    }
                }
            },
            credits: {
                enabled: false
            },
            exporting: {
                enabled: false
            },
            series: [{
                name: '',
                data: [Math.round(parseFloat(_options.value) * 10) / 10],
                dataLabels: {
                    y: -20,
                    format: '<span style="color : white;">{y}</span> <span style="font-size:10px;color:white">#unite#</span>'
                },
            }]
        });
        //console.log('charts: ' + [Math.round(parseFloat(_options.value) * 10) / 10] + ' | ' + '{{Date de valeur}} : ' + _options.valueDate + ' | ' + '{{Date de collecte}} : ' + _options.collectDate);
    });
    jeedom.cmd.refreshValue([{ cmd_id: '#id#', display_value: '#state#', valueDate: '#valueDate#', collectDate: '#collectDate#', alertLevel: '#alertLevel#', unit: '#unite#' }])

</script>

C’est bon j’ai trouvé comment rafraîchir le graphe sans tout redessiner.
La jauge évolue avec l’effet seulement entre la valeur d’origine et la valeur de destination.
je dessine le highcharts comme tu le faisais avant puis je déclenche l’auto refresh qui ne fait que modifier la valeur du data par un .update et appeler le .redraw pour mettre à jour le graph.

J’ai également modifié un peut le qui affiche la valeur pour que les valeurs >1kW s’affichent sans trop se superposer au graphique.

Voici le code, je te laisse vérifier que ça fonctionne chez toi aussi et le mettre dans une prochaine MAJ si tu le souhaites.

<div style="min-width : 20px;min-height : 60px;" class="cmd #history# container-fluid tooltips cmd-widget conso#id#"
    data-type="info" data-subtype="numeric" data-cmd_id="#id#" title="#collectDate#">
    <div id="gauge#id#" style="width:100px; height:55px"></div>
</div>
<script>
    $('#gauge#id#').highcharts({
        chart: {
            events: {
                click: function (event) {
                    if (!$.mobile && '#history#' == 'history cursor') {
                        $('#md_modal').dialog({ title: "Historique" });
                        $("#md_modal").load('index.php?v=d&modal=cmd.history&id=#id#').dialog('open');
                    }
                }
            },
            type: 'solidgauge',
            height: 80,
            plotBackgroundColor: null,
            plotBackgroundImage: null,
            backgroundColor: null,
            plotBorderWidth: 0,
            plotShadow: false,
            spacingTop: 0,
            spacingLeft: 0,
            spacingRight: 0,
            spacingBottom: 0,
            borderWidth: 0
        },
        title: null,
        pane: {
            center: ['50%', '60%'],
            size: '100%',
            startAngle: - 90,
            endAngle: 90,
            background: {
                backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || '#EEE',
                innerRadius: '60%',
                outerRadius: '100%',
                shape: 'arc'
            }
        },
        tooltip: {
            enabled: false
        },
        // the value axis
        yAxis: {
            stops: [
                [0.1, '#55BF3B'], // green
                [0.5, '#DDDF0D'], // yellow
                [0.9, '#DF5353'] // red
            ],
            lineWidth: 0,
            minorTickInterval: null,
            tickPixelInterval: 400,
            labels: { enabled: false },
            tickWidth: 0,
            min: #minValue#,
            max: #maxValue#,
            title: {
                text: '',
                y: - 0
            }
        },
        labels: { enabled: false },
        plotOptions: {
            solidgauge: {
                dataLabels: {
                    y: 5,
                    borderWidth: 0,
                    useHTML: true
                }
            }
        },
        credits: {
            enabled: false
        },
        exporting: {
            enabled: false
        },
        series: [{
            name: '',
            data: [Math.round(parseFloat('#state#') * 10) / 10],
            dataLabels: {
                y: -20,
                format: '<span style="font-size:9px; color:white;">{y} #unite#</span>'
            },
        }]
    });
    jeedom.cmd.addUpdateFunction('#id#', function (_options) {
        if (isNaN(_options.value)) { _options.value = '#state#' };
        $('.cmd[data-cmd_id=#id#]').attr('title', '{{Date de valeur}} : ' + _options.valueDate + '<br/>{{Date de collecte}} : ' + _options.collectDate)
        $('#gauge#id#').highcharts().series[0].update({ data: [Math.round(parseFloat(_options.value) * 10) / 10] }, false);
        $('#gauge#id#').highcharts().series[0].redraw();
        //console.log('charts: ' + [Math.round(parseFloat(_options.value) * 10) / 10] + ' | ' + '{{Date de valeur}} : ' + _options.valueDate + ' | ' + '{{Date de collecte}} : ' + _options.collectDate);
    });
    jeedom.cmd.refreshValue([{ cmd_id: '#id#', display_value: '#state#', valueDate: '#valueDate#', collectDate: '#collectDate#', alertLevel: '#alertLevel#', unit: '#unite#' }])

</script>

Je voulais justement reprendre cette partie de descente à 0 puis remontée plus tard, tu l’as fait c’est super, merci.

ça fonctionne bien, cette modif sera intégrée dans un prochain update du plugin

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