STV

Aus FHEMWiki
Wechseln zu: Navigation, Suche
STV
Zweck / Funktion
Client for Samsung TV
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Thema
Support (Forum) Multimedia
Modulname 70_STV.pm
Ersteller Zwiebel (Forum /Wiki)
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Das Modul STV ermöglicht die Steuerung von Samsung Fernsehern und Bluray-Playern. Das Nachfolgemodul SamsungAV unterstützt die neueren Geräteserien.

Voraussetzungen

Historie

Im Ursprung wurde das Modul 70_STV.pm entwickelt, welches bis F-Serie funktionieren sollte. Das Modul ist im Standardumfang von FHEM enthalten. Für die neue Zugriffsmethode per websocket ab K-Serie wurde das Modul so erweitert, dass per Python-Skript samsungctl die TVs problemlos ansteuerbar sind. Die größten Probleme scheinen die H- u. J-Serie zu bereiten. Diese nutzen neben websocket zusätzlich eine Verschlüsselung. Für den Zugriff wurde ein Python-Skript nach Perl übersetzt, das wiederum in die nicht offizielle STV eingebunden wurde. Schließlich wurde noch die Möglichkeit der Ausgabe von Medien-Streams für alle Serien über DLNA eingebaut. Die aktuelle inoffizielle Version, in der ALLE features enthalten sind, findet Ihr >>>hier<<< neben der zusammengefassten Doku >>>hier<<<.

Neben den unterschiedlichsten Servern in der Firmware der TVs gibt es auch Unterschiede bei der Berechtigungssteuerung. Nachfolgend findet Ihr relevante Informationen zu den unterschiedlichen Serien.

Steuerungsmöglichkeiten (allgemein)

Steuerungsmöglichkeiten(Voraussetzung also eine LAN- oder WLAN-Verbindung u. berechtigter Zugriff) aus FHEM heraus sind

  • senden von remote control Befehlen an den TV
  • Bildschirmnachrichten wie z.B. InfoScreen bei eingehendem Anruf
  • Abspielen von Video, Audio, Foto Konserven

B/C/D-Series(vor 2012)

Da diese TVs schon relativ alt sind hier nur eine Zusammenfassung von Funktionen, die sich je nach Modell unterscheiden:

  • Älteste Modelle(B-Serie ?): mute, volume, call, sms, date über port 52235 UPNP/SOAP
  • Jüngere Modelle(C-/D-Serie): sämtliche remote control commands port über 55000, keine Bildschirmnachrichten ?, Port 7676 u. service urn:samsung.com:service:MainTVAgent2:1 nicht verfügbar ?

E-Series(2012)

sämtliche remote control commands über port 55000; Definition mit FHEM-Standard-Modul STV und Port 55000.

Zugriffsberechtigung: Einstellungen findet man unter: Menü->Netzwerk->AllShare-Einstellungen->Liste der registrierten Endgeräte->Zulassen|Verbieten|Aus der Liste löschen

Registrierung: Bei erstmaligem Zugriff eines Endgeräts erscheint auf dem TV ein pop-up: Neues Netzwerkgerät erkannt......: Zulassen|Verbieten

Eine Pin-Eingabe ist nicht erforderlich. Eine Einmalige Registrierung berechtigt für den Dauerbetrieb des Endgeräts, wobei (bei mir) das Gerät "Perl Samsung Remote" mit der IP 127.0.0.1 angelegt wurde und mit dieser Zugangsberechtigung nun ALLE devices über FHEM für die Steuerung zugelassen sind.

Bildschirmnachrichten: über port 7676 ist UPNP/SOAP (z.B. Browseraufruf mit InfoDisplay f. Anruferinfo) verfügbar. Ebenso ist die Medienausgabe per DLNA möglich nur mit der inoffiziellen Version !)

Bestätigte Modelle:

ganze Serie

F-Series(2013)

Vermutlich kein Unterschied zur E-Serie.

H-Series(2014)

