Fonction disparue dans jMQTT

Bonjour @Bad ,

J’ai eu un post d’erreur avec MCZRemote (Erreur: la version de jMQTT n'est pas assez récente - #4 par henribi)
L’erreur provient de la disparition de la fonction « templateSplitJsonPathByFile » dans jMQTT. Du moins, je ne l’ai pas trouvée.

Voici un extrait du code utilisé

	public static function createEqptWithTemplate($eqptName = '') {
		$return = 0;
		$found = 0;
		log::add('mczremote', 'debug',"createEqptWithTemplate");
		$pluginList = plugin::listPlugin($_activateOnly = true, $_orderByCategory = false, $_translate = true, $_nameOnly = true);
		if (is_array($pluginList)) {
			foreach ($pluginList as $val) {
				if ($val == 'jMQTT'){
					$pathPlugin = plugin::getPluginPath($val);
					$found = 1;
					break;
				}
			}
		}
		if ($found == 0) {
			log::add('mczremote', 'error',"Le plugin jMQTT n'est pas installé (C01)");
			throw new Exception("Le plugin jMQTT n'est pas installé (C01)");
		}
		if (!method_exists('jMQTT', 'createEqWithTemplate')) {
			log::add('mczremote', 'error','La version installée de jMQTT ne supporte pas cette fonction. (C02)');
			throw new Exception("La version installée de jMQTT ne supporte pas cette fonction. (C02)");
			$return = 1;				
		}
		if (!method_exists('jMQTT', 'templateSplitJsonPathByFile')) {
			log::add('mczremote', 'error',"La version installée de jMQTT n'est pas assez récente. (C03)");
			throw new Exception("La version installée de jMQTT n'est pas assez récente. (C03)");
		}
		if (!method_exists('jMQTT', 'moveTopicToConfigurationByFile')) {
			log::add('mczremote', 'error',"La version installée de jMQTT n'est pas assez récente. (C04)");
			throw new Exception("La version installée de jMQTT n'est pas assez récente (C04)");
		}
		$jMQTTPathTemplate = $pathPlugin . '/data/template' . '/MCZRemote.json';
		$MCZRemotePathTemplate = plugin::getPluginPath('mczremote') . '/data/template' . '/MCZRemote.json';
		//log::add('mczremote', 'debug', 'Path dest: ' . $jMQTTPathTemplate . '    Path source: ' . $MCZRemotePathTemplate);
		if (file_exists( $MCZRemotePathTemplate)) {
			$result = copy($MCZRemotePathTemplate, $jMQTTPathTemplate );
			if ($result) {
				// Adapt template for the new jsonPath field
				jMQTT::templateSplitJsonPathByFile('MCZRemote.json');
				// Adapt template for the topic in configuration
				jMQTT::moveTopicToConfigurationByFile('MCZRemote.json');
			} else {
				log::add('mczremote', 'warning', 'Installation du template dans jMQTT  NOK. (C05)');
				throw new Exception("Installation du template dans jMQTT  NOK. (C05)");
			}				
		}


Cette fonction est elle encore utile avec le template que j’utilise.
Le template est joint.
MCZRemote.json.txt (55,7 Ko)

PS: jeedom 4.3.17 jMQTT: 2023-09-04

Merci d’avance

Hello @henribi,

Oui, j’ai vu le sujet tout à l’heure.

C’est clairement une erreur de ma part…
En plus, je sais bien que tu utilises jMQTT pour ton plugin.
Je réinstaure la fonction dans la prochaine version ce weekend, ok pour toi ?

Sinon, je ne sais pas dans quelle mesure ce ne serait pas plus intéressant pour toi de passer par le plugin MQTT Manager (plugin-mqtt2), il est fait pour être utilisé par d’autres plugins et probablement plus simple pour ton usage.

Bad

Bonjour @Bad
OK pour moi pour le délai mais je vais essayer d’aider l’utilisateur avant cela.
J’ai vu que la structure du template a changé au niveau de l’élément configuration. topic et jsonpath ont fusionné.
Je vais voir pour lui fournir un template au format actuel et le lui faire importer manuellement dans jMQTT.
EDIT: Cela fonctionne avec le dernier format du template exporté de jMQTT. Le format original en manuel donne des erreurs.

D’un autre côté, ne devrais je pas m’adapter au format du template actuel et donc ne plus avoir a utiliser cette fonction.

Je vais également regarder vers MQTT Manager mais ce sera à plus long terme.

Pour moi la structure n’a pas changé depuis l’arrivée du jsonPath.
Mais si tu veux je peux intégrer le template directement dans jMQTT, j’avais déjà ajouté une icone exprès pour tes équipements

Dans l’idéal, si. Mais je te recommande plutôt d’envisager de te détacher de jMQTT, car MQTT Manager n’est fait que pour être utilisé par d’autres plugins, tous les nouveaux plugins (zigbee, zwave…) s’appuient déjà dessus, il devient incontournable et sera plus pratique pour toi.
Pas que jMQTT ne soit plus maintenu, mais jMQTT est orienté MQTT « pur » sans intégration :confused:

Bad

Pour moi la structure n’a pas changé depuis l’arrivée du jsonPath.

J’avais encore un template configuration en une seule ligne:

"configuration": {
                    "topic": "%s{Heure du poele (0-23)}"
                },

C’est devenu

"configuration": {
                    "topic": "%s",
                    "jsonPath": "['Heure du poele (0-23)']"
                },

Pour le template, il n’a pas évolué en fonctionnalité depuis eux ans. Il est donc tout à fait stable.
Tu peux bien sur l’intégrer dans les templates de jMQTT.
Voici le template:
MCZRemote.json.txt (59,6 Ko)

Pas que jMQTT ne soit plus maintenu, mais jMQTT est orienté MQTT « pur » sans intégration

La seule intégration que j’ai avec jMQTT est l’automatisation de la création de l’équipement. Pour le fonctionnement c’est du pur MQTT. L’avantage actuel de jMQTT est la création de l’équipement par template.
MCZRemote est un outil de configuration et lancement d’un démon python. C’est son seul but.
Il faut soit des scénarios, soit un autre plugin pour dialoguer via MQTT avec le démon.

Pour info, j’ai modifié le code du plugin MCZRemote. pour utiliser le template joint à ce post.
J’ai supprimé le test de présence de la fonction « templateSplitJsonPathByFile » ainsi que ses appels.
Le plugin permet à nouveau la copie du template et son installation.
Je dois encore valider que l’installation écrase bien l’ancien template.

Hello,

Je pense que tu n’as plus besoin des fonctions templateSplitJsonPathByFile et moveTopicToConfigurationByFile si le template est directement dans jMQTT.

Mais en intégrant le template, j’ai vu des choses étranges dans certaines commandes :


Qu’as-tu normalement comme commande à cet endroit là ?

Bad

L’utilisateur doit placer à la place de ces #xxxx# les commandes qui contiennent la valeur numérique de le température. Par exemple, chez moi pour T_Demandee_Poele j’ai : 42,#[Chauffage][Poele][T_Demandee_mcz]#. Je fais cela parce qu’il faut envoyer à MQTT une chaîne de caractères qui ressemble à du numérique: 42,40
C’est expliqué dans la documentation du plugin. Par contre, peux tu les remplacer par CMD.
C’est ce qui figure dans la doc.

Pour le moment, la version stable de MCZRemote publiée hier, utilise toujours moveTopicToConfigurationByFile.
Les fonctions Install template et Install+Créer équipement sont toujours présentes.
Dès que le template sera publié dans jMQTT, je pourrai les retirer.

Hello,

Template intégré (plugins/jMQTT/core/config/template/MCZRemote.json ; nom MCZRemote)
et commandes modifiées :

Tu confirmes que tu as encore besoin de moveTopicToConfigurationByFile,
mais que je n’ai pas besoin de remettre templateSplitJsonPathByFile ?

Bad

Oui, pour le moment c’est encore le cas.
Je te previendrai des que le plugin aura ete modifie
Merci.

Pas de stress, c’est juste pour valider que je n’ai rien besoin de rajouter d’autre dans le plugin.