SamsungAV

Aus FHEMWiki
Zur Navigation springen Zur Suche springen
SamsungAV
Zweck / Funktion
Client for Samsung AV
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Thema
Support (Forum) Multimedia
Modulname 70_SamsungAV.pm
Ersteller KölnSolar (Forum )
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Das Modul SamsungAV ermöglicht die Steuerung von Samsung Fernsehern und Bluray-Playern. Es ist Nachfolger des Moduls STV.

Voraussetzungen

Historie

Im Ursprung wurde von Zwiebel 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 hatte Dominik das Modul so erweitert, dass per Python-Skript samsungctl die TVs problemlos ansteuerbar sind. Die größten Probleme schienen die H- u. J-Serie zu bereiten. Diese nutzen neben websocket zusätzlich eine Verschlüsselung. Für den Zugriff hat Raymund ein Python-Skript nach Perl übersetzt, das ich wiederum in das Modul eingebunden habe. Mittlerweile habe ich auf dieser Basis auch das samsungctl übersetzt und in das Modul integriert, so dass keine Installation eines Python-Skripts mehr notwendig ist.

Schließlich habe ich noch die Möglichkeit der Ausgabe von Medien-Streams für alle Serien über DLNA eingebaut. Das Modul ist nun so konstruiert, dass es weitestgehend die DevelopmentGuidelinesAV unterstützt.

Die aktuellste Entwicklungsversion des Moduls 70_SamsungAV, in der ALLE features enthalten sind, findet Ihr nun immer hier. Stabile Versionen werden per update verteilt(aktuell 1.0) Den aktuellen Doku-Thread im Forum findet ihr >>>hier<<<.

Die jeweiligen Unterschiede der einzelnen Serien findet Ihr in den Posts zu Eurer Serie. Dort ist auch das jeweilige serienspezifische define beschrieben.

Features des Moduls

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

  • senden von einzelnen remote control Befehlen an den TV(der funktionierende Befehlsumfang unterscheidet sich nach Serie u. firmware). Manche TVs benötigen eine Verzögerung zwischen dem Socketaufbau und dem übertragen eines RC-Befehls. Dafür lässt sich das Attribut delayRC (default=0) nutzen. Dort eingetragene Werte x führen zu einer Blockierung von x Millisek..
  • Ein-/Ausschaltfunktion
  • Bildschirmnachrichten wie z.B. InfoScreen bei eingehendem Anruf(siehe auch hier)
  • Abspielen von Video, Audio, Foto Konserven, TTS (im Sinne einer Hausautomatisierung ereignisgesteuert über notify/DOIF....)
  • Makrofunktion: Mit dem Befehl 0_macro lassen sich mehrere RC-Befehle als Befehlskette senden. Dabei sind in der Eingabezeile die einzelnen RC-Befehle durch Komma zu trennen. Jeder Befehl führt zu einer Blockierung von FHEM. Die Dauer der Blockierung/Einzelbefehl sind die Millisek., die im Attribut delayMacro vorgegeben sind(default=300000). Also nur mit Bedacht einsetzen, um z.B. Tastensequenzen als einzelnen FHEM-Aufruf nachzubilden.
z.B. set TV 0_macro menu,down,down,down,right,down,enter,exit
  • Texteingabe: Mit 0_text_line kann man eine Textzeile in FHEM editieren, die dann an den TV geschickt wird. Hilfreich für Anwendungen(Apps), die eine Texteingabe(z.B URL) erwarten
z.B. set TV 0_text_line http://DeineFHEMIP:8083/fhem
  • Status ermitteln: Das Modul prüft alle 60 Sek., ob der TV im Netzwerk erreichbar ist. Der state ist dementsprechend on oder absent. Sofern der Status absent ist, lassen sich außer POWER/POWERON keine Befehle absetzen. Manche User möchten aber sofort nach dem einschalten des TV einen Befehl automatisch absetzen. Dazu lässt sich dann der Befehl "statusRequest" benutzen, um zeitlich unabhängig von der periodischen Prüfung den Status zu prüfen und den TV ggfs. in den Status "on" zu versetzen.
set TV statusRequest

Sonstige FHEM-Unterstützung

  • zur Unterstützung des Moduls remotecontrol ist das Layout-Set SamsungAV_TV im Modul integriert. Dadurch lässt sich in einem remotecontrol-device mit
set remote-control-device layout SamsungAV_TV
das layout einer Fernbedienung erzeugen.

