Valeur Topic MQTT à partir virtuel

Bonjour
Pensez vous qu’il serait possible, dans le Plugin jMQTT, au niveau des équipements, d’avoir un topic qui serait sur la base d’un virtuel ?

Vous allez surement vous dire pourquoi ? (et c’est normale)

Prenons le cas, nous vous avons plusieurs box qui doivent envoyer des informatisation de temperature,sur le même broker de jeedom
Chaque box a son propre nom (exemple : BOX1, BOX2, BOX3 …).
Sachant qu’il est possible de stocker le nom de la BOX dans un virtuel ayant le même nom (Exemple Virtuel_nom_box qui aura la valeur BOX1 dans la box 1, la valeur BOX2 dans la BOX2 …)

Et donc l’objectif serait d’avoir la définition du topic de l’équipement MQTT qui serait par exemple :
jeedom /#virtuel nom de la box#/temperature qui serait donc :

Sur la box 1 : jeedom/box 1/temperature
Sur la box 2 : jeedom/box 2/temperature
Sur la box 3 : jeedom/box 3/temperature

Moi bobo tête
mais je vais suivre pour comprendre les réponses :rofl:

Hello,

Non, il n’est pas possible de mettre une commande info dans le champ topic.

Et ce ne sera pas prévu, car cela voudrait dire qu’il faudrait souscrire à un topic pouvant changer « à la volée ».

Mais, il est prévu dans le futur que le topic racine d’un équipement soit directement utilisable au début du topic de chaque commande en utilisant le caractère ~. Par exemple, le topic racine de l’équipement pourra être jeedom/box1 et ta commande ~/temperature.

Bad

Bonjour

Ceci est effectivement un bon compromis et surtout correspond parfaitement au besoin

On pourra donc modifier ce topic racine ponctuellement (via scenario par exemple) ?

Salut,

Ce topic racine sera dans l’équipement et pas dans une commande, pour éviter de complexifier l’affichage. Donc ce ne sera pas aussi simple que de changer la valeur d’une commande.

Sache qu’il est déjà possible de modifier une commande ou un équipement via un scénario avec un bloc de code.

A quelle fréquence souhaites-tu modifier la commande ?
Si ton but est de faire un « modèle de box Jeedom », que tu déclines en fonction de la box sur laquelle tu l’installe : alors la modif du topic n’est faites qu’une à l’installation, je peux t’aider à écrire ce bloc code.
Si par contre la modification doit avoir lieu plus d’une fois, je ne comprends pas l’intérêt de la manœuvre : autant créer plusieurs commandes.

Bad

Bonjour

Effectivement le but est bien d’avoir un modèle de box Jeedom que je décline. Ceci est donc utilise lors de la 1ere installation mais aussi lors de la mise à jour de la box « cible ». Cela va donc se produire environ 4 à 5 fois par an grand maxi (voire moins)

Pour la mise à jour du champ au niveau du topic via un code, je pense pouvoir faire le nécessaire (par analogie) car c’est déjà ce qui est mis en place pour la mise à jour le l’adresse IP sur le MODBUS et/ou Bacnet, sur certains registres MODBUS.

Mais cela risque d’être un code un peu long si nous devons mettre à jour toutes les commandes de l’équipement MQTT.
Par contre si la mise à jour du topic de l’équipement se limite au topic racine et que ce topic racine est automatiquement utilisable au début de chaque commande (via le caractère ~), cela simplifie réellement le code et cela évite de modifier ce code à chaque rajout / suppression de commande dans l’équipement MQTT.

La question qui reste intéressante si cette fonction est « prévue dans le futur », quelle est la limite temporelle de ce futur ?

Dans la solution de code, nous avons des lignes de codes pour chaque commande (action et info) d’équipements MQTT (avec l’ID de chaque commande). Ce qui représente un code long est l’inconvénient est de modifier le code à chaque rajout / suppression de commande

Penses tu qu’il est possible d’avoir un code dans un scénario qui affranchie des ID des commandes de l’équipement mais qui a uniquement l’ID de l’équipement

N’étant pas développeur cela me parait complexe.

Hello @snoopyfb,

Aucune idée, je suis très chargé au travail en ce moment et ne peux pas passer autant de temps sur Jeedom/jMQTT que je voudrais. La date cible pour la béta de cette nouvelle version refondant complètement le démon était prévue pour décembre 2023, puis mars 2024, puis maintenant ~juin.

Oui, tu peux faire un bloc code très léger qui parcourt tous les équipements jMQTT et toutes ses commandes à la recherche de jeedom/box1/ et le remplace par jeedom/box2/.

Je viens de faire ça en vitesse, mais n’ai pas eu le temps de le tester :

$search = 'jeedom/box1/';
$replace = 'jeedom/box2/';

foreach (jMQTT::byType('jMQTT') as $eqLogic) { /** @var jMQTT $eqLogic */
	$eqLogic->setCache('ignore_topic_mismatch', 1);

	$rootTopic = $eqLogic->getTopic();
	$newRootTopic = str_replace($search, $replace, $rootTopic);
	if ($rootTopic != $newRootTopic) {
		$eqLogic->setTopic($newRootTopic);
		$eqLogic->save();
	}
	foreach ($eqLogic->getCmd() as $cmd) { /** @var jMQTTCmd $cmd */
		$topic = $cmd->getTopic();
		$newTopic = str_replace($search, $replace, $topic);
		if ($topic == $newTopic)
			continue;
		$cmd->setTopic($topic);
		$cmd->save();
	}

	$eqLogic->setCache('ignore_topic_mismatch', 0);
}

Bad

1 « J'aime »

Ok merci pour ton retour

Je vais regarder cela