CCU.IO Script - Yamaha AVR steuern

WebUIs (DashUI, yahui, ...), Adapter (Hue, IRTrans, Sonos, ...), Logging, Scripting

Moderator: Co-Administratoren

belze262
Beiträge: 46
Registriert: 17.10.2013, 11:03

CCU.IO Script - Yamaha AVR steuern

Beitrag von belze262 » 15.04.2014, 19:05

Hallo zusammen,

da der Yamaha-Adapter ja noch nicht so ausgereift ist und ich absoluter Newbie in Sachen JS bin,
hab ich mich mal mit Hilfe von ScriptGUI und Google an ein kleines Script gewagt, um meinen Yamaha AVR zu steuern.
Hier soll erstmal nur der AVR in den Standby-Zustand geschaltet werden.
Mit
curl -d "<YAMAHA_AV cmd=\"PUT\"><Main_Zone><Power_Control><Power>Standby</Power></Power_Control></Main_Zone></YAMAHA_AV>" http://192.168.0.31/YamahaRemoteControl/ctrl
aus der Shell funktionierts...

Das erstellte Script passt aber irgendwie noch nicht so richtig:

setObject(100002, { Name: "YAM_AVR_Standby", TypeName: "VARDP"});

xmlhttp=new XMLHttpRequest();
xmlhttp.open('POST','http://192.168.0.31/YamahaControl/ctrl',true);
xmlhttp.send('<YAMAHA_AV cmd=\"PUT\"><Main_Zone><Power_Control><Power>Standby</Power></Power_Control></Main_Zone></YAMAHA_AV>');

Mit einem jqui hm_crtl - ButtonState versuch ich über die ID 100002 das Script zu starten, es führt aber zu keinem Ergebnis.

Sieht jemand den Fehler oder hat dazu eine Idee??

Gruß Michael

Bluefox
Beiträge: 779
Registriert: 20.02.2011, 19:55

Re: CCU.IO Script - Yamaha AVR steuern

Beitrag von Bluefox » 18.04.2014, 09:41

in der nächste Version von ccu.io soll so was möglich sein:

Code: Alles auswählen

getUrl({
     host: 'http://192.168.0.31',
     post: "dein POST hier",
     path: '/YamahaControl/ctrl'
}, function (response) {
    log("Response:" + response);
});

hobbyquaker
Beiträge: 3224
Registriert: 12.07.2009, 20:01
Kontaktdaten:

CCU.IO Script - Yamaha AVR steuern

Beitrag von hobbyquaker » 18.04.2014, 11:01

http post ist doch schon via request() möglich und steht bereits in der Script-Engine zur Verfügung, siehe https://github.com/mikeal/request

request(url) ist nur eine Kurzform von request.get(url), man kann aber auch problemlos request.post() oder request.put() etc aufrufen.

hobbyquaker
Beiträge: 3224
Registriert: 12.07.2009, 20:01
Kontaktdaten:

Re: CCU.IO Script - Yamaha AVR steuern

Beitrag von hobbyquaker » 18.04.2014, 11:44

obiges Beispiel sollte so gehen:

Code: Alles auswählen

request.post({
  headers: {'content-type' : 'application/x-www-form-urlencoded'},
  url:     'http://192.168.0.31/YamahaControl/ctrl',
  body:    '<YAMAHA_AV cmd="PUT"><Main_Zone><Power_Control><Power>Standby</Power></Power_Control></Main_Zone></YAMAHA_AV>'
});
Ob die Angabe der Header notwendig ist weiss ich nicht, könnte auch ohne funktionieren, je nachdem wie das in dem AV-Receiver implementiert ist.

bzw als CCU.IO-Script dass auf den Datenpunkt 100002 reagiert (und mit Button/Icon State Widget gesteuert werden kann):

Code: Alles auswählen

setObject(100002, { 
  Name: "YAM_AVR_Standby", 
  TypeName: "VARDP",
  _persistent: true
}); 

subscribe({id:100002}, function () {
  request.post({
    headers: {'content-type' : 'application/x-www-form-urlencoded'},
    url:     'http://192.168.0.31/YamahaControl/ctrl',
    body:    '<YAMAHA_AV cmd="PUT"><Main_Zone><Power_Control><Power>Standby</Power></Power_Control></Main_Zone></YAMAHA_AV>'
  });
});

belze262
Beiträge: 46
Registriert: 17.10.2013, 11:03

Re: CCU.IO Script - Yamaha AVR steuern

Beitrag von belze262 » 18.04.2014, 19:03

Hallo HQ,

der Code hat leider nicht funktioniert, aber ich habs jetzt so hinbekommen:

var http = require('http');

var poweron = '<YAMAHA_AV cmd="PUT"><Main_Zone><Power_Control><Power>On</Power></Power_Control></Main_Zone></YAMAHA_AV>';

var options = {
host: '192.168.0.31',
port: 80,
path: '/YamahaRemoteControl/ctrl',
method: 'POST',
headers: {
"Content-Type" : 'text/xml'
}
};

var reqClient = http.request(options);

reqClient.write(poweron);
reqClient.end();

Aber das Ganze dann eingebunden in:

setObject(100002, { Name: "YAM_AVR_Standby", TypeName: "VARDP", persistent: true});

