Problème de rafraîchissement MQTT Subscribe

Bonjour,

J’aimerais avoir votre avis sur un phénomène que je n’arrive pas à expliquer.

Tout d’abord, je ne suis pas certain que le problème vienne de la V5.

Je possède un broker MQTT qui publie un ensemble de topics pour une Tesla (Teslamate). J’ai publié sur ce broker des données provenant d’un compteur Linky (télé-information).

Via MQTT Explorer, je retrouve bien les 2 topics teslamate et linky et leurs valeurs sont mises à jour.

Cependant, sur le dashboard de la V5, j’ai 2 widgets correspondant à 2 subscribes et seul le widget correspondant au Linky est rafraîchi au changement de valeur.
Concernant l’autre widget, il faut faire une actualisation de la page pour avoir une valeur correcte.

Voilà, si quelqu’un peut m’éclairer sur le sujet, je l’en remercie par avance.

Cordialement

Patrick

Bonsoir @skazu

Pourriez vous svp donner plus de détails sur votre broker et sur le mqttsubscribe que vous avez mis en place?

Bonjour,

Le broker est mosquitto version 2.1.2

J’ai un subscribe en ANA8 qui se met à jour, en revanche celui qui est définit comme du STR32 nécessite un rafraîchissement de la page.

s’actualise correctement.

Tandis que :

a besoin d’être actualisé.

Voilà le constat.

Bonjour,

les variables Strings ne remontent pas à intervalle de temps régulier par le socket.
Vu qu’elles ne sont pas modifiables par scénario ou widget natif, elles sont considérées comme des constantes.
C’est une des évolutions que nous avions demandées à la sortie de la V5 mais qui n’a pas été mise en place.
En attendant l’éventuelle évolution, il faut soit rafraichir la page comme vous le faites, soit écrire un widget HTML qui interroge la variable toutes les x secondes via l’API.
Voici un exemple de code Widget HTML avec une variable issue d’un objet contrôle d’accès:

Remplacez l’idStrW avec celui de votre variable et ajustez le temps dans setInterval à la fin du script :

<script>
var idStrW=524289;//id de la variable Str32
window.GCE_Refresh.push(function(data) { //IMPORTANT: binding refresh function to the WebSocket
switch (data['_id'])
{
case idStrW:
document.getElementById('CodeW').value=data.value;
break;
}
})

function init3() {
GCE_API.get("/api/core/str/" + idStrW.toString()).then((ret) => {
document.getElementById("CodeW").value=ret.value;
})
}

init3();
setInterval(init3,2000);

</script>
<style>
.input1 {
  width: 80%;
  padding: 3px;
  margin-bottom: 3px;
  border: 1px solid #ddd;
  border-radius: 4px;
  font-size: 2em;
}
.label1 {
  font-size: 12px;
  margin-bottom: 3px;
  display: block;
}    
.button1 {
  padding: 5px 10px;
  font-size: 14px;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  background-color: #007bff;
  color: #fff;
}

.button1:hover {
  background-color: #0056b3;
}
</style>
<label for="CodeW" class="label1">Dernier Code lu sur interface Wiegand :</label>

<input class="input1" type="text" id="CodeW" name="CodeW">

Bonne journée