Seite 1 von 3

Samsung Wireless Audio Multiroom API einbinden

Verfasst: 27. Mai 2020 14:29
von Lani
Hallo Zusammen

Mein Name ist Lani und ich bin aus der Schweiz.
Ich freue mich hier dabei zu sein, verfolge seit längerem bereits das Forum und habe bereits viele nützliche Infos erhalten.
Auch bin ich im internationalen Forum angemeldet und lese auch da fleißig mit.

Zu meiner Konfig:
OH läuft bei mir auf einem alten Laptop mit Linux Lubuntu und ist sehr zuverlässig. :D
Habe eine Shelly's eingebunden (Temperatur und Beleuchtung) und versuche mir einiges beizubringen, bevor ich das ganze Haus mal automatisieren möchte. Arbeite eigentlich ausschliesslich mit .things und .items Files, da ich dies (noch) deutlich übersichtlicher finde als alles in der PaperUI zu machen.
Als Elektroing. habe ich betreffend Verdrahtung und Umsetzung in der Regel keine Probleme, Programmier-Kenntnisse beschränken sich aber auf Java und C und ehrlich gesagt habe ich dies schon lange nicht mehr gemacht. :?
Aber Grundsätzlich bin ich lernfähig und auch interessiert einiges auszuprobieren.

Nun habe ich aber ein Thema, welches ich alleine nicht anpacken kann.
Ich würde gerne meine Lautsprecher von Samsung (https://www.samsung.com/ch/support/model/WAM350/EN/)
gerne in OH einbinden und entsprechend steuern können.
Es gibt keine Binding dazu, aber ich habe bereits folgenden Eintrag bei Github gefunden (https://github.com/bacl/WAM_API_DOC).

Wie es scheint haben schlaue Leute bereits mit dem Thema beschäftigt und eine Schnittstelle gefunden zuhaben.
Diese können für viele Weitere Typen aus dieser Produktfamilie von Samsung verwendet werden.
In der Liste finden sich auch die Cmd die ich gerne verwenden würde.
Z.B mute on/off oder auch vordefinierte Internetradio Programme abzuspielen.

Code: Alles auswählen

84 - SetMute
Description: Mute ON

Example:

curl 'http://ip_speaker:55001/UIC?cmd=%3Cpwron%3Eon%3C/pwron%3E%3Cname%3ESetMute%3C/name%3E%3Cp%20type=%22str%22%20name=%22mute%22%20val=%22on%22/%3E' 
Xml string decoded:

<pwron>on</pwron><name>SetMute</name><p type="str" name="mute" val="on"/>
Spotyfiy Connect wäre auch auf der TODO Liste.

Nun habe ich leider keinen Ahnung wie ich eine solche Schnittstelle verwenden bzw. implementieren muss. :?:
Hat hier jemand so etwas bereits gemacht und könnte mir sagen was ich zu tun habe oder kann mit mit einer Website(How-To) weiterhelfen?

Falls jemand etwas beitragen könnte wäre ich sehr dankbar.
sonnige Grüsse
Lani

Re: Samsung Multiroom Lautsprecher WAM350 einbinden

Verfasst: 27. Mai 2020 15:47
von udo1toni
Grundsätzlich ist ja viel über die Rule Engine hinzubekommen, aber das wird vermutlich haarig werden. Wobei Mute als "Test" schon mal nicht schlecht wäre, dann kannst Du abschätzen, wie viel Aufwand weitere Kommandos machen werden.
Du brauchst dazu das http Binding. http kommt ohne weitere Konfiguration aus, was schon mal gut ist :), allerdings ist es ein v1 Binding, was zum einen bedeutet, dass es keine Things gibt (gut... ;) ) zum anderen bedeutet es aber auch, dass irgendwann demnächst ein http v2 Binding kommen wird, welches 100% sicher sehr viel anders zu konfigurieren ist. Aber egal... ;)
Weiterhin kommen alle Daten als xml an, das bedeutet, die xpath-Transformation wäre auch sinnvoll.

Du benötigst nun pro "Funktion" nur ein Item, für Mute z.B. so:

Code: Alles auswählen

