Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Werte aus XML auslesen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Werte aus XML auslesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      claus1993 last edited by

      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?

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @claus1993 last edited by

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

        C 1 Reply Last reply Reply Quote 0
        • C
          claus1993 @paul53 last edited by

          @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?

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @claus1993 last edited by

            @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 2 Replies Last reply Reply Quote 0
            • C
              claus1993 @paul53 last edited by

              @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 Reply Last reply Reply Quote 0
              • C
                claus1993 @paul53 last edited by

                @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!!!

                paul53 2 Replies Last reply Reply Quote 0
                • paul53
                  paul53 @claus1993 last edited by paul53

                  @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.

                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @claus1993 last edited by 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 1 Reply Last reply Reply Quote 0
                    • C
                      claus1993 @paul53 last edited by

                      @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 ?

                      paul53 2 Replies Last reply Reply Quote 0
                      • paul53
                        paul53 @claus1993 last edited by

                        @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)
                              });
                        
                        1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @claus1993 last edited by paul53

                          @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

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          911
                          Online

                          31.6k
                          Users

                          79.5k
                          Topics

                          1.3m
                          Posts

                          2
                          11
                          912
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo