Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Kostal PikoMP xml Parsen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

Kostal PikoMP xml Parsen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
9 Beiträge 5 Kommentatoren 758 Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    sebkru
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    ich verzweifle leider etwas mit meinem neuen PikoMP Wechselrichter.
    Um die Werte in den iobroker zu bekommen muss man eine URL aufrufen und erhält als Ergebnis eine XML zurück. So weit der für mich einfache Teil.
    Allerdings ist die XML etwas untypisch aufgebaut.
    Der z.B. interessante Wert PV Power wird durch Type="AC_Power" definiert. Dieses steht am Ende.
    Wie muss ich das JavaScript erstellen, dass er nach dem Type sucht und mir die Value davor als Datenpunkt ausgibt?

    Hier das Ergebnis das ich vom Wechselrichter erhalte:

    <root>
    <Device Name="PIKO 3.6-2 MP plus" Type="Inverter" Platform="Net16" HmiPlatform="HMI17" NominalPower="3600" UserPowerLimit="nan" CountryPowerLimit="nan" Serial="BLABLA" OEMSerial="BLABLA" BusAddress="3" NetBiosName="BLABLA" WebPortal="PIKO Solar Portal" ManufacturerURL="kostal-solar-electric.com" IpAddress="192.168.200.137" DateTime="2021-09-29T16:28:09" MilliSeconds="083">
    <Measurements>
    <Measurement Value="228.3" Unit="V" Type="AC_Voltage"/>
    <Measurement Value="1.509" Unit="A" Type="AC_Current"/>
    <Measurement Value="331.0" Unit="W" Type="AC_Power"/>
    <Measurement Value="356.8" Unit="W" Type="AC_Power_fast"/>
    <Measurement Value="50.008" Unit="Hz" Type="AC_Frequency"/>
    <Measurement Value="391.4" Unit="V" Type="DC_Voltage1"/>
    <Measurement Value="197.0" Unit="V" Type="DC_Voltage2"/>
    <Measurement Value="0.848" Unit="A" Type="DC_Current1"/>
    <Measurement Unit="A" Type="DC_Current2"/>
    <Measurement Value="389.3" 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>
    

    Ein Script das mir das ganze abholt habe ich soweit, darin fehlt allerdings der spannende Teil...

    var xml2js = require('xml2js');
    var options = {
        explicitArray: false,
        mergeAttrs: true
    };
    var parser = new xml2js.Parser(options);
    var request = require('request');
     
    request('http://192.168.200.137/measurements.xml', function (error, response, body) {
      if (!error && response.statusCode == 200) {
       log("Body: " + body);
       parser.parseString(body, function (err, result) {            
                if (err) {
                    log("Fehler: "+err);
                } else {
                    log("Result: "+result.root.itemName);
                }
            });
      } else  {
          log(error);
      }
    });
    
     
    
    

    Anscheinend ist der Wechselrichter nicht so oft im Einsatz den gefunden habe ich nicht wirklich eine Anleitung.

    Wäre für ein bis zwei Tipps sehr dankbar!

    paul53P DoggiD 2 Antworten Letzte Antwort
    0
    • S sebkru

      Hallo zusammen,

      ich verzweifle leider etwas mit meinem neuen PikoMP Wechselrichter.
      Um die Werte in den iobroker zu bekommen muss man eine URL aufrufen und erhält als Ergebnis eine XML zurück. So weit der für mich einfache Teil.
      Allerdings ist die XML etwas untypisch aufgebaut.
      Der z.B. interessante Wert PV Power wird durch Type="AC_Power" definiert. Dieses steht am Ende.
      Wie muss ich das JavaScript erstellen, dass er nach dem Type sucht und mir die Value davor als Datenpunkt ausgibt?

      Hier das Ergebnis das ich vom Wechselrichter erhalte:

      <root>
      <Device Name="PIKO 3.6-2 MP plus" Type="Inverter" Platform="Net16" HmiPlatform="HMI17" NominalPower="3600" UserPowerLimit="nan" CountryPowerLimit="nan" Serial="BLABLA" OEMSerial="BLABLA" BusAddress="3" NetBiosName="BLABLA" WebPortal="PIKO Solar Portal" ManufacturerURL="kostal-solar-electric.com" IpAddress="192.168.200.137" DateTime="2021-09-29T16:28:09" MilliSeconds="083">
      <Measurements>
      <Measurement Value="228.3" Unit="V" Type="AC_Voltage"/>
      <Measurement Value="1.509" Unit="A" Type="AC_Current"/>
      <Measurement Value="331.0" Unit="W" Type="AC_Power"/>
      <Measurement Value="356.8" Unit="W" Type="AC_Power_fast"/>
      <Measurement Value="50.008" Unit="Hz" Type="AC_Frequency"/>
      <Measurement Value="391.4" Unit="V" Type="DC_Voltage1"/>
      <Measurement Value="197.0" Unit="V" Type="DC_Voltage2"/>
      <Measurement Value="0.848" Unit="A" Type="DC_Current1"/>
      <Measurement Unit="A" Type="DC_Current2"/>
      <Measurement Value="389.3" 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>
      

      Ein Script das mir das ganze abholt habe ich soweit, darin fehlt allerdings der spannende Teil...

      var xml2js = require('xml2js');
      var options = {
          explicitArray: false,
          mergeAttrs: true
      };
      var parser = new xml2js.Parser(options);
      var request = require('request');
       
      request('http://192.168.200.137/measurements.xml', function (error, response, body) {
        if (!error && response.statusCode == 200) {
         log("Body: " + body);
         parser.parseString(body, function (err, result) {            
                  if (err) {
                      log("Fehler: "+err);
                  } else {
                      log("Result: "+result.root.itemName);
                  }
              });
        } else  {
            log(error);
        }
      });
      
       
      
      

      Anscheinend ist der Wechselrichter nicht so oft im Einsatz den gefunden habe ich nicht wirklich eine Anleitung.

      Wäre für ein bis zwei Tipps sehr dankbar!

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @sebkru
      Was ergibt bei Änderung von Zeile 16 im Log?

                      log(result);
      

      Funktioniert der Adapter nicht?

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      S 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @sebkru
        Was ergibt bei Änderung von Zeile 16 im Log?

                        log(result);
        

        Funktioniert der Adapter nicht?

        S Offline
        S Offline
        sebkru
        schrieb am zuletzt editiert von sebkru
        #3

        @paul53

        Hallo den Adapter habe ich noch nicht getestet, da er ja für den BA ist, habe ihn mal hinzugefügt, Werte bekomme ich aktuell keine, ist ja auch dunkel. 😉

        Obwohl wenn ich das aus dem Log ansehe müsste ja zumindest die Netzspannung da sein, aber es ist alles null.
        Denke also nicht das der funktioniert, aber ein Versuch war es wert.

        Das Ergebnis im Log ist einwandfrei. Ich weiß nur nicht wie ich dem Skript beibringen soll, dass er nach dem Type suchen soll und mir das Value dazu ausgeben soll.

        Logbuch zeigt den kompletten Inhalt der XML an:

        script.js.common.Krutina.Solar.PikoMP: {'root':{'Device':{'Name':'PIKO 3.6-2 MP plus','Type':'Inverter','Platform':'Net16','HmiPlatform':'HMI17','NominalPower':'3600','UserPowerLimit':'nan','CountryPowerLimit':'nan','Serial':'BLA','OEMSerial':'BLA','BusAddress':'3','NetBiosName':'BLA','WebPortal':'PIKO Solar Portal','ManufacturerURL':'kostal-solar-electric.com','IpAddress':'192.168.200.137','DateTime':'2021-09-29T20:28:51','MilliSeconds':'928','Measurements':{'Measurement':[{'Value':'229.0','Unit':'V','Type':'AC_Voltage'},{'Unit':'A','Type':'AC_Current'},{'Unit':'W','Type':'AC_Power'},{'Unit':'W','Type':'AC_Power_fast'},{'Value':'50.010','Unit':'Hz','Type':'AC_Frequency'},{'Value':'3.8','Unit':'V','Type':'DC_Voltage1'},{'Value':'3.3','Unit':'V','Type':'DC_Voltage2'},{'Unit':'A','Type':'DC_Current1'},{'Unit':'A','Type':'DC_Current2'},{'Value':'0.9','Unit':'V','Type':'LINK_Voltage'},{'Unit':'W','Type':'GridPower'},{'Unit':'W','Type':'GridConsumedPower'},{'Unit':'W','Type':'GridInjectedPower'},{'Unit':'W','Type':'OwnConsumedPower'},{'Value':'100.0','Unit':'%','Type':'Derating'}]}}}}
        
        paul53P 1 Antwort Letzte Antwort
        0
        • S sebkru

          @paul53

          Hallo den Adapter habe ich noch nicht getestet, da er ja für den BA ist, habe ihn mal hinzugefügt, Werte bekomme ich aktuell keine, ist ja auch dunkel. 😉

          Obwohl wenn ich das aus dem Log ansehe müsste ja zumindest die Netzspannung da sein, aber es ist alles null.
          Denke also nicht das der funktioniert, aber ein Versuch war es wert.

          Das Ergebnis im Log ist einwandfrei. Ich weiß nur nicht wie ich dem Skript beibringen soll, dass er nach dem Type suchen soll und mir das Value dazu ausgeben soll.

          Logbuch zeigt den kompletten Inhalt der XML an:

          script.js.common.Krutina.Solar.PikoMP: {'root':{'Device':{'Name':'PIKO 3.6-2 MP plus','Type':'Inverter','Platform':'Net16','HmiPlatform':'HMI17','NominalPower':'3600','UserPowerLimit':'nan','CountryPowerLimit':'nan','Serial':'BLA','OEMSerial':'BLA','BusAddress':'3','NetBiosName':'BLA','WebPortal':'PIKO Solar Portal','ManufacturerURL':'kostal-solar-electric.com','IpAddress':'192.168.200.137','DateTime':'2021-09-29T20:28:51','MilliSeconds':'928','Measurements':{'Measurement':[{'Value':'229.0','Unit':'V','Type':'AC_Voltage'},{'Unit':'A','Type':'AC_Current'},{'Unit':'W','Type':'AC_Power'},{'Unit':'W','Type':'AC_Power_fast'},{'Value':'50.010','Unit':'Hz','Type':'AC_Frequency'},{'Value':'3.8','Unit':'V','Type':'DC_Voltage1'},{'Value':'3.3','Unit':'V','Type':'DC_Voltage2'},{'Unit':'A','Type':'DC_Current1'},{'Unit':'A','Type':'DC_Current2'},{'Value':'0.9','Unit':'V','Type':'LINK_Voltage'},{'Unit':'W','Type':'GridPower'},{'Unit':'W','Type':'GridConsumedPower'},{'Unit':'W','Type':'GridInjectedPower'},{'Unit':'W','Type':'OwnConsumedPower'},{'Value':'100.0','Unit':'%','Type':'Derating'}]}}}}
          
          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @sebkru
          Ansatz:

          const werte = result.root.Device.Measurements.Measurement;
          for(let i = 0; i < werte.length; i++) {
              if(werte[i].Value != undefined) log(werte[i].Type + ': ' + werte[i].Value);
          }
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          S 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @sebkru
            Ansatz:

            const werte = result.root.Device.Measurements.Measurement;
            for(let i = 0; i < werte.length; i++) {
                if(werte[i].Value != undefined) log(werte[i].Type + ': ' + werte[i].Value);
            }
            
            S Offline
            S Offline
            sebkru
            schrieb am zuletzt editiert von
            #5

            @paul53

            Hallo,
            vielen Dank für den Tipp, läuft einwandfrei!

            Für alle die auch einen Kostal Piko MP nutzen und auf der Suche nach der Lösung sind, ich veröffentliche das Skript wenn ich zu 100% damit zufrieden bin.

            ? 1 Antwort Letzte Antwort
            0
            • S sebkru

              @paul53

              Hallo,
              vielen Dank für den Tipp, läuft einwandfrei!

              Für alle die auch einen Kostal Piko MP nutzen und auf der Suche nach der Lösung sind, ich veröffentliche das Skript wenn ich zu 100% damit zufrieden bin.

              ? Offline
              ? Offline
              Ein ehemaliger Benutzer
              schrieb am zuletzt editiert von
              #6

              @sebkru
              Hallo, ich habe gerade meinen Kostal Wechselrichter in Betrieb genommen.
              Kannst du dein Script zur Verfügung stellen? 🙂

              Wäre prima.

              Danke

              Grüße
              Markus

              HomoranH 1 Antwort Letzte Antwort
              0
              • ? Ein ehemaliger Benutzer

                @sebkru
                Hallo, ich habe gerade meinen Kostal Wechselrichter in Betrieb genommen.
                Kannst du dein Script zur Verfügung stellen? 🙂

                Wäre prima.

                Danke

                Grüße
                Markus

                HomoranH Nicht stören
                HomoranH Nicht stören
                Homoran
                Global Moderator Administrators
                schrieb am zuletzt editiert von
                #7

                @markus-strobel sagte in Kostal PikoMP xml Parsen:

                , ich habe gerade meinen Kostal Wechselrichter in Betrieb genommen.

                welchen?

                da gibt es verschiedene Systeme

                kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                ? 1 Antwort Letzte Antwort
                0
                • HomoranH Homoran

                  @markus-strobel sagte in Kostal PikoMP xml Parsen:

                  , ich habe gerade meinen Kostal Wechselrichter in Betrieb genommen.

                  welchen?

                  da gibt es verschiedene Systeme

                  ? Offline
                  ? Offline
                  Ein ehemaliger Benutzer
                  schrieb am zuletzt editiert von
                  #8

                  @homoran

                  PIKO 3.0-2 MP plus

                  Grüße
                  Markus

                  1 Antwort Letzte Antwort
                  0
                  • S sebkru

                    Hallo zusammen,

                    ich verzweifle leider etwas mit meinem neuen PikoMP Wechselrichter.
                    Um die Werte in den iobroker zu bekommen muss man eine URL aufrufen und erhält als Ergebnis eine XML zurück. So weit der für mich einfache Teil.
                    Allerdings ist die XML etwas untypisch aufgebaut.
                    Der z.B. interessante Wert PV Power wird durch Type="AC_Power" definiert. Dieses steht am Ende.
                    Wie muss ich das JavaScript erstellen, dass er nach dem Type sucht und mir die Value davor als Datenpunkt ausgibt?

                    Hier das Ergebnis das ich vom Wechselrichter erhalte:

                    <root>
                    <Device Name="PIKO 3.6-2 MP plus" Type="Inverter" Platform="Net16" HmiPlatform="HMI17" NominalPower="3600" UserPowerLimit="nan" CountryPowerLimit="nan" Serial="BLABLA" OEMSerial="BLABLA" BusAddress="3" NetBiosName="BLABLA" WebPortal="PIKO Solar Portal" ManufacturerURL="kostal-solar-electric.com" IpAddress="192.168.200.137" DateTime="2021-09-29T16:28:09" MilliSeconds="083">
                    <Measurements>
                    <Measurement Value="228.3" Unit="V" Type="AC_Voltage"/>
                    <Measurement Value="1.509" Unit="A" Type="AC_Current"/>
                    <Measurement Value="331.0" Unit="W" Type="AC_Power"/>
                    <Measurement Value="356.8" Unit="W" Type="AC_Power_fast"/>
                    <Measurement Value="50.008" Unit="Hz" Type="AC_Frequency"/>
                    <Measurement Value="391.4" Unit="V" Type="DC_Voltage1"/>
                    <Measurement Value="197.0" Unit="V" Type="DC_Voltage2"/>
                    <Measurement Value="0.848" Unit="A" Type="DC_Current1"/>
                    <Measurement Unit="A" Type="DC_Current2"/>
                    <Measurement Value="389.3" 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>
                    

                    Ein Script das mir das ganze abholt habe ich soweit, darin fehlt allerdings der spannende Teil...

                    var xml2js = require('xml2js');
                    var options = {
                        explicitArray: false,
                        mergeAttrs: true
                    };
                    var parser = new xml2js.Parser(options);
                    var request = require('request');
                     
                    request('http://192.168.200.137/measurements.xml', function (error, response, body) {
                      if (!error && response.statusCode == 200) {
                       log("Body: " + body);
                       parser.parseString(body, function (err, result) {            
                                if (err) {
                                    log("Fehler: "+err);
                                } else {
                                    log("Result: "+result.root.itemName);
                                }
                            });
                      } else  {
                          log(error);
                      }
                    });
                    
                     
                    
                    

                    Anscheinend ist der Wechselrichter nicht so oft im Einsatz den gefunden habe ich nicht wirklich eine Anleitung.

                    Wäre für ein bis zwei Tipps sehr dankbar!

                    DoggiD Offline
                    DoggiD Offline
                    Doggi
                    Developer
                    schrieb am zuletzt editiert von Doggi
                    #9

                    Hallo zusammen,

                    ich habe für einen Freund einen Adapter geschrieben, der genau für die Piko PV Anlage da ist und die Messwerte ausließt.

                    Hier der Link zum Test Beitrag: https://forum.iobroker.net/topic/55440/test-adapter-kostal-piko-mp-plus-v0-0-x-github-latest

                    Vielleicht hilft der ja und ihr könnt den mit testen.

                    1 Antwort Letzte Antwort
                    0
                    Antworten
                    • In einem neuen Thema antworten
                    Anmelden zum Antworten
                    • Älteste zuerst
                    • Neuste zuerst
                    • Meiste Stimmen


                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    598

                    Online

                    32.4k

                    Benutzer

                    81.4k

                    Themen

                    1.3m

                    Beiträge
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                    ioBroker Community 2014-2025
                    logo
                    • Anmelden

                    • Du hast noch kein Konto? Registrieren

                    • Anmelden oder registrieren, um zu suchen
                    • Erster Beitrag
                      Letzter Beitrag
                    0
                    • Home
                    • Aktuell
                    • Tags
                    • Ungelesen 0
                    • Kategorien
                    • Unreplied
                    • Beliebt
                    • GitHub
                    • Docu
                    • Hilfe