FHEM -> Samsung TV mit Tizen

Begonnen von Florian_GT, 12 September 2016, 00:15:35

Vorheriges Thema - Nächstes Thema

KölnSolar

#525
Hallo pah,
würd ich gerne machen. Ich finde aber erst einmal keine. Die SuFu hilft mir leider auch nicht. Zumindest die letzten beiden müssten sich per blättern finden lassen... ::)
Grüße Markus
Edit: 10 Seiten geblättert, 2 Links entfernt.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Raymund

#526
Wer hier das FHEM-Modul 70_STV.pm mit seiner H-Serie betreibt, wird die dazu notwendige Schlüsseldatei 'samsung_session_key.txt' vermutlich mit 'regapp.pm' erzeugen (siehe #176). Die Verschlüsselung wird darin mittels eines externen Servers unter der IP 34.210.190.209 erledigt, deren Reverse Lookup zu Amazon Web Services führt. Da die Schlüsseldatei sporadisch immer mal neu erzeugt werden muss (z.B. nach einem Stromausfall, aber auch nicht immer), beschleicht einen die Sorge, dass der bei AWS gehostete Server mal nicht mehr zur Verfügung stehen könnte.

Inzwischen gibt es unter https://github.com/tdudek/samsung-remote-models-2014-and-newer eine Javascript-Lösung, die die Verschlüsselung selbst macht und die ich erfolgreich getestet habe. Es wird allerdings Node.js benötigt.

Markus hat mich aber auch auf eine entsprechende Python-Lösung namens 'SmartCrypto' aufmerksam gemacht: https://github.com/eclair4151/SmartCrypto
Auch diese habe ich erfolgreich getestet und ein für unsere Zwecke geeignetes Script hinzugefügt. Es wird dazu Python3 ab Version 3.5 benötigt, das z.B. in Raspbian Stretch bereits installiert ist (Versionsabfrage mit 'python3 -V'). Weiter ist jetzt PIP notwendig, das mit 'apt-get install python3-pip' installiert wird. Es enthält auch das notwendige 'crypto'. Danach wird mit 'python3 -m pip install websocket-client' noch 'websocket' installiert.

Das von github heruntergeladene ZIP-Archiv mit SmartCrypto wird entpackt. Ich habe den darin enthaltenen Ordner 'PySmartCrypto' gleich unter /opt/fhem platziert. Jetzt wird nur noch das hier angehängte Script 'regapp_smartcrypto.py' dort hineinkopiert und darin die eigene IP des Fernsehers eingetragen (Zeile 12). Das sollte es gewesen sein.

Nach dem Start auf der Console mit 'python3 regapp_smartcrypto.py' erscheint die bekannte 4-stellige PIN auf dem TV, die man in die Console überträgt. Wenn jetzt alles klappt, liegt anschließend die Schlüsseldatei 'samsung_session_key.txt' im Ordner. Durch Auskommentieren der Zeile 16 kann die Schlüsseldatei auch eine Etage höher zu liegen kommen und somit direkt von 70_STV.pm gelesen werden. In Zeile 127 wird noch der User (fhem) und die Gruppe (dialout) der Schlüsseldatei gesetzt. Das kann auskommentiert werden, wenn nicht erwünscht.

Da dieses Script nur die Schlüsseldatei bereitstellt, stellt es keinen Eingriff in 70_STV.pm dar!

KölnSolar

Hallo Raymund,
danke im Namen aller H/(J)-Serien-Besitzer. Feine Sache die Möglichkeit ohne Fremdserverzugriff zu haben. Ich hab dann die "Zusammenfassende Doku" entsprechend modifiziert.

@ALL: Auch wenn Raymund es eigentlich herausgestellt hat: Das ist nur für H/(J)-Serie relevant.

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Prof. Dr. Peter Henning

#528
Hm - die neueste Version von vorgestern, aus dem Thread "Zusammenfassende Doku" liefert

ZitatToo many arguments for main::STV_55000 at /opt/fhem/FHEM/70_STV.pm line 387, near "$par)"
BEGIN not safe after errors--compilation aborted at /opt/fhem/FHEM/70_STV.pm line 1334.

LG

pah

Edit: Kommt wohl vom manuellen Laden des neuen Moduls...

KölnSolar

aber nur bei reload ohne shutdown/restart  ?
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

KölnSolar

Seit gestern haben wir endlich eine Änderung der Controlpoint.pm im offiziellen FHEM. Dadurch kann nun der DLNAClient durch den DLNARenderer abgelöst werden.
Neben dem Attribut envPrefix = s ist nun das Attribut envNamespace = <undef> zusätzlich zu setzen. Die Version des DLNARenderers findet Ihr hier. Am besten lest Ihr die letzten 2 Seiten vor dem verlinkten Post, da dort einige Hinweise zum Verständnis und Vorgehensweise zur Definition des DLNARenderers stehen.
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

FlatTV

Geht die 2018er Q-Serie eigentlich jetzt auch?
Raspi3 - im wesentlichen mit Phoscon, HomeMatic ( aktuell über debmatic), CUL, BOSE-ST und Alexa (Connector)

KölnSolar

Keine positiven Rückmeldungen.
Aber ich vermute, dass seit der Lösung des token-Problems der Q funktioniert. Just try it.  ;)
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