Switch WAM350_1_Mute "Mute ist [%s]" { http="> [ON:GET:http://ip_speaker:55001/UIC?cmd=%3Cpwron%3Eon%3C/pwron%3E%3Cname%3ESetMute%3C/name%3E%3Cp%20type=%22str%22%20name=%22mute%22%20val=%22on%22/%3E] > [OFF:GET:http://ip_speaker:55001/UIC?cmd=%3Cpwron%3Eon%3C/pwron%3E%3Cname%3ESetMute%3C/name%3E%3Cp%20type=%22str%22%20name=%22mute%22%20val=%22off%22/%3E] <[http://ip_speaker:55001/UIC?cmd=%3Cname%3EGetMute%3C/name%3E:30000:XPATH(/UIC/response/mute)]" }
Wobei leider ausgerechnet bei mute die Antwort nicht dokumentiert ist. Du kannst aber einfach die Adresse im Browser eingeben und Dir das Ergebnis anschauen :) Ich habe das Ergebnis mal "geraten", kann also sein, dass die Rückmeldung nicht korrekt funktioniert.

ip_speaker muss natürlich mit der korrekten IP ersetzt werden ;)

Anhand des Beispiels ist aber auch eines schon klar: diese API mag zwar durchdacht sein, ist aber sicherlich nicht dazu gedacht, so konfiguriert zu werden. Das Ding schreit nach einem eigenen Binding :)

Re: Samsung Wireless Audio Multiroom API einbinden

Verfasst: 27. Mai 2020 16:15
von Lani
Hallo Udo1toni

Vielen Dank für die rasche Antwort.

Habs gleich versucht....uuuuund es hat geklapt!!!
Du bist ein Genie!
Der Lautsprecher wurde gemutet und das war die Antwort
MuteStatus1.0192.168.1.60publicon

Also scheint es Grundsätzlich zu klappen... aber was genau müsste ich machen und wie zum Teufel hast du das so schnell verstanden :?

Habe das Item erstellt und versucht über HABPanel das Item zu schalten.
Hat aber leider nicht geklappt.
Was genau müsste ich denn für Items anlagen, ich scheue wirklich keine Arbeit, wäre wirklich cool wenn das klappen würde.
Wenn ich das Item über einen Switch mute und unmute schalten kann hätte ich eine gute Vorlage um mal die anderen Cmd zu probieren.

Re: Samsung Wireless Audio Multiroom API einbinden

Verfasst: 27. Mai 2020 17:18
von Lani
:roll: Gerade erst bemerkt, dass du mir das Item nur für die Abfrage erstellt hast...und das eigentliche cmd noch fehlt :lol: War im Test-Fieber..
Hirn einschalten würde helfen :oops:

Wie müsste ich das Item vollständig deklarieren, damit cmd auch ausgeführt wird?
Im schlimmsten Fall können es auch 2 einzelne Items sein, für mute und unmute.. Hauptsache es funktioniert.

Oder muss ich für jeden Befehl eine Rule erstellen?

Re: Samsung Wireless Audio Multiroom API einbinden

Verfasst: 28. Mai 2020 11:18
von udo1toni
Nein, eigentlich sollte das Item so das Muting aktivieren und deaktivieren können. Außerdem sollte es auch eine Rückmeldung verarbeiten können, wobei das halt nur geraten war, also auch schief gehen kann.
Ich schreibe das Item mal etwas anders auf:

Code: Alles auswählen

