UNPKG

homebridge-denon-speaker

Version:

Denon and Marantz AVR support as Speaker for Homebridge: https://github.com/nfarina/homebridge

269 lines 9.13 kB
"use strict"; /** * created by stfnhmplr on 28.01.16. * control your Denon AVR via http with node.js */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DenonStatusLite = exports.DenonLib = void 0; const axios_1 = __importDefault(require("axios")); const xml2js_1 = require("xml2js"); class DenonLib { constructor(ip) { this.url_status_lite = '/goform/formMainZone_MainZoneXmlStatusLite.xml'; this.url_status = '/goform/formMainZone_MainZoneXml.xml'; this.url_post = '/goform/formiPhoneAppDirect.xml'; this.ip = ip; } /** * Returns the friendly avr name * @param callback */ async getModelInfo() { let modelInfo = { name: "", brand: "" }; await axios_1.default.get('http://' + this.ip + this.url_status) .then((response) => { let xml = ''; xml2js_1.parseString(xml + response.data, function (err, result) { modelInfo.name = result.item.FriendlyName[0].value[0]; modelInfo.brand = result.item.BrandId[0].value[0]; }); }) .catch((error) => { return Promise.reject(error); }); return modelInfo; } /** * Returns the friendly avr name * @param callback */ async getName() { let name = ""; await axios_1.default.get('http://' + this.ip + this.url_status) .then((response) => { var xml = ''; xml2js_1.parseString(xml + response.data, function (err, result) { name = result.item.FriendlyName[0].value[0]; }); }) .catch((error) => { return Promise.reject(error); }); return name; } ; /** * Returns the avr brand * @param callback */ async getBrand() { let brand = ""; var xml = ''; await axios_1.default.get('http://' + this.ip + this.url_status) .then((response) => { xml2js_1.parseString(xml + response.data, function (err, result) { brand = result.item.BrandId[0].value[0]; }); }) .catch((error) => { return Promise.reject(error); }); return brand; } ; /** * Returns the current power state of the avr * @param callback */ async getPowerState() { let powerState = false; await axios_1.default.get('http://' + this.ip + this.url_status_lite) .then((response) => { var xml = ''; xml2js_1.parseString(xml + response.data, function (err, result) { powerState = (result.item.Power[0].value[0] == 'ON'); }); }) .catch((error) => { return Promise.reject(error); }); return powerState; } ; /** * sets the power state of the avr * @param powerState - true or false * @param callback */ async setPowerState(wantedPowerState) { const stringWantedPowerState = (wantedPowerState) ? 'ON' : 'OFF'; await axios_1.default.get('http://' + this.ip + '/MainZone/index.put.asp?cmd0=PutZone_OnOff/' + stringWantedPowerState) .catch((error) => { return Promise.reject(error); }); return wantedPowerState; } ; /** * Returns the current mute state of the avr * @returns Promise<boolean> */ async getMuteState() { let muteState = false; await axios_1.default.get('http://' + this.ip + this.url_status_lite) .then((response) => { var xml = ''; xml2js_1.parseString(xml + response.data, function (err, result) { muteState = (result.item.Mute[0].value[0] == 'ON'); console.log(result); console.log('DenonLib getMuteState: ' + muteState); }); }) .catch((error) => { return Promise.reject(error); }); return muteState; } ; /** * set the mute state of the avr * @param muteState * @param callback */ async setMuteState(wantedMuteState) { let stringWantedMuteState = (wantedMuteState) ? 'ON' : 'OFF'; await axios_1.default.get('http://' + this.ip + '/MainZone/index.put.asp?cmd0=PutVolumeMute/' + stringWantedMuteState) .catch((error) => { return Promise.reject(error); }); return wantedMuteState; } ; /** * Returns the current input of the avr * @param callback (String) */ /* async getInput() { request.get('http://' + this.ip + this.url_status_lite, function (error: any, response: any, body: any) { var xml = ''; if (!error && response.statusCode === 200) { parseString(xml + body, function (err: any, result: any) { callback(null, result.item.InputFuncSelect[0].value[0]); }); } else { callback(error); } }); }; */ /** * sets the input to xxx * possible values are * 'CD', 'SPOTIFY', 'CBL/SAT', 'DVD', 'BD', 'GAME', 'GAME2', 'AUX1', 'MPLAY', 'USB/IPOD', 'TUNER', 'NETWORK', 'TV', 'IRADIO', 'SAT/CBL', 'DOCK', 'IPOD', 'NET/USB', 'RHAPSODY', 'PANDORA', 'LASTFM', 'IRP', 'FAVORITES', 'SERVER' * @param input String * @param callback */ /* async setInput(input: any, callback: any) { request.get('http://' + this.ip + '/goform/formiPhoneAppDirect.xml?SI' + input, function (error: any, response: any, body: any) { if (!error && response.statusCode === 200) { callback(null); } else { callback(error) } }) }; */ /** * Returns the current Surround Mode * @param callback */ /* async getSurroundMode(callback: any) { request.get('http://' + this.ip + this.url_status, function (error: any, response: any, body: any) { var xml = ''; if (!error && response.statusCode === 200) { parseString(xml + body, function (err: any, result: any) { callback(null, result.item.selectSurround[0].value[0]); }); } else { callback(error); } }); }; */ /** * Set the playback volume * the volume fix sets the volume to the volume the display shows * @param volume integer * @param callback */ async setVolume(wantedVolumeState) { var vol = (+wantedVolumeState - 80).toFixed(1); //volume fix await axios_1.default.get('http://' + this.ip + '/goform/formiPhoneAppVolume.xml?1+' + vol) .catch((error) => { return Promise.reject(error); }); return wantedVolumeState; } ; /** * Returns the current volume of the avr (with volume fix) * @param callback */ async getVolume() { let volumeState = 0; await axios_1.default.get('http://' + this.ip + this.url_status) .then((response) => { var xml = ''; xml2js_1.parseString(xml + response.data, function (err, result) { volumeState = (result.item.MasterVolume[0].value[0]) + 80; }); }) .catch((error) => { return Promise.reject(error); }); return volumeState; } ; async getStatusLite() { let statusLite = new DenonStatusLite(); await axios_1.default.get('http://' + this.ip + this.url_status_lite) .then((response) => { var xml = ''; xml2js_1.parseString(xml + response.data, function (err, result) { statusLite.powerState = (result.item.Power[0].value[0] == 'ON'); statusLite.inputSelected = result.item.InputFuncSelect[0].value[0]; statusLite.volumeState = parseInt(result.item.MasterVolume[0].value[0]) + 80; statusLite.muteState = (result.item.Mute[0].value[0] == 'on'); }); }) .catch((error) => { return Promise.reject(error); }); return statusLite; } } exports.DenonLib = DenonLib; class DenonStatusLite { constructor() { this.toString = () => { return `DenonStatusLite (power: ${this.powerState}, input: ${this.inputSelected}, volume: ${this.volumeState}, mute: ${this.muteState})`; }; this.powerState = false; this.inputSelected = ""; this.volumeState = 52; this.muteState = false; } } exports.DenonStatusLite = DenonStatusLite; //# sourceMappingURL=denon-lib.js.map