Bonjour à tous, je vous lit depuis un moment et c’est à mon tour de partager, d’abord le contexte : j’ai dix panneaux et une passerelle S-Metered, j’ai créé un scénario qui récupère tout ce qui est dispo (à ma connaissance et je n’ai pas de batteries) et le stocke dans des variables, ensuite j’utilise un virtuel pour transformer les variables utiles en commandes :
Les variables de chaque panneau sont identifiées par le numéro de série du MO.
Le cron du scénario est à 1m, la passerelle interroge les MO toutes les cinq minutes.
et dans Graphana :
voici le php du scénario j’ai créé un bloc code par fichier json de la passerelle
premier bloc code :
$jsonenph = file_get_contents("http://192.168.x.xx/production.json");
//$jsonenph = trim($jsonenph,"{}");
$jsonenph = str_replace('"', "", $jsonenph);
$jsonenph = str_replace('{', "", $jsonenph);
$jsonenph = str_replace('}', "", $jsonenph);
$jsonenph = str_replace('[', "", $jsonenph);
//$scenario->setLog($jsonenph);
//$scenario->setLog('resultat:');
$arr1 = explode( "]" , $jsonenph);
foreach ($arr1 as &$v1) {
$itt = 0;
$v1 = ltrim($v1,",");
$pos = strpos($v1, ":");
$typ = substr($v1, 0, $pos);
//$scenario->setLog($typ);
$v1 = ltrim($v1,$typ);
$v1 = ltrim($v1,":");
//$scenario->setLog($v1);
$arr2 = explode( "," , $v1);
foreach ($arr2 as &$v2) {
//$scenario->setLog($v2);
$arr3 = explode( ":" , $v2);
$typ = substr($typ , 0, 4);
if ($arr3[0] == "type")
$itt == $itt++;
if ($itt > 0) {
$type = $typ.$itt."-".$arr3[0];
} else {
$type = $typ."-".$arr3[0];
}
//$scenario->setLog('type');
//$scenario->setLog($type);
//$scenario->setLog('arr3[1]');
//$scenario->setLog($arr3[1]);
$scenario->setData($type, $arr3[1]);
}
$itt == $itt++;
}
unset($v1);
unset($v2);
deuxième bloc code :
$jsonprod = file_get_contents("http://192.168.x.xx/api/v1/production/");
$jsonprod = str_replace('{', "", $jsonprod);
$jsonprod = str_replace('}', "", $jsonprod);
$jsonprod = str_replace('"', "", $jsonprod);
//$scenario->setLog($jsonprod);
$arr4 = explode( "," , $jsonprod);
foreach ($arr4 as &$v4) {
$v4 = ltrim($v4);
//$scenario->setLog($v4);
$arr5 = explode( ":" , $v4);
$arr5[1] = ltrim($arr5[1]);
//$scenario->setLog($arr5[0]);
//$scenario->setLog($arr5[1]);
$scenario->setData($arr5[0], $arr5[1]);
}
unset($v4);
troisième bloc code :
$login = 'envoy';
$password = 'xxxxx';
$url = 'http://192.168.x.xx/api/v1/production/inverters';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
$jsoniq = curl_exec($ch);
curl_close($ch);
$jsoniq = str_replace(array('"','[',']','}',' '), "", $jsoniq);
$jsoniq = substr($jsoniq, 3);
//$scenario->setLog($jsoniq);
$arr6 = explode( "{" , $jsoniq);
foreach ($arr6 as &$v6) {
$v6 = ltrim($v6);
$v6 = substr($v6 , 0, -2);
//$scenario->setLog('resultat v6:');
//$scenario->setLog($v6);
$arr7 = explode( "," , $v6);
$arr7[0] = ltrim($arr7[0]);
//$scenario->setLog($arr7[0]);
$arr8 = explode( ":" , $arr7[0]);
//$scenario->setLog($arr8[0]);
//$scenario->setLog($arr8[1]);
$num = $arr8[1];
//$scenario->setLog($num."-".$arr8[0]);
//$scenario->setLog($num."-".$arr8[1]);
$arr7[1] = ltrim($arr7[1]);
//$scenario->setLog($arr7[1]);
$arr8 = explode( ":" , $arr7[1]);
$typ = $num."-".$arr8[0];
//$scenario->setLog($typ);
//$scenario->setLog($arr8[1]);
$scenario->setData($typ, $arr8[1]);
$arr7[2] = ltrim($arr7[2]);
//$scenario->setLog($arr7[2]);
$arr8 = explode( ":" , $arr7[2]);
$typ = $num."-".$arr8[0];
//$scenario->setLog($typ);
//$scenario->setLog($arr8[1]);
$scenario->setData($typ, $arr8[1]);
$arr7[3] = ltrim($arr7[3]);
//$scenario->setLog($arr7[3]);
$arr8 = explode( ":" , $arr7[3]);
$typ = $num."-".$arr8[0];
//$scenario->setLog($typ);
//$scenario->setLog($arr8[1]);
$scenario->setData($typ, $arr8[1]);
$arr7[4] = ltrim($arr7[4]);
//$scenario->setLog($arr7[4]);
$arr8 = explode( ":" , $arr7[4]);
$typ = $num."-".$arr8[0];
//$scenario->setLog($typ);
//$scenario->setLog($arr8[1]);
$scenario->setData($typ, $arr8[1]);
// }
}
voici quelles variables créées :
Voila amusez vous bien pensez à mettre l’ip de la passerelle à la place des x.xx et les cinq derniers chiffres du n°de serie à la place des xxxxx (dans $password)
Prochaine fois je fait un message plus court…