Switch WAM350_1_Mute "Mute ist [%s]" { http="
                                             > [ ON:GET:http://ip_speaker:55001/UIC?cmd=%3Cpwron%3Eon%3C/pwron%3E%3Cname%3ESetMute%3C/name%3E%3Cp%20type=%22str%22%20name=%22mute%22%20val=%22on%22/%3E] 
                                             > [OFF:GET:http://ip_speaker:55001/UIC?cmd=%3Cpwron%3Eon%3C/pwron%3E%3Cname%3ESetMute%3C/name%3E%3Cp%20type=%22str%22%20name=%22mute%22%20val=%22off%22/%3E] 
                                             < [http://ip_speaker:55001/UIC?cmd=%3Cname%3EGetMute%3C/name%3E:30000:XPATH(/UIC/response/mute)]" }
So kannst Du eher erkennen, was da passiert.
Der erste Teil ist der ausgehende Befehl, für den Fall, dass ON geschaltet wird.
Der zweite Teil ist der ausgehende Befehl, für den Fall, dass OFF geschaltet wird.
Der dritte Teil ist die Rückmeldung.
Teil eins und zwei habe ich 1:1 aus der verlinkten Anleitung übernommen.
Teil drei im Prinzip ebenso, nur das ich versucht habe, den wahrescheinlichen XPATH noch hinzuzufügen.

Code: Alles auswählen

MuteStatus1.0192.168.1.60publicon
sieht so gar nicht nach der korrekten Antwort aus.
Wenn Du im Browser diesen Link aufrufst: http://192.168.1.60:55001/UIC?cmd=%3Cna ... 3C/name%3E (ist 192.168.1.60 die korrekte IP?), wie sieht die exakte Antwort aus? Bitte unbedingt mit code-Tags posten ([code \] zu Beginn und [/code\] am Ende des Codes, aber jeweils ohne den \, der steht hier nur, damit das Tag lesbar ist ) Es sollte xml ausgeliefert werden. Mit welchem Browser bist Du unterwegs? evtl. musst Du die Anzeige auf raw umschalten, oder Dir den Quelltext der Antwort anschauen, um das vollständig zu Gesicht zu bekommen.

Re: Samsung Wireless Audio Multiroom API einbinden

Verfasst: 28. Mai 2020 11:56
von Lani
AHh so, ok, dann müsste ich nur das Item so einbinden.
Leider bin ich was Syntax angeht, sehr bescheiden und versuche aus den Beispielen abzukupfern.
Das wäre ja vom Aufwand her noch überschaubar, denn ich benötige ja nicht alle Befehle, welche möglich wären.

Habe den Link angeklickt und die Antwort als Quelltext hier eingefügt

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?><UIC><method>MuteStatus</method><version>1.0</version><speakerip>192.168.1.60</speakerip><user_identifier></user_identifier><response result="ok"><mute>off</mute></response></UIC>
hilft das ier weiter?

Code: Alles auswählen

22 - GetMute
Description: ---

Example:

curl 'http://ip_speaker:55001/UIC?cmd=%3Cname%3EGetMute%3C/name%3E' 
Xml string decoded:

<name>GetMute</name>
Wenn ich über den Browser die Links aufrufe funktioniert alles.. Benutze Chromium
Es kann ja nur ein kleiner blöder Fehler sein....

Ps. Danke dir für deinen Einsatz... du schreibst ja praktisch bei jedem Beitrag rein...Finde ich echt super von dir..sollte mehr so freundliche Leute wie dich geben.
Respekt!

Re: Samsung Wireless Audio Multiroom API einbinden

Verfasst: 28. Mai 2020 14:27
von udo1toni
Jawohl, die Antwort hilft weiter :)
So sieht das aufgehübscht aus:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<UIC>
    <method>MuteStatus</method>
    <version>1.0</version>
    <speakerip>192.168.1.60</speakerip>
    <user_identifier></user_identifier>
    <response result="ok">
        <mute>off</mute>
    </response>
</UIC>
Und nun kan man schon mit blosem Auge den Pfad erkennen, /UIC/response/mute war also tatsächlich richtig geraten :)
Wichtig ist dann halt, dass Du xpath installierst.

Re: Samsung Wireless Audio Multiroom API einbinden

Verfasst: 28. Mai 2020 14:33
von udo1toni
Was noch möglich ist, dass Du POST statt GET verwenden musst.

Re: Samsung Wireless Audio Multiroom API einbinden

Verfasst: 28. Mai 2020 14:38
von Lani
Aufgehübscht verstehe sogar ich ein wenig was hier daher kommt ;-)
Gut geraten!!

Habe jetzt mal die
XPath Transformation (transformation-xpath - 2.5.5) mit PaperUI installiert...

Muss ich noch etwas machen damit es funktioniert?

Re: Samsung Wireless Audio Multiroom API einbinden

Verfasst: 28. Mai 2020 14:40
von Lani
udo1toni hat geschrieben: 28. Mai 2020 14:33 Was noch möglich ist, dass Du POST statt GET verwenden musst.
HAb ich versucht...reagiert nicht¨ :roll:

Die Info in der Doku (https://www.openhab.org/v2.5/addons/tra ... ons/xpath/) ist für mich leider nicht hilfreich.
Muss ich jetzt eine Transformations Datei erstellen oder reicht die Installation des Xpath so aus?

Bisher habe ich lediglich das Shelly Binding installiert, vielleicht fehlt noch was? :shock:

Habe in beim HapPanel mit der Console folgende Warnung

Code: Alles auswählen

DevTools failed to load SourceMap: Could not load content for http://192.168.1.81:8080/habpanel/vendor/aCKolor.min.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
Keine Ahnung ob das etwas damit zu tun hat, aber man weiss ja nie ;-)


Habe den verdacht, dass es mit dem Port zu tun hat, bzw mit dem : davor.
Könnte das falsch interpretiert werden?