NEWS
XML Ausgabe parsen - DENON
-
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
-
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
-
@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.
Grüße
Brati
-
Ich verwende das nodejs-Module xml2js (https://www.npmjs.com/package/xml2js) um xml in Objekte umzuwandeln …
Probier es mal.
-
@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
-
@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.
@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.
-
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