FHEM -> Samsung TV mit Tizen

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

Vorheriges Thema - Nächstes Thema

Raymund

#165
Zitat von: KölnSolar am 14 Januar 2018, 09:43:41
Das ist prima  :-* u.U. kann ich später einen "message-part" beitragen, sofern SOAP-messages bei Tizen unterstützt werden  :-\

Anbei zwei Perl-Scripte zum Testen. Das erste registriert die App und schreibt die Session-ID in ein File. Das zweite führt dann den Befehl aus. Bitte beide Scripte an eigene IP etc. anpassen und aus demselben Directory starten.

Das ist jetzt mal eine erste Version. Ich versuche noch, ohne das AnyEvent-Modul auszukommen.

Good luck  ;)

EDIT: do.pl ist/war nur zum testweisen Ausführen der Befehle. Es wurde hier entfernt und ist jetzt im STV-Modul integriert.

Steffen

Hallo!

Bei mir zu Hause einem K Model läuft es gut, nun
wollte ich es bei meiner mam mit einem J Model auch versuchen aber da passiert irgendwie nix?!

Habe es hiermit versucht:

pi@JuttaHomeServer:~ $ python -m samsungctl --host 192.168.178.29 --port 8001 --timeout 5 --method legacy KEY_POWERON
Traceback (most recent call last):
  File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/usr/local/lib/python2.7/dist-packages/samsungctl/__main__.py", line 126, in <module>
    main()
  File "/usr/local/lib/python2.7/dist-packages/samsungctl/__main__.py", line 104, in main
    with Remote(config) as remote:
  File "/usr/local/lib/python2.7/dist-packages/samsungctl/remote.py", line 8, in __init__
    self.remote = RemoteLegacy(config)
  File "/usr/local/lib/python2.7/dist-packages/samsungctl/remote_legacy.py", line 31, in __init__
    self._read_response(True)
  File "/usr/local/lib/python2.7/dist-packages/samsungctl/remote_legacy.py", line 63, in _read_response
    tv_name_len = int.from_bytes(header[1:3],
AttributeError: type object 'int' has no attribute 'from_bytes'


hier die anfragen:

{ "DUID": "uuid:f32c97ba-d339-4aca-9903-9e218e9c0764", "Model": "15_HAWKM_UHD_2D_BASIC", "ModelName": "UE55JU6000", "ModelDescription": "Samsung DTV RCR", "NetworkType": "wired", "SSID": "", "IP": "xxxxxx", "FirmwareVersion": "Unknown", "DeviceName": "[TV] UE55JU6050", "DeviceID": "uuid:f32c97ba-d339-4aca-9903-9e218e9c0764", "UDN": "uuid:f32c97ba-d339-4aca-9903-9e218e9c0764", "Resolution": "1920x1080", "CountryCode": "DE", "SmartHubAgreement": "true", "ServiceURI": "http://xxxxx:8001/ms/1.0/", "DialURI": "http://xxxxcx:8001/ws/apps/", "Capabilities": [ { "name": "samsung:multiscreen:1", "port": "8001", "location": "/ms/1.0/" } ] }

{ "id": "uuid:f32c97ba-d339-4aca-9903-9e218e9c0764", "name": "[TV] UE55JU6050", "version": "2.0.25", "device": { "type": "Samsung SmartTV", "duid": "uuid:f32c97ba-d339-4aca-9903-9e218e9c0764", "model": "15_HAWKM_UHD_2D_BASIC", "modelName": "UE55JU6000", "description": "Samsung DTV RCR", "networkType": "wired", "ssid": "", "ip": "192.168.178.29", "firmwareVersion": "Unknown", "name": "[TV] UE55JU6050", "id": "uuid:f32c97ba-d339-4aca-9903-9e218e9c0764", "udn": "uuid:f32c97ba-d339-4aca-9903-9e218e9c0764", "resolution": "1920x1080", "countryCode": "DE", "msfVersion": "2.0.25", "smartHubAgreement": "true", "wifiMac": "14:bb:6e:e8:a3:32", "developerMode": "0", "developerIP": "" }, "type": "Samsung SmartTV", "uri": "http://xxxxxx:8001/api/v2/" }


Klappt es nicht auf einem J Model???

Mfg Steffen

KölnSolar

 versuch mal das Skript aus #150.
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

Papaloewe

perl regapp.pl

Enter TV Pin: xxxx
HTTP_Request 34.210.190.209: Can't connect.
STEP 1 POST #1: Couldn't get the document.


Hat jemand eine Idee?

Steffen

Hallo!

Ich versuche es mal mit dem Script, muss nur mal sehen ob ich das verstehe...

Kann mir trotzdem jemand sagen was dieser Fehler aussagt???

AttributeError: type object 'int' has no attribute 'from_bytes'


Mfg Steffen

Raymund

#170
Zitat von: Papaloewe am 15 Januar 2018, 18:55:53
perl regapp.pl

Enter TV Pin: xxxx
HTTP_Request 34.210.190.209: Can't connect.
STEP 1 POST #1: Couldn't get the document.


Hat jemand eine Idee?

Internet aus Deinem Netzsegment erreichbar?

Papaloewe

ja
ping web.de
PING web.de (82.165.229.138) 56(84) bytes of data.
64 bytes from bs.web.de (82.165.229.138): icmp_seq=1 ttl=246 time=19.0 ms
64 bytes from bs.web.de (82.165.229.138): icmp_seq=2 ttl=246 time=35.8 ms
64 bytes from bs.web.de (82.165.229.138): icmp_seq=3 ttl=246 time=20.8 ms

Raymund

#172
Zitat von: Papaloewe am 15 Januar 2018, 20:31:26
ja
ping web.de
PING web.de (82.165.229.138) 56(84) bytes of data.
64 bytes from bs.web.de (82.165.229.138): icmp_seq=1 ttl=246 time=19.0 ms
64 bytes from bs.web.de (82.165.229.138): icmp_seq=2 ttl=246 time=35.8 ms
64 bytes from bs.web.de (82.165.229.138): icmp_seq=3 ttl=246 time=20.8 ms


Hallo, also zuerst mal: ich habe das Script aus #158 lediglich nach Perl portiert. Was die genauen Hintergründe dieses Scriptes sind kann ich nur vermuten. Jedenfalls läuft es bei mir und ich kann den TV (H-Serie) steuern, sowohl unter Python wie unter Perl.

Die IP 34.210.190.209 reagiert nicht auf ping. Aber man kann mal mit dem Browser testen: https://34.210.190.209:5443/

Es sollte eine Authentifizierungsabfrage kommen. Das wäre mal der nächste Schritt  ;D

Zum Ausführen der Befehle mit do.pl muss das Modul AnyEvent installiert sein. Eine Möglichkeit zur Installation ist in Zeile 11 dieses Scriptes  angegeben.

Für den FHEMler wäre im Weiteren dann die Erweiterung des bestehenden FHEM-Moduls 70_STV.pm oder eine Neuerstellung zu erwägen. Umfang der Steuerungsmöglichkeiten sind aber wohl nur die einer Fernbedienung.

KölnSolar

ZitatDas Modul sieht ja interessant aus.... Funktioniert das auch mit der F-Serie ?
Geht das nicht mit dem offiziellen STV-Modul mit Port 55000 ?
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

Steffen

Hallo!

Wie sende ich denn mit dem Script die Befehle?!?


sudo perl do.pl
session_key: ADE3BCEDCFxxxxxxxxxxxxxx
session_id:  1
finished.

Raymund

#175
Zitat von: Steffen am 16 Januar 2018, 20:52:52
Hallo!

Wie sende ich denn mit dem Script die Befehle?!?


sudo perl do.pl
session_key: ADE3BCEDCFxxxxxxxxxxxxxx
session_id:  1
finished.


Hallo,

wie unten bereits geschrieben, handelt es sich bei regapp.pl und do.pl um eine Portierung der POC-Scripte (siehe #158) von Python nach Perl. Sozusagen als Machbarkeitsstudie, eben POC.

Um den mit regapp.pl erzeugten Session Key für mehrere Befehle wieder benutzen zu können, wird er persistent in einem File gespeichert. regapp.pl muss also nur 1x pro TV ausgeführt werden. Zur Erzeugung wird 2x auf einen externen Webserver in USA zugegriffen, offensichtlich wohl um dort etwas zu verschlüsseln. Das Script bzw. der ausführende Rechner benötigt also unbedingt Internetzugang! Ob das eine zukunftsträchtige Methode ist, weiß ich nicht.

Danach greift do.pl auf diesen Session Key zurück und kann somit mehrfach, auch nach Abschalten von TV und Raspberry (or whatever) ausgeführt werden (so die bisher bei mir bestätigte Theorie).

Wie im genannten Python-Script (main.py) wird jeweils nur ein bestimmter Befehl ausgeführt und der steht fest verdrahtet im Script. Ich habe ihn in do.pl ganz nach oben geholt und mit "Change here" überschrieben.

Ein paar weitere der ausführbaren Befehle (z.B. KEY_VOLDOWN) stehen bereits (auskommentiert) im Script, andere finden sich z.B. hier: https://knx-user-forum.de/forum/supportforen/wiregate/23204-steuerung-von-samsung-tvs

Also: in beiden Scripten die eigene TV-IP einstellen. Dazu die Scripte editieren (Change here!). Dann mit regapp.pl die Scripte einmalig im TV registrieren, dann mit do.pl den darin auskommentierten Befehl ausführen und gespannt in die "Röhre" schauen, was sich da tut (daher do.pl :-).

Inzwischen habe ich eine neue Version von do.pl mit gleicher Funktion erstellt: do_v2.pl. Diese Version erfordert NICHT mehr die vorherige Installation des AnyEvent-Moduls, sollte also "sofort" funktionieren.

EDIT: do.pl ist/war nur zum testweisen Ausführen der Befehle. Es wurde hier entfernt und ist jetzt im STV-Modul integriert.

Steffen

Zitat von: Raymund am 16 Januar 2018, 23:09:18

dann mit do.pl den darin auskommentierten Befehl ausführen und gespannt in die "Röhre" schauen, was sich da tut (daher do.pl :-).


und da tut sich leider nichts....

Vielen dank erstmal nochmal für deine ausführliche Beschreibung und Hilfe!

Ich hatte die anderen Schritte schon durchgeführt und bekam dann auch am Tv eine Pin abfrage die ich eingegeben hatte,
da hatte ich mir schon gedacht das immer nur ein Befehl über das Script ausgeführt werden kann als ich es mir angesehen hatte.

Da aber nichts am Tv passierte wollte ich nochmal nachfragen.

Gibt es da vielleicht noch andere Ports die man eintragen muss und vielleicht Ports aus dem Internet freigeben kann?!?

Das Model um es sich handelt ist ein UE55JU6050.



Mfg Steffen

Raymund

Zitat von: Steffen am 17 Januar 2018, 05:41:53
und da tut sich leider nichts....

Hallo Steffen,

zunächst einmal sollte bei Dir das Python-Script erfolgreich laufen. Ansonsten wird auch die Portierung nicht besser sein. Die macht nämlich bis auf's Bit dasselbe. Wenn es (nur) an den Ports läge, würden die Scripte allerdings gar nicht durchgehen, weil mehrfach Antworten von TV und dem USA-Server verarbeitet werden. Wenn am Ende "KEY_xxx sent" steht, war der eigentliche Ablauf ja schon mal richtig. Aber sogar der Autor des Python-Scriptes schreibt ja in seinem README.md, dass manche Geräte nicht reagieren.

ZitatNote the the following TV Models are most likely incompatible for one reason or another


J4xxx, J50xx, J51xx, J52xx, J53xx, UNxxJ6200, J6201, J6203, J620D   
H4xxx, H510x, H52xx, H53x3, H5403, H6003, H61x3, H6201, H6203, S9, S9C   

KölnSolar

#178
Da es hier ja ein wenig drunter und drüber geht u. S. leider zig verschiedene Versionen für Kommunikation mit dem TV u. erforderliche Zugangsberechtigung hat, erstelle ich die Tage mal einen neuen Thread als Zusammenfassung, was mit welchem TV(Serie, Modell, Firmware) wie geht. Dazu habe ich bereits den Thread durchgepflügt u. mir die verwertbaren Ergebnisse herausgefiltert. Ich bräuchte noch von jemand die Abbildung der Zugangsberechtigung für Serien ab H u. ob die dann bis M bei allen gleich ist.

Zugangsberechtigung bis F-Serie(vermutlich, definitiv bei E-Serie):
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.

Und nachdem Raymund ja das POC-Python-Skript in Perl übersetzt hat, baue ich das mal vergleichbar samsungctl in die STV-Version v. Dominik ein. Sollte eigentlich relativ simpel sein, dauert aber noch etwas..... Sollte jemand schon damit begonnen haben, bitte Meldung zur Vermeidung v. Doppelarbeit  ???
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

Steffen

Hallo!


sudo perl do_v2.pl

KEY_POWER sent



Der Aufruf scheint durch zugehen aber auf dem Tv passiert leider nichts.

Ich hatte sehr gehofft das es klappt denn es wäre für meine Mutter die immer durch Ihre Augen mit der Fb schwierigkeiten hat.

Gibt es doch noch irgendwas was man versuchen kann?

Was ich nicht verstehe das die Pin abfrage startet und der Tv ja wohl erreichbar ist aber warum kommen dann keine Befehle an?!?

Mfg Steffen