Problème de code passage en V4

Bonjour j’ai un problème sur jeedom V4 par rapport a la V3 sur el plugin enphase_prod il récupère un numéro de série et une version de soft dans un fichier xml distant, le soucis c’est qu’il ne l’affiche pas dans le widget alors que les infos sont bien récupérées vu qu’elles apparaissent dans les log, voici le bout de code qui gère cette partie :

// Creation info Numero de serie
        $info = $this->getCmd(null, 'nbserie');
        if (!is_object($info)) {
            $info = new enphaseCmd();
            $info->setName(__('Numero de Serie', __FILE__));
        }
        $info->setLogicalId('nbserie');
        $info->setEqLogic_id($this->getId());
        $info->setIsHistorized(0);
        $info->setType('info');
        $info->setSubType('string');
        $info->save();

        // Creation info version
        $info = $this->getCmd(null, 'ver_soft');
        if (!is_object($info)) {
            $info = new enphaseCmd();
            $info->setName(__('Software Version', __FILE__));
        }

        $info->setLogicalId('ver_soft');
        $info->setEqLogic_id($this->getId());
        $info->setIsHistorized(0);
        $info->setType('info');
        $info->setSubType('string');
        $info->save();

        // Recuperation de l'info nbserie et version
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->getConfiguration('ip') . '/info.xml');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
        curl_setopt($ch, CURLOPT_USERPWD, $this->getConfiguration('user') . ":" . $this->getConfiguration('pass'));
        $response = curl_exec($ch);
        curl_close($ch);
        $response = simplexml_load_string($response);
        $this->checkAndUpdateCmd('nbserie', $response->device->sn);
        log::add('enphase', 'debug', 'commande recu pour numeros de serie :' . $response->device->sn);
        $this->checkAndUpdateCmd('ver_soft', $response->device->software);
        log::add('enphase', 'debug', 'commande recu pour version :' . $response->device->software);

Voilà si quelqu’un a une idée du problème, une solution est la bien venue.
Merci d’avance !

Personne pour m’aider ? SVP ?

Bonjour
Fais un recherche widget v4 je pense tu trouveras rapidement un debut de piste vu les dizaines de sujet traitant de cela

C’est pas un problème de widget, les données remontent dans les logs mais quand j’appuie sur le bouton tester la commande ne retourne rien et rien n’est affiché dans le widget non plus

A ben ça tu le dis pas dans le premier message donc forcément ça aide pas… Après analyse du code il faut faire un cast de ce que tu envoies a jeedom en string (par défaut un noeud XML c’est pas en string)

ok je fais ca comment parce que je suis pas très doué en code je tatonne complet

De mémoire faut mettre (string) devant mais le mieux est de chercher sur Google je pense

Si je fais $response = simplexml_load_string(string $response);
ça ne fonctionne pas c’est pourtemps ce que j’ai trouvé sur le site de php

https://www.php.net/manual/fr/function.simplexml-load-string.php

Non c’est pas regarde sur Google cast en string php

juste pour savoir vu que je trouve pas ma réponse, qu’est ce qui a changer entre la v3 et la V4 pour le même code ne fonctionne plus ?

Je ne fais plus de cast automatiquement lors du formatValue dans le code pour ne pas predre du temps inutilement vu que 90% des plugins n’en ont pas besoin

Par contre ca fonctionne parfaitement en json dans le même plugin c’est normal ?

$ch = curl_init();
                    curl_setopt($ch, CURLOPT_URL, $Equipement->getConfiguration('ip') . '/api/v1/production');
                    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
                    curl_setopt($ch, CURLOPT_USERPWD, $Equipement->getConfiguration('user') . ":" . $Equipement->getConfiguration('pass'));
                    $response = curl_exec($ch);
                    curl_close($ch);

                    $json_data = json_decode($response, true);

                    


                    $Equipement->checkAndUpdateCmd('now', $json_data['wattsNow']);

Oui tout a fais car la ta variable et bien de type string et non un simpleXMLelement

j’ai modifier des parties sans résultats, je ne sais vraiment pas comment faire :

$ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'http://' . $this->getConfiguration('ip') . '/info.xml');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
        curl_setopt($ch, CURLOPT_USERPWD, $this->getConfiguration('user') . ":" . $this->getConfiguration('pass'));
        $response = curl_exec($ch);
        curl_close($ch);
        $response = simplexml_load_string( $response);
      	$stringsn =  $response->device->sn->__toString();
        $stringsoft =  $response->device->software->__toString();
        var_dump($stringsn);
        $this->checkAndUpdateCmd('nbserie', (string)$stringsn);
        log::add('enphase', 'debug', 'commande recu pour numeros de serie :' . $stringsn);
        var_dump($stringsoft);
        $this->checkAndUpdateCmd('ver_soft', (string)$stringsoft);
      	log::add('enphase', 'debug', 'commande recu pour version :' . $stringsoft);

je précise que avec ou sans (string) ici $this->checkAndUpdateCmd('ver_soft', (string)$stringsoft); ça ne change rien

il manque un espace je pense, mais regarde sur internet ca sera beaucoup mieux expliqué que moi et ya plein d’exemple

c’est ce que j’ai fait et j’ai trouvé ce que je viens de poster
je viens de tester avec l’espace et ça ne change rien

Alors ya encore autrechose la faut faire du debug pour voir ce qu’il se passe c’est la seule idée que j’avais

pour faire des essais j’ai fait ca dans un php en ssh :

<?php

$ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'http://192.168.0.xx/info.xml');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
        curl_setopt($ch, CURLOPT_USERPWD, "envoy" . ":" . "XXXXXX");
        $response = curl_exec($ch);
        curl_close($ch);
        $response = simplexml_load_string($response);
        print_r($response);
        $string =  $response->device->sn->__toString();
        print_r($string);

et il m’affiche bien ce que je cherche donc je comprend pas ce qui ce passe.

C’est pour ca que je te dis qu’il faut deboguer, ca marche pour tous les plugins sauf le tien donc je pense le soucis vient de ton plugin. Après je n’ai malheureusement pas le temps de faire du debug dans les plugins tierces.

je ne sais pas déboguer je suis pas un cadore dans le domaine je modifie pour apprendre quelque truc mais bon ca reste assez limité, je fait ca aussi parce que le créateur ne met pas a jour le plugin alors du coup je fait ce que je peux en regardant dans d’autre plugin, j’ai regardé dans celui de l’ecodevice pour voir vu qu’il va aussi chercher dans un fichier xml mais rien ne correspond.