PHP Warning dans log suite à passage de Stretch à Buster

Bonjour @mika-nt28,

j’essaie d’avancer pour comprendre mes PHP Warning. Pour le moment je me suis concentré sur ceux remontés dans « Cron_Execution » pour la ligne 962.
J’avais remarqué que la ligne 962 correspondait à $Option['id']=$this->getId();
J’ai ajouté du log dans le code pour comprendre quelle(s) commande(s) serai(en)t concernée(s) par cette absence de la propriété « Id » de l’objet « Option »
Voici le code d’origine :

		$valeur='';		
		$dpt=$this->getConfiguration('KnxObjectType');
		$inverse=$this->getConfiguration('inverse');
		$Option=$this->getConfiguration('option');
		$Option['id']=$this->getId();

le voici avec mes ajouts :

		$valeur='';		
		$dpt=$this->getConfiguration('KnxObjectType');
		$inverse=$this->getConfiguration('inverse');
		$Option=$this->getConfiguration('option');
		$Option['id']=$this->getId();       
$EGtype = gettype($Option);      
log::add('eibd', 'info', "DPT = ".$dpt." - Id = ".$this->getId()." - Type = ".$EGtype." - Valeur 'Option' = ".$Option." - Longueur = ".strlen($Option));

Donc ici le but est de tracer le type de $Option, sa valeur et sa longueur.
Voici un extrait du log :

[2020-11-30 15:16:07][INFO] : DPT = 1.001 - Id = 2287 - Type = string - Valeur 'Option' = 2 - Longueur = 1
[2020-11-30 15:16:10][INFO] : DPT = 5.001 - Id = 390 - Type = string - Valeur 'Option' = 3 - Longueur = 1
[2020-11-30 15:16:13][INFO] : DPT = 7.001 - Id = 1664 - Type = string - Valeur 'Option' = 1 - Longueur = 1
[2020-11-30 15:16:14][INFO] : DPT = 9.001 - Id = 1543 - Type = string - Valeur 'Option' = 1 - Longueur = 1
[2020-11-30 15:16:15][INFO] : DPT = 5.001 - Id = 575 - Type = string - Valeur 'Option' = 5 - Longueur = 1
[2020-11-30 15:16:15][INFO] : DPT = 5.001 - Id = 644 - Type = string - Valeur 'Option' = 6 - Longueur = 1
[2020-11-30 15:16:18][INFO] : DPT = 9.001 - Id = 1542 - Type = string - Valeur 'Option' = 1 - Longueur = 1
[2020-11-30 15:16:18][INFO] : DPT = 1.001 - Id = 2287 - Type = string - Valeur 'Option' = 2 - Longueur = 1
[2020-11-30 15:16:20][INFO] : DPT = 9.001 - Id = 1543 - Type = string - Valeur 'Option' = 1 - Longueur = 1
[2020-11-30 15:16:20][INFO] : DPT = 5.001 - Id = 390 - Type = string - Valeur 'Option' = 3 - Longueur = 1
[2020-11-30 15:16:21][INFO] : DPT = 1.xxx - Id = 4010 - Type = string - Valeur 'Option' = 4 - Longueur = 1
[2020-11-30 15:16:22][INFO] : DPT = 9.xxx - Id = 3991 - Type = string - Valeur 'Option' = 3 - Longueur = 1
[2020-11-30 15:16:24][INFO] : DPT = 9.001 - Id = 571 - Type = string - Valeur 'Option' = 5 - Longueur = 1
[2020-11-30 15:16:24][INFO] : DPT = 1.xxx - Id = 4010 - Type = string - Valeur 'Option' = 4 - Longueur = 1
[2020-11-30 15:16:25][INFO] : DPT = 5.001 - Id = 575 - Type = string - Valeur 'Option' = 5 - Longueur = 1
[2020-11-30 15:16:25][INFO] : DPT = 9.001 - Id = 1543 - Type = string - Valeur 'Option' = 1 - Longueur = 1
[2020-11-30 15:16:25][INFO] : DPT = 5.001 - Id = 644 - Type = string - Valeur 'Option' = 6 - Longueur = 1
[2020-11-30 15:16:27][INFO] : DPT = 9.001 - Id = 1542 - Type = string - Valeur 'Option' = 1 - Longueur = 1
[2020-11-30 15:16:27][INFO] : DPT = 9.xxx - Id = 3991 - Type = string - Valeur 'Option' = 3 - Longueur = 1
[2020-11-30 15:16:30][INFO] : DPT = 9.xxx - Id = 3991 - Type = string - Valeur 'Option' = 3 - Longueur = 1
[2020-11-30 15:16:30][INFO] : DPT = 9.001 - Id = 573 - Type = string - Valeur 'Option' = 5 - Longueur = 1
[2020-11-30 15:16:30][INFO] : DPT = 9.001 - Id = 1543 - Type = string - Valeur 'Option' = 1 - Longueur = 1
[2020-11-30 15:16:30][INFO] : DPT = 5.001 - Id = 390 - Type = string - Valeur 'Option' = 3 - Longueur = 1
[2020-11-30 15:16:31][INFO] : DPT = 5.001 - Id = 1654 - Type = string - Valeur 'Option' = 1 - Longueur = 1
[2020-11-30 15:16:32][INFO] : DPT = 9.001 - Id = 1542 - Type = string - Valeur 'Option' = 1 - Longueur = 1
[2020-11-30 15:16:34][INFO] : DPT = 1.xxx - Id = 4010 - Type = string - Valeur 'Option' = 4 - Longueur = 1