John85

Zitat von: Raymund am 08 Januar 2019, 11:54:12
Wer hier das FHEM-Modul 70_STV.pm mit seiner H-Serie betreibt, wird die dazu notwendige Schlüsseldatei 'samsung_session_key.txt' vermutlich mit 'regapp.pm' erzeugen (siehe #176). Die Verschlüsselung wird darin mittels eines externen Servers unter der IP 34.210.190.209 erledigt, deren Reverse Lookup zu Amazon Web Services führt. Da die Verschlüsselung sporadisch immer mal wiederholt werden muss (z.B. nach einem Stromausfall, aber auch nicht immer), beschleicht einen die Sorge, dass der bei AWS gehostete Server mal nicht mehr zur Verfügung stehen könnte.

Inzwischen gibt es unter https://github.com/tdudek/samsung-remote-models-2014-and-newer eine Javascript-Lösung, die die Verschlüsselung selbst macht und die ich erfolgreich getestet habe. Es wird allerdings Node.js benötigt.

Markus hat mich aber auch auf eine entsprechende Python-Lösung namens 'SmartCrypto' aufmerksam gemacht: https://github.com/eclair4151/SmartCrypto
Auch diese habe ich erfolgreich getestet und ein für unsere Zwecke geeignetes Script hinzugefügt. Es wird dazu Python3 ab Version 3.5 benötigt, das z.B. in Raspbian Stretch bereits installiert ist (Versionsabfrage mit 'python3 -V'). Weiter ist jetzt PIP notwendig, das mit 'apt-get install python3-pip' installiert wird. Es enthält auch das notwendige 'crypto'. Danach wird mit 'python3 -m pip install websocket-client' noch 'websocket' installiert.

Das von github heruntergeladene ZIP-Archiv mit SmartCrypto wird entpackt. Ich habe den darin enthaltenen Ordner 'PySmartCrypto' gleich unter /opt/fhem platziert. Jetzt nur noch das hier angehängte Script 'regapp_smartcrypto.py' dort hinein und darin die eigene IP des Fernsehers eintragen (Zeile 12). Das sollte es gewesen sein.

Nach dem Start auf der Console mit 'python3 regapp_smartcrypto.py' erscheint die bekannte 4-stellige PIN auf dem TV, die man in die Console überträgt. Wenn jetzt alles klappt, liegt anschließend die Schlüsseldatei 'samsung_session_key.txt' im Ordner. Durch Auskommentieren der Zeile 16 kann die Schlüsseldatei auch eine Etage höher zu liegen kommen und somit direkt von 70_STV.pm gelesen werden. In Zeile 127 wird noch der User (fhem) und die Gruppe (dialout) der Schlüsseldatei gesetzt. Das kann auskommentiert werden, wenn nicht erwünscht.

Da dieses Script nur die Schlüsseldatei bereitstellt, stellt es keinen Eingriff in 70_STV.pm dar!

Hallo,
ich hab erfolgreich das Javascript ausprobiert.  :D

Wenn ich die regapp_smartcrypto starte, zeigt der TV eine PIN an.
Leider bekomme ich beim regapp_smartcrypto.py nach der Eingabe der PIN eine Fehlermeldung:

secondStepResponse: {"auth_data":"{\"auth_type\":\"SPC\",\"request_id\":\"5\",\"GeneratorClientHello\":\"019A000000000000000000\"}"}

Traceback (most recent call last):
  File "regapp_smartcrypto.py", line 107, in <module>
    output = HelloExchange(tvPIN)
  File "regapp_smartcrypto.py", line 73, in HelloExchange
    return crypto.parseClientHello(clientHello, hello_output['hash'], hello_output['AES_key'], UserId)
  File "/home/pi/fhem-docker/fhem/PySmartCrypto/crypto.py", line 61, in parseClientHello
    userIdLen=struct.unpack(">I",data[11:15])[0]
struct.error: unpack requires a bytes object of length 4


Offensichtlich wird der ClientHello code nicht komplett gesendet / empfangen.
Wenn ich mir den vom Java anschaue hat der 348 Hex-Stellen.

Hab bisher noch nie wirklich hinbekommen, dass ich den TV per FHEM steuern kann. Auch nicht, wenn die SmartView App aufm Handy parallel läuft (die App funktioniert für sich aber problemlos mit dem TV). FHEM STV mit Port 8001 erkennt nur, dass der TV an oder aus ist, aber kein Befehl wird umgesetzt (egal, ob der SessionKey mit alter regapp oder mit den Werten vom Java)
Der TV ist ein 55JU6450 mit Firmware 1530, was wohl leider schon zu neu ist!?
Gruß,
Jan

Prof. Dr. Peter Henning

Zitataber nur bei reload ohne shutdown/restart
Sag ich ja.

UE55UJ7000

läuft (so ein bisschen...), habe ich im Wiki mit eingetragen. Allerdings nur Zifferntasten - die etwas intelligenteren Sachen gehen gar nicht. Da ist die Steuerung via Harmony deutlich besser.

LG

pah

KölnSolar

ZitatFHEM STV mit Port 8001
ZitatSessionKey
Diese Aussagen passen nicht. Entweder 8001 oder 8000 verschlüsselt. Ich kann nicht ausschließen, dass noch verschlüsselt(wie H) und Port 8001(wie K), aber das kann das Modul nicht.
ZitatUE55UJ7000
Zitat55JU6450
Alte J-Serie halt  :'( Da wusste Samsung wohl nicht, wo der Weg hingehen soll. Mal wie H, mal wie K und mal gar nicht.
ZitatAllerdings nur Ziffern
Kann ich mir kaum vorstellen. Aber wenn es bei Deinem so ist, schlägt der wohl komplett aus dem Raster.
ZitatSteuerung via Harmony deutlich besser
Aber keine Netzwerkbefehle. Mal den DLNARenderer ausprobiert ? Ein paar readings u. events(volume,mute,on/off) und Medienausgabe über STV.
Zitatdie App funktioniert für sich aber problemlos mit dem TV
Nur Zifferntasten wie bei pah mit STV? Alles was irgendwelche Apps können, kann das STV eigentlich auch. 8) Ggfs. müsste mit den bekannten Python-Skripts der individuelle TV näher analysiert werden.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

