Lire un fichier XML KOSTAL

Bonjour,

Je n’arrive pas à lire les données du fichier XML de mon onduleur 'Kostal Piko MP Plus ’ Branché en rj45 sur mon réseau. J’aimerais rapatrier les différentes valeurs dans JEEDOM. J’ai essayé avec le plugin script , sans résultat.

Si quelqu’un a une solution, elle serait la bienvenue. Merci d’avance.

<root>
    <Device Name="PIKO 3.0-2 MP plus" Type="Inverter" Platform="Net16" HmiPlatform="HMI17"     NominalPower="3000" UserPowerLimit="nan" CountryPowerLimit="nan" Serial="XXXXXXXXXXXXXXX" OEMSerial="XXXXXX" BusAddress="1" NetBiosName="INVXXXXXXXXX" WebPortal="PIKO Solar Portal" ManufacturerURL="kostal-solar-electric.com" IpAddress="XXX.XXX.XXX.XXX" DateTime="2022-12-25T16:44:52" MilliSeconds="533">
       <Measurements>
       <Measurement Value="238.1" Unit="V" Type="AC_Voltage"/>
       <Measurement Value="0.078" Unit="A" Type="AC_Current"/>
       <Measurement Value="0.0" Unit="W" Type="AC_Power"/>
       <Measurement Value="0.0" Unit="W" Type="AC_Power_fast"/>
       <Measurement Value="50.005" Unit="Hz" Type="AC_Frequency"/>
       <Measurement Value="244.3" Unit="V" Type="DC_Voltage1"/>
       <Measurement Value="175.0" Unit="V" Type="DC_Voltage2"/>
       <Measurement Value="0.044" Unit="A" Type="DC_Current1"/>
       <Measurement Unit="A" Type="DC_Current2"/>
       <Measurement Value="350.6" Unit="V" Type="LINK_Voltage"/>
       <Measurement Unit="W" Type="GridPower"/>
       <Measurement Unit="W" Type="GridConsumedPower"/>
       <Measurement Unit="W" Type="GridInjectedPower"/>
       <Measurement Unit="W" Type="OwnConsumedPower"/>
       <Measurement Value="100.0" Unit="%" Type="Derating"/>
    </Measurements>
  </Device>
</root>
1 « J'aime »

Bonjour,

Lisez la documentation, il y a un exemple.

Et montrez nous ce que vous avez déjà fait et où vous êtes bloqué pour que l’on puisse vous aider.

Bonjour, j’ai exactement le même problème que toi, je viens d’installer un Kostal Pico MP Plus, mais je n’arrive pas a récupérer les valeurs.
Le fichier XML n’a pas la même forme que les exemple connu sur les forums et doc Jeedom .

Comment récupérer la value ? dans :
moi j’était parti sur dans le plug-in script XML : Measurements > 0 > Measurement… et APRES ?

Si un connaisseur pouvait nous aider .

Merci

Après quoi?
Que voulez-vous faire? quelle valeur voulez-vous lire?

et comme le dit la doc: https://doc.jeedom.com/fr_FR/plugins/programming/script/?theme=light#Le%20choix%20XML
image

Merci pour la réponse , voici un exemple de la valeur que j’aimerai remonter .

pour info , l’url d du fichier XML est bien renseigner,(http://192.168.1.251/measurements.xml)

Ok; value, unit et type sont des attributs de l’élément measurement qui en fait n’a aucune valeur (suivant la définition d’un xml)

Donc impossible d’extraire ces infos avec un script de type « xml » et le parser intégré au plugin.

Il faut faire un « vrai » script (toujours avec le plugin script) en php ou en python par exemple et écrire le code pour extraire ces valeurs.

Je flag le sujet pour demain, j’essaierai de trouver 5min pour écrire le code qu’il faut si vous n’avez pas trouvé d’ici là

Je vous en remercie.

je propose un bloc code et un virtuel plutôt, le bloc code est plus facile à éditer que le script

  1. Créer un virtuel avec les commandes infos voulues:
    le nom des commande doit correspondre à la valeur de « Type » dans l’xml, par exemple:
    image

  2. prendre note de l’id du virtuel et l’activer:
    id 625 dans mon exemple:

  3. créer un scénario avec un bloc code:

et y mettre ce code:

$xml = simpleXML_load_file('/var/www/html/plugins/script/data/kostal.xml'); // replace with url
if ($xml===false) {
	$scenario->setLog('xml load failed');
} else {
	$kostal_id = 625; // replace correct id
      
	foreach($xml->Device->Measurements->Measurement as $measurement) {
		$attributes = $measurement->attributes();
        $type = (string)$attributes['Type'];
        $cmd = cmd::byEqLogicIdCmdName($kostal_id, $type);
        if (!is_object($cmd)) continue;
        $value = (string)$attributes['Value'];
        $unit = (string)$attributes['Unit'];
        $scenario->setLog("{$type} = {$value}{$unit} => cmd " . $cmd->getid());
	    //$cmd->setUnite($unit);  // to uncomment to update unit
        //$cmd->save(); // to uncomment to update unit
		$cmd->event($value);        
        $scenario->setLog($type . ' updated');
	}
}
    • Corriger l’url, donc remplacer '/var/www/html/plugins/script/data/kostal.xml' par http://192.168.1.251/measurements.xml chez vous)
    • Corriger l’id de l’équipement
  1. Exécuter le scénario, configurer un déclenchement par programmation, toutes les minutes par exemple

Résultat:
le scénario va mettre à jour les valeurs (et les unités) des commandes qu’il trouve (via le nom) sur l’équipement
image

la mise à jours des unités c’était plus pour l’exemple, ce n’est pas une super idée de faire ca à chaque refresh car ca veut dire save de la commande et donc écriture en DB. C’est préférable de les configurer une fois pour toute manuellement dans le virtuel

3 « J'aime »

Bonsoir, désolé , je viens de rentrer du travail, et j’ai donc testé ce code .
Impeccable

Un Grand Merci Mips de ma part et de la part de Dome qui je pense va y trouver son bonheur aussi.
:+1: :+1: :+1:

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.