Finalement l’intégration avec un virtuel et un scénario programmé donne une bonne intégration de ces senseurs.
Un simple scénario code PHP comme suit fait l’affaire:
// grab value from jmqtt Broker
$cmd = cmd::byString("#[Bureau][mq.youpinyuntai.com][Value]#");
$value = $cmd->execCmd();
//strip slashes and back slashes
$stripped = stripslashes($value);
//$scenario->setLog($stripped);
$jsonarray = json_decode($stripped, true);
if(is_array($jsonarray)){
//récupération des données
$temp=$jsonarray[3]['content'];
$humidity=$jsonarray[4]['content'];
$PM25=$jsonarray[5]['content'];
$HCHO=$jsonarray[6]['content'];
$TVOC=$jsonarray[7]['content'];
$eCO2=$jsonarray[8]['content'];
// Mise à jour des commandes du virtuel
cmd::byString("#[CONTROLE][JQ300-Virtuel][Temperature]#")->event($temp);
cmd::byString("#[CONTROLE][JQ300-Virtuel][Humidity]#")->event(($humidity));
cmd::byString("#[CONTROLE][JQ300-Virtuel][PM2.5 ]#")->event(($PM25));
cmd::byString("#[CONTROLE][JQ300-Virtuel][HCHO]#")->event(($HCHO));
cmd::byString("#[CONTROLE][JQ300-Virtuel][TVOC]#")->event(($TVOC));
cmd::byString("#[CONTROLE][JQ300-Virtuel][eCO2]#")->event(($eCO2));
}
En développant ce code je me suis aperçu d’ailleurs que l’objet imbriqué « content », si on lui applique une simple fonction stripslashes() est reconnu comme un Json Array comme il se doit. C’est juste l’objet racine qui n’est pas reconnu comme un objet Json si on applique la même fonction.
Je ne sais pas si par exemple dans le plugin, lorsqu’on rencontre des objets imbriqués contenant des caractères Escape, on ne pourrait pas leur appliquer la même recette avec la fonction stripslashes().
Juste une idée
De manière plus pratique, ces senseurs valent le coup à un prix dérisoire et donnent des infos très précises sur la qualité de l’air et la présence de gaz indésirables.