John85

Zitat von: KölnSolar am 12 Januar 2019, 09:29:17
Diese Aussagen passen nicht. Entweder 8001 oder 8000 verschlüsselt.
Danke für diesen Hinweis, da hab ich wohl nicht recht gelesen. Hab den Port gerade auf 8000 geändert und prompt funktioniert die komplette Steuerung vom TV.  ;D  Hatte gestern zwar auch schon mal alle 3 Ports durchprobiert, aber da gings nicht.
Dort steht ja Port 8000 für J-Serie: https://wiki.fhem.de/wiki/STV#J-Series.282015.29

Zitat von: KölnSolar am 12 Januar 2019, 09:29:17
Mal den DLNARenderer ausprobiert ?
Ich habe den DLNARenderer definiert und FHEM restartet aber es hat keine Geräte erkant. Die zwei hidden-Devices sind da. Wenn ich es richtig verstanden habe, soll er doch die Geräte automatisch erkennen. Welchen Port muss ich im Docker-Container freigeben, damit das funktioniert? Oder woran könnte das noch liegen?


KölnSolar

Aha   ;D 8)
ZitatDLNARenderer
Das hast Du gelesen und befolgt ?  FHEM mindestens Stand 10.1.19 ::)
ZitatDie zwei hidden-Devices sind da.
Sollten 3 sein.
ZitatWelchen Port muss ich im Docker-Container freigeben
Keine Ahnung. Kenne mich weder mit Docker, noch mit Containern aus.  :-[ :'(
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

snoock

Moin,

ich versuche gerade meinen PS51E579, also E-Serie, in fhem zu integrieren. Das STV Modul ist auch im State opened, aber reagiert auf keine Befehle.. Im Eventmonitor kommt aber z.B. " 2019-01-14 14:28:37 STV wz_fernseher VOLUP 1" an. Kennt jemand das Problem?

ch.eick

Auch hier ein herzliches Hallo zusammen :-)

