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

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Werte aus XML auslesen

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    320

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

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

Werte aus XML auslesen

Geplant Angeheftet Gesperrt Verschoben Blockly
11 Beiträge 2 Kommentatoren 1.3k Aufrufe 1 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.
  • C claus1993

    Hallo Zusammen,

    habe gerade das problem das ich die einzelnen Elemente aus der unten folgenden XML Datei in einzelnen Punkt auflisten möchte damit ich damit arbeiten kann.

    <fsapiResponse>
    <status>FS_OK</status>
    <item key="0">
    <field name="name">
    <c8_array>Shared media</c8_array>
    </field>
    <field name="type">
    <u8>0</u8>
    </field>
    <field name="subtype">
    <u8>0</u8>
    </field>
    <field name="graphicuri">
    <c8_array/>
    </field>
    <field name="artist">
    <c8_array/>
    </field>
    <field name="contextmenu">
    <u8>0</u8>
    </field>
    </item>
    <item key="1">
    <field name="name">
    <c8_array>USB playback</c8_array>
    </field>
    <field name="type">
    <u8>0</u8>
    </field>
    <field name="subtype">
    <u8>0</u8>
    </field>
    <field name="graphicuri">
    <c8_array/>
    </field>
    <field name="artist">
    <c8_array/>
    </field>
    <field name="contextmenu">
    <u8>0</u8>
    </field>
    </item>
    <listend/>
    </fsapiResponse>
    

    Welche Möglichkeiten habe ich mit Blockly damit ich auf die Daten von <field name ="name">, <field name="type> usw zugreifen kann. Da die Datenfelder mehrfach vorkommen müsste ich auch die einzelnen Daten mehrfach abgreifen können.

    Mittels Blockly Text kann ich ein einzelnes Element auslesen, scheitere jedoch daran das "name" x-fach vorkommen kann.

    Hat jemand einen Tipp wie ich hier vorgehen kann?

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

    @claus1993
    Blockly ist damit sicherlich überfordert. Für Javascript gibt es das NPM-Modul xml2js (in die Konfiguration der JS-Instanz eintragen).

    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

    C 1 Antwort Letzte Antwort
    0
    • paul53P paul53

      @claus1993
      Blockly ist damit sicherlich überfordert. Für Javascript gibt es das NPM-Modul xml2js (in die Konfiguration der JS-Instanz eintragen).

      C Offline
      C Offline
      claus1993
      schrieb am zuletzt editiert von
      #3

      @paul53

      Danke, doch habe ich keinerlei Ahnung von Java und bereits mit Blockly meine Probleme....

      Kann ich denn mit dem Modul einen Datensatz einfliesen lassen und bekomme dann meine Daten entsprechend konvertiert? Wie muss ich mir das vorstellen?

      paul53P 1 Antwort Letzte Antwort
      0
      • C claus1993

        @paul53

        Danke, doch habe ich keinerlei Ahnung von Java und bereits mit Blockly meine Probleme....

        Kann ich denn mit dem Modul einen Datensatz einfliesen lassen und bekomme dann meine Daten entsprechend konvertiert? Wie muss ich mir das vorstellen?

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

        @claus1993 sagte:

        Kann ich denn mit dem Modul einen Datensatz einfliesen lassen

        Woher kommen die XML Daten ? Liegen sie in einem Datenpunkt vor ?
        Das NPM-Modul wandelt XML in ein Javascript-Objekt.

        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

        C 2 Antworten Letzte Antwort
        0
        • paul53P paul53

          @claus1993 sagte:

          Kann ich denn mit dem Modul einen Datensatz einfliesen lassen

          Woher kommen die XML Daten ? Liegen sie in einem Datenpunkt vor ?
          Das NPM-Modul wandelt XML in ein Javascript-Objekt.

          C Offline
          C Offline
          claus1993
          schrieb am zuletzt editiert von
          #5

          @paul53
          Den Datensatz muss ich über einen HTML Befehl abfragen. Wollte dann eigentlich alles im Script mittels Variablen verarbeiten, kann es aber auch als Datenpunkt abspeichern was jedoch etwas Performance kostet.

          Habe diverse Datensätze mit gleichbleibender Struktur. Bin noch am tüfteln ob ich die einzelnen Werte nicht nacheinander mittels den Textbausteinen auslesen und in einer Liste abspeichern kann. Mit der Liste müsste ich dann auch weiterkommen....

          1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @claus1993 sagte:

            Kann ich denn mit dem Modul einen Datensatz einfliesen lassen

            Woher kommen die XML Daten ? Liegen sie in einem Datenpunkt vor ?
            Das NPM-Modul wandelt XML in ein Javascript-Objekt.

            C Offline
            C Offline
            claus1993
            schrieb am zuletzt editiert von
            #6

            @paul53

            Damit ich das NPM Modul besser verstehe hätte ich dazu ein paar Fragen. Habe hierzu mal einen Skript als Beispiel;

            var link = 'http://192.168.2.104/config/xmlapi/rssilist.cgi';
            var request = require('request');
            var parseString = require('xml2js').parseString;</code>
             
            function ImportRSSI()
            {
            request(link, function (error, response, body)
            {
            var xml, result;
             
            parseString(body, function (err, result)
            {
            for (var i = 0; i &lt; result.rssiList.rssi.length; i++)
            {
            var Device = result.rssiList.rssi[i].$;
             
            var DeviceId = Device.device;
            var DeviceTx = Device.tx;
            var DeviceRx = Device.rx;
             
            createState('HMSignalStrength.'+DeviceId+'.tx', DeviceTx, true);
            createState('HMSignalStrength.'+DeviceId+'.rx', DeviceRx, true);
            }
            });
             
            });
            }
             
            ImportRSSI();
            
            • bei "var link" gebe ich meine URL ein
            • um an die Daten aus der Rückmeldung zu gelangen lege ich weitere Variablen an;
            • "var DeviceID" heißt die Variable die mit den Daten von dem Label "Device.device" gefüllt wird
            • mittels create state lege ich meinen Datenpunkt an wo dann meine Variablen rein geschrieben werden

            Passt meine Denkweise soweit und ich kann - den Script entsprechend angepasst - die XML Daten in ioBroker schreiben?
            Habe ich ggf noch was vergessen was ich beachten muss?

            Danke dir und ein frohes Weihnachtsfest!!!

            paul53P 2 Antworten Letzte Antwort
            0
            • C claus1993

              @paul53

              Damit ich das NPM Modul besser verstehe hätte ich dazu ein paar Fragen. Habe hierzu mal einen Skript als Beispiel;

              var link = 'http://192.168.2.104/config/xmlapi/rssilist.cgi';
              var request = require('request');
              var parseString = require('xml2js').parseString;</code>
               
              function ImportRSSI()
              {
              request(link, function (error, response, body)
              {
              var xml, result;
               
              parseString(body, function (err, result)
              {
              for (var i = 0; i &lt; result.rssiList.rssi.length; i++)
              {
              var Device = result.rssiList.rssi[i].$;
               
              var DeviceId = Device.device;
              var DeviceTx = Device.tx;
              var DeviceRx = Device.rx;
               
              createState('HMSignalStrength.'+DeviceId+'.tx', DeviceTx, true);
              createState('HMSignalStrength.'+DeviceId+'.rx', DeviceRx, true);
              }
              });
               
              });
              }
               
              ImportRSSI();
              
              • bei "var link" gebe ich meine URL ein
              • um an die Daten aus der Rückmeldung zu gelangen lege ich weitere Variablen an;
              • "var DeviceID" heißt die Variable die mit den Daten von dem Label "Device.device" gefüllt wird
              • mittels create state lege ich meinen Datenpunkt an wo dann meine Variablen rein geschrieben werden

              Passt meine Denkweise soweit und ich kann - den Script entsprechend angepasst - die XML Daten in ioBroker schreiben?
              Habe ich ggf noch was vergessen was ich beachten muss?

              Danke dir und ein frohes Weihnachtsfest!!!

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

              @claus1993 sagte:

              Ob die Schleife so funktioniert, kann ich nicht beurteilen, da ich das aus dem XML erzeugte Objekt nicht kenne. Poste mal eine Log-Ausgabe davon.

              const link = 'http://192.168.2.104/config/xmlapi/rssilist.cgi';
              const parseString = require('xml2js').parseString;
               
              function ImportRSSI() {
                 request(link, function (error, response, body) {
                    parseString(body, function (err, result) {
                       if(!err) log('Objekt: ' + result)
                    });
                 });
              }
              
              ImportRSSI();
              

              Dein Script lässt sich aufgrund fehlender Einrückungen schlecht lesen.

              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

              1 Antwort Letzte Antwort
              0
              • C claus1993

                @paul53

                Damit ich das NPM Modul besser verstehe hätte ich dazu ein paar Fragen. Habe hierzu mal einen Skript als Beispiel;

                var link = 'http://192.168.2.104/config/xmlapi/rssilist.cgi';
                var request = require('request');
                var parseString = require('xml2js').parseString;</code>
                 
                function ImportRSSI()
                {
                request(link, function (error, response, body)
                {
                var xml, result;
                 
                parseString(body, function (err, result)
                {
                for (var i = 0; i &lt; result.rssiList.rssi.length; i++)
                {
                var Device = result.rssiList.rssi[i].$;
                 
                var DeviceId = Device.device;
                var DeviceTx = Device.tx;
                var DeviceRx = Device.rx;
                 
                createState('HMSignalStrength.'+DeviceId+'.tx', DeviceTx, true);
                createState('HMSignalStrength.'+DeviceId+'.rx', DeviceRx, true);
                }
                });
                 
                });
                }
                 
                ImportRSSI();
                
                • bei "var link" gebe ich meine URL ein
                • um an die Daten aus der Rückmeldung zu gelangen lege ich weitere Variablen an;
                • "var DeviceID" heißt die Variable die mit den Daten von dem Label "Device.device" gefüllt wird
                • mittels create state lege ich meinen Datenpunkt an wo dann meine Variablen rein geschrieben werden

                Passt meine Denkweise soweit und ich kann - den Script entsprechend angepasst - die XML Daten in ioBroker schreiben?
                Habe ich ggf noch was vergessen was ich beachten muss?

                Danke dir und ein frohes Weihnachtsfest!!!

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

                @claus1993 sagte:

                createState('HMSignalStrength.'+DeviceId+'.tx', DeviceTx, true);

                Da createState() nur einen Datenpunkt erstellt, wenn er noch nicht vorhanden ist, solltest Du es ändern in

                let idTx = 'HMSignalStrength.'+DeviceId+'.tx';
                if(existsState(idTx)) setState(idTx, DeviceTx, true);
                else createState(idTx, DeviceTx, {type: 'number', unit: 'dBm', name: 'RSSI Tx ' + DeviceId, role: '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

                C 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @claus1993 sagte:

                  createState('HMSignalStrength.'+DeviceId+'.tx', DeviceTx, true);

                  Da createState() nur einen Datenpunkt erstellt, wenn er noch nicht vorhanden ist, solltest Du es ändern in

                  let idTx = 'HMSignalStrength.'+DeviceId+'.tx';
                  if(existsState(idTx)) setState(idTx, DeviceTx, true);
                  else createState(idTx, DeviceTx, {type: 'number', unit: 'dBm', name: 'RSSI Tx ' + DeviceId, role: 'value'});
                  
                  C Offline
                  C Offline
                  claus1993
                  schrieb am zuletzt editiert von
                  #9

                  @paul53

                  Das ist die Rückmeldung meiner CCU;

                  <rssiList>
                      <rssi device="KEQ1070665" rx="-82" tx="-191"/>
                      <rssi device="LEQ0428002" rx="65536" tx="-72"/>
                      <rssi device="MEQ0050668" rx="-63" tx="-69"/>
                      <rssi device="MEQ0228764" rx="-191" tx="-82"/>
                      <rssi device="MEQ1562779" rx="-72" tx="65536"/>
                      <rssi device="NEQ1469139" rx="65536" tx="-83"/>
                      <rssi device="NEQ1692724" rx="-58" tx="-199"/>
                      <rssi device="NEQ1692751" rx="-60" tx="-176"/>
                      <rssi device="NEQ1802107" rx="-128" tx="-73"/>
                      <rssi device="NEQ1838061" rx="65536" tx="-65"/>
                      <rssi device="OEQ0087000" rx="65536" tx="-82"/>
                      <rssi device="OEQ0801793" rx="65536" tx="-69"/>
                      <rssi device="OEQ1994774" rx="-70" tx="-78"/>
                  </rssiList>
                  

                  Auswerten möchte ich jedoch die Daten aus diesem XML;

                  xml.PNG

                  jetzt muss ich natürlich die Variablen anpassen und erweitern. Was muss ich abfragen um den Namen zu erhalten? fsapiResponse.item key.field name ?

                  paul53P 2 Antworten Letzte Antwort
                  0
                  • C claus1993

                    @paul53

                    Das ist die Rückmeldung meiner CCU;

                    <rssiList>
                        <rssi device="KEQ1070665" rx="-82" tx="-191"/>
                        <rssi device="LEQ0428002" rx="65536" tx="-72"/>
                        <rssi device="MEQ0050668" rx="-63" tx="-69"/>
                        <rssi device="MEQ0228764" rx="-191" tx="-82"/>
                        <rssi device="MEQ1562779" rx="-72" tx="65536"/>
                        <rssi device="NEQ1469139" rx="65536" tx="-83"/>
                        <rssi device="NEQ1692724" rx="-58" tx="-199"/>
                        <rssi device="NEQ1692751" rx="-60" tx="-176"/>
                        <rssi device="NEQ1802107" rx="-128" tx="-73"/>
                        <rssi device="NEQ1838061" rx="65536" tx="-65"/>
                        <rssi device="OEQ0087000" rx="65536" tx="-82"/>
                        <rssi device="OEQ0801793" rx="65536" tx="-69"/>
                        <rssi device="OEQ1994774" rx="-70" tx="-78"/>
                    </rssiList>
                    

                    Auswerten möchte ich jedoch die Daten aus diesem XML;

                    xml.PNG

                    jetzt muss ich natürlich die Variablen anpassen und erweitern. Was muss ich abfragen um den Namen zu erhalten? fsapiResponse.item key.field name ?

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

                    @claus1993 sagte:

                    Auswerten möchte ich jedoch die Daten aus diesem XML;

                    XML kann ich nicht interpretieren. Wie sieht das Objekt als Ergebnis von xml2js aus ?

                          parseString(xml, function (err, result) {
                             if(!err) log('Objekt: ' + result)
                          });
                    

                    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

                    1 Antwort Letzte Antwort
                    0
                    • C claus1993

                      @paul53

                      Das ist die Rückmeldung meiner CCU;

                      <rssiList>
                          <rssi device="KEQ1070665" rx="-82" tx="-191"/>
                          <rssi device="LEQ0428002" rx="65536" tx="-72"/>
                          <rssi device="MEQ0050668" rx="-63" tx="-69"/>
                          <rssi device="MEQ0228764" rx="-191" tx="-82"/>
                          <rssi device="MEQ1562779" rx="-72" tx="65536"/>
                          <rssi device="NEQ1469139" rx="65536" tx="-83"/>
                          <rssi device="NEQ1692724" rx="-58" tx="-199"/>
                          <rssi device="NEQ1692751" rx="-60" tx="-176"/>
                          <rssi device="NEQ1802107" rx="-128" tx="-73"/>
                          <rssi device="NEQ1838061" rx="65536" tx="-65"/>
                          <rssi device="OEQ0087000" rx="65536" tx="-82"/>
                          <rssi device="OEQ0801793" rx="65536" tx="-69"/>
                          <rssi device="OEQ1994774" rx="-70" tx="-78"/>
                      </rssiList>
                      

                      Auswerten möchte ich jedoch die Daten aus diesem XML;

                      xml.PNG

                      jetzt muss ich natürlich die Variablen anpassen und erweitern. Was muss ich abfragen um den Namen zu erhalten? fsapiResponse.item key.field name ?

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

                      @claus1993 sagte:

                      fsapiResponse.item key.field name ?

                      result.fsapiResponse.item ist ein Array (2 Elemente)
                      result.fsapiResponse.item[0].field ist ein Array (6 Elemente)
                      result.fsapiResponse.item[0].field[0].c8_array[0] liefert "Shared media"
                      result.fsapiResponse.item[0].field[0].$.name liefert "name"

                      XML2JSON.JPG

                      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

                      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

                      758

                      Online

                      32.5k

                      Benutzer

                      81.7k

                      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