Nach meinem letzten Stand geht es leider auch nur so … also über den Befehl per Skript
NEWS
Latest posts made by spielberger32
-
RE: [Vorlage] Denon HEOS Script
-
RE: Tastendruck von HM-IP Fernbedienung nicht registriert
Ach es geht tatsächlich nicht ohne? :shock: Schade, dass es so kompliziert sein muss.
Danke für deine ausführliche Antwort
-
Tastendruck von HM-IP Fernbedienung nicht registriert
Hallo zusammen,
ich habe eine neue Homematic IP Fernbedienung an der CCU2 angemeldet. Dort funktioniert sie einwandfrei und wird auch im RPC-Adapter als Objekt mit allen Funktionen angezeigt. Allerdings wird für PRESS.SHORT und PRESS.LONG kein Status aktualisiert, wenn die entsprechenden Tasten gedrückt werden. Andere Parameter der Fernbedienung wie z.B. RSSI_DEVICE dagegen schon.
Fehlt eine Einstellung?
Vielen Dank für eure Hilfe!
-
RE: [Vorlage] Denon HEOS Script
Probier mal set_group?pid=-123456789,-223456789,-323456789 in die die Command-Option zu schreiben. Bei mir macht das folgendes Skript:
setState("javascript.0.heos.192_168_XXX_XXX.command", 'set_group?pid=-123456789,-223456789,-323456789');
Für -123456789 etc natürlich jeweils die PID des Lautsprechers angeben. ACHTUNG: immer mit einem eventuellen MINUS DAVOR.
-
RE: Steuerung günstiges Audio Multiroom-System (Silvercrest)
Ja auch bei mir ist der Test nicht aufgegangen. Zu viele Kleinigkeiten, die ständig nicht funktionieren.
Habe dazu auch ein Video gemacht, weil es trotzdem ein gutes Beispiel ist: https://youtu.be/7BlBhHJG6_U
-
RE: [Frage] Denon Heos (Multiroom WIFI Speaker)
Ein Adapter wäre super cool, aber bis es soweit ist, ist ein recht einfacher Work-Around "mit vorhandenen Tools" aktuell eine TCP-Node via NodeRed, da die Heos-Geräte ja per Telnet-Befehl ansteuerbar sind. Diese Node(s) überträgt bei mir aktuell die Einstellungen für Volume und Play_State sobald sie im ioBroker geändert werden (jeder Heos ist bei mir als Objekt angelegt). Es gibt zwar keinen auslesbaren "Rückkanal", der mir den Status des Lautsprechers anzeigt, aber für besagte rudimentäre Optionen erstmal ausreichend.
Ich habe für die "außergewöhnlichen" Befehle (also ein command-Item in meinem Heos-Objekt angelegt, in das einfach der gesamte Befehl geschickt wird. NodeRed schickt ihn dann weiter. Komplexere Befehle können so von JavaScripten aus abgerufen werden.
Was man wissen muss ist die IP und die Player-ID. Letztere ist recht simpel abrufbar über den Telnet-Befehl get_players via Putty, denn dort "antwortet" der Heos auch lesbar. Dann kann man die Befehle wie in der Denon-Steuerprotokoll-Dokumentation ( http://rn.dmglobal.com/euheos/HEOS_CLI_ … cation.pdf ) beschrieben verschicken.
Ein Befehl sieht so aus:
> heos://player/set_play_state?pid=12345678&state=play_state
Hoffe es hilft dem ein oder anderen
-
RE: Steuerung günstiges Audio Multiroom-System (Silvercrest)
Wie versprochen hier ein Beispiel Skript mit dem das Gerät eingeschaltet und ein Radiosender ausgewählt wird. Notwendig ist die Script-Bibliothek xml2js um die Antworten der Geräte auswerten zu könenn. Ihr dürft gerne lachen was meine JavaScript-Kenntnisse angeht … hoch professionell ist das nicht
Was passiert ist folgendes:
- das Radio mit der festen IP wird angefragt ob es läuft und reagiert. Leider nötig, weil die Erreichbarkeit im Netzwerk einer der größten Bugs der günstigen Lautsprecher sind. Manchmal sind trotz Standby-Funktion einfach offline.
WENN ERREICHBAR:
-
SET/netRemote.sys.power Gerät wird eingeschaltet
-
SET/netRemote.sys.mode Modus wird auf Radio gesetzt
DANN 2 SEKUNDEN WARTEN BIS DER LAUTSPRECHER DIESE SCHRITTE AUSGEFÜHRT HAT
- CREATE_SESSION Eine Session-ID holen, damit durch die Optionen navigiert werden kann
DANN 2 SEKUNDEN WARTEN BIS DER LAUTSPRECHER DIESE SCHRITTE AUSGEFÜHRT HAT UND DIE ID GELSEN WURDE
-
SET/netRemote.nav.state "Virtuelle" Menü-Navigation mit Session-ID einschalten
-
SET/netRemote.nav.action.selectPreset Das entsprechende Radio-Preset wählen
DAS SCRIPT WIRD GESTOPPT
var request = require('request'); var parseString = require('xml2js').parseString; var ip ='192.168.XXX.XXX'; var pin ='1234'; var radiostation ='3'; var volume ='3'; var link; var sessionID; //Check connection, if true activate fs_command function request( { method: 'GET' , uri: 'http://' + ip , timeout: 1500 } , function (error, response, body) { // connection check }).on('error', function(error) { console.log(error); }).on('response', function(response) { if (response.statusCode == "200") { console.log('Status Code ' + response.statusCode + ': sending command'); timeout = setTimeout(function () {fs_power_mode(); }, 1000); } } ); function fs_power_mode(){ link = 'http://' + ip + '/fsapi/SET/netRemote.sys.power' + "?pin=" + pin + '&value=1'; log(link); request(link, function (error, response, body) { var xml, result; parseString(body, function (err, result) { xml = JSON.stringify(result); //log("XML Objekt: " + xml); xml=JSON.parse(xml); log (xml.fsapiResponse.status); }); link = 'http://' + ip + '/fsapi/SET/netRemote.sys.mode' + "?pin=" + pin + '&value=0'; log(link); request(link, function (error, response, body) { var xml, result; parseString(body, function (err, result) { xml = JSON.stringify(result); //log("XML Objekt: " + xml); xml=JSON.parse(xml); log ('test '+xml.fsapiResponse.status); timeout = setTimeout(function () {fs_session(); }, 2000); }); }); }); } function fs_session(){ link = "http://" + ip + '/fsapi/CREATE_SESSION' + "?pin=" + pin; //log(link); request(link, function (error, response, body) { var xml, result; parseString(body, function (err, result) { xml = JSON.stringify(result); //log("XML Objekt: " + xml); xml=JSON.parse(xml); //log (xml.fsapiResponse.sessionId); log (link + ' ' + xml.fsapiResponse.status); sessionID = xml.fsapiResponse.sessionId; log ('Neue Session: ' + sessionID); timeout = setTimeout(function () {fs_navigate(); }, 2000); }); }); } function fs_navigate(){ link = 'http://' + ip + '/fsapi/SET/netRemote.nav.state' + "?pin=" + pin + '&sid=' + sessionID + '&value=1'; log(link); request(link, function (error, response, body) { var xml, result; parseString(body, function (err, result) { xml = JSON.stringify(result); xml=JSON.parse(xml); log (xml.fsapiResponse.status); }); link = 'http://' + ip + '/fsapi/SET/netRemote.nav.action.selectPreset' + "?pin=" + pin + '&value=' + radiostation; log(link); request(link, function (error, response, body) { var xml, result; parseString(body, function (err, result) { xml = JSON.stringify(result); xml=JSON.parse(xml); log (xml.fsapiResponse.status); }); }); }); } stopScript();
Die meisten einfachen Funktionen Power, Lautstärke etc gehen ohne Session-ID. Alles was mit Navigation zu tun hat, also Sender setzen, Gruppieren etc. muss mit einer Session-ID erfolgen.
Im Skript oben wird die HTTP-Antwort des Gerätes geloggt. Das kostet oft unnötig Ressourcen im Skript. Bei einfachen Dingen wie Lautstärke setzen habe ich die Funktion raus gelassen. Wie im nächsten Beispiel:
Beispiel 2: Lautstärke aller Lautsprecher auf Standard
Was passiert?
-
4 Lautsprecher und deren Lautstärke werden definiert
-
SET/netRemote.sys.audio.volume Lautstärke wird gesetzt
var request = require('request'); var parseString = require('xml2js').parseString; var ip1 ='192.168.XXX.1'; var volume1 ='6'; var ip2 ='192.168.XXX.2'; var volume2 ='6'; var ip3 ='192.168.XXX.3'; var volume3 ='10'; var ip4 ='192.168.XXX.4'; var volume4 ='7'; var pin ='1234'; var link; link = 'http://' + ip1 + '/fsapi/SET/netRemote.sys.audio.volume' + "?pin=" + pin + '&value=' + volume1; log(link); request(link, function (error, response, body) { link = 'http://' + ip2 + '/fsapi/SET/netRemote.sys.audio.volume' + "?pin=" + pin + '&value=' + volume2; log(link); request(link, function (error, response, body) { link = 'http://' + ip3 + '/fsapi/SET/netRemote.sys.audio.volume' + "?pin=" + pin + '&value=' + volume3; log(link); request(link, function (error, response, body) { link = 'http://' + ip4 + '/fsapi/SET/netRemote.sys.audio.volume' + "?pin=" + pin + '&value=' + volume4; log(link); request(link, function (error, response, body) { }); }); }); }); log('Laustärke gesetzt'); stopScript();
Vielleicht ist das hilfreich für euch. Wundert euch beim Ausprobieren nicht: die Steuerung der Lautsprecher ist offenbar VOLLER BUGS. Ständig funktioniert irgendwas nicht - vollkommen unabhängig ob via IOS-App, Android-App oder über direkte HTTP-Befehle.
Die HTTP-Request-Befehle an die Lautsprecher sehen also immer etwa so aus:
http://192.168.XXX.XXX/fsapi/SET/netRem … 34&value=5
Das kann man in jedem Browser im Netzwerk testen. Eine Liste der meisten Befehle gibt's hier: https://github.com/flammy/fsapi/blob/master/FSAPI.md
-
RE: Steuerung günstiges Audio Multiroom-System (Silvercrest)
Also ich habe es mit meinen rudimentären JavaScript-Skills geschafft eine kleine Steuerung für meine Radios zu bauen. Ich kann über den ioBroker, also per viz-Oberfläche oder Alexa-Befehle aktuell die Radios mit folgenden Eigenschaften steuern:
-
Ein/Ausschalten
-
Gruppieren
-
Radiosender auswählen
-
Bestimmte Lautstärke setzen
Generell ist es bei mir konzeptioniert wie "Szenen" die ich als Befehlsabfolge in einem JavaScript gespeichert habe: z.B. "Standard Lautstärke", "Party Modus", "Morgen Radio" … etc ... Es werden aber "nur" meherere HTTP-Request-Befehle mit festen IP's gesendet. Es gibt keine Kommunikation zurück und erst recht keinen festen Adapter - Zustände werden nicht abgerufen und gespeichert. Das ist immerhin ein Anfang und ich kann es nutzen :oops:
Beispiele folgen
-
-
RE: SayIt mp3-Pfad im JavaScript
Toll das funktioniert!
Herzlichen Dank für die Antwort!!!!!!
-
Steuerung günstiges Audio Multiroom-System (Silvercrest)
Hallo zusammen,
aus Neugier habe ich mir zwei Lautsprecher des sehr günstigen "Silvercrest Multiroom Audio Systems" bei Lidl bestellt (Infos hier: http://www.silvercrest-multiroom.de/). Die Klangqualität ist durchaus akzeptabel, verglichen mit Sonos-Preisen - der Funktionsumfang ist ebenfalls absolut ausreichend. Leider ist die Bedienbarkeit der Smartphone-App aus der Kategorie "PAIN IN THE A**" . Dabei sind die regelmäßig benötigten Grundfunktionen des Radios eigentlich sehr simpel: Ein/Ausschalten, Lautstärke, Quellenauswahl.
Nach Recherchen (auch hier im Forum) habe ich herausgefunden: Die Software der Radios ist ganz eindeutig die des "Frontier Silicon"-Chipset. Das kleine Windows-Programm FSRadio-Remote kann die Geräte problemlos ansteuern (https://sourceforge.net/projects/fs-remote/). Für die Plattformen openHab, PHP sowie .NET gibt es offenbar bereits eine einsetzbare API.
https://github.com/openhab/openhab1-add … liconradio
https://github.com/flammy/fsapi
Leider bin ich nicht firm in Sachen HTTP Requests und Adapter-Entwicklung, ich kann lediglich etwas einfaches JavaScript. Laienhaft scheinen aber die Grundlagen für zumindest einfache JS-basierte Befehle (z.B. Gerät einschalten mit Webradio-Stream) aus ioBroker heraus aber portierbar.
Vielleicht hat jemand die Nerven mir da jemand unter die Arme zu greifen für JavaScripts zu simplen Aufgaben?! :oops:
Eine Adapter-Entwicklung wäre natürlich toll, aber ich verstehe natürlich wie aufwendig das ist. :shock: Sollte sowas schon in Arbeit sein, würde ich mich als Tester anbieten.
Danke euch!