Und schließlich noch ein allgemeiner Tipp: Versucht die Kontrolle über firmware-updates zu übernehmen, also automatische firmware-updates (möglichst vor dem ersten Einbinden des TV in das lokale Netzwerk) zu unterbinden !!! Denn man weiß nie, was sich S. mit einer neuen firmware wieder hat einfallen lassen  :'( Einschlägige Meinung der Internet-Gemeinde ist, dass selten Bug-Behebungen oder gar zusätzliche features mit einer neuen Version kommen !!! Wie man dazu vorgeht, sagt Euch das Internet  ;) Auch hier gibt es je nach Serie, firmware Unterschiede !!! (Überlegt Euch gut was Ihr tut. Es könnte ja auch sein, dass S. Sicherheitslücken mit einem update geschlossen hat) :-\

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 ?

Definition siehe commandref

Folgende Perl Module werden benutzt und sind ggfs. zu installieren:

sudo apt-get install libnet-address-ip-local-perl libio-interface-perl libmime-base64-perl(bei port 55000)

Erfolgreicher Test der DLNA-Version am 5.2.18 mit UE55C6700

E-Series(2012)

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

Folgende Perl Module werden benutzt und sind ggfs. zu installieren: sudo apt-get install libnet-address-ip-local-perl libio-interface-perl libmime-base64-perl

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 !)

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.

Bestätigte Modelle

ganze Serie  :-\

F-Series(2013)

Vermutlich kein Unterschied zur E-Serie.

H-Series(2014)

Einführung der Kommunikation über websockets u. port 8000. Zusätzlich ist der Zugriff verschlüsselt.

Für die Definition des TV in FHEM ist Port 8000 zu verwenden.

Folgende Perl Module werden benutzt und sind ggfs. zu ininstallieren:

sudo apt-get install libcrypt-rijndael-perl libnet-address-ip-local-perl libio-interface-perl libjson-pp-perl

Verfügbare Python-Skripte hat Raymund in Perl übersetzt, so dass keine zusätzlichen Installationen erforderlich sind. Das ganze ist im Teststadium u. noch nicht in ein Modul eingebunden. Das senden sämtlicher remote control commands funktioniert. Tw. gibt es Meldungen, dass die Zugriffsberechtigung nach power off erneuert werden müssen.
Mittlerweile ist das Perl-Skript do_v2.pl von Raymund auch in das inoffizielle 70_STV eingebunden. Das Skript regapp.pl muss nach wie vor einmalig(?) für die Schlüsselerzeugung ausgeführt werden. Vorgehensweise im vorgenannten Post beachten !
Standardmäßig erzeugt das Skript ein File "samsung_session_key.txt". Hat man mehrere TVs der Serie, so muss man das Skript logischerweise für jeden TV ausführen. Das erzeugte File muss dann jeweils in FHEMTVdevicename_session_key.txt umbenannt werden.

Da das regapp.pl zur Erzeugung der Schlüsseldatei auf einen Fremdserver zugreift, hat Raymund sich die Mühe gemacht und eine Möglichkeit ohne Fremdserverzugriff realisiert. Details findet Ihr hier.

Bildschirmnachrichten

scheinbar noch über port 7676, vergleichbar der E-Serien-Lösung, möglich.

Bildschirmnachrichten bzw. generelle Medienausgabe über DLNA

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.

Bestätigte Modelle

UE-55H6740SV, UExyHU6900, UE40H6400, UE55H6700

Info des Python-Skript-Autors

Note the 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)

Samsung-Fernseher der Serie J verhalten sich zum Teil wie die der Serie H, zum Teil (bei den späteren Modellen) wie die der Serie K

  • Bestätigte Modelle: UE48JU7590(THKMDEUC-1452), UE55JU6560, 55JU6450(firmware 1530)
  • Möglicherweise inkompatibel: J4xxx, J50xx, J51xx, J52xx, J53xx, UNxxJ6200, J6201, J6203, J620D

Vorgehensweise:

  • Definition als
define <Devicename> SamsungAV <ip-adress> 8000
  • Erzeugen eines Sitzungsschlüssels.
    • Dazu muss zuerst Python mit verschiedenen Bibliothen installiert werden:
apt-get install python3 python3-pip
python3 -m pip install crypto
python3 -m pip install websocket-client 
    • Im zweiten Schritt wird von Github die Bibliothek SmartCrypto benötigt. Wer die Anwendung git nicht installieren möchte, kann sich unter diesem Link auch ein Zip-File besorgen und auf dem Zielrechner entpacken.
    • Im dritten Schritt muss die Datei regapp_smartcrypto.py von dieser Quelle heruntergeladen werden. Diese Datei wird in dem Ordner PySmartCrypto gespeichert, der aus dem zweiten Schritt stammt. In der Datei regapp_smartcrypto.py wird in Zeile 12 IP-Adresse des eigenen Fernsehers eingetragen.
    • Der Aufruf (in der Konsole) von
