So, ich habe das Script nun nochmal etwas erweitert.
VolumeUp und VolumeDown sind nun numerisch. Sprich es kann ein beliebiger Wert übergeben werden. Das entspricht dann der Anzahl an Schritten um die die Lautstärke erhöht, bzw. reduziert wird.
Weiterhin gibt es nun den State "setVolume". Hier kann (indirekt) der db Wert angepasst werden. Allerdings muss man ein bissl rechnen, da negative Zahlen nicht funktionieren. Das hängt leider an der Pioneer Schnittstelle.
Die Range beginnt bei 1 und endet bei 185. Sprich, es gilt: 1 = -80dB , 161 = 0dB und 185 = +12dB.
Funktioniert bei mir soweit ganz gut. Testfeedback nehme ich wieder gerne entgegen!
@pix: Ja, ich sollte das mal in einen Adapter umfunktionieren. Dazu muss ich mir aber vermutlich etwas Zeit nehmen. Hab ich noch nie gemacht :?
/*
script needs stormboy/node-pioneer-avr package.
see https://github.com/stormboy/node-pioneer-avr
To install, excecute the following command in /opt/iobroker/node_modules:
npm install https://github.com/stormboy/node-pioneer-avr.git
*/
//path to node-pioneer-avr package
var avr = require("../../pioneer-avr");
//new iobroker states
createState('pioneer.volumeUp'); //set to true to increase Volume
createState('pioneer.volumeDown'); //set to true to decrease Volume
createState('pioneer.setVolume'); //set Volume as numeric value. [0 .. 185] 1 = -80dB , 161 = 0dB, 185 = +12dB
createState('pioneer.turnOn'); //set to true to turn receiver on
createState('pioneer.turnOff'); //set to true to turn receiver off
createState('pioneer.setInput'); //set new input as numeric value (see below)
createState('pioneer.onState'); //Status On/Off
createState('pioneer.inputState'); //Current Input State
//Options
var options = {
port: 23,
host: "192.168.0.19",
log: true
};
var receiver = new avr.VSX(options);
//trigger on connection
receiver.on("connect", function() {
console.log("receiver connected");
});
//trigger on Input change
receiver.on("input", function(id, name) {
console.log("current input: " + id + " : " + name);
setState('javascript.0.pioneer.inputState', id + " : " + name);
});
//trigger on power change
receiver.on("power", function(pwrstate) {
console.log("Power: " + pwrstate);
setState('javascript.0.pioneer.onState', pwrstate);
});
//inc Vol
on({id: 'javascript.0.pioneer.volumeUp', change: "any"}, function (obj) {
var value = obj.state.val;
console.log("VolUp: " + value);
for(var i = 0; i < value; i++) {
receiver.volumeUp();
}
});
//dec Vol
on({id: 'javascript.0.pioneer.volumeDown', change: "any"}, function (obj) {
var value = obj.state.val;
console.log("VolDown: " + value);
for(var i = 0; i < value; i++) {
receiver.volumeDown();
}
});
//Set Volume
//[0 .. 185] 1 = -80dB , 161 = 0dB, 185 = +12dB
on({id: 'javascript.0.pioneer.setVolume', change: "any"}, function (obj) {
var value = obj.state.val;
console.log("Volume: " + value);
receiver.volume(value);
});
//Turn On
on({id: 'javascript.0.pioneer.turnOn', val: true}, function (obj) {
receiver.power(true);
});
//Turn Off
on({id: 'javascript.0.pioneer.turnOff', val: true}, function (obj) {
receiver.power(false);
});
/* Input Codes
dvd: "04",
bd: "25",
tv_sat: "05",
dvr_bdr: "15",
video_1: "10",
video_2: "14",
hdmi_1: "19",
hdmi_2: "20",
hdmi_3: "21",
hdmi_4: "22",
hdmi_5: "23",
media: "26",
ipod_usb: "17",
xm_radio: "18",
cd: "01",
cdr_tape: "03",
tuner: "02",
phono: "00",
multi_ch: "12",
adapter_port: "33",
sirius: "27",
*/
//Set Input
on({id: 'javascript.0.pioneer.setInput', change: "ne"}, function (obj) {
var value = obj.state.val;
console.log(value);
console.log(receiver.queryInputName());
receiver.selectInput(value);
});