Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. XML Ausgabe parsen - DENON

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    XML Ausgabe parsen - DENON

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

      Hallo,

      mein Denon AVR kann über "IP/goform/formMainZone_MainZoneXmlStatusLite.xml" abgefragt werden und liefert dann z.B.

      This XML file does not appear to have any style information associated with it. The document tree is shown below.
       <power><value>OFF</value></power> 
       <inputfuncselect><value>MPLAY</value></inputfuncselect> 
       <volumedisplay><value>Absolute</value></volumedisplay> 
       <mastervolume><value>-58.0</value></mastervolume> 
       <mute><value>off</value></mute> 
      

      Das sieht ja ganz logisch aus und daraus würde ich z.B. gerne den Power State auslesen, Versuche über:

      request(link, function (error, response, body) {
              log (body);
              log (response);
              var power_state = body.Power;
              log("Power: " + power_state);
      

      liefert leider nur:

      12:11:24.814	[info]	javascript.0 script.js.Wz_Denon_Volume: OFF MPLAY Absolute -58.0 off
      12:11:24.814	[info]	javascript.0 script.js.Wz_Denon_Volume: [object Object]
      12:11:24.814	[info]	javascript.0 script.js.Wz_Denon_Volume: Power: undefined
      

      Wenn ich die Logik dahinter kennen würde, wäre der Rest vermutlich easy :roll: .

      Kann mir jemand helfen.

      Grüße Brati

      1 Reply Last reply Reply Quote 0
      • Jey Cee
        Jey Cee Developer last edited by

        Hey Brati,

        das sieht aus wie die XML für upnp. Du kannst schauen ob mit Hilfe des upnp Adapters die von dir gewünschten Datenpunkte gelesen werden.

        Gruß

        Jey cee

        1 Reply Last reply Reply Quote 0
        • B
          Brati last edited by

          @JeyCee

          So, ich habe den Adapter installiert. Der Denon wird gefunden und mit der Lautstärke konnte ich schon spielen. Die Werte passen zwar noch nicht so richtig, aber ich probier mal.

          709_zwischenablage01.jpg

          Grüße

          Brati

          1 Reply Last reply Reply Quote 0
          • frankjoke
            frankjoke last edited by

            Ich verwende das nodejs-Module xml2js (https://www.npmjs.com/package/xml2js) um xml in Objekte umzuwandeln …

            Probier es mal.

            1 Reply Last reply Reply Quote 0
            • B
              Brati last edited by

              @fsjoke:

              Ich verwende das nodejs-Module xml2js (https://www.npmjs.com/package/xml2js) um xml in Objekte umzuwandeln …

              Probier es mal. `

              Bevor ich etwas falsch mache, muss ich das einfach über Putty im ioBroker Verzeichnis installieren? npm install xml2js…

              @JeyCee

              Der Upnp Adapter gibt mir noch nicht alle gesuchten Werte zurück. Z.B. ob eingeschaltet oder nicht und wie ich an Zone2 komme, ist mir auch noch schleierhaft.

              Meine Soundbridge gibt auch die Lautstärke in DB Werten, der Denon nur von 1-100, wobei die 8 bei 20-25DB angezeigt wird.

              Grüße

              Brati

              1 Reply Last reply Reply Quote 0
              • Jey Cee
                Jey Cee Developer last edited by

                @Brati:

                @fsjoke:

                Ich verwende das nodejs-Module xml2js (https://www.npmjs.com/package/xml2js) um xml in Objekte umzuwandeln …

                Probier es mal. `

                Bevor ich etwas falsch mache, muss ich das einfach über Putty im ioBroker Verzeichnis installieren? npm install xml2js… `

                In den Einstellungen vom Javascript Adapter gibt es ein Eingabefeld da trägst du einfach 'xml2js' ein, danach Speichern und Schließen. Anschließend wird das Modul installiert und kann in Scripten verwendet werden.

                @Brati:

                @JeyCee

                Der Upnp Adapter gibt mir noch nicht alle gesuchten Werte zurück. Z.B. ob eingeschaltet oder nicht und wie ich an Zone2 komme, ist mir auch noch schleierhaft.

                Meine Soundbridge gibt auch die Lautstärke in DB Werten, der Denon nur von 1-100, wobei die 8 bei 20-25DB angezeigt wird. `
                Dann stellt der Denon nur Standard Upnp Datenpunkte bereit und es gibt noch eine Denon Spezifische Schnittstelle die nicht vom Upnp Adapter gelesen wird.

                Bei upnp wird die Lautstärke üblicherweise in % angegeben, wobei das aber nicht zwingend sein muss.

                1 Reply Last reply Reply Quote 0
                • B
                  Brati last edited by

                  Mahlzeit,

                  keine Ahnung ob das der eleganteste Weg ist, aber über den Weg JSON Objekt - bearbeiten - Array einlesen komme ich jetzt an die Werte:

                  var link        = 'http://IPdesAVR/goform/formMainZone_MainZoneXmlStatusLite.xml';
                  var request = require('request');
                  var parseString = require('xml2js').parseString;
                  
                  function datenlesen() {
                  
                      request(link, function (error, response, body) {
                  
                              var xml, result;
                  
                                  parseString(body, function (err, result) {
                                          log("XML Objekt: " + result);
                                          xml = JSON.stringify(result);
                                          log("XML Objekt: " + xml);
                                          xml=replaceAll(xml,'[','');
                                          xml=replaceAll(xml,']','');
                                          xml=JSON.parse(xml); 
                                          log ("Power:  " + xml.item.Power.value);
                                          log ("Input:  " + xml.item.InputFuncSelect.value);
                                          log ("Volume: " + xml.item.MasterVolume.value);
                                          log ("Mute:   " + xml.item.Mute.value);
                  
                                      });
                  
                      });   // Ende request 
                  
                  }    
                  
                  datenlesen();
                  
                  function replaceAll(string, token, newtoken) {
                      if(token!=newtoken)
                      while(string.indexOf(token) > -1) {
                          string = string.replace(token, newtoken);
                      }
                      return string;
                  }
                  
                  

                  Das ergibt:

                  13:44:34.573	[info]	javascript.0 script.js.##_Denon: XML Objekt: {"item":{"Power":[{"value":["OFF"]}],"InputFuncSelect":[{"value":["Favorites"]}],"VolumeDisplay":[{"value":["Absolute"]}],"MasterVolume":[{"value":["-60.0"]}],"Mute":[{"value":["off"]}]}}
                  13:44:34.573	[info]	javascript.0 script.js.##_Denon: Power: OFF
                  13:44:34.573	[info]	javascript.0 script.js.##_Denon: Input: Favorites
                  13:44:34.573	[info]	javascript.0 script.js.##_Denon: Volume: -60.0
                  13:44:34.573	[info]	javascript.0 script.js.##_Denon: Mute: off
                  

                  Und ich kann es weiter verarbeiten…

                  Danke.

                  Grüße

                  Brati

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  1.0k
                  Online

                  31.7k
                  Users

                  79.7k
                  Topics

                  1.3m
                  Posts

                  3
                  7
                  1576
                  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