Hilfe bei Websocket client für Samsung Tizen Fernseher gesucht,

Hallo Leute ich versuche grade auf Basis dieses Python Modules(link), ein Php Module für meinen Samsung Fernseher zu erstellen.

Das Python Skript funktioniert super, möchte den Fernseher aber direkt über Websocket ansprechen.

Hier ist mein Code:
SymconModule/SymconSamsungTizen at master · Acer90/SymconModule · GitHub

Wenn ich den Websocket auslesen bekomme ich folgendes:


{"event":"ms.channel.connect","data":{"id":"3a7f6170-5f6d-11e7-8d2f-858d766a5d56","clients":[{"id":"4e140d70-5f32-11e7-8d2f-858d766a5d56","connectTime":1499005532106,"attributes":{},"deviceName":"U21hcnQgVmlldw==","isHost":false},{"id":"5d56e9b0-5f32-11e7-8d2f-858d766a5d56","connectTime":1499005557707,"attributes":{},"deviceName":"U21hcnQgVmlldw==","isHost":false},{"id":"377f09a0-5f34-11e7-8d2f-858d766a5d56","connectTime":1499006353210,"attributes":{},"deviceName":"U21hcnQgVmlldw==","isHost":false},{"id":"835e7d90-5f36-11e7-8d2f-858d766a5d56","connectTime":1499007339497,"attributes":{},"deviceName":"U21hcnQgVmlldw==","isHost":false},{"id":"2227cb10-5f38-11e7-8d2f-858d766a5d56","connectTime":1499008035393,"attributes":{},"deviceName":"U21hcnQgVmlldw==","isHost":false},{"id":"b1d2c960-5f3b-11e7-8d2f-858d766a5d56","connectTime":1499009564918,"attributes":{},"deviceName":"U21hcnQgVmlldw==","isHost":false},{"id":"709fb240-5f3c-11e7-8d2f-858d766a5d56","connectTime":1499009885028,"attributes":{},"deviceName":"U21hcnQgVmlldw==","isHost":false},{"id":"ba0cfba0-5f68-11e7-8d2f-858d766a5d56","connectTime":1499028906074,"attributes":{},"deviceName":"U21hcnQgVmlldw==","isHost":false},{"id":"f3e15d80-5f68-11e7-8d2f-858d766a5d56","connectTime":1499029003096,"attributes":{},"deviceName":"U21hcnQgVmlldw==","isHost":false},{"id":"3a7f6170-5f6d-11e7-8d2f-858d766a5d56","connectTime":1499030839559,"attributes":{},"deviceName":"U21hcnQgVmlldw==","isHost":false}]}}

Hoffe mir kann jemand weiterhelfen.

Es handelt sich im übrigen um einen Samsung Tizen Fernseher mit aktueller Version.

mfg: Acer

Hallo,

ich würde als Basis das Websocket Modul von Nall-chan nehmen: GitHub - Nall-chan/IPSWebSockets: WebSocket Protocol for IP-Symcon

Grüße,
Kai

Hallo Acer,

hast Du es hinbekommen, den TV über IP-Symcon zu steuern?

Viele Grüße…

Also hab das soweit hinbekommen, leider aber nicht über die hier beschriebene PHP Class, mach das derzeit über ein C# Windows Programm was ich extra dafür Programmiert habe und sende mittels php socket an mein C# Windows Programm alle Daten.

Damit ist es Möglich alle Tasten der Fernbedienung zu senden, bis auf das einschalten.
Da mein Fernseher aber WOL kann geht’s halt darüber einfach.

Hoffe konnte dir soweit helfen.
Bei Fragen stehe ich gern zur Verfügung.

Danke für die Info, Acer.

Dann läuft das also nicht, ohne einen PC laufen zu haben?

Und wie funktioniert WOL bei Dir (ich konnte bei meinem Fernseher nichts dazu finden)?

Danke und Grüße…

Wo liegt denn das Problem?
Bei der Benutzung des Websocket Clients?

Grüße,
Kai

Das liegt nicht direkt beim Module, sondern bei mir weil ich das mit der Übergabe der werte zu anderen Modulen noch nicht so richtig verstanden haben. :smiley:

Also WoL klappt bei mir Super, dass stand bei mir auch in der Beschreibung vom Fernseher KU6079.