python3 regapp_smartcrypto.py

führt dann dazu, dass auf dem Fernseher eine 4-stellige PIN angezeigt wird, die man in der Konsole eingeben muss. Die Anwendung erzeugt daraufhin die Datei samsung_session_key.txt, die in <Devicename>_session_key.txt umbenannt und im Verzeichnis /opt/fhem abgelegt werden muss.

  • Sollte die Datei mit dem Sitzungsschlüssel nicht gefunden werden, führt der Aufruf eines set-Kommandos im FHEM-Device des Fernsehers zu einer Fehlermeldung.

K-Series(2016)

sämtliche remote control commands über port 8001 oder 8002(secure port)und das websocket-Protokoll; keine Verschlüsselung mehr. Neuere Serien und aktuellere firmware verwenden zusätzlich ein token bei der Berechtigungsprüfung. (Erkennbar wenn im JSON von http://ip:8001/api/v2/ "TokenAuthSupport\":\"true\", auftaucht)

Das samsungctl ist nicht mehr notwendig. Dank Raymunds Vorarbeit für die J-/H-Serie konnte ich die Funktionalität des Skripts nach Perl übersetzen und ins Modul integrieren.

Definition in FHEM aus Kompatibilitätsgründen mit Port 8001

Modulintern wird der SSL-Port 8002 für die Kommunikation genutzt. Eine Prüfung des SSL-Zertifikats findet aber nicht statt. Sofern der TV mit der erweiterten Berechtigungsprüfung mit einem token arbeitet, wird dies modulintern berücksichtigt.

Folgende Perl Module werden benutzt und sind ggfs. zu ininstallieren: sudo apt-get install libnet-address-ip-local-perl libio-interface-perl libnet-ssleay-perl libjson-pp-perl

Bildschirmnachrichten

über DLNA im Test oder dem TV-integrierten Webbrowser. Definiert man den TV mit dem optionalen DLNAClient, werden die Nachrichten aus callerURI oder screenURI über den DLNAClient ausgegeben. Wird der DLNAClient nicht definiert, so werden die URI's über den Webbrowser des TV ausgegeben.

Zugriffsberechtigung

  • bei erstem Zugriff(define in FHEM; sofern TV eingeschaltet) erscheint Popup auf dem TV, welches mit "zulassen" zu bestätigen ist
  • unter Einstellungen -> Allgemein -> Externe Geräteverwaltung ->Geräteverbindungsmanager findet man eine Geräteliste (da kann man die einzelnen zugriffsberechtigten Geräte auch wieder rausschmeissen) und man kann sogar die "Art" der Zugriffsbenachrichtigung verändern (nur einmal od. jedes Mal). Wir brauchen: nur einmal !

zusätzliche Funktion

locate installed apps of TV(only during definition of device or with command statusRequest, if TV is connected) (blocking !!!)
new commands:

  • 0_App_state: check state of app: running/stopped
  • 0_App_start: start app

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 ?: UE55MU7009

Tizen 3.0(UMU6100 Tizen 2.4)

N-Series(2018)

Die Serie wird mit N bezeichnet, kein Unterschied zur K-Serie.

Der Zugriff erfolgt nun per SSL verschlüsselt über Port 8002. Das Modul "löst" das selbständig. Es bleibt also bei der Definition mit Port 8001.

Tizen 4.0

Q-Series(2018)

Die Serie ist eine Besonderheit. Es ist nicht das Baujahr abzuleiten. Es handelt sich um TVs mit QLED-Technologie.

Für FHEM aber kein Unterschied zur K-Serie.

Der Zugriff erfolgt per SSL verschlüsselt über Port 8002. Das Modul "löst" das selbständig. Es bleibt also bei der Definition mit Port 8001.

Bestätigte Modelle

GQ65Q7FNG(firmware 1153)

Tizen 4.0 ?

Installation

Wichtigste Voraussetzung:

Zugriffsberechtigungen des TV(siehe jeweilige Serie)

Erste Schritte

(für Version aus dem FHEM Repository)

Device in FHEM anlegen: Die jeweiligen Unterschiede der einzelnen Serien findet Ihr in den Posts zu Eurer Serie. Dort ist auch das jeweilige serienspezifische define beschrieben. Grundsätzlich sieht das define so aus:

define MeinFernseher SamsungAV <MeineFernseherIP> <Port> [<FHEMdevicenameDLNAClient>]

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

Sollte dies nicht funktionieren, hat in einigen Fällen bei der Modul Version 1.0 auch ein Fhem "shutdown restart" schon geholfen.

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:

  • (B|C|D Serie) verwenden Sie Port 52235 für Bildschirmmeldungen: Anruf, SMS, Datums- und Lautstärkeänderung.
  • (C|D|E|F Serie) verwenden Sie den Port 55000 für RC-Befehle.
  • (H|J-Serie) verwenden Sie Port 8000 für RC-Befehle.
  • (neueste Serie) verwenden Sie den Port 8001 für RC-Befehle.
  • (alle Serien)Der Gerätename des optionalen DLNA-Clients kann definiert werden, um Vollbildmeldungen (OSD) zu senden.

Beispiel:

Fernsehen SamsungAV 192.168.178.178.20 52235 definieren
Fernsehen SamsungAV 192.168.178.20 55000 definieren
Fernsehen SamsungAV 192.168.178.20 55000 DLNA_Client definieren

Migration

Das "neue" Modul 70_SamsungAV ist nun fester Bestandteil des FHEM Repositories. Eine Umbenennung war notwendig, um das Modul offiziell zu machen. Bitte nutzt nur noch das 70_SamsungAV. Die letzte inoffizielle Version des 70_STV lasse ich lediglich für User attached, die unbedingt diese Version nutzen möchten. Da sich der "type" eines devices nicht ändern lässt geht Ihr am besten wie folgt vor: Code: [Auswählen]

rename TV-devicename old_TV-devicename

danach legt Ihr ein neues device Code: [Auswählen]

define TV-devicename SamsungAV .....

mit seinen Attributen(am einfachsten per cut&paste der raw definition u. Änderung des device names von old_TV-devicename nach TV-devicename) an. So bleiben Abhängigkeiten zu notify.... erhalten. Schließlich könnt Ihr das alte device löschen. save der config dann nicht vergessen, sofern autosave=0.

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_SamsungAV 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.
  • callerURI
Pfad zu einer URI eines Mediums (jpg,mp3....) das auf dem Bildschirm angezeigt wird Hauptzweck: URI, das auf dem Bildschirm angezeigt wird, wenn ein Anruf eingeht.
  • screenURI
Pfad zu einer URI eines Mediums (jpg,mp3....) das auf dem Bildschirm angezeigt wird, zu jedem anderen Zweck als einem Telefonat als Ereignis.

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.

  • delayRC
Verzögerung in Mikrosekunden. default=0 Einige TVs benötigen eine Verzögerung vor der Übertragung eines RC-Befehls. Achtung: Attribut verursacht Systemstopps.
  • delayMacro
Verzögerung in Mikrosekunden. default=300000 Die meisten Fernseher benötigen eine Verzögerung zwischen jedem RC-Befehl in der Makrofunktion. be careful: attribute causes system freezes
  • deaktivieren
0/1: Aktiviert/deaktiviert das Gerät

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

Beispiele:

set Television mute on
set Television volume 20
set Television call Peter 012345678 Phone 87654321

Erweitertes Commandset (bei Nutzung von Port 55000)

  • set <name> connect
Mit dem Fernseher/Player verbinden
  • set <name> button
Der Befehlsumfang der RC-Befehle weicht stark je nach Serie, Modell, firmware vom "allgemeinen" Samsung-Umfang ab. Daher wurden sie möglichst übersichtlich und sinnvoll gegliedert:
allgemein 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ad, aspect, av1, av2, channel:[0-99] channelDown, channelUp, channelList, clear, component1, component2, contents, convergence,, cyan, down, enter, esaving, exit, ff, guide, green, hdmi, hdmi1, hdmi2, help, home, info, left, menu, mute, pause, pip_chdown, pip_chup, pip_onoff, play, pmode, power, poweroff, poweron, prech, program, red, return, rec, rewind, right, sleep, source, stop, tools, ttx_mix, tv, tv_mode, up, volumeDown, volumeUp, yellow,
weitere in Gruppen zusammengefasste Befehle, die selten funktionieren oder genutzt werden:
G_AUTO_[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]
G_EXTx[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]
G_Others[3SPEED,4_3,16_9,ADDDEL,ALT_MHP,ANGLE,ANTENA,ANYNET,ANYVIEW,APP_LIST,AV3,BACK_MHP,BOOKMARK,CALLER_ID,CAPTION,CATV_MODE,CLOCK_DISPLAY,CONVERT_AUDIO_MAINSUB,CUSTOM,DEVICE_CONNECT,DISC_MENU,DMA,DNET,DNIe,DNSe,DOOR,DSS_MODE,DTV,DTV_LINK,DTV_SIGNAL,DVD_MODE,DVI,DVR,DVR_MENU,DYNAMIC,ENTERTAINMENT,FACTORY,FAVCH,FF_,FM_RADIO,GAME,HDMI3,HDMI4,ID_INPUT,ID_SETUP,INSTANT_REPLAY,LINK,LIVE,MAGIC_BRIGHT,MAGIC_CHANNEL,MDC,MIC,MORE,MOVIE1,MS,MTS,NINE_SEPERATE,OPEN,PANNEL_CHDOWN,PANNEL_CHUP,PANNEL_ENTER,PANNEL_MENU,PANNEL_POWER,PANNEL_SOURCE,PANNEL_VOLDOW,PANNEL_VOLUP,PANORAMA,PCMODE,PERPECT_FOCUS,PICTURE_SIZE,PIP_SCAN,PIP_SIZE,PIP_SWAP,PLUS100,POWER,PRINT,QUICK_REPLAY,REC,REPEAT,RESERVED1,REWIND_,RSS,RSURF,SCALE,SEFFECT,SETUP_CLOCK_TIMER,SOUND_MODE,SOURCE,SRS,STANDARD,STB_MODE,STILL_PICTURE,SUB_TITLE,SVIDEO1,SVIDEO2,SVIDEO3,TOPMENU,TTX_SUBFACE,TURBO,VCHIP,VCR_MODE,WHEEL_LEFT,WHEEL_RIGHT,W_LINK,ZOOM1,ZOOM2,ZOOM_IN,ZOOM_MOVE,ZOOM_OUT]

Beispiel:

Fernseher stummschalten einschalten
Einstellung Fernsehlautstärke 20
Set Fernsehanruf Peter 012345678 Telefon 87654321

Spezielle Befehle

  • caller/screen
Nachricht (URI definiert durch attr callerURI/screenURI) über DLNA an Gerät senden
Beispiel:
set Television caller
  • sayText
TTS-Funktion, wenn optionales DLNA-Gerät definiert ist.
Beispiel:
set Television sayText das ist ein Test
siehe commandref des DLNA-Gerätes für weitere Informationen.
  • 0_makro
Makrofunktion
mehrere kommagetrennte RC-Befehle an das Gerät senden (jeder Befehl führt zu einer Pause von delayMacro microsec.)
set <name> 0_macro <RC command1> [,RC command2,RC command3....]
Beispiel:
set Television 0_macro contents,right,right,,down,enter
einige Fernseher benötigen unterschiedliche Verzögerungen zwischen den RC-Befehlen in einem Makro. Sie können dies durch die Verwendung mehrerer Kommas lösen.
  • 0_text_zeile
Text an das Gerät gesendet (wäre hilfreich, um Daten zu übermitteln, die von interaktiven Anwendungen verwendet werden).
set <name> 0_text_line <TEXT>
Beispiel:
set Television 0_text_line http://192.168.178.1:8083/fhem/btip/info.html
  • 0_App_start Netflix/YouTube (0_App_status Netflix/YouTube)
App im TV starten (Status der App abfragen)

Get

Derzeit keine Funktionen realisiert.

Readings

  • state: Status der Verbindung

Anwendungsbeispiele

Anruferinfo als Bildschirmnachricht über DLNA

Die 70_SamsungAV sollte für ALLE Serien die Ausgabe von Bildschirmnachrichten per DLNA ermöglichen.

Je nach persönlichem Geschmack, lässt es sich in 2 Varianten einrichten: ohne oder mit zusätzlichem Server. Letztere hat den Vorteil, dass man sich mit dem nicht uninteressanten Thema eines Digitalen Media Servers auseinandersetzt, der dann weitere Möglichkeiten(siehe nächster Post) bietet.

Für beide Varianten ist es notwendig

  • z.B. mit dem RSS-Modul dynamisch, also quasi
"realtime" Bilder zu erzeugen. In unserem Fall die Anruferinfo.
  • das Modul DLNAClient DLNARenderer von hier hier zu installieren
(das Modul ist der Vorgänger des offiziellen DLNARenderers, welches derzeit leider nicht für Samsung TV funktioniert)
(die Installation zusätzlicher Perlmodule ist notwendig siehe commandref)
Dieses Modul führt das eigentliche streaming von Mediendateien aus und wird aus dem SamsungAV-Modul lediglich mit dem entsprechenden URI aufgerufen.
  • Vorbereitung des FHEMWEB-devices:
Da wir derzeit noch keine Lösung haben, wie wir username/Passwort übergeben können, muss ein FHEMWEB-device gewählt oder ggfs neu erstellt werden, welches nicht mit dem allowed-device verknüpft ist. Der Port dieses devices sollte logischerweise nicht geroutet sein(kein Zugriff von außen)
Es ist das zusätzliche Attribut allowedHttpMethods mit GET|POST|HEAD einzurichten. Bedeutung u. Auswirkungen sind in der commandref beschrieben.

Habt Ihr die zuvor beschriebenen Installationen ausgeführt und ein RSS-Bild definiert, sollte an dieser Stelle mit dem DLNARendererDLNAClient-Modul generell das Rendering(so nennt man die Ausgabe v. Medien auf dem TV) getestet werden:

Definition

define MeinRenderer DLNARenderer
attr MeinRenderer envPrefix s
attr MeinRenderer envNamespace <undef>
attr defaultRoom EuerRaum

Das Modul sucht selbständig nach verfügbaren devices im lokalen Netzwerk und sollte in EuremRaum ein device angelegt haben.

Danach ist zwingend ein shutdown/restart erforderlich.

Weil das DLNARenderer-Modul außergewöhnlich und komplex ist kann es in Eurer Installation zu Problemen kommen. Dafür habe ich im übernächsten Post ein paar Details zum Verständnis geschrieben.

Rendering-Test:

set DLNARendererdevicenamedesSamsungTV stream http://EureFHEM_IP:EuerFHEM_Port/fhem/rss/EuerRSS.jpg

Erscheint das RSS-Bild auf dem TV, dann habt Ihr alles richtig gemacht und könnt nun den Fernseher definieren:

define MeinFernseher STV MeineTVIP MeinPort DLNARendererdevicenamedesSamsungTV
(MeinPort siehe Serienbeschreibung)

Ist das device definiert, stehen 2 neue Attribute zur Verfügung: "callerURI" und "screenURI", wobei callerURI für die Nutzung von Anruferinfo gedacht ist, während screen allgemeiner sein soll/kann. Über screen und einen Dummy gebe ich z.B. mein InfoDisplay von FHEM auf dem TV aus. In die URIs wird der jeweilige Pfad zum Bild eingetragen.(also so, wie man es bereits beim Test des DLNARenderer gemacht hattet).

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.

Nun kann man erneut die Funktion über die neuen set-Befehle mit den ....URI's testen.

Die letzte Lücke in der Kette für die Ausgabe des aktuellen Anrufers schließen entsprechende notify's. Ich habe ein notify, welches auf das ring-event des FB_CALLMONITOR reagiert.

notify ...... set MeinFernseher caller

Das war's.....

...es sei denn, man möchte nicht nur RSS-Bilder ausgeben und einen zusätzlichen Server einrichten. Wer bereits einen Server wie z.B. Apache installiert hat, sollte problemlos die Dateinamen in die URI'S des SamsungAV-Moduls eingeben bzw. diese auch direkt im DLNARendererDLNAClient-Modul streamen können.

Wer einen richtigen Media-Server einrichten möchte, kann für den Rpi z.B. das recht schlanke miniDLNA installieren. Dieser hat die Besonderheit, dass er alle Medien mit einem Index versieht und nur das indizierte Medium aufgerufen werden kann, also z.B. 170.jpg. Der Originalname ist nicht verfügbar. Um dieser Besonderheit zu begegnen sind 2 wichtige Dinge zu beachten:

  • in der /etc/minidlna.conf ist inotify=no zu setzen. Das verhindert das Neuindizieren bei jeder Änderung/Hinzufügung einer Mediendatei.
  • über z.B. den WindowsMediaPlayer muss man sich den Pfad einer Datei über die Eigenschaften besorgen. Die URI, die im SamsungAV-Modul einzugeben ist, sieht dann z.B. so aus: http://MediaServerIP:MediaServerPort/MediaItems/4711.jpg.

Sofern Ihr nun kein Original-RSS-Bild streamen möchtet, könnt Ihr das im FHEMWEB-device angelegte zusätzliche Attribut allowedHttpMethods mit GET|POST|HEAD auch wieder löschen oder auf den Standard GET|POST setzen.

Beachtet die beschriebenen Zusammenhänge. Ansonsten kann das zum aufhängen oder gar Absturz von FHEM führen !!!!!

Und bedenkt, dass dies eine Alpha-Version ist, die aufgrund der unterschiedlichen Funktionen der TVs nicht für Euren TV getestet ist !!!

Allgemeine Medienausgabe

Sicherlich ist die im vorherigen Post beschriebene Bildschirmnachrichtenausgabe die für viele wichtigste Form der Medienausgabe auf dem Bildschirm. Letztendlich ist es aber nur eine Sonderform der allgemeinen Medienausgabe per DLNA mit dynamischer Mediengenerierung per RSS-Modul.

Tatsächlich lassen sich mit DLNA alle Medien, ob Video, Audio, Foto, die auf einem Medien-Server gespeichert sind, auf den TV "pushen". Das eröffnet dann für die Hausautomatisierung unendlich viele Anwendungsmöglichkeiten. Ich zähle nur mal ein paar Ideen als Anregung dazu auf:

  • es klingelt an der Tür --> Kamera nimmt Bild auf --> Bild wird auf dem TV angezeigt --> Video- oder Audio-Konserve werden abgespielt
  • Einbruchalarm wird ausgelöst --> TV einschalten --> dem Einbrecher wird per Konserve gezeigt, dass sein Einbruch registriert wurde
  • sonstiger Alarm --> Info auf dem Bildschirm mit konkretem Auslöser des Alarms per Video-, Audio-, Foto-Konserve
  • Termin --> Terminerinnerung per per Video-, Audio-, Foto-Konserve

Für die praktische Umsetzung in FHEM bedarf es nur der ereignisgesteuerten Nutzung des DLNARenderer. Die Voraussetzungen wurden im vorherigen Post beschrieben.  ;)