Mit dieser Serie führte Samsung die verschlüsselte Kommunikation über websockets und Port 8000 ein. Für die Zugriffsberechtigung muss einmalig das Perl-Skript regapp.pl aus diesem Post (https://forum.fhem.de/index.php/topic,57595.msg748445.html#msg748445) zur Erzeugung des session-key ausgeführt werden.

Notwendige Vorbereitung:

1. Erstellen der Datei samsung_session_key.txt mit dem Perl-Skript regappl.pl (Pin-Eingabe über FB des TV erforderlich)
2. Bei ERFOLG(lieber mal reingucken  ;)) die Datei in das FHEM-Verzeichnis kopieren, wo auch die fhem.cfg liegt
3. Manchen wird noch das Perl-Modul Crypt::Rijndael fehlen. Das installiert man(für Debian):
   a) sudo apt-get update
   b) sudo apt-get upgrade
   c) sudo apt-get install libcrypt-rijndael-perl
   d) ein reboot schadet an dieser Stelle nie
4. define MeinTV STV MEINE_IP wse  

Zugriffsberechtigung: Menü/Netzwerk/Multimedia-Geräteeinstellungen. Dort kann man "SmartDevices" erlauben, verbieten und löschen. - einmal verboten und der Key ist unbrauchbar. Also neu pairen. - die IP scheint egal zu sein. Mit den passenden session_key und session_id kann man von jedem Rechner aus zugreifen.

Registrierung: Mittlerweile ist das Perl-Skript do_v2.pl von Raymund auch in das inoffizielle70_STV eingebunden. Das Skript regapp.pl muss nach wie vor einmalig(?) für die Schlüsselerzeugung ausgeführt werden. Bitte Vorgehensweise im vorgenannten Post beachten !

Bildschirmnachrichten: Bildschirmnachrichten bzw. generelle Medienausgabe über DLNA möglich

Bestätigte Modelle: UE-55H6740SV, UExyHU6900, UE40H6400, UE55H6700

Info des Python-Skript-Autors: Note that the following TV Models are most likely incompatible for one reason or another H4xxx, H510x, H52xx, H53x3, H5403, H6003, H61x3, H6201, H6203, S9, S9C

J-Series(2015)

