PiCockpit : états en ligne / hors ligne, et MQTT
Dans la prochaine version de PiCockpit, nous aurons un suivi en ligne du statut des Pi connectés via picockpit-client.
La fonction en ligne est réalisée par la fonction "Last Will & Testament" de MQTT.
Vous pouvez le tester en débranchant votre Pi du réseau.
J'ai débranché le Pi à : 17:59:10
À peu près 18:00:05 il a été montré comme hors ligne :
Pourquoi ça ?
Cela est dû au fait que MQTT a un ping keep-alive après un intervalle de temps convenu entre le courtier MQTT et le client.
Pour économiser la bande passante du réseau, nous supposons que le client continue d'être là - jusqu'à ce que le prochain ping échoue.
Si le client ne répond pas comme il le devrait, le message de ses dernières volontés sera envoyé aux bons abonnés.
En d'autres termes : si votre Pi se déconnecte, vous le saurez après environ une minute en temps réel dans PiCockpit !
À l'avenir, nous prévoyons également d'introduire des messages push, afin que vous puissiez être informé de la mise hors ligne d'un client, même si vous n'êtes pas connecté à PiCockpit.
Et si le réseau revient ?
Si le réseau revient, picockpit-client (s'il est toujours en cours d'exécution - c'est-à-dire que le Pi est dans un état normal) se reconnectera au client MQTT, après un certain délai.
Votre Raspberry Pi sera à nouveau affiché comme étant en ligne !
Ne vous attendez pas à ce que cela soit immédiat (le client MQTT de l'OPS fera une pause entre les tentatives de reconnexion, l'intervalle devenant plus long au fur et à mesure qu'il attend si je me souviens bien).
Affichage de l'état en ligne et du message correspondant (toujours affiché pendant que je développe)
et voici le message indiquant que le client est hors ligne (notez que c'est du JSON) :
{"onlineState" : "online", "$uuid" : “4817713e-b9f6-11e9-9321-b827ebaefc47”, “$client”: “pi/000000007eaefc47”, “$ts”: 1565273103.409718}
Je suis très heureux de la tournure que prend la décision d'utiliser Vue.js pour le front-end web - c'est très bien pour ces changements d'état.