plugin qui perd sa configuration

Bonjour,

J’ai un soucis sur mon plugin qui a un moment, semble perdre toute sa configuration.
Si un développeur expérimenté à une idée voici le cas (un utilisateur seulement, avec l’historique d’un nut blea) : https://www.jeedom.com/forum/viewtopic.php?f=144&t=35997&start=80#p613466

Pour lever un doute, y’a t il un nombre maximum de caractères pour une string dans un paramètre de configuration ?

Hello,

de ce que je vois dans la db la valeur d’une config est du type TEXT, donc longueur de 65535 char :
https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html#data-types-storage-reqs-strings

Ah ok je vais ajouter un check sur la longueur de la chaine avant le setConfiguration alors.
Mais çà pourrait vraiment casser toute la configuration de l’eq ??

aucune idée… dans ma tête ca tronque juste…

Bon ben n’essaye pas çà:

$data = ‹  ›;
for ($i=0, $i<70000, $i++)
{
$data .= $i;
}
$eqLogic->setConfiguration(‹ data ›, $data);
$eqLogic->save();

Jeedom planté, même après redémarrage ! Le browser refresh sans arrêt… Vive les VM

et en mode &rescue=1 tu as qqch ?

Ah pas pensé à essayer !
J’ai corrigé en ssh dans le plugin et redémarré.

Bon fausse alerte mon for php n’est pas bon (à jongler entre les languages…)

Donc génération d’une string de 338000 chars, puis setConfiguration :

Erreur exécution de la commande [Maison][Activité][Rafraichir] : [MySQL] Error code : 22001 (1406). Data too long for column ‹ configuration › at row 1

Donc çà ne vient pas de là !!

J’ai aussi ajouté :
filter_var($thisData, FILTER_SANITIZE_STRING);

Mais toujours le bug avec un nuc blea.
Et j’en ai pas donc impossible de débugger en live grrr…

tu parle de eqLogic de ton plugin ou d’un autre plugin ?

tu fais bien un save() de ton eqlogic ? en gros il faut récupérer ou créer ton objet puis après tu fait ton setConfig puis après un save

n’oublie pas de bien mettre ton tag de ton plugin pour savoir du qu’elle on parle ! (meme si pour le moment tu en a qu’un seul :wink:

De l’eq de mon plugin oui.

Oui je fais bien un save après. Le plugin en soit marche très bien chez plusieurs personnes, juste une personne qui a ce problème avec un nut blea et la commande info present.

rien dans le http_error ?

Je viens d’avoir un log de debug plus complet.

Effectivement la string fait 102000 caractères !!
Mais pas d’erreur jeelog, là je comprends pas !

fait juste un petit strlen() pour connaitre le nombre exact puis après tu fait un substr($variable, 0, 65534);.

Oui c’est ce que je viens de faire.
Pas de substr par contre, je met un message comme quoi ce n’est pas normal, trop de répétitions de valeurs.

Là c’est une presence par un nut, l’historique remonte une donnée presque chaque seconde ! Pour les perfs de jeedom en général çà doit pas être génial.

Il n’y a pas le choix sur du bluetooth. Ce n’est pas toutes les secondes c’est très exactement toutes les 29 secondes :wink:

Il est impossible de savoir que quelquechose n’est plus là par contre on peut savoir qu’il est là. Et donc il faut notifier sa présence régulièrement et il n’y a que l’absence de notification sur X cycles qui permet de savoir et confirmer l’absence.

Donc non je pense qu’alexandre a raison, tu ne connais pas les besoins des autres plugins, par contre tu connais les tiens donc je pense que il vaut mieux t assurer que pour ce que tu veux faire tu as ce qu’il faut en limitant la data à ce que tu veux stocker. Ca evitera que tu sois reconfronté au soucis sur un autre cas

Je me suis penché a l’instant sur le code de ton plugin pour voir si j’avais une idée et je pense que c’est un point que tu devrais envisager, ton plugin stock en quelquesorte un historique de data sous forme de string, je ne pense pas que le setconfiguration soit judicieux pour ce cas là. je pense que stocker ta data dans un fichier indépendant type json soit beaucoup plus pertinent. Un peu comme le fait Jeedom pour la timeline

Bonjour,

Oui je pense passer par un fichier Json, j’y pensais de dès les debut pour gérer un cache et ne pas reprendre ce qui a déjà été inscrit.

Pour la présence blea j’ai ajouté une option ne pas répéter pour éviter de flooder le log.

Je voulais déjà tenter un premier plugin car le moteur tourne depuis décembre sous forme de script. Les retours sur le forum on déjà permis de l’ameliorer, le json est l’etape d’apres :wink:

À ce propos si je créer un jeelog.json dans un dossier data du plugin, serat automatiquement supprimer avec le reste du plugin quand qql un le désinstalle ?

Merci

Salut a la désinstallation oui, mais avantage ce dossier n’est pas écrasée lors d’une mise à jour.

Oui je pense que le json est une bonne piste dans ton cas. Car tu risques d’avoir d’autres cas :slightly_smiling_face:

Exemple une personne qui voudra se servir de ton plugin pour afficher sur un widget tous les changements de son horoscope lol. Alors oui aucun sens mais vu qu’avec Jeedom on peut tout faire les gens prennent l’habitude de vouloir tout faire meme le plus fou.
Mais c’est qu’un exemple. Et oui effectivement avoir une propre notion de non répétition pour ton plugin est une bonne idée. Car ça aura pleins d’autres applications

Pour le moment même si ça évoluera, le rescue=1 permet d’éviter les erreurs 500 isolés dans un plugin. Si c’est le core qui est dans les choux rescue le sera aussi. Mais c’est qu’un début

Oui ça tronque effectivement mais un json tronqué n’est plus valide. Ce qui explique pourquoi dans tous les champs configuration tu retrouves le début du json. Les infos n’ont pas disparus juste que le json n’est plus interpretable

Bonjour,

J’ai une nouvelle version qui est prête avec les datas dans un fichier txt (pas besoin de json pour çà).
Je le nomme dans monplugin/data/id.txt id étant l’id de l’eqlogic.

Est-ce qu’un plugin a toujours le droit d’écrire dans son répertoire ? Que ce soit smart, docker, rpi etc ?

Pour supprimer les anciennes données dans la configuration, je fais en preSave():
$this->setConfiguration(‹ data ›, null);

Par contre comment le faire lors de l’update du plugin par le market ? Pour tout ses équipements.

Merci