Le constat est que $Option n’est pas de type « object » mais « string » ce qui explique le warning de la ligne 962.
Par contre ce que je ne sais pas dire c’est si le retour de « $Option » est correct en étant un « string » ou s’il faudrait que ce soit un « object »
Dans le premier cas, cela signifierait que la ligne 962 ($Option['id']=$this->getId();) semble inutile, dans le second cela s’orienterait vers un problème sur ma configuration.
Si tu as un petit moment peux tu me dire ce qu’il en est ?

Tu peux essayer avec

$Option=json_decode($this->getConfiguration('option'),true);

je te confirme que ta proposition permet de corriger les alertes PHP Warning et que tout reste fonctionnel.
J’ai appliqué le remplacement aux lignes 863 et 961.
Je te laisse modifier dans le plugin pour une future mise à jour.
merci pour le coup de main

ok je l’ajouterai au code mais c’est etrange normalement c’est le core qui me renvoie un array

ah oui en effet.
alors comme indiqué dans mon message de départ ces messages sont apparus sur une nouvelle installation sur un buster de jeedom v3.3.53. en etant sous stretch je n’avais pas ce genre de warning

hello @mika-nt28
j’ai mis à jour avec la stable qui contient la correction que tu m’avais proposé.
j’ai à nouveau les PHP Warning :frowning: j’ai vu que tu faisais le test si $Options n’était pas vide et n’était pas un array au lieu de remplacer directement la ligne que tu m’avais demandé de remplacer.
ça semble logique surtout que dans mon cas $Option=$this->getConfiguration(‹ option ›); renvoie un string…
je remettrai des traces demain pour comprendre ce qui cloche avec le « if » du coup

J’ai trouvé le probleme
Je n’ai pas bien inserer partout la verification et parfois apres la mise a jours de l’id

Je pousse la correction

oh cool, j’avoue avoir regardé très vite hier soir, j’allais investiguer cet aprem, mais plus besoin :slight_smile:
je ferai la MAJ et te ferai un retour

bon pas mieux avec la MAJ de ce matin.

j’ai remis juste avant ton « if » ma ligne de log :
log::add('eibd', 'info', "DPT = ".$dpt." - Id = ".$this->getId()." - Type = ".gettype($Option)." - Valeur 'Option' = ".$Option." - Longueur = ".strlen($Option));

et là j’ai une différence par rapport à la dernière fois :thinking:
la dernière fois $Option était un string avec pour valeur un « chiffre » donc une longueur de texte de 1. Là toujours un string mais vide avec longueur de 0 ce qui confirme le vide.
Du coup c’est pour ça que ça ne marche toujours pas, puisqu’il faut être différent de vide pour $Option
je ne sais pas trop pourquoi je n’ai plus le même résultat pour $Option, je n’ai rien changé en config.
concrètement dans une commande, ça correspond à quoi cette notion d’options ?

Ton log il devrait être après le if

ah oui je n’ai pas été complet dans l’explication, j’en ai mis un dedans le if à la place de ta ligne de json_decode, et ce log n’est jamais affiché, parce que je ne vais pas dans le if à cause du premier test du if je pense

Je vois le souci si tu n’a pas d’options la configuration est vide et le type n’est pas un objet