NEWS
Upnp - Samsung TV (J-Series) steuern
-
Hallo zusammen,
hier möchte ich ein Beispiel zeigen wofür der upnp-Adapter genutzt werden kann.
Es gibt zwar den Samsung Adapter, der aber nur für Samsung Geräte vor 2015 nutzbar ist. Samsung hat die Api geändert.
Ich gehe hier nicht auf die Nutzung mit Javascript oder Blockly ein. Primär geht es darum die sehr Komplexe Handhabung der Samsung Schnittstelle näher zu bringen.
Alle folgende Objekte sind Unterobjekte von MainTVServer2->MainTVAgent2. Nicht alle Objekte sind an meinem TV Nutzbar, daher kann ich nur auf die eingehen die bei mir Funktionieren. Wenn man Objekte abfrägt erhält man im Objekt "Result" (wenn vorhanden) eine Rückmeldung ob der Befehl ausgeführt wurde, OK, oder nicht und warum, NOTOK_xxx.
EnforceAKE: Sinn bisher unbekannt. Erhalte die Meldung NOTOK, ohne weitere informationen.
GetAvailableActions: Das Dürfte das Interessanteste Objekt sein, es gibt die Objekte (Actions) aus die vom TV unterstützt werden.
GetBannerInformation: Dieses Objekt steht in Zusammenhang mit einem Streamingdienst. Bisher konnte ich aber nicht feststellen mit welechem. Die Rückmeldung ist immer NOTOK_NotStreaming.
GetChannelListURL: Mit hilfe der URL die hier ausgegeben wird kommt man an die Programm Liste des TVs. Gelesen werden kann sie mit hilfe eine Hex Editors. Sobald ich mich mehr damit beschäftigt habe werde ich meine Erkenntnisse hier Wiedergeben.
GetCurrentExternalSource: Hier bekommt man auskunft welche Quelle Aktuell für die Wiedergabe benutzt wird und welche ID ihr zugewiesen wurde. Das bezieht sich nur auf Hardware Schnittstellen wie TV, AV, HDMI, Component und Video.
GetCurrentMainTVChannel: Dieses Objekt (Action) liefert den Aktuell ausgewählten TV Kanal. Wenn man zwischen den TV Kanälen wechseln möchte ist dieser besonders interessant, da der gelieferte xml String so wie er ist genutzt wird um auf diesen Kanal zu schalten. Das passiert mit Hilfe des Objekts "SetMainTVChannel".
GetDTVInformation: Liefert ein xml String mit Informationen, noch unklar worauf sich die Informationen beziehen oder wofür sie benutzt werden können.
GetDetailPrograminformation: Liefert Informationen zu einer Sendung auf einem bestimmten Sender zu einer bestimmten Anfangszeit. Das Channel Objekt (Argument) wird mit dem xml String aus dem Objekt GetCurrentMainTVChannel befüllt, natürlich mit dem Sender für den man die Information haben möchte. Bei AntennaMode haben die Zahlen 1-3 funktioniert. Jedoch hab ich nur den xml Body ohne die gewünschten Informationen als Antwort bekommen. In welchem Format StartTime angegeben werden muss kann ich nicht sagen, Typisch wäre hh:mm:ss.
Laut Entwicklerdokumentation von Samsung arbeitet der TV bei dieser Funktion mit TZDate was aus Angular JS kommt. Das sieht so aus: 2017-01-14T20:03:00Z. Trotzdem bekomme ich nur leere Antworten.
GetRecordChannel: Gibt den Sender wieder von dem Aktuell aufgenommen wird. Bei mir werden 2 Channel Objekte angezeigt, daher gehe ich davon aus es wäre möglich 2 Aufnahmen gleichzeitig zu machen.
GetSourceList: Gibt, nicht wie erwartet, nur den Aktuellen Typ der Quelle als xml String aus. Darin findet sich auch die ID der Quelle.
SetAntennaMode: Damit lässt sich der Tuner auswählen, mein TV hat einen Tripple Tuner wie vermutlich die meissten neuen TVs. Bis jetzt ist mir die Syntax unklar.
SetMainTVChannel: Lässt das Umschalten auf einen bestimmten Sender zu. Das Channel Objekt wird mit dem xml String aus GetCurrentMainTVChannel befüllt, der String stellt den Sender/Kanal dar. ChannelListType findet sich bei GetChannelListURL->ChannelListType (z.B. 0x01). SatelliteID ist bei mir "0".
SetMainTVSource: Mit Hilfe dieses Objekts kann man zwischen den Eingangsquellen wechseln. ID ist die ID für den Eingang, z.B. TV = 0, HDMI1 = 13, HDMI2 = 14, HDMI3 = 15. UiID scheint immer "0" zu sein und Source ist der Name des Eingangs/Bezeichnung.
–---------------------------------------------------------------------------------------------
Folgende Objekte sind Unterobjekte von MediaRenderer->RenderingControl. Dieser Teil ist auch für andere Geräte verwendbar, der Service MediaRenderer wird von allen Audio/Video playern bereitgestellt. Hier gibt es nur geringfügige Unterschiede.
Zu beachten ist das die Objekte sich auf die Tonausgabe beziehen und nur nutzbar sind wenn man keinen AV Reciver nutzt.
GetMute: Frägt ab ob der TV Lautlos geschalten ist oder nicht. 0 = Laut, 1 = Lautlos(Mute). Der Channel legt fest welcher Kanal abgefragt wird. Bei meinem TV gibt es nur "Master". Mögliche Kanäle findet man in A_ARG_TYPE_Channel->native->allowedValues.
GetVolume: Frägt die Lautstärke ab. Wertbereich 0-100. Der Channel legt fest welcher Kanal abgefragt wird. Bei meinem TV gibt es nur "Master". Mögliche Kanäle findet man in A_ARG_TYPE_Channel->native->allowedValues.
SetMute: Schaltet den TV Lautlos oder Laut. 0 = Laut, 1 = Lautlos(Mute). Den Wert gibt man bei DesiredMute ein. Der Channel legt fest welcher Kanal abgefragt wird. Bei meinem TV gibt es nur "Master". Mögliche Kanäle findet man in A_ARG_TYPE_Channel->native->allowedValues.
SetVolume: Setzt die Lautstärke. Wertbereich 0-100. Den möglichen Wertebereich findet man in Volume->native->min/maxValue. Der Channel legt fest welcher Kanal abgefragt wird. Bei meinem TV gibt es nur "Master". Mögliche Kanäle findet man in A_ARG_TYPE_Channel->native->allowedValues.
===================================================================
Scripte
===================================================================
Lautstärke ändern, Lautlos:
! ````
var device = 'upnp.0.[TV]_UE48JU6435';
var control = 'javascript.0.Samsung_TV';
var oldVol;
var changeVol;
! on({id: control + '.Vol_UP', val: true
}, function(obj){
getVolume();changeVol = 1; //der Wert um den die Lautstärke geändert wird, kann beliebig geändert werden })
on({id: control + '.Vol_Down', val: true
}, function(obj){
getVolume();
log('leiser');
changeVol = -1; //der Wert um den die Lautstärke geändert wird, kann beliebig geändert werden
})! on({id: control + '.Mute'
}, function(){
//Mute status abfragen
setState(device + '.MediaRenderer.RenderingControl.GetMute.InstanceID', 0);
setState(device + '.MediaRenderer.RenderingControl.GetMute.Channel', 'Master');
setState(device + '.MediaRenderer.RenderingControl.GetMute', 'send');
var oldMute = getState(device + '.MediaRenderer.RenderingControl.Mute').val;if(oldMute == 0){ setState(device + '.MediaRenderer.RenderingControl.SetMute.InstanceID', 0); setState(device + '.MediaRenderer.RenderingControl.SetMute.Channel', 'Master'); setState(device + '.MediaRenderer.RenderingControl.SetMute.DesiredMute', 1); setState(device + '.MediaRenderer.RenderingControl.SetMute', 'send'); getVolume(); }else{ setState(device + '.MediaRenderer.RenderingControl.SetVolume.InstanceID', 0); setState(device + '.MediaRenderer.RenderingControl.SetVolume.Channel', 'Master'); setState(device + '.MediaRenderer.RenderingControl.SetVolume.DesiredVolume', oldVol); setState(device + '.MediaRenderer.RenderingControl.SetVolume', 'send'); } })
function getVolume(){
//zuletzt eingestellte Lautstärke vom TV abfragen
setState(device + '.MediaRenderer.RenderingControl.GetVolume.InstanceID', 0);
setState(device + '.MediaRenderer.RenderingControl.GetVolume.Channel', 'Master');
setState(device + '.MediaRenderer.RenderingControl.GetVolume', 'send');}
! on({id: device + '.MediaRenderer.RenderingControl.Volume', change: 'ne'}, function (obj){ //Wird ausgeführt sobald die Aktuelle Lautstärke vom TV angekommen ist
oldVol = getState(device + '.MediaRenderer.RenderingControl.Volume').val;
oldVol = parseInt(oldVol);
var newVol = oldVol + changeVol; //Berechnung der neuen Lautstärke
log(newVol);
//neue Lautstärke an TV senden
setState(device + '.MediaRenderer.RenderingControl.SetVolume.Channel', 'Master');
setState(device + '.MediaRenderer.RenderingControl.SetVolume.DesiredVolume', newVol);
setState(device + '.MediaRenderer.RenderingControl.SetVolume.InstanceID', 0);
setState(device + '.MediaRenderer.RenderingControl.SetVolume', 'send')})
Fortsetzung folgt
-
Hey, habe das gerade mal probiert.
Bekomme aber keine Antwort vom TV.
Muss Ich am TV den Zugriff zulassen oder funktioniert das so ?
-
Der Zugriff muss erlaubt werden. Am TV sollte eine Meldung eingeblendet werden, wenn man versucht zu steuern, ob der Zugriff gestattet werden soll.
Gesendet von meinem m8 mit Tapatalk
-
Bei mir kommt leider nichts
Hab in den Einstellungen vom TV auch rumgeblättert , finde aber leider nichts.
Eine Idee hast du nicht, oder ?
-
Hi, erstmal danke für den Adapter.
Ich bin erst seit kurzem dabei mich mit Iobroker und den vielen Adapter auseinanderzusetzen. Gerade die Steuerung meines Samsung TV (leider schon J-Serie) interessiert mich brennend. Bin aber gerade mit dem Adapter überfordert und bekomme nichts gesteuert (weder Sonos noch Fernseher). Könnte bitte jemand mal ein ausführliches Beispiel geben wie das funktioniert? Bin langsam am verzweifeln.
Danke im Voraus
xast
-
Bei mir kommt leider nichts
Hab in den Einstellungen vom TV auch rumgeblättert , finde aber leider nichts.
Eine Idee hast du nicht, oder ? `
Sorry das ich so spät Antworte hab nicht gesehen das du hier nochmal geschrieben hast.
Pack den code mal in ein script und starte es. Wenn das so nicht geht weiss ich auch nicht weiter.
setState("upnp.0.[TV]_UE48JU6435.MainTVServer2.MainTVAgent2.GetAvailableActions"/*GetAvailableActions*/, 'send');
Gerade die Steuerung meines Samsung TV (leider schon J-Serie) interessiert mich brennend. Bin aber gerade mit dem Adapter überfordert und bekomme nichts gesteuert (weder Sonos noch Fernseher). Könnte bitte jemand mal ein ausführliches Beispiel geben wie das funktioniert? Bin langsam am verzweifeln.
xast `
Die Steuerung des TV's ist leider nur sehr begrenzt möglich, da es scheinbar nicht möglich ist key codes zu senden. Ich habe im ersten Post ein Script ergänzt mit dem es möglich ist Lautstärke und Lautlos zu steuern. Das script kann auch für andere upnp player (z.B. Sonos) verwendet werden. Es können anpassungen nötig sein.
-
Es gibt für die KS Serie ja bereits einen Adapter der es möglich macht den TV zu steuern.
Klappt auch wunderbar mit ein aus - Programm - lautstärke etc.
Leider habe ich und auch derjenige der den Adapter erstellt hat, keine Information darüber, wie es ggf. möglich ist, wie auch bei anderen TV´s wie Loewe / LG etc, Einblendungen bzw. PopUps zu generieren, die einen frei definierten Text beinhalten.
Ziel ist es zum Beispiel anzeigen zu lassen: Waschmaschine ist fertig, Bewegung im Garten registriert, Es hat geklingelt ( falls Klingel Nachts auf aus ist ) usw.
Vielleicht gibt es jemanden der das liesst und evtl. schon ein paar Ansätze dazu hat. Bei älteren Samsung TVs gab es mal eine App die das möglich machte und auf dem TV installiert sein musste. ( irgendwas mit nofitications ).
Danke für Eure Mithilfe.
-
Ich habe jetzt einen Samsung-TV aus der J-Serie hier zum Spielen. Allerdings hab ich bisher noch keinerlei Erfolge. Im UPnP-Adapter sind zwar alle Objekte da. Aber wenn ich versuche etwas aus dem oben geposteten Script zum Laufen zu bekommen erhalte ich nur die folgende Rückmeldung vom TV:
upnp.0 2017-04-10 22:48:34.701 warn Sent message: {"uri":"http://192.168.137.51:7676/smp_13_","headers":{"Content-Type":"text/xml; charset=\"utf-8\"","SOAPAction":"\"urn:schemas-upnp-org:service:RenderingControl:1#SetVolume\"","USER-AG upnp.0 2017-04-10 22:48:34.701 warn Unexpected answer from upnp service: {"statusCode":500,"body":"\r\n
Err 500 ist soweit ich das gefunden habe ein "Internal Server Error"
Es erscheint auch keine Abfrage auf den TV ob ich etwas zulassen möchte… Hab gerade keine Idee mehr
-
Die Autorisierung klappt nicht mit jedem Befehl, hast du mal GetAvailableActions versucht? Siehe 3 posts weiter oben.
Gesendet von meinem m8 mit Tapatalk
-
Hmm - nächstes Problem. GetAvailableActions finde ich nirgends :?:
Hats Du noch eine Idee?
-
Japp exportiert mal dein objektbaum für deinen TV, vom upnp Adapter. Und poste ihn hier. Dann schau ich mir den mal an. Kann aber paar Tage dauern bis ich wieder Zeit hab.
Und welches Model und welche fw hat dein TV?
Gesendet von meinem m8 mit Tapatalk
-
Hallo JeyCee,
hab's jetzt endlich geschafft meinen Objektbaum zu exportieren. Auf dem PC wo ich üblicherweise die Administration mache (Edge-Browser auf Windows 10) hat das Exportieren von Objekten überhaupt nicht funktioniert und auf einem anderen PC mit Chrome hatte ich auch diverse Probleme wie leere Dateien etc. Aber das nur am Rande - der TV-Objektbaum ist im Anhang
Das Gerät ist ein Samsung UE40J5250SS. Die Firmware müsste die 1117 sein - wenn das die Firmwareversion ist die du brauchst. Habe im TV-Menü keinen Eintrag gefunden der explizit "Firmwareversion" heißt, aber ich denke dass es diese ist…Vielen Dank für Dein Angebot Dir das mal anzuschauen - wäre schön wenn wir da ein Stückchen weiterkommen
Gruß Thilo
-
Alles klar, da fehlt MainTVServer2 in deinem Objektbaum. Lösch doch mal den ganzen Baum für deinen TV und starte den Adapter neu.
Sollte zwar nicht vorkommen das nicht alle Objekte angelegt werden, aber das hatte ich bei meinem Samsung TV auch.
Firmware und Model sind mehr Informativ für mich.
-
Hab jetzt schon zweimal den Objektbaum gelöscht und den Adapter neugestartet, aber "MainTVServer2" fehlt immer noch
Gibt's da noch 'ne Chance? Muss vielleicht im TV noch was umgeschaltet/aktiviert werden?
-
Muss vielleicht im TV noch was umgeschaltet/aktiviert werden? `
Nicht das ich wüsste, aber du kannst ja am TV mal alle Einstellungen durchgehen.
Alternativ besteht auch die Möglichkeit das man im Servicemenü was aktivieren muss. Da musst du dann aber google bemühen um Infos dazu zu bekommen. Da ist dann auf jeden Fall Vorsicht geboten, sonst endet das schlimmsten falls in einer Boot schleife.
Leider ist Samsung nicht sehr großzügig mit Informationen und so stochert man oft im Nebel.
-
Hallo Jey Cee,
ich bin leider noch nicht weitergekommen. Aber ich habe bei meiner Suche eine recht interessante Seite gefunden https://forum.fhem.de/index.php/topic,57595.0.html. Das klingt so als hätten die Leute dort eine Lösung gefunden. Allerdings liest sich das für mich irgendwie sehr kryptisch - kannst Du damit vielleicht mehr anfangen?
-
Hab mir den verlinkten Thread durch gelesen, da ist seit meinem letzten Besuch einiges dazu gekommen.
Leider scheint auch dort keiner es mit der J-Serie zum laufen zu bekommen. Irgend etwas ist an dieser Serie gänzlich anders als an den anderen.
Gesendet von meinem m8 mit Tapatalk
-
Ja, scheint irgendwie nicht so kommunikativ zu sein die J-Serie.
Was bei mir allerdings schon mal funktioniert ist wenn ich im Browser eingebe:
http://192.168.xxx.xxx:8080/ws/pairing?step=0&app_id=my-app&device_id=ffy-device
Dann wird mir am TV ein vierstelliger Code angezeigt. Das ist ja eigentlich schon ein Erfolg - oder? Ich weiß nur absolut nicht was ich da jetzt noch drumherumbauen müsste…
-
https://community.smartthings.com/t/samsung-smart-tv-support/741/79 ist ein Thread wo darüber diskutiert wurde.
Leider steht da nicht wie man den Pin Code Codieren muss.
-
Hallo,
entschuldige ich muss mich mal melden, habe was zusammengebracht, aber ich weis nicht wo und wie ich den Code eingeben soll.
Nach Aufruf der http://192.168.178.61:8080/ws/pairing?s … ffy-device
wird mir angezeigt das sich eine App verbinden will und ein CODE dazu.
Hier mal was ich so zurückbekomme, verbunden ist er ja anscheinend.
EnforceAKE,GetAvailableActions,GetBannerInformation,GetChannelListURL,GetCurrentExternalSource,GetCurrentMainTVChannel,GetDTVInformation,GetDetailProgramInformation,GetRecordChannel,GetSourceList,SetAntennaMode,SetMainTVChannel,SetMainTVSource,StartCloneView,StartExtSourceView,StartSecondTVView,StopRecord,StopView
Ist ein Samsung UE40JU6450
Sigi