Closed sascharuckzuck closed 4 years ago
lfeAmount gibt es seit 1.6.0 falls das nicht gemeint ist, kannst du mir bitte sagen welchen Befehl du genau meinst. Siehe https://github.com/foxriver76/ioBroker.denon/blob/master/docs/AVR-Control-Protocol.pdf
Findet sich jedenfalls bei aktuellen Denon AVRs unter Einstellungen -->Lautsprecher -->Manuell***-->Bass. werde ansonsten nochmal heute Abend schauen wenn ich Zuhause bin.
Du kannst mithilfe der PDF und dem State settings.expertCommand
testen, welcher Befehl das tut was du möchtest. Habe leider ein etwas älteres Modell.
Wenn du weißt, welcher Befehl es ist, kann ich ihn einbauen.
werde ich heute Abend mal probieren
Bist du dazu gekommen? ;-)
Moin, ja hatte geguckt, aber nichts gefunden. sehr seltsam
Welches Modell hast du denn? Evtl. brauchen wir eine andere/neuere Protokollbeschreibung.
den AVR 1600H hatte auch schon nach gesucht...
Ich finde auch nur den Befehl LFE **
, dieser ist bereits im Adapter enthalten.
@sascharuckzuck Wenn immer noch Interesse besteht und dein AVR über das WebInterface steuerbar ist, kann ich dir ein kurzes Code Beispiel geben wie du es per http-request setzen und auslesen kannst.
@mllrmnn Vielen Dank, ja Interesse besteht. Mal schauen was ich dann daraus machen kann :)
@sascharuckzuck
here are the 2 scripts to get and set LFE+Main Mode:
getLFE_MAIN.txt setLFE_MAIN.txt
Sorry if some parts of the code are a bit "overshoot" that is because I obtain a lot more infos over http-requests then the LFE+Main status but I have shortened the scripts for you.
note that you have to change the following in both scripts:
<ip-adress>
with your AVR IP-Adress <ip-adress>
:10443/ajax/speakers/getconfig?type=7&=1675034364280 ID_AV_InfosFromParser_1
and parser_Adapter_ID
based on your parser configurationthe result looks like that in the objects tab:
@mllrmnn vielen lieben Dank. Allerdings stehe ich auf dem Schlauch, was ich bei " change ID_AV_InfosFromParser_1 and parser_Adapter_ID based on your parser configuration" ändern soll.
Gerne, hätte ich vllt. erwähnen sollen. Das sind 2 Variablen im get Skript. Bei der einen (parser_Adapter_ID) definiert man den alive Status von der entsprechenden parser Instanz und bei der anderen den Output vom parser adapter
Hintergrund der Angabe der parser Instanz ist der, dass in dieser Instanz nur urls vom AVR geparsed werden und die Instanz deaktiviert wird wenn der AVR aus ist.
Moin, Ich bin echt zu Lost für JavaScript.
/var xml2js = require('xml2js'); var options = { explicitArray: false, mergeAttrs: true }; var parser = new xml2js.Parser(options);
var Power = "denon.0.settings.powerSystem" // == "denon.0.settings.powerSystem" i have a dict with multiple IDs in an global script. Easy way to get the IDs from an Device. var Vorordner = 'javascript.0.Allgemeine_Variablen.AV_Receiver.MARANTZ_Cinema_50.'
var parser_Adapter_ID='system.adapter.parser.1.alive' var ID_AV_InfosFromParser_1 = "parser.1.Marantz_Cinema_50_Infos_1" var ID_AV_InfoXML_1 = Vorordner + 'Infos.InfosXML_1' var ID_AV_InfoJSON_1 = Vorordner + 'Infos.InfosJSON_1' var ID_AV_InfoJSON_string_1 = Vorordner + 'Infos.InfosJSON_String_1' var ID_Vorordner_Audio = Vorordner + 'Infos.Audio.' var ID_Vorordner_Video = Vorordner + 'Infos.Video.'
var StringNotAvailable ='notAvailable'
createState(ID_AV_InfoXML_1, "", {role: 'state',"type": "mixed","unit": "","def": "","read": true,"write": true,name: 'AV Infos in XML Format'}) createState(ID_AV_InfoJSON_1, "", {role: 'state',"type": "mixed","unit": "","def": "","read": true,"write": true,name: 'AV Infos in JSON Format'}) createState(ID_AV_InfoJSON_string_1, "", {role: 'state',"type": "mixed","unit": "","def": "","read": true,"write": true,name: 'AV Infos in JSON Format'}
on({id: Power, change: 'any'}, function (obj) { var value = obj.state.val; if (value === true){ setState parser.1.Denon,true }else{ setState parser.1.Denon,false } });
// für ID_AV_InfosFromParser_1 https://192.168.0.19:10443/ajax/speakers/get_config?type=7&_=1675034364280 on({id: ID_AV_InfosFromParser_1, change: 'any'}, function (obj) { var value = obj.state.val;
xml = String(value)
parser.parseString(xml, function(err,result){
//Extract the value from the data element
extractedData = result;
setState(ID_AV_InfoJSON_1,extractedData)
setState(ID_AV_InfoJSON_string_1,JSON.stringify(extractedData))
})
setState(ID_AV_InfoXML_1,value)
});
createState(ID_Vorordner_Audio + 'Raw.Bass.SubwooferOutput', '999', {name: 'Trennfrequenz LFE', role: 'state',"type": "mixed","unit": "","def": '999',"read": true,"write": true}) createState(ID_Vorordner_Audio + 'Raw.Bass.LPFforLFE', 0, {name: 'Trennfrequenz LFE', role: 'state',"type": "mixed","unit": "Hz","def": 0,"read": true,"write": true}) createState(ID_Vorordner_Audio + 'Bass.Trennfrequenz', 0, {name: 'Trennfrequenz LFE', role: 'state',"type": "number","unit": "Hz","def": 0,"read": true,"write": true}) createState(ID_Vorordner_Audio + 'Bass.SubwooferModus', 99, {name: 'LFE or LFE+Main', role: 'state',"type": "number","unit": "","def": 99,"read": true,"write": true}) createState(ID_Vorordner_Audio + 'Bass.SubwooferModusPretty', "", {name: 'LFE or LFE+Main', role: 'state',"type": "mixed","unit": "","def": "","read": true,"write": true})
on({id: ID_AV_InfoJSON_1, change: 'ne'}, function (obj) { var value_string = JSON.stringify(obj.state.val); var value = obj.state.val; var oldValue = obj.oldState.val;
var Infos_AV_JSON_1 = value var Infos_Bass = Infos_AV_JSON_1["Bass"]
// SetAV_InfosRaw(ID_Vorordner_Video,Infos_Video,"Resolution") //Wird über AppSniff ausgelesen
SetAV_InfosRawAddFolder(ID_Vorordner_Audio,Infos_Bass,"SubwooferOutput",'Bass.')
SetAV_InfosRawAddFolder(ID_Vorordner_Audio,Infos_Bass,"LPFforLFE",'Bass.')
});
on({id: ID_Vorordner_Audio + 'Raw.Bass.LPFforLFE' , change: "any"}, function (obj) { var value = obj.state.val;
setState(ID_Vorordner_Audio + 'Bass.Trennfrequenz',parseInt(value))
});
on({id: ID_Vorordner_Audio + 'Raw.Bass.SubwooferOutput' , change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; var Verursacher = obj.id if(value == '1' || value == 1){ SubModeToSet = parseInt(value) SubModeToSetPretty = 'LFE'
}else if(value == '2' || value == 2){
SubModeToSet = parseInt(value)
SubModeToSetPretty = 'LFE+Main'
}else{
SubModeToSet = StringNotAvailable
SubModeToSetPretty = StringNotAvailable
}
setState(ID_Vorordner_Audio + 'Bass.SubwooferModus',SubModeToSet)
setState(ID_Vorordner_Audio + 'Bass.SubwooferModusPretty',SubModeToSetPretty)
});
function SetAV_InfosRawAddFolder(ID_Vorordner_Audio,Infos_Audio,NameOFInfo,AdditionalFolder){ log(InfosAudio[NameOFInfo]['']) log(ID_Vorordner_Audio + 'Raw.' + AdditionalFolder + NameOFInfo) try { setState(ID_Vorordner_Audio + 'Raw.' + AdditionalFolder + NameOFInfo,String(InfosAudio[NameOFInfo][''])) if(InfosAudio[NameOFInfo][''] == undefined){ setState(ID_Vorordner_Audio + 'Raw.' + AdditionalFolder + NameOFInfo,StringNotAvailable) } } catch (error) { setState(ID_Vorordner_Audio + 'Raw.' + AdditionalFolder + NameOFInfo,StringNotAvailable) } }
Wahrscheinlich ist das falsch... kommt auch mit der Error Meldung: javascript.0 (471) script.js.common.Wohnzimmer.Geräte.getLFE_MAIN compile failed: at script.js.common.Wohnzimmer.Geräte.getLFE_MAIN:1
Wäre aber auch nicht schlimm wenn ich es nicht zum laufen kriege. Bin schon happy darüber, dass ich die Einstellung mittels http-Request URL setzen kann und per Blockly entsprechend automatisieren kann.
Backslash ganz am Anfang weg... Copy Paste Fehler von mir... createState(ID_AV_InfoJSON_string_1, "", {role: 'state',"type": "mixed","unit": "","def": "","read": true,"write": true,name: 'AV Infos in JSON Format'}
da gehört auch noch ne runde klammer ans ende. Ich hab die file im ursprünglichen post geupdated.
Moin, wäre das hinzufügen des Datenpunktes LFE/Main bzw nur LFE in den Settings möglich. Ich möchte nämlich ein Blockly erstellen, wenn ein Mehrkanal Ton vorhanden ist, dass sich dann auf LFE Only einstellt.
MfG