Wenn du dein Fernseher per App einschalten kannst sollte das aber gehen.

Derzeit hab ich einfach viel um die Ohren und komme nur Selten noch zu etwas, denke das ich erst ab nächsten Jahr wieder zu etwas komme.

Das mit dem übergeben zwsichen den Modulen ist gar nicht so schwer.
Ich hatte da aber am Anfang auch meine Probleme mit…

Du musst dich erstmal mit dem anderem Modul verbinden.

Das machst du in der Create() Funktion:

  $this->ConnectParent("GUID des anderen Modul}");

Ich mache es auch nochmal in ApplyChanges()…

In der Funktion ApplyCHanges() setze ich dann einen Filter (404:slight_smile:

$this->SetReceiveDataFilter(".*Hallo.*");

Das heißt es kommen nur Strings, die Hallo enthalten von dem Parent Modul in meinem Modul an.

Um die Daten zu verarbeiten, die von dem Parent Modul kommen wird folgende Funktion (ReceiveData — IP-Symcon :: Automatisierungssoftware) genutzt:

public function ReceiveData($JSONString) {


Un um an das Parent Modul etwas zu senden nutzt du folgende Funktion (404:slight_smile:

$this->SendDataToParent($Data);

Vielleicht hilft dir das ja etwas. :slight_smile:

Grüße,
Kai

Ich versuch es mal im laufe der Woche umzusetzen kann dahingehend aber nichts versprechen.

Acer

Super, vielen Dank schon einmal…

Also weit klappt das jetzt, wie kann ich nach:

 $this->ConnectParent("GUID des anderen Modul}");  

Die Parameter de Instance ändern, oder wie bekomme ich überhaupt die ObjectID heraus?

Das machst du gar nicht.
Sondern lässt den Nutzer da z.b. seine Daten wie IP-Adresse einstellen.
Andere Parameter kannst du mit GetConfigurationForParent vorgeben.

Und wofür brauchst du jetzt die ID ? :wink:

Michael

die InstanceID benötige ich doch für:

WSC_SendPing(integer $InstanzeID, string $Text);

und mit GetConfigurationForParent kann ich doch nicht die Parameter ändern.
Möchte gern die URL Setzen lassen.

Du musst den Datenaustausch nutzen, darüber geht auch der Ping.
Die URL kannst du mit GetConfigurationForParent vorgeben.
Michael

Siehe Datenfluss oder zur Hilfestellung PHP Modul Dataflow Generator

Entschuldigung, Ping/Pong ist nicht per Datenaustausch verfügbar.
Das gehört ja zum Websocket Protokoll und ist somit in der Client-Instanz zu konfigurieren.

Der Datenaustausch kennt nur das Frame Text oder Binär.
IPSNetwork/README.md at master · Nall-chan/IPSNetwork · GitHub
Michael

??? Jetzt versteh ich gar nichts mehr.

Also ist nun Ping nicht über den Datenaustausch möglich, hab ich das so richtig verstanden.
Dann brauch also wieder die InstanceID vom Splitter?

Müsste mir nicht eigentlich bei meinen Modul nicht eine Übergeordnete Instance angezeigt werden?
Also die Instance WebsocketClient?

Ja, das muss sie.
Wenn nicht, hast du nicht die richtigen GUIDs in der Module.json eingetragen.
Was willst du den mit dem Ping?
Das kann in dem Client doch per GetConfigurationForParent vorgegeben werden und funktioniert dann vollautomatisch.
Michael

Hey wäre net wenn du mir sagst was ich ich die module.json eintragen muss.

also für:

"parentRequirements": [],
    "childRequirements": [],
    "implemented": [],

Das steht doch in der Doku.
Mein Link aus Beitrag 7 enthält die GUIDs und der Link zum Datenfluss aus Beitrag 6 erklärt wie das zusammenhängt.
parentRequirements ist was du versenden willst an den Splitter
implemented was du in deinem Modul empfangen kannst.
Eigeninitiative in der Umsetzung braucht es schon von dir.
Sonst verstehst du nachher nicht was du da eigentlich machst :wink:
Auch wie du dann die Daten weiterleiten und empfangen kannst, wird in Fonzos Link erklärt.