Bisher habe ich ausgiebig das Thema Samsung und DLNARenderer verfolgt.

Ich bin mit FHEM auf dem Stand von gestern und habe volgende Versionen im Einsatz

Samsung UE65HU8500, also H-Serie mit Port 8000 und samsung_session_key.txt im FHEM Directory
DLNARenderer v2.0.7p3
STV v3.1

1) Der session key wurde generiert

2) Ich habe den DLNARenderer definiert und es wird mir initialized angezeigt

defmod MeinRenderer DLNARenderer
attr MeinRenderer userattr acceptedUDNs defaultRoom envNamespace envPrefix ignoreUDNs
attr MeinRenderer room Multimedia
attr MeinRenderer verbose 5

setstate MeinRenderer initialized
setstate MeinRenderer 2019-01-14 11:53:39 state initialized


3) Nach dem DLNARenderer wurde ein "shutdown reboot" durchgeführt und das Netz nach DLNA Devices durchsucht. es wurde dann folgendes angelegt, wobei "[TV] Living room" der Name aus dem Samsung TV ist und somit bereits ausgelesen wurde.

DLNASocket-MeinRenderer
DLNASocket-MeinRenderer-1900
DLNASocket-MeinRenderer-38089
MeinRenderer                                 initialized
[TV] Living room                            online

4) Nun habe ich ein erneutes "shutdown reboot" durchgeführt, was ja nicht schaden sollte.

5) Im Anschluss habe ich dann das STV Modul eingerichtet.

defmod TV_Wz STV 192.168.178.23 8000 MeinRenderer
attr TV_Wz room Multimedia
attr TV_Wz verbose 5

setstate TV_Wz on
setstate TV_Wz 2019-01-14 13:34:26 friendlyName not found
setstate TV_Wz 2019-01-14 13:34:26 modelName not found
setstate TV_Wz 2019-01-14 13:34:26 mute not found
setstate TV_Wz 2019-01-14 13:34:26 presence present
setstate TV_Wz 2019-01-14 13:34:26 state on
setstate TV_Wz 2019-01-14 13:34:26 stateAV initialized
setstate TV_Wz 2019-01-14 13:34:26 volume not found


6) Nun kann ich den UE65HU8500 ansteuern und er lässt sich weitestgehend gut über STV steuern. Das Mapping der Befehle hängt wohl von der Firmware ab, wie ich bereits erfahren habe.



Nun hänge ich beim Ansteuern über DLNARenderer, denn ich kann nicht erkennen, dass irgend etwas zum TV gesendet wird. Eine Lautstärke Veränderung ist nur im Log zu sehen.


