J’ai fait un truc rapide, un peu sale. Il reste des lignes de debug.
C’est un template Jeedom de scénario. Il faut enlever l’extension .txt. Ecowitt_MQTT.json.txt (6,9 Ko)
Ce scénario te sort valeur1 parametre1 valeur2 parametre2 etc … sous forme de tag.
A toi ensuite d’utiliser ces tags dans un virtuel (il faut utiliser la commande « event » dans le scénario).
Les 2 derniers blocs Action sont uniquement là pour illustrer tu peux les virer.
Il faut bien entendu remplacer le 1er tag du scénario par ta commande mqtt qui correspond à ta sortie mqtt de ta station.
//Initialisation de différentes variables
//---------------------------------------------------------
$tags = $scenario->getTags();
//Copie dans une variable spécifique pour éviter une confusion dans les tags quand exécution simultanée du scénario
$array = $tags;
$payload = strtolower($array['#payload#']);
//--------------------------------------------------------------------
$array = explode("&",$payload);
$print_array_init = print_r($array,true);
$scenario->setLog('array initial :' ."\n" .$print_array_init ."\n");
foreach($array as $key => $value) {
$array_temp = explode("=", $value);
//$print_array_init = print_r($array_temp,true);
//$scenario->setLog('array initial :' ."\n" .$print_array_init ."\n");
$nom_param = 'parametre' .$key;
//$scenario->setLog('nom :' .$nom_param ."\n");
$valeur_param = 'valeur' .$key;
//$scenario->setLog('nom :' .$valeur_param ."\n");
//$$nom = $array_temp[0];
$tags['#' .$nom_param .'#'] = $array_temp[0];
$tags['#' .$valeur_param .'#'] = $array_temp[1];
}
$scenario->setTags($tags);
ou un peu plus simple (pas sur !), sans passer par des tags
// Récupérer la valeur brute
$valeur = cmd::byString("#[Aucun][test][test]#")->execCmd();
// Parsing de la chaine en tableau
parse_str($valeur, $data);
// recup de la temperature (tempf)
if (isset($data['tempf'])) {
cmd::byString("#[Aucun][test][temp]#")->event($data['tempf']);
}
// recup de l'humidité (humidity)
if (isset($data['humidity'])) {
cmd::byString("#[Aucun][test][hum]#")->event($data['humidity']);
}
C’est plus simple mais tu dois rentrer les paramètres en dur dans le code.
Cependant de mon côté ça doit être fait tout de même dans le virtuel donc ça revient au même.
Globalement ta proposition est plus lisible et plus compacte.
Je crois même que tu peux te passer du str_replace.