NEWS
Test Adapter iQontrol 2.0.x Vis (Entwicklungs-Thread)
-
Hi Leute,
ich möchte gerne meine Sonos Komponenten mit iQontrol steuern.
Ich verwende die sonos http api als Kommunikation zwischen iobroker und Sonos.Da gibt es z.B. folgende Befehle:
http://192.168.30.90:5005/EZKUGAWC/pause
http://192.168.30.90:5005/EZKUGAWC/next
http://192.168.30.90:5005/EZKUGAWC/previous
http://192.168.30.90:5005/EZKUGAWC/volume/15
http://192.168.30.90:5005/EZKUGAWC/volume/+1
http://192.168.30.90:5005/EZKUGAWC/play
http://192.168.30.90:5005/EZKUGAWC/playpause
http://192.168.30.90:5005/EZKUGAWC/mute
http://192.168.30.90:5005/EZKUGAWC/unmuteusw.
Wenn ich diese Befehle in die entsprechenden Felder des MediaPlayer Geräts eingebe, dann funktioniert das leider nicht.
Hat jemand eine Idee wo der Fehler liegt, oder wie ich diese Befehle in iQontrol reinbekomme um zu steuern ?Beste Grüße
-
@qlink sagte in Test Adapter iQontrol 1.5.x:
Hi Leute,
ich möchte gerne meine Sonos Komponenten mit iQontrol steuern.
Ich verwende die sonos http api als Kommunikation zwischen iobroker und Sonos.Da gibt es z.B. folgende Befehle:
http://192.168.30.90:5005/EZKUGAWC/pause
http://192.168.30.90:5005/EZKUGAWC/next
http://192.168.30.90:5005/EZKUGAWC/previous
http://192.168.30.90:5005/EZKUGAWC/volume/15
http://192.168.30.90:5005/EZKUGAWC/volume/+1
http://192.168.30.90:5005/EZKUGAWC/play
http://192.168.30.90:5005/EZKUGAWC/playpause
http://192.168.30.90:5005/EZKUGAWC/mute
http://192.168.30.90:5005/EZKUGAWC/unmuteusw.
Wenn ich diese Befehle in die entsprechenden Felder des MediaPlayer Geräts eingebe, dann funktioniert das leider nicht.
Hat jemand eine Idee wo der Fehler liegt, oder wie ich diese Befehle in iQontrol reinbekomme um zu steuern ?Beste Grüße
Hi,
direkte http-Befehle kann iQontrol nicht absetzen. Gibt es nicht einen Sonos-Adapter, der die Kommunikation mit ioBroker herstellt? Alternativ müsste man Datenpunkte erstellen, die dann über ein Blockly die gewünschten Befehle absetzt - ist aber viel Aufwand, wenn es mehrere Sonos werden... -
Ah okay, danke für die Info.
Schade aber kann man nix machen...Ja es gibt einen Sonos Adapter, aber der hat mir in den letzten Jahren zuviel Nerven und Lebenszeit gekostet.
Eventuell hat sich der ja zwischenzeitlich schon gebessert/stabilisiert, aber ich möchte da nix mehr riskieren... verbrannte Erde und soDie sonos http api funktioniert seit Anfang an 100% zuverlässig und stabil, da verzichte ich dann lieber auf die Steuerungsmöglichkeit per iQontrol und nutze für manuelle Steuerung wie bisher auch die Sonos Android App...
Beste Grüße
-
@da_woody
So sieht es bei mir gerade aus -
GELÖST: Javaskript-Instanz einmal durchstarten
@dslraser komisch, ich erhalte immer den gleichen Fehler, wenn ich das Blockly laufen lasse (das mit der Instanz-Nummer). Ich habe den Adapter garnicht mehr installiert. Unter Objekte (Experten-Ansicht) ist der auch nicht mehr O.o
javascript.0 2021-01-20 20:41:17.423 error (8552) at main (script.js.common.Sonstiges.Adapter-Status:388:5) javascript.0 2021-01-20 20:41:17.422 error (8552) at checkAdapters (script.js.common.Sonstiges.Adapter-Status:291:88) javascript.0 2021-01-20 20:41:17.422 error (8552) at subsequenceFromStartLast (script.js.common.Sonstiges.Adapter-Status:230:22) javascript.0 2021-01-20 20:41:17.422 error (8552) script.js.common.Sonstiges.Adapter-Status: TypeError: Cannot read property 'length' of null javascript.0 2021-01-20 20:41:17.421 error (8552) script.js.common.Sonstiges.Adapter-Status: Cannot get _id of null javascript.0 2021-01-20 20:41:17.420 warn (8552) Object "system.adapter.calendar.0" does not exist javascript.0 2021-01-20 20:41:17.420 error (8552) script.js.common.Sonstiges.Adapter-Status: Cannot get common of null javascript.0 2021-01-20 20:41:17.419 warn (8552) Object "system.adapter.calendar.0" does not exist
-
@Qlink
Ich nutze ebenfalls die Sonos HTTP API.
Lege dir eigene Datenpunkte für die Steuerung an (Logikwert, Rolle = switch), als Beispiele:0_userdata.0.sonos.play 0_userdata.0.sonos.pause
Danach legst du dir ein Skript an und kopierst da folgendes hinein:
on({id:'0_userdata.0.sonos.play', change:'ne', val:true} , function (dp) { controlSonos('play'); setState(dp.id, false); }); on({id:'0_userdata.0.sonos.pause', change:'ne', val:true} , function (dp) { controlSonos('pause'); setState(dp.id, false); }); function controlSonos(control_value){ try { require("request")((['http://192.168.30.90:5005/EZKUGAWC/' + control_value].join(''))).on("error", function (e) {console.error(e);}); } catch (e) { log('Fehler bei Sonos HTTP API Steuerung: ' + e, 'warn'); } }
Die Funktion controlSonos kannst du dann mit beliebigen Befehlen aufrufen.
Im iQontrol packst du beim Mediaplayer deine selbst erstellten Datenpunkte rein und steuerst diese mit true.Probier mal
-
@dslraser said in Test Adapter iQontrol 1.5.x:
@da_woody sagte in Test Adapter iQontrol 1.5.x:
gibts da eine lösung um auch die instanz nummer mit anzuzeigen? so bringt mir das nicht wirklich was...
Ich habe es zum "testen" bei mir mal umgebaut...(kann ich später zur Verfügung stellen, wenn denn alles weiter funktioniert. Ich schaue es mir aber noch ein Weilchen an)
Edit: @da_Woody
ich habe die Testversion hier mit reingelegt
https://forum.iobroker.net/post/562307spinn ich, oder hab ich einen knick im hirn?
steht da. gut.
keine instanznummer. chrome, firefox, handy -
@da_woody
hattest Du mal alle Datenpunkte gelöscht, oder mal einen Adapter aus und wieder angeschaltet ?
Du könntest auch mal in der Funktion Datenpunkte_anlegen dieses false auf true setzen, dann werden alle schon bestehenden Datenpunkte überschrieben.Edit: angelegt in javascript.x oder unter 0_userdata.0 ?
-
@dslraser steht ja richtig drinnen in dem DP! siehe 1. pic von mir...
oder hier
edith:
-
@da_woody
welche html Liste hast Du eigentlich in iQontrol verlinkt ?PS:Starte mal JS-Adapter / iQontrol Adapter einmal neu
-
@da_woody
in deinem edit Foto ist 0_userdata.0 zu sehen und in Deinem iQontrol Screeshot hast Du javascript.0 verlinkt -
@dslraser oh, mann!
-
@da_woody
also geht es ? -
@dslraser jup. durchs neue blockly hat er die jetzt unter 0_userdata.0, waren aber noch unter javascript.0 drinnen. darum, plint, nicht aufgefallen...
-
Danke für die Info. Leider kann ich mit javascript wenig anfangen.
Verstehe ich es richtig, dass ich für alle meine Sonos Player (insgesamt 7), jeweils das von dir gepostet Script benötigen würde und auch jeweils die Steuerungsdatenpunkte ?
Also 7x das Script und 7x die Steuerungsdatenpunkte ?
-
Irgendwie bin ich zu dumm um die URL Parameter zu verstehen.
Ich würde gerne meine Ansicht "Arbeitszimmer" als Standardseite im Firefox hinterlegen:http://192.168.178.3:8082/iqontrol/index.html?renderView=iqontrol.1.Views.Arbeitszimmer
Was ist daran falsch?
Grüße
-
@hc-yami sagte in Test Adapter iQontrol 1.5.x:
Irgendwie bin ich zu dumm um die URL Parameter zu verstehen.
Ich würde gerne meine Ansicht "Arbeitszimmer" als Standardseite im Firefox hinterlegen:http://192.168.178.3:8082/iqontrol/index.html?renderView=iqontrol.1.Views.Arbeitszimmer
Was ist daran falsch?
Grüße
Sollte gehen. Stimmt die Instanz-Nummer (1)? Vielleicht müsste hier die 0 stehen?
-
@qlink
Frage 1: Würde dir ein Blockly Skript mehr weiterhelfen?
Frage 2: Meinst du mit Sonos Player, dass du 7 Sonos Lautsprecher hast und EZKUGAWC ist eine ID davon, die anderen haben eine andere? Oder hast du einen Lautsprecher und 7 verschiedene Mediaplayer Kacheln?Zu deinen Fragen (bezogen darauf, dass du 7 Sonos Lautsprecher mit verschiedenen IDs hast):
- die Datenpunkte bräuchtest du dann pro Instanz, korrekt. Als Beispiel (BBBBBBBB wäre hier der zweite Lautsprecher):
0_userdata.0.sonos.EZKUGAWC.play 0_userdata.0.sonos.EZKUGAWC.pause 0_userdata.0.sonos.BBBBBBBB.play 0_userdata.0.sonos.BBBBBBBB.pause
- Die Trigger bräuchtest du dann natürlich für alle Datenpunkte:
on({id:'0_userdata.0.sonos.EZKUGAWC.play', change:'ne', val:true} , function (dp) { controlSonos('EZKUGAWC', 'play'); setState(dp.id, false); }); on({id:'0_userdata.0.sonos.EZKUGAWC.pause', change:'ne', val:true} , function (dp) { controlSonos('EZKUGAWC', 'pause'); setState(dp.id, false); }); on({id:'0_userdata.0.sonos.BBBBBBBB.play', change:'ne', val:true} , function (dp) { controlSonos('BBBBBBBB', 'play'); setState(dp.id, false); }); on({id:'0_userdata.0.sonos.BBBBBBBB.pause', change:'ne', val:true} , function (dp) { controlSonos('BBBBBBBB', 'pause'); setState(dp.id, false); });
- Die Funktion reicht einmal, solange man ihr als zusätzlichen Parameter die ID mit übergibt:
function controlSonos(control_id, control_value){ try { require("request")((['http://192.168.30.90:5005/' + control_id + '/' + control_value].join(''))).on("error", function (e) {console.error(e);}); } catch (e) { log('Fehler bei Sonos HTTP API Steuerung: ' + e, 'warn'); } }
Bei den Triggern siehst du den Aufruf der Funktion controlSonos mit zwei Parametern:
controlSonos('BBBBBBBB', 'play');
Die ID wäre dann für jeden Lautsprecher beim Datenpunkt und beim Aufruf der Funktion anzupassen.Wie gesagt, alles unter der Annahme, dass du 7 Lautsprecher hast.
Wenn dir Blockly mehr zusagt, können wir auch gerne schauen, dass da zu realisieren. -
@qlink sagte in Test Adapter iQontrol 1.5.x:
Danke für die Info. Leider kann ich mit javascript wenig anfangen.
Verstehe ich es richtig, dass ich für alle meine Sonos Player (insgesamt 7), jeweils das von dir gepostet Script benötigen würde und auch jeweils die Steuerungsdatenpunkte ?
Also 7x das Script und 7x die Steuerungsdatenpunkte ?
Ja, stimmt. Man könnte das Script aber so abwandeln, dass es die Datenpunkte selbst erstellt - bleibt aber ein wenig Handarbeit.
-
@s-bormann das wars. Danke dir!