2019.01.14 14:36:27 4: [STV] TV_Wz online with 192.168.178.23:8000 - HTTP-Response: 200
2019.01.14 14:36:49 5: DLNARenderer: DLNA_bc14853da38d, RenderingControl: urn:schemas-upnp-org:service:RenderingControl:1 found. OK.
2019.01.14 14:36:49 5: DLNARenderer: DLNA_bc14853da38d, RenderingControl, SetVolume(0,Master,0) succeed.
2019.01.14 14:37:27 4: [STV] TV_Wz online with 192.168.178.23:8000 - HTTP-Response: 200


Danach habe ich versucht eine Textnachricht mit Wandlung als Sprachausgabe zu senden.

set DLNA_bc14853da38d stream http://translate.google.com/translate_tts?tl=en&client=tw-ob&q=http://translate.google.com/translate_tts?tl=de&client=tw-ob&q=Hallo%20Test

Im Log steht dann folgendes, wobei die Meldung zu STV jede Minute kommt.

2019.01.14 14:59:28 4: [STV] TV_Wz online with 192.168.178.23:8000 - HTTP-Response: 200
2019.01.14 14:59:57 5: DLNARenderer: DLNA_bc14853da38d, AVTransport: urn:schemas-upnp-org:service:AVTransport:1 found. OK.
2019.01.14 14:59:57 5: DLNARenderer: DLNA_bc14853da38d, AVTransport, SetAVTransportURI(0,http://translate.google.com/translate_tts?tl=en&client=tw-ob&q=http://translate.google.com/translate_tts?tl=de&client=tw-ob&q=Hallo%20Test,) succeed.
2019.01.14 14:59:57 5: DLNARenderer: DLNA_bc14853da38d, AVTransport: urn:schemas-upnp-org:service:AVTransport:1 found. OK.
2019.01.14 14:59:58 5: DLNARenderer: DLNA_bc14853da38d, AVTransport, Play(0,1) succeed.
2019.01.14 15:00:28 4: [STV] TV_Wz online with 192.168.178.23:8000 - HTTP-Response: 200
2019.01.14 15:01:05 5: DLNARenderer: DLNA_bc14853da38d, AVTransport: urn:schemas-upnp-org:service:AVTransport:1 found. OK.
2019.01.14 15:01:05 5: DLNARenderer: DLNA_bc14853da38d, AVTransport, SetAVTransportURI(0,http://translate.google.com/translate_tts?tl=en&client=tw-ob&q=http://translate.google.com/translate_tts?tl=de&client=tw-ob&q=Hallo%20Test,<DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/" xmlns:sec="http://www.sec.co.kr/"><item id="-1" parentID="parent" restricted="1"><upnp:class>object.item.audioItem.musicTrack</upnp:class><dc:title>http://translate.google.com/translate_tts?tl=en&amp;client=tw-ob&amp;q=http://translate.google.com/translate_tts?tl=de&amp;client=tw-ob&amp;q=Hallo%20Test</dc:title><upnp:album>http://translate.google.com/translate_tts?tl=en&amp;client=tw-ob&amp;q=http://translate.google.com/translate_tts?tl=de&amp;client=tw-ob&amp;q=Hallo%20Test</upnp:album><res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_OP=01;DLNA.ORG_FLAGS=01700000000000000000000000000000" size="40896">http://translate.google.com/translate_tts?tl=en&amp;client=tw-ob&amp;q=http://translate.google.com/translate_tts?tl=de&amp;client=tw-ob&amp;q=Hallo%20Test</res></item></DIDL-Lite>) succeed.
2019.01.14 15:01:05 5: DLNARenderer: DLNA_bc14853da38d, AVTransport: urn:schemas-upnp-org:service:AVTransport:1 found. OK.
2019.01.14 15:01:05 5: DLNARenderer: DLNA_bc14853da38d, AVTransport, Play(0,1) succeed.
2019.01.14 15:01:28 4: [STV] TV_Wz online with 192.168.178.23:8000 - HTTP-Response: 200

Die Sprachausgabe vom Übersetzungsdienst im Browser ist tadellos.

Was könnte ich denn nun in meiner Konfiguration vergessen haben? Das Forum habe ich im Laufe des letzten Jahres bereits zu diesem Thema leer gelesen, denn soooo lange bin ich da schon dran.

Viele Grüße
     Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick