[Tuto Shelly jMQTT] Automatisation de la MAJ du firmware des Shellies GEN1 avec jMQTT

Au top cette astuce ! J’ai réussi à l’implémenter sur les Sehlly 1.
Question parallèle : sur un de mes 3 modules les commandes Info et Announce ne fonctionnent pas : elles ne sont pas créées automatiquement et quand je les créé moi-même elles ne remontent rien (résultat de test vide). Une idée? Je penche vers un hardware plus ancien que les 2 aures mais je ne sais pas comment le confirmer.

Je suis sur box Atlas, en v4.3.8, santé tout au green.

Bonjour,
voici ce que j’ai comme commande action pour ‹ announce ›

Elle fonctionne bine depuis un bon moment.
Bonne journée

1 « J'aime »

Merci pour ton retour.
En fait c’était mes commandes announce et info de type Info qui ne fonctionnaient pas, mais au bout d’un moment elles ont fonctionné. Bizarre…
Bon par contre j’arrive pas à faire lancer le scénario : est-ce qu’il faut bien mettre en déclencheur la commande announce de chaque relais, pour que le scénario se déclenche à chaque mise à jour de cette info ?
Mais du coup je vois pas l’intérêt de l’action Commande_announce (ou Annonce dans l’exemple de jeandhom)

La commande ‹ announce › est là pour que tu la lance à la main pour une mise ajour.
Sinon tes modules reçoivent l’information d’eux même et te préviennent.
Par contre ton scénario doit être déclenché par la commande information ‹ announce ›.
Il faut mettre le ‹ announce › de chaque équipement oui.

Ok merci en effet ça fonctionne, mon scénario se lance bien quand la commande announce est mise à jour (si je reboot le Shelly par exemple). La difficulté c’est qu’à part en rebootant elle ne se met pas à jour puisque pas de nouvelle valeur envoyée par le shelly, donc difficile de tester le scénario :slight_smile:
Et forcément j’ai un plantage du scénario, du coup difficile de le débugger. Mais j’avance doucement grave à ton aide. Je créerai ptet un autre fil si je bloque trop, je vais pas polluer encore plus le fil de jeandhom.

Edit pour @jeandhom : le scénario me remontait une erreur (Error code : 22001 (1406). Data too long…) pour la ligne suivante :

message::add($source,$fw_ver,'Nouveau firmware disponible - Mettre à jour le firmware');

Je l’ai résolu en réduisant en gardant juste les infos essentielles :

message::add($eqLogicName,'Nouveau firmware Shelly dispo :' . $fw_ver);

Merci encore pour ce tuto ! J’arrête de le pirater !

2 « J'aime »

Petit update : maintenant que tout fonctionne bien chez moi je vois qu’une nouvelle version de jmqtt va intégrer directement une fonction pour découper un Json :slight_smile: et d’avantage de templats pour les shelly. On aura fait tout ça pour rien :nerd_face: ?

Meu non, c’est complémentaire :wink::kissing_heart:
(Et jMQTT découpe depuis « toujours » le json)

N’hésitez pas à demander d’autres améliorations si vous en voyez/souhaitez.

Rien à redire, je découvre encore cet outil :wink: . Par contre je comprends pas, si le découpeur de Json (on dirait un nom de serial killer :stuck_out_tongue: ) a toujours existé qu’est-ce qu’il y a de nouveau dans cet outil mentionné dans la nouvelle version ? Et la manip’ mentionnée dans ce fil serait donc inutile ?

@Jeandhom, ce code est toujours d’actualité ?

Je m’interroge suite à la remarque de @rom.jou.

Depuis la 4.2 du core (il me semble) tu peux directement tout mettre dans un payload dans commande action et extraire (depuis début 2021) le contenu d’un payload JSON à la volée.

Donc récupérer les infos et les publier pour lancer l’update en full jMQTT doit être possible (sans scénario), non ?

Le scénario ne lance pas automatiquement la mise à jour du firmware lorsqu’il détecte une nouvelle mise à jour. Il fait apparaître la commande action « MAJ Firmware » et fait disparaître la commande info « MAJ Dispo ». Je ne pense pas que cela soit possible sans scénario.

2 « J'aime »

Merci pour ton retour. En effet pour la partie du scénario qui affiche les MàJ je suis d’accord qu’il faut la garder, mais notre réflexion avec @Bad portait sur la partie du script qui « découpe » la commande announce pour récupérer les termes séparés (Id, IP, fw, etc…). Il semble qu’il y ait une fonction plus simple pour découper cette chaîne.

Tu parles du premier bloc code qui est obsolète ?

Moi, je parle de celui-là.

Non je parle de ce type de ligne

$fw_ver = substr($fw_ver,0,strpos($fw_ver,'-')) . substr($fw_ver,strpos($fw_ver,'/'),strpos($fw_ver,'@')-strpos($fw_ver,'/'));
$scenario->setLog('FW_VER : ' . $fw_ver);

qui ne me semble plus nécessaire si il existe un moyen de découper les json directement dans jmqtt dans la prochaine mise à jour (ou deja dispo d’après Bad). Mais je me mélange peut-être les pinceaux

Je faisait plutôt référence à cette ligne :

$jsonShelly = json_decode($value,true);

Et la récupération des valeurs dans fw_ver et new_fw, mais c’est vrai que ce scenario fait beaucoup d’autres choses en plus !

Il y a un choix à faire et j’ai choisi de ne pas créer de commande info pour « new_fw » surtout pour le laisser « non affiché » car il est quasiment tout le temps vide et donc il faut bien que je récupère cette valeur.

Ok je comprends mieux. De toutes façons tout fonctionne comme ça alors je vais rien toucher :slight_smile: . Merci encore pour ton scénario

1 « J'aime »

New version: 20221108-153925/v1.12.1-1PM-fix-g2821131
New version: 20230503-101420/v1.13.0-g9aed950

1 « J'aime »

Merci @Jeandhom pour l’info

Toujours un peu difficile de trouver la release note, alors la voici …

Norbert

2 « J'aime »

J’ai aussi remis le lien à jour, plus haut.

1 « J'aime »

Bonjour,
suite à mise à jour sur Shelly RGBW2 à priori la commande ‹ off › ne fonctionne plus.
…/command =on est OK
…/command = off ne fonctionne pas
même problème en passant par le topic …/set.

Edit ; ‹ reset factory › effectué ainsi que le paramétrage complet.
Ticket ouvert

1 « J'aime »