Mit der optionalen Definition stellt das SamsungAV-Modul ein paar Readings mit Informationen zum TV zur Verfügung. Es gibt einen zusätzlichen Befehl sayText, über den eine TTS-Funktion realisiert ist. Ein weiterer Befehl ist volume, welcher das einstellen einer absoluten Lautstärke ermöglicht.

Zusatzinformationen

DLNARenderer für Samsung TV

Was DLNA eigentlich heißt und ist, habt Ihr doch hoffentlich bereits hier gelesen.  ::) Der DLNARenderer ist also eigentlich ein DMC. Er verknüpft Ausgabegeräte(z.B. Samsung TV) mit Mediendateien(Medienserver), übernimmt die Steuerung dieser Verbindung. Was einfach klingt, ist technisch recht komplex. Deshalb ist das Modul in der Handhabung auch etwas außergewöhnlich für FHEM.

Man definiert als erstes ein Masterdevice. Das ist dann später die Zentrale, wo auch gewünschte oder notwendige Attribute definiert werden. Nach dessen Definition und dem save der .cfg ist zwingend ein shutdown/restart erforderlich. Erst und nur dadurch werden manche Attribute wirksam ! Beim restart wird dann das define nebst Attributen durchlaufen und die Zentrale hat sich konfiguriert. Konfiguriert heißt, dass das Modul 3 weitere Systemdevices automatisch im room hidden angelegt hat. Außerdem werden alle DLNAdevices aufgefordert sich zu melden. Geben Sie eine Rückmeldung(können natürlich nur die, die on sind  ;)), werden sie automatisch im room unsorted oder im room des Attributs defaultRoom angelegt. Die Fähigkeiten der devices werden in der Zentrale gespeichert. Das FHEM device des physischen devices dient der User-Steuerung. Dabei bedient es sich der Informationen der Zentrale.. Auch werden Veränderungen(z.B. Lautstärkeänderung per Fb) des physikalischen devices in Readings und events umgesetzt.