subscribe({id:100002}, function () {

...

};

funktioniert so auch nicht, wieso auch immer...
das heißt, manchmal kommt der Befehl doch durch, aber dann auch nur mit gefühlt ein paar Minuten Verspätung...
EDIT: hab grad festgestellt, dass der Befehl automatisch beim Neustart der Scriptengine ausgeführt wird und nicht durch den Button...

Trotzdem vielen Dank für eure Bemühungen...

Gruß Michael

hobbyquaker
Beiträge: 3224
Registriert: 12.07.2009, 20:01
Kontaktdaten:

Re: CCU.IO Script - Yamaha AVR steuern

Beitrag von hobbyquaker » 18.04.2014, 20:45

probier mal das:

Code: Alles auswählen

setObject(100002, { 
  Name: "YAM_AVR_Standby", 
  TypeName: "VARDP",
  _persistent: true
}); 

subscribe({id:100002}, function () {
  request.post({
    headers: {'content-type' : 'text/xml'},
    url:     'http://192.168.0.31/YamahaControl/ctrl',
    body:    '<YAMAHA_AV cmd="PUT"><Main_Zone><Power_Control><Power>Standby</Power></Power_Control></Main_Zone></YAMAHA_AV>'
  });
});

belze262
Beiträge: 46
Registriert: 17.10.2013, 11:03

Re: CCU.IO Script - Yamaha AVR steuern

Beitrag von belze262 » 26.04.2014, 00:12

Hallo,

hier mal mein Ergebnis um den Yami einzuschalten, die Lautstärke einzustellen und einen Radiosender zu wählen.
Leider ist der Yami ziehmlich zickig und verlangt den kompletten Header...

Falls jemand Vorschläge zur Optimierung des Codes hat, gerne - ich bin noch absoluter Anfänger und noch am lernen...


setObject(100003, { Name: "YAM_AVR_Radio", TypeName: "VARDP", _persistent: true});
subscribe({id:100003}, function () {

var net = require('net');
var async = require("async");
var ysocket;
var data_request;
var data;

var poweron = '<YAMAHA_AV cmd="PUT"><Main_Zone><Power_Control><Power>On</Power></Power_Control></Main_Zone></YAMAHA_AV>';
var volume = '<YAMAHA_AV cmd="PUT"><Main_Zone><Volume><Lvl><Val>-450</Val><Exp>1</Exp><Unit>dB</Unit></Lvl></Volume></Main_Zone></YAMAHA_AV>';
var netradio = '<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>NET RADIO</Input_Sel></Input></Main_Zone></YAMAHA_AV>';
var sel = '<YAMAHA_AV cmd="PUT"><NET_RADIO><List_Control><Cursor>Sel</Cursor></List_Control></NET_RADIO></YAMAHA_AV>';


async.series([

function(callback) {
setTimeout(function() {

data = poweron;
befehl (data);
callback();
}, 0);
},

function(callback) {
setTimeout(function() {

data = volume;
befehl (data);
callback();
}, 5000);
},

function(callback) {
setTimeout(function() {

data = netradio;
befehl (data);
callback();
}, 5000);
},

function(callback) {
setTimeout(function() {

data = sel;
befehl (data);
callback();
}, 5000);
},


function(callback) {
setTimeout(function() {

data = sel;
befehl (data);
callback();
}, 2000)
}

]);

function befehl() {

data_request = "POST /YamahaRemoteControl/ctrl HTTP/1.1\r\n"+
"Content-Length: "+data.length+"\r\n"+
"Accept-Encoding: gzip, deflate\r\n"+
"Content-Type: text/xml; charset=UTF-8\r\n"+
"Accept-Language: de-de\r\n"+
"Accept: */*\r\n"+
"Connection: keep-alive\r\n"+
"Pragma: no-cache\r\n"+
"Cache-Control: no-cache\r\n\r\n"+
data;
ysocket = net.connect({port: 80, host: '192.168.0.31'});

ysocket.write(data_request);

console.log(data);

ysocket.end();

};
});

Gruß Michael

mrMuppet
Beiträge: 217
Registriert: 22.04.2011, 20:29

Re: CCU.IO Script - Yamaha AVR steuern

Beitrag von mrMuppet » 27.06.2014, 20:38

Könnt ihr das wohl noch in den richtigen Adapter implementieren? Das wäre echt super!!!

Danke.
58 Kanäle in 44 Geräten
Wand-Tablet mit Mediola
Yamaha AVR, Dreambox, Squeezebox, FreeNAS, Fritzbox, SeduLight, FireTV, Chromecast

thorque
Beiträge: 115
Registriert: 08.01.2014, 22:54

Re: CCU.IO Script - Yamaha AVR steuern

Beitrag von thorque » 30.06.2014, 21:11

Hallo zusammen,

der Yamaha Adapter ist nicht dafür vorgesehen, den receiver vollständig zu kontrollieren und zu steuern. Allerdings könnte man überlegen, ob man die Mini-API dafür aufbohrt, um Befehle über ein Skript übergeben zu können.

Ansonsten ufert das bei der verfügbaren Anzahl von Befehlen recht schnell aus. Was wären denn benötigte Use-Cases?

VG
Thorsten

PS: Weswegen ist der Adapter nicht ausgereift? Welche Probleme gibt es konkret?

mrMuppet
Beiträge: 217
Registriert: 22.04.2011, 20:29

Re: CCU.IO Script - Yamaha AVR steuern

Beitrag von mrMuppet » 10.07.2014, 22:49

Ich würde gerne erfassen können ob der AVR auf Standby steht oder nicht, diesen Zustand ggf ändern können und die Pure-Direkt-Tasten auslösen können.
58 Kanäle in 44 Geräten
Wand-Tablet mit Mediola
Yamaha AVR, Dreambox, Squeezebox, FreeNAS, Fritzbox, SeduLight, FireTV, Chromecast

Antworten

Zurück zu „CCU.IO“