Die verschlüsselte Kommunikation erfolgt über websockets und Port 8000. Für die Zugriffsberechtigung muss einmalig das Perl-Skript regapp.pl aus diesem Post (https://forum.fhem.de/index.php/topic,57595.msg748445.html#msg748445) zur Erzeugung des session-key ausgeführt werden.

Notwendige Vorbereitung:

1. Erstellen der Datei samsung_session_key.txt mit dem Perl-Skript regappl.pl, und zwar auf dem Rechner, der später den Fernseher steuern soll. In dieser Serie erzeugt der Fernseher die Pin, diese wird von regappl.pl abgefragt 2. Bei Erfolg die Datei in das FHEM-Verzeichnis kopieren (dort wo auch die fhem.cfg liegt). Umbenennen,so dass es den unter Punkt 4 vewendeten Devicenamen (beispielsweise MeinTV) im eigenen Namen hat. Zugriffsrechte setzen mit

 chown fhem:dialout samsung_session_key.txt
 mv samsung_session_key.txt MeinTV_session_key.txt

3. Ggf. das Perl-Modul Crypt::Rijndael nachinstallieren mit

 sudo apt-get install libcrypt-rijndael-perl

4. Fernseher in FHEM definieren als

 define MeinTV STV <ip-adresse des Fernsehers> 8000  

Zugriffsberechtigung: Auf dem Fernseher unter Menü/Netzwerk/Multimedia-Geräteeinstellungen. Dort kann man "SmartDevices" erlauben, verbieten und löschen.

Bildschirmnachrichten: Bildschirmnachrichten bzw. generelle Medienausgabe über DLNA möglich

Bestätigte Modelle: UE55UJ7000, UE48JU7590(THKMDEUC-1452)

Info des Python-Skript-Autors: Note the the following TV Models are most likely incompatible for one reason or another J4xxx, J50xx, J51xx, J52xx, J53xx, UNxxJ6200, J6201, J6203, J620D

Tizen 2.3(nicht aber UJ4300, UJ5300)

Spätere Modelle wie K-Serie ?

K-Series(2016)

Der Port ist durch Samsung auf 8001 geändert. Eine Verschlüsselung gibt es nicht mehr. Dominik hat den Aufruf des im Netz verfügbaren Python-Skripts samsungctl in das STV-Modul integriert. Die Installation des Python-Skripts samsungctl ist zusätzlich erforderlich.

Für die Definition des TV in FHEM ist anstatt des tatsächlichen Ports "ws" anzugeben.

Notwendige Vorbereitung:

1. sudo apt-get update
2. sudo apt-get upgrade
3. pip installieren. wheezy bietet nur eine V. 1.1, von der im Inet abgeraten wird. Deshalb habe ich die v 9.0.1 mit
   wget https://bootstrap.pypa.io/get-pip.py geladen.
4. sudo python get-pip.py    (ohne sudo gab es eine exception meldung)
5. sudo pip install websocket-client
6. sudo pip install samsungctl  (das package wird dann automatisch heruntergeladen und installiert)
7. das File /usr/local/lib/python2.7/dist-packages/samsungctl/__main__.py editiert
   o except FileNotFoundError: in except: ändern
   o Folgende Zeile löschen directories.append(os.path.join(os.getenv("HOME"), ".config"))
8. Damit das geänderte 70_STV lief, musste ich einerseits "use Blocking;" am Anfang des Moduls hinzufügen und scheinbar ist der /usr/local/bin bei mir nicht bekannt, so  dass ich den einfachen Aufruf von samsungctl in /usr/local/bin/samsungctl ändern musste.

Das Senden der üblichen remote control commands funktioniert.

Definition in FHEM: anstatt einem numerischen Port ist der String ws einzugeben

Zugriffsberechtigung:

  • Popup mit Bestätigung
  • dann unter Einstellungen -> Allgemein -> Geräteverbindungsmanager findet man eine Geräteliste (da kann man die einzelnen zugriffsberechtigten Geräte auch wieder rausschmeissen) und man kann sogar die Zugriffsbenachrichtigung verändern (nur einmal od. jedes Mal).

Bildschirmnachrichten: Bildschirmnachrichten bzw. generelle Medienausgabe über DLNA möglich

Bestätigte Modelle: ganze Serie ?: UE40K5579, UE55KU6170, UE65ks7090

Tizen 2.4 (nicht aber: UBD-K8500, UBD-KM85C, UBD-KM85)

M-Series(2017)

Vermutlich kein Unterschied zur K-Serie.  :-\

Bestätigte Modelle: ganze Serie ?

Tizen 3.0(UMU6100 Tizen 2.4)

Q-Series(2018)

Mal sehen, was uns da wieder erwartet. Vorstellung wohl im Februar 2018.

Tizen 4.0

Installation

Erste Schritte

(für Version aus dem FHEM Repository)

Device in FHEM anlegen:

define <name> STV <ip>

Danach sollte das Device bei eingeschaltetem Fernseher oder Bluray-Player in den Status opened gehen.

Ist dies nicht der Fall ist die Modellreihe zu ermitteln. Am Command-Prompt kann mittels nmap ermittelt werden welche Ports geöffnet sind (xxx.xxx.xxx.xxx ist in diesem Beispiel die IP-Adresse des Samsung-Gerätes)

nmap xxx.xxx.xxx.xxx
Starting Nmap 6.47 ( http://nmap.org ) at 2018-02-18 09:22 CET
Nmap scan report for xxx.xxx.xxx.xxx
Host is up (0.0095s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
7676/tcp open  imqbrokerd
8080/tcp open  http-proxy
8443/tcp open  https-alt

anschließend die High Ports scannen

nmap -sT -p50000-65534 xxx.xxx.xxx.xxx
Starting Nmap 6.47 ( http://nmap.org ) at 2018-02-18 09:25 CET
Nmap scan report for xxx.xxx.xxx.xxx
Host is up (0.015s latency).
Not shown: 15532 closed ports
PORT      STATE SERVICE
52345/tcp open  unknown
55000/tcp open  unknown
55001/tcp open  unknown

Jetzt gilt es folgende Fälle zu unterscheiden:

  • Port 52235 wird ausgewiesen
define <device> STV <ip>
ohne Portangabe

Jetzt gilt es folgende Fälle zu unterscheiden:

  • Port 55000 wird ausgewiesen
define <device> STV <ip>
ohne Portangabe

Bei dem aktuellen Modul aus dem FHEM-Repository kann kein Port mitgegeben werden. Die Definition kann dann nachträglich im angelisteten Device durch Bearbeitung der DEF erfolgen. Die IP-Adresse um den Port ergänzen

xxx.xxx.xxx.xxx 55000

und speichern.

Alternative: Aktuelle Version aus dem Forum

Die im Anhang zu Post #298 vom 21.2.2018 publizierte Fassung ist in der Entwicklung, bietet aber weitergehende Funktionen.

Diese dort gepostete Version des 70_STV sollte für ALLE Serien die Ausgabe von Bildschirmnachrichten per DLNA ermöglichen. Bitte lest den Post, um auf dem laufenden zu bleiben. Wenn die Version fertig ist wird sie hier dokumentiert.

Anwendung

Attribute

Basics & Allgemeines

  • MAC
nur bei Bedarf: die IP-Adresse des Rechners auf dem FHEM läuft. Sollte das zu steuernde Gerät nicht reagieren und im FHEM-Log "[STV] mymac" mit "invalid format" auftauchen, dann bitte dieses Attribut setzen.
  • fork
enable|disable
  • setWhenOffline
execute|ignore Ist der Fehnseher ausgeschaltet hängt ein Set-Befehl, bis das Modul realisiert, dass der Fernseher ausgeschaltet ist. Mit setWhenOffline ignore lässt sich dieses Verhalten verhindern.

nur in aktueller Entwicklerversion

  • callerURI
callerURI ist für die Nutzung von Anruferinfo gedacht.
  • screenURI
Über screenURI und einen Dummy kann z.B. ein InfoDisplay von FHEM auf dem TV ausgeben. In die URIs wird der jeweilige Pfad zum Bild eingetragen(also so, wie man es bereits beim Test des DLNAClient gemacht hatte).

Durch die Definition der jeweiligen URI, wurde dynamisch das Befehlsset des TV-devices erweitert. Für den Aufruf der callerURI steht der neue set-Befehl caller und für screenURI entsprechend screen zur Verfügung.

Set

Das Modul kennt derzeit folgende Commands

Basis-Commandset (bei Nutzung von Port 52235)

  • set <name> mute {on|off]
schaltet den Ton ein/aus
  • set <name> volume <nummer>
Lautstärke ändern. <nummer> kann zwischen 0 und 100 liegen
  • set <name> call <von_name> <von_number> <an_name> <an_number>
<von_name> = Name des Anrufers
<von_number> = Nummer des Anrufers
<an_name> = Name des Anzurufenden
<an_number> = Nummer des Anzurufenden
  • set <name> sms <von_name> <von_number> <an_name> <an_number> <text>
<von_name> = Name des Anrufers
<von_number> = Nummer des Anrufers
<an_name> = Name des Anzurufenden
<an_number> = Nummer des Anzurufenden
<text> = SMS Nachrichtentext
  • set <name> date <start_datum> <start_zeit> <an_name> <an_number> <betreff> <ende_datum> <ende_zeit> <ort> <nachrichtentext>
Termineinladung mit
<start_datum> = Startdatum
<start_zeit> = Startzeit
<an_name> = Name des Einzuladenden
<an_number> = Nummer des Einzuladenden
<betreff> = Betreff der Einladung
<ende_datum> = Enddatum
<ende_zeit> = Endzeit
<ort> = Treffpunkt
<nachrichtentext> = Text der Einladung

Erweitertes Commandset (bei Nutzung von Port 55000)

  • set <name> connect
Mit dem Fernseher/Player verbinden
  • set <name> button
button ist ein Befehl der Fernbedienung aus dieser Liste:
[ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 3SPEED | 4_3 | 16_9 | AD | ADDDEL | ALT_MHP | ANGLE | ANTENA | ANYNET | ANYVIEW | APP_LIST | ASPECT | AUTO_ARC_ANTENNA_AIR | AUTO_ARC_ANTENNA_CABLE | AUTO_ARC_ANTENNA_SATELLITE | AUTO_ARC_ANYNET_AUTO_START | AUTO_ARC_ANYNET_MODE_OK | AUTO_ARC_AUTOCOLOR_FAIL | AUTO_ARC_AUTOCOLOR_SUCCESS | AUTO_ARC_CAPTION_ENG | AUTO_ARC_CAPTION_KOR | AUTO_ARC_CAPTION_OFF | AUTO_ARC_CAPTION_ON | AUTO_ARC_C_FORCE_AGING | AUTO_ARC_JACK_IDENT | AUTO_ARC_LNA_OFF | AUTO_ARC_LNA_ON | AUTO_ARC_PIP_CH_CHANGE | AUTO_ARC_PIP_DOUBLE | AUTO_ARC_PIP_LARGE | AUTO_ARC_PIP_LEFT_BOTTOM | AUTO_ARC_PIP_LEFT_TOP | AUTO_ARC_PIP_RIGHT_BOTTOM | AUTO_ARC_PIP_RIGHT_TOP | AUTO_ARC_PIP_SMALL | AUTO_ARC_PIP_SOURCE_CHANGE | AUTO_ARC_PIP_WIDE | AUTO_ARC_RESET | AUTO_ARC_USBJACK_INSPECT | AUTO_FORMAT | AUTO_PROGRAM | AV1 | AV2 | AV3 | BACK_MHP | BOOKMARK | CALLER_ID | CAPTION | CATV_MODE | CHDOWN | CHUP | CH_LIST | CLEAR | CLOCK_DISPLAY | COMPONENT1 | COMPONENT2 | CONTENTS | CONVERGENCE | CONVERT_AUDIO_MAINSUB | CUSTOM | CYAN | DEVICE_CONNECT | DISC_MENU | DMA | DNET | DNIe | DNSe | DOOR | DOWN | DSS_MODE | DTV | DTV_LINK | DTV_SIGNAL | DVD_MODE | DVI | DVR | DVR_MENU | DYNAMIC | ENTER | ENTERTAINMENT | ESAVING | EXIT | EXT1 | EXT2 | EXT3 | EXT4 | EXT5 | EXT6 | EXT7 | EXT8 | EXT9 | EXT10 | EXT11 | EXT12 | EXT13 | EXT14 | EXT15 | EXT16 | EXT17 | EXT18 | EXT19 | EXT20 | EXT21 | EXT22 | EXT23 | EXT24 | EXT25 | EXT26 | EXT27 | EXT28 | EXT29 | EXT30 | EXT31 | EXT32 | EXT33 | EXT34 | EXT35 | EXT36 | EXT37 | EXT38 | EXT39 | EXT40 | EXT41 | FACTORY | FAVCH | FF | FF_ | FM_RADIO | GAME | GREEN | GUIDE | HDMI | HDMI1 | HDMI2 | HDMI3 | HDMI4 | HELP | HOME | ID_INPUT | ID_SETUP | INFO | INSTANT_REPLAY | LEFT | LINK | LIVE | MAGIC_BRIGHT | MAGIC_CHANNEL | MDC | MENU | MIC | MORE | MOVIE1 | MS | MTS | MUTE | NINE_SEPERATE | OPEN | PANNEL_CHDOWN | PANNEL_CHUP | PANNEL_ENTER | PANNEL_MENU | PANNEL_POWER | PANNEL_SOURCE | PANNEL_VOLDOW | PANNEL_VOLUP | PANORAMA | PAUSE | PCMODE | PERPECT_FOCUS | PICTURE_SIZE | PIP_CHDOWN | PIP_CHUP | PIP_ONOFF | PIP_SCAN | PIP_SIZE | PIP_SWAP | PLAY | PLUS100 | PMODE | POWER | POWEROFF | POWERON | PRECH | PRINT | PROGRAM | QUICK_REPLAY | REC | RED | REPEAT | RESERVED1 | RETURN | REWIND | REWIND_ | RIGHT | RSS | RSURF | SCALE | SEFFECT | SETUP_CLOCK_TIMER | SLEEP | SOUND_MODE | SOURCE | SRS | STANDARD | STB_MODE | STILL_PICTURE | STOP | SUB_TITLE | SVIDEO1 | SVIDEO2 | SVIDEO3 | TOOLS | TOPMENU | TTX_MIX | TTX_SUBFACE | TURBO | TV | TV_MODE | UP | VCHIP | VCR_MODE | VOLDOWN | VOLUP | WHEEL_LEFT | WHEEL_RIGHT | W_LINK | YELLOW | ZOOM1 | ZOOM2 | ZOOM_IN | ZOOM_MOVE | ZOOM_OUT ]

Get

Derzeit keine Funktionen realisiert.

Readings

  • state: Status der Verbindung

Anwendungsbeispiele

folgen noch

Bekannte Probleme / Fehlersuche

Im Foum gibt es zwei Threads

Links