Wie funktioniert das und welche Rolle spielen die 3 Systemdevices dabei ? Jedes der Systemdevices lauscht auf einem Port und verarbeitet eingehende Daten entsprechend seines Zwecks: Das Masterdevice setzt EINMALIG bei dessen Definition einen Search-Request ab, auf den dann alle physischen Geräte, die online sind, auf dem mitgegebenen Port antworten können(und das in der Regel auch tun). Die Antworten werden von Systemdevice Nr. 1 empfangen und wie oben beschrieben verarbeitet. Danach erfolgt NIE wieder ein "search" bis zum nächsten FHEM-Start. Deshalb haben Veränderungen der Attribute .....IP oder env.... auch keine Auswirkung im laufenden Betrieb.

Warum werden später trotzdem neue Geräte erkannt ? Weil auch jedes physische device bei Ein-,Ausschalten eine Broadcast-message sendet, nach dem Motto: Hallo hier bin ich bzw. ich bin dann mal weg. (Funktioniert natürlich nicht, wenn man, wie ich, hart per Funksteckdose abschaltet ) Diese Nachrichten werden an Port 1900 "verschickt". Sie empfängt das System-device Nr. 2. Ist das device noch nicht vorhanden, wird es angelegt. Wurde es abgeschaltet, bekommt es den state absent. Nachteilig dabei ist, dass auch nicht DLNA-UPnP-Geräte solche messages auf Port 1900 schicken, z.B. Access Points. Das kann zu Problemen führen, weshalb sich der Ausschluss per ignoredIP empfiehlt.

