C’est ces valeurs qu’il n’aime pas:
La correction est d’ajouter une ligne $corrected = preg_replace('/\:000000000,/', ': 0,', $corrected);
et un message de warning pour signaler qu’il y a une erreur de décodage du json
La fonction corrigée et masquée:
public function getData() {
$devAddr = 'http://' . $this->getConfiguration('addr', '') . '/data.json';
$request_http = new com_http($devAddr);
$devResult = $request_http->exec(30);
log::add('legrandeco', 'debug', 'getInformations ' . $devAddr);
if ($devResult === false) {
log::add('legrandeco', 'info', 'problème de connexion ' . $devAddr);
} else {
$devResbis = utf8_encode($devResult);
$corrected = preg_replace('/\s+/', '', $devResbis);
$corrected = preg_replace('/\:000000000,/', ': 0,', $corrected);
$corrected = preg_replace('/\:0,/', ': 0,', $corrected);
$corrected = preg_replace('/\:[0]+/', ":", $corrected);
$devList = json_decode($corrected, true);
log::add(__CLASS__, 'debug', print_r($devList, true));
if (json_last_error() == JSON_ERROR_NONE) {
foreach($devList as $name => $value) {
if (strpos($name,'type_imp') !== false || strpos($name,'label_entree') !== false || strpos($name,'entree_imp') !== false) {
// pas de traitement sur ces données
} else {
$this->checkCmdOk('teleinfo', $name, '<i class="fas fa-flash"></i>');
$this->checkAndUpdateCmd($name, $value);
}
}
}
else {
log::add(__CLASS__, 'warning', __FUNCTION__ .' Json_decode error: ' .json_last_error_msg());
}
}
$this->refreshWidget();
}