Modification en masse du topic de chaque commande en fonction de la modification "d'Inscrit au Topic" de l'équipement

Bonjour,

J’envisage à terme de réorganiser le nommage des topics de tous mes équipements jMQTT, une trentaine d’équipements pour un peu plus de 700 commandes.

Serait-il possible (en activant une case à cocher sur l’équipement, par exemple) de modifier en masse les topics de chaque commande lorsque l’on modifie le champ "Inscrit au Topic" de l’équipement?

du type : topic de la commande = str_replace(ancien inscrit au topic, nouveau inscrit au topic, topic de la commande)

2 « J'aime »

Ça fait le job, mais pas aussi pratique que si cela était intégré au plugin.

//oldTopic et newTopic sous la forme mon/.../topic sans /#

$tags = $scenario->getTags();
$idEqLogic = $tags['#idEqLogic#'];
$oldTopic = $tags['#oldTopic#'];
$newTopic = $tags['#newTopic#'];
$scenario->setLog('idEqLogic ==> ' . $idEqLogic);
$scenario->setLog('oldTopic ==> ' . $oldTopic);
$scenario->setLog('newTopic ==> ' . $newTopic);

$eqLogic = eqLogic::byId($idEqLogic);
$scenario->setLog('Equipement ==> ' . $eqLogic->getHumanName());
$oldEqTopic = $eqLogic->getConfiguration('auto_add_topic');
$scenario->setLog('oldEqTopic ==> ' . $oldEqTopic);
$newEqTopic = str_replace($oldTopic, $newTopic, $oldEqTopic);
$scenario->setLog('newEqTopic ==> ' . $newEqTopic);
$eqLogic->setConfiguration('auto_add_topic', $newEqTopic)->save();

$allCmd = cmd::byEqLogicId($idEqLogic);
foreach ($allCmd as $cmd) {
  $scenario->setLog('Commande ==> ' . $cmd->getHumanName());
  $oldCmdTopic = $cmd->getConfiguration('topic');
  $scenario->setLog('Ancien Topic ==> ' . $oldCmdTopic);
  $newCmdTopic = str_replace($oldTopic, $newTopic, $oldCmdTopic);
  $scenario->setLog('Nouveau Topic ==> ' . $newCmdTopic);
  $cmd->setConfiguration('topic', $newCmdTopic)->save();
}
1 « J'aime »

Hello @Jeandhom,
Sympa comme idée et petit script.
Je vais regarder pour intégrer quelque chose comme ça prochainement, mais à date je suis très chargé côté pro et j’aurais aimé libérer la version dev (sans daemon php) en beta avant de rajouter d’autres choses.
Actuellement elle est fonctionnelle mais je dois encore supprimer le port statique du daemon pyhton et le laisser ouvrir un port dynamique pour éviter les conflits de port avec les autres daemon. J’ai une preuve de concept à intégrer.

Donc pas avant fin de semaine prochaine pour une implémentation de la fonctionnalité de ce topic en beta.

Bad

1 « J'aime »

Salut Bad,
Merci d’avoir pris en compte ma demande. :+1:
Pour son intégration en béta dans le plugin, aucune urgence pour moi. :sunglasses:

Référencé ici :

2 « J'aime »

Optimisation ==> Suppression du tag idEqLogic.

//oldTopic et newTopic sous la forme mon/.../topic sans /#

if (!function_exists('str_contains')) { // à partir de php 8
    function str_contains($haystack, $needle) {
        return $needle !== '' && mb_strpos($haystack, $needle) !== false;
    }
}

$tags = $scenario->getTags();
$oldTopic = $tags['#oldTopic#'];
$newTopic = $tags['#newTopic#'];
$scenario->setLog('oldTopic ==> ' . $oldTopic);
$scenario->setLog('newTopic ==> ' . $newTopic);

$allEqLogic = eqLogic::byType('jMQTT');
foreach ($allEqLogic as $eqLogic) {
  $oldEqTopic = $eqLogic->getConfiguration('auto_add_topic');
  if (!str_contains($oldEqTopic, $oldTopic)) {
    continue;
  }
  
  $scenario->setLog(str_repeat('-', 80));
  
  $scenario->setLog('Equipement ==> ' . $eqLogic->getHumanName());
  $scenario->setLog('oldEqTopic ==> ' . $oldEqTopic);
  $newEqTopic = str_replace($oldTopic, $newTopic, $oldEqTopic);
  $scenario->setLog('newEqTopic ==> ' . $newEqTopic);
  $eqLogic->setConfiguration('auto_add_topic', $newEqTopic)->save();
  
  $scenario->setLog(str_repeat('-', 80));
  
  $allCmd = $eqLogic->getCmd();
  foreach ($allCmd as $cmd) {
    $scenario->setLog('Commande ==> ' . $cmd->getHumanName());
    $oldCmdTopic = $cmd->getConfiguration('topic');
    $scenario->setLog('Ancien Topic ==> ' . $oldCmdTopic);
    $newCmdTopic = str_replace($oldTopic, $newTopic, $oldCmdTopic);
    $scenario->setLog('Nouveau Topic ==> ' . $newCmdTopic);
    $cmd->setConfiguration('topic', $newCmdTopic)->save();
  }
}

Capture d’écran du 2022-07-21 11-26-04

Essayé et adopté.
Merci @Bad pour la prise en compte de ma demande d’amélioration dans le plugin.

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.