Bliebe noch System-device Nr. 3. Hier macht das Modul einen eigenen Port auf, teilt dem physischen device mit, dass es auf diesem Port lauscht, um Mitteilungen über Zustandsveränderungen am device zu erfahren. Das ist dann der subscription-process. Dabei wird auch vereinbart wie lange diese Vereinbarung Gültigkeit hat. Diese muss dann natürlich auch immer wieder erneuert werden, renewal halt. Über diesen Weg bekommen wir dann die Readings-Aktualisierung, events in FHEM.

Nochmal weil wichtig zum Verständnis von Problemen:

  • Attribute werden nur beim start von FHEM interpretiert. Bei deren Änderung: save/shutdown/restart erforderlich !
  • Es ist ein Universalmodul für alle devices, die den DLNA-Standard unterstützen. Theoretisch.
  • Master-, 3 System- und das Userdevice(=physischem device) arbeiten verzahnt zusammen.
  • Nicht jedes physische device unterstützt dieselben services und actions
  • Die physischen devices haben in der Regel nur einen eingeschränkten und unterschiedlichen Umfang von zulässigen Mediendateiformaten
  • Manche devices erfordern Spezialattribute beim Master device(s.o.). Es kann aber nur genau ein Masterdevice konfiguriert werden. Der User kann möglicherweise daher nicht alle seiner Geräte in einer FHEM-Installation nutzen. Wahrscheinlich gibt es daher auch Probleme, wenn andere Module dieselben UPnP-Perlmodule nutzen, auf denen das DLNA_Renderer-Modul aufbaut, z.B. das SONOS-Modul.


Das Beispiel für die Definition für Samsung TV und ein Anwenderbeispiel findet Ihr hier

power,poweron,poweroff

Es gibt immer wieder Verwirrung, mit welchen RC-Befehlen sich der TV aus- oder gar einschalten lässt.

Bei den TVs/firmware älteren Datums wird der Befehl poweroff für das Ausschalten des TV unterstützt. In der Regel hat der Befehl poweron keine Funktion, auch wenn sich das syntaktisch ableiten ließe. :-X

Bei neueren Modellen/firmware muss man den Befehl power zum Abschalten nutzen. Auch hier gibt es in der Regel keinen Einschaltbefehl. Bei wenigen TVs(ich denke, dass das in der Regel nur auf Q-Serie zutrifft) kann man den power-Befehl auch zum einschalten benutzen.

Obwohl also in der Regel kein RC-Befehl das Einschalten unterstützt, lässt sich das über folgende Möglichkeiten lösen: 1. Hartes Aus-/Einschalten über eine Funksteckdose. Der TV startet so, wie er im Ausschaltzustand war, also On und vorheriger Kanal, wenn der TV on war. Standby, wenn er im standby war. Ich hab das 5 Jahre praktiziert, ohne dass der TV das übel genommen hat. Aber wer weiß.... 2. über das WOL-Modul. Zumindest bei neueren Modellen ist dies möglich. Bei mir sogar bei einer WLAN-Verbindung(obwohl es nicht zuverlässig funktioniert) Ich habe das device wie folgt definiert

define WOL_TV_device WOL MACdesTV IPdesTV UDPy

Ob die Schnittstellen überhaupt WOL-fähig sind, sollte man außerhalb FHEM testen(z.B. Netzwerkverbindungen im FritzBox-Menü). 3. Falls ein Linux-Gerät(z.B. Raspberry ) via HDMI am TV angeschlossen ist , mittels

echo 'on 0' | cec-client -s -d 1

einschalten. cec-client ist im Paket libcec enthalten.

Und bevor jemand schreibt, dass bei ihm das Einschalten funktioniert, es gibt noch eine Besonderheit der neueren TVs: Sie lassen sich noch ca. 1 min. nach dem Abschalten mit power wieder Einschalten. Aber eben auch nur für diesen kurzen Zeitraum. :-X

Bekannte Probleme / Fehlersuche

Im Foum gibt es zwei Threads

Links