[82_LGTV_WebOS.pm] Modul für LG TV's mit WebOS

Begonnen von CoolTux, 08 Februar 2017, 00:02:58

Vorheriges Thema - Nächstes Thema

CoolTux

Da muß ich wohl erstmal drüber schlafen. Mir fällt gerade nichts mehr ein. Sorry
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Tina

Danke und vielen Dank schon einmal für Deinen Support.
Ich grübel auch weiter vor mich hin.

CoolTux

Was ich nicht verstehe ist das das Modul nicht Dein off über die Fernbedienung sofort mit bekommt. Wenn ich bei mir über die Fernbedienung ausschalte dann kommt im Modul fast zeitgleich ein off im state.
Wenn du magst teste Mal bitte. Fernsehr an, warten bis state im Device on ist, dann Fernsehr über Fernbedienung aus und bitte komplett ausschalten.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Tina

Wenn ich den TV mit der Fernbedienung ausschalte, bleibt er in fhem trotzdem auf on. Direkt im Anschluss habe ich die Steckdose ausgeschaltet. In fhem bleibt der Status trotzdem auf on. Wiederum 6 min später wird fhem blockiert, obwohl der TV stromlos ist.

CoolTux

Kannst Du Dir nicht einen neuen LG kaufen  ;D

Spaß. Ich schlage Mal drüber


Nachti
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

DeeSPe

Zitat von: CoolTux am 05 Oktober 2017, 22:12:03
Kannst Du Dir nicht einen neuen LG kaufen  ;D

Spaß. Ich schlage Mal drüber


Nachti

Bitte nicht schon wieder Schläge... :D :D :D

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Tina

Danke und Gute Nacht.
Ich werde morgen weiter testen, was mein TV so alles macht oder nicht  :-\

GrandJury

Auch mit der neuen Version, gibt es bei mir keine Veränderung. Dass Reading "LaunchApp" bleibt unverändert, nachdem es sich einmal aktualisiert hat. Danach erfolgt keine Änderung mehr. Erst nach einem Neustart von Fhem.

CoolTux

Zitat von: GrandJury am 05 Oktober 2017, 23:22:32
Auch mit der neuen Version, gibt es bei mir keine Veränderung. Dass Reading "LaunchApp" bleibt unverändert, nachdem es sich einmal aktualisiert hat. Danach erfolgt keine Änderung mehr. Erst nach einem Neustart von Fhem.

Die Version für Dich sollte auch nichts beheben sondern hat erweiterte Debugmeldungen. Die brauche ich bitte. Logfile
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

GrandJury

Sorry  :-[

2017.10.06 00:33:52 3: LGTV_WebOS (Fernseher) - Corrected JSON String: {"type":"registered","id":"register_1507242832.58107","payload":{"client-key":"361f14a4bd4ac5570c9c738232bd43a8"}}
2017.10.06 00:34:02 3: LGTV_WebOS (Fernseher) - Corrected JSON String: {"type":"response","id":"request_1507242842.58653","payload":{"returnValue":true,"scenario":"mastervolume_ext_speaker_arc","volume":0,"mute":false}}
2017.10.06 00:34:06 3: LGTV_WebOS (Fernseher) - Corrected JSON String: {"type":"response","id":"request_1507242846.59116","payload":{"appId":"com.webos.app.livetv","returnValue":true,"windowId":"","processId":""}}
2017.10.06 00:34:07 3: LGTV_WebOS (Fernseher) - Corrected JSON String: {"type":"response","id":"request_1507242846.62862","payload":{"returnValue":true}}
2017.10.06 00:34:53 3: LGTV_WebOS (Fernseher) - Sucessfull WS connection to 192.168.178.112
2017.10.06 00:34:53 3: LGTV_WebOS (Fernseher) - Corrected JSON String: {"type":"registered","id":"register_1507242893.71808","payload":{"client-key":"361f14a4bd4ac5570c9c738232bd43a8"}}
2017.10.06 00:35:34 3: LGTV_WebOS (Fernseher) - Sucessfull WS connection to 192.168.178.112
2017.10.06 00:35:34 3: LGTV_WebOS (Fernseher) - Corrected JSON String: {"type":"registered","id":"register_1507242934.42627","payload":{"client-key":"361f14a4bd4ac5570c9c738232bd43a8"}}
2017.10.06 00:36:15 3: LGTV_WebOS (Fernseher) - Sucessfull WS connection to 192.168.178.112
2017.10.06 00:36:15 3: LGTV_WebOS (Fernseher) - Corrected JSON String: {"type":"registered","id":"register_1507242975.12783","payload":{"client-key":"361f14a4bd4ac5570c9c738232bd43a8"}}
2017.10.06 00:36:56 3: LGTV_WebOS (Fernseher) - Sucessfull WS connection to 192.168.178.112
2017.10.06 00:36:56 3: LGTV_WebOS (Fernseher) - Corrected JSON String: {"type":"registered","id":"register_1507243016.23972","payload":{"client-key":"361f14a4bd4ac5570c9c738232bd43a8"}}
2017.10.06 00:37:36 3: LGTV_WebOS (Fernseher) - Sucessfull WS connection to 192.168.178.112
2017.10.06 00:37:37 3: LGTV_WebOS (Fernseher) - Corrected JSON String: {"type":"registered","id":"register_1507243056.96062","payload":{"client-key":"361f14a4bd4ac5570c9c738232bd43a8"}}


Internals:
   DEF        192.168.178.112
   FD         42
   HOST       192.168.178.112
   NAME       Fernseher
   NR         234
   PARTIAL
   STATE      on
   TYPE       LGTV_WebOS
   VERSION    1.0.1
   READINGS:
     2017-10-03 11:50:04   3DMode          2d
     2017-10-06 00:43:42   channel         -
     2017-10-06 00:43:42   channelCurrentEndTime -
     2017-10-06 00:43:42   channelCurrentStartTime -
     2017-10-06 00:43:42   channelCurrentTitle -
     2017-10-06 00:43:42   channelMedia    -
     2017-10-06 00:43:42   channelName     -
     2017-10-06 00:43:42   channelNextEndTime -
     2017-10-06 00:43:42   channelNextStartTime -
     2017-10-06 00:43:42   channelNextTitle -
     2017-10-03 11:50:06   extInput_AV     connect_0
     2017-10-03 11:50:06   extInput_HDMI-2 connect_0
     2017-10-03 11:50:06   extInput_Komponente connect_0
     2017-10-03 11:50:06   extInput_PS4    connect_0
     2017-10-03 11:50:06   extInput_Recalbox connect_0
     2017-10-06 00:34:06   input           -
     2017-10-05 23:19:06   lastResponse    error - 500 Application error
     2017-10-06 00:34:06   launchApp       TV
     2017-10-06 00:43:43   lgKey           361f14a4bd4ac5570c9c738232bd43a8
     2017-10-03 07:50:30   pairing         unpaired
     2017-10-05 23:22:51   service_api     v.1
     2017-10-05 23:22:51   service_audio   v.1
     2017-10-05 23:22:51   service_config  v.1
     2017-10-05 23:22:51   service_media.controls v.1
     2017-10-05 23:22:51   service_media.viewer v.1
     2017-10-05 23:22:51   service_pairing v.1
     2017-10-05 23:22:51   service_settings v.1
     2017-10-05 23:22:51   service_system  v.1
     2017-10-05 23:22:51   service_system.launcher v.1
     2017-10-05 23:22:51   service_system.notifications v.1
     2017-10-05 23:22:51   service_timer   v.1
     2017-10-05 23:22:51   service_tv      v.1
     2017-10-05 23:22:51   service_user    v.1
     2017-10-05 23:22:51   service_webapp  v.2
     2017-10-06 00:44:03   state           on
     2017-10-06 00:34:02   volume          0
   helper:
     wsKey      MTUwNzI0MzQyMy4xNzE0

     device:
       registered 1
       runsetcmd  1
       channelguide:
         counter    92
Attributes:
   devStateIcon on:10px-kreis-gruen:off off:10px-kreis-rot:on
   room       LGTV

Tina

Hallo CulTux,

ich habe noch ein wenig mit meinem TV und Deinem Modul gespielt.
Insbesondere wollte ich das Modul ein wenig besser verstehen.

Ich kam zu der Erkenntnis, dass die Methode LGTV_WebOS_TimerStatusRequest($) in Kombination mit meinem TV nicht einwandfrei funktioniert.
Jetzt bitte nicht lachen, aber um zu verstehen was wann passiert, habe ich Log-Meldungen hinzugefügt.


sub LGTV_WebOS_TimerStatusRequest($) {
Log3 "Tina", 3, "Hash wird geprueft...";
    if( !IsDisabled($name) and $hash->{FD} and $hash->{helper}{device}{registered} == 1 ) {
        Log3 "Tina", 3, "Action 1: FD und helper,device,regisrtierung ist erfolgreich";
    } elsif( IsDisabled($name) ) {
Log3 "Tina", 3, "Action 2: Name = ($name)is disabled";
    } else {
        Log3 "Tina", 3, "Action 3: Ansosnten setze TV auf aus.";
    }
}


Der Test "Strom an - TV an - TV aus - Strom aus" kann man jetzt schön den Logmeldungen entnehmen.
Vorab eine kurze Zusammenfassung, was ich daraus lese:

Der Strom geht sofort an.
Der TV wird mit kurzer Verzögerung ebenfalls als on erkannt.
Der TV wird abgeschaltet (fhem merkt nichts).
Ca. 6 min später wird fhem für ca. 10 min blockiert.
Erst im Anschluss wird der TV in fhem als off gemeldet.

Ich schließe daraus, dass mein TV irgendetwas anderes sendet als die anderen LGs hier im Forum.



2017.10.06 14:24:25 3: Hash wird geprueft...
2017.10.06 14:24:25 3: Action 3: Ansosnten setze TV auf aus.
2017.10.06 14:24:34 3: FS20 set W_Hifi on
2017.10.06 14:24:35 3: Hash wird geprueft...
2017.10.06 14:24:35 3: Action 3: Ansosnten setze TV auf aus.
2017.10.06 14:24:45 3: Hash wird geprueft...
2017.10.06 14:24:45 3: Action 3: Ansosnten setze TV auf aus.
2017.10.06 14:24:55 3: Hash wird geprueft...
2017.10.06 14:24:55 3: Action 3: Ansosnten setze TV auf aus.
2017.10.06 14:24:58 3: YAMAHA_AVR (W_Stereoanlage) - device W_Stereoanlage reappeared
2017.10.06 14:25:05 3: Hash wird geprueft...
2017.10.06 14:25:05 3: Action 3: Ansosnten setze TV auf aus.
2017.10.06 14:25:05 3: Hash wird geprueft...
2017.10.06 14:25:05 3: Action 3: Ansosnten setze TV auf aus.
2017.10.06 14:25:05 3: LGTV_WebOS (LGTV) - Sucessfull WS connection to 192.168.178.38
2017.10.06 14:25:15 3: Hash wird geprueft...
2017.10.06 14:25:15 3: Action 1: FD und helper,device,regisrtierung ist erfolgreich
2017.10.06 14:25:20 3: FS20 set W_Hifi off
2017.10.06 14:25:25 3: Hash wird geprueft...
2017.10.06 14:25:25 3: Action 1: FD und helper,device,regisrtierung ist erfolgreich
2017.10.06 14:25:31 3: YAMAHA_AVR (W_Stereoanlage) - could not execute command on device W_Stereoanlage. Please turn on your device in case of deactivated network standby or check for correct hostaddress.
2017.10.06 14:25:35 3: Hash wird geprueft...
2017.10.06 14:25:35 3: Action 1: FD und helper,device,regisrtierung ist erfolgreich
...
2017.10.06 14:32:26 3: Hash wird geprueft...
2017.10.06 14:32:26 3: Action 1: FD und helper,device,regisrtierung ist erfolgreich
2017.10.06 14:32:36 3: Hash wird geprueft...
2017.10.06 14:32:36 3: Action 1: FD und helper,device,regisrtierung ist erfolgreich
2017.10.06 14:41:37 1: 192.168.178.24:1000 disconnected, waiting to reappear (HMLAN)
2017.10.06 14:41:37 1: HMLAN_Parse: HMLAN new condition disconnected
2017.10.06 14:41:37 1: Perfmon: possible freeze starting at 14:32:43, delay is 534.156
2017.10.06 14:41:37 3: Hash wird geprueft...
2017.10.06 14:41:37 3: Action 3: Ansosnten setze TV auf aus.
2017.10.06 14:41:37 1: HMLAN_Parse: HMLAN new condition init
2017.10.06 14:41:37 1: 192.168.178.24:1000 reappeared (HMLAN)
2017.10.06 14:41:38 1: HMLAN_Parse: HMLAN new condition ok


Um andere Fehler auszuschließen habe ich noch einen Test mit einem fast leerem fhem gemacht.
Leider führte auch dies beim Ausschalten des TV zum Absturz.

Desweiteren habe ich versucht mit wireshark die Kommunikation aufzuzeichnen.
Wenn er ausgeschaltet wird, dann sendet er nachfolgende und ähnliche Pakete (siehe Anhang). Gibt es etwas was ich dort überprüfen könnte?

Viele Grüße
Tina

CoolTux

Mensch Tina Du legst Dich ja voll ins Zeug.

Also eigentlich ist das entscheidende folgendes.
Du schaltest den Fernseher aus, egal wie Hauptsache kein Stecker ziehen. Dadurch wird über Socket ein Packet gesendet mit der Länge 0, also keine Daten. Dies kannst du in der Funktion Read Dir anschauen. Wenn das geschieht soll FHEM den Socket abbauen und alles löschen.

Dein Fernseher ist der Meinung es nicht so machen zu müssen, es wäre also interessant zu erfahren was er da genau sendet. Du kannst in der Read Mal direkt eine Ausgabe einbauen nach dem einlesen der socketdaten.

Du hattest auch noch erwähnt das noch mehr am TV hängt. Kannst du das abklemmen?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Tina

Hallo CulTux,

jetzt hast Du es endlich geschafft :-[
ich brauche mehr Informationen: socket, read Dir? Wo soll ich das einbauen? Wo kann ich mir das anschauen? Fhem, wireshark, im Modul? Ich stehe gerade auf dem Schlauch :-(

Ich koppel mal die Yamaha ab, das stand sowieso als nächstes auf meinem Plan.
(Nicht, dass der TV die leeren Pakete an den falschen Empfänger verschwendet)

Bis dann
Tina

CoolTux

Sorry, nichts lag mir gerne als Dich zu verwirren   ;D


sub LGTV_WebOS_Read($) {

    my $hash = shift;
    my $name = $hash->{NAME};
   
    my $len;
    my $buf;
   
   
    Log3 $name, 4, "LGTV_WebOS ($name) - ReadFn started";

    $len = sysread($hash->{CD},$buf,10240);
   
    if( !defined($len) or !$len ) {

        LGTV_WebOS_Close($hash);

        return;
    }
   
unless( defined $buf) {
        Log3 $name, 3, "LGTV_WebOS ($name) - no data received";
        return;
    }
   
   
    if( $buf =~ /({"type":".+}}$)/ ) {
   
        $buf =~ /({"type":".+}}$)/;
        $buf = $1;
       
        Log3 $name, 4, "LGTV_WebOS ($name) - received correct JSON string, start response processing: $buf";
        LGTV_WebOS_ResponseProcessing($hash,$buf);
       
    } elsif( $buf =~ /HTTP\/1.1 101 Switching Protocols/ ) {
   
        Log3 $name, 4, "LGTV_WebOS ($name) - received HTTP data string, start response processing: $buf";
        LGTV_WebOS_ResponseProcessing($hash,$buf);
       
    } else {
   
        Log3 $name, 4, "LGTV_WebOS ($name) - coruppted data found, run LGTV_WebOS_ProcessRead: $buf";
        LGTV_WebOS_ProcessRead($hash,$buf);
    }
}


Das ist die Read Funktion. Diese Funktion wird  von der FHEM Hauptschleife aufgerufen sobald Daten ab Socket anliegen.

$buf enthält die Daten
$len die Länge der Daten

sub LGTV_WebOS_Read($) {

    my $hash = shift;
    my $name = $hash->{NAME};
   
    my $len;
    my $buf;
   
   
    Log3 $name, 4, "LGTV_WebOS ($name) - ReadFn started";

    $len = sysread($hash->{CD},$buf,10240);
   
    if( !defined($len) or !$len ) {

        LGTV_WebOS_Close($hash);

        return;
    }
   
unless( defined $buf) {
        Log3 $name, 3, "LGTV_WebOS ($name) - no data received";
        return;
    }

   #Hier kann natürlich du Mal eine Ausbildung einbauen welche $buf aus gibt
   Log3 $name, 3, "LGTV_WebOS ($name) - data received: $buf";
   
   
    if( $buf =~ /({"type":".+}}$)/ ) {
   
        $buf =~ /({"type":".+}}$)/;
        $buf = $1;
       
        Log3 $name, 4, "LGTV_WebOS ($name) - received correct JSON string, start response processing: $buf";
        LGTV_WebOS_ResponseProcessing($hash,$buf);
       
    } elsif( $buf =~ /HTTP\/1.1 101 Switching Protocols/ ) {
   
        Log3 $name, 4, "LGTV_WebOS ($name) - received HTTP data string, start response processing: $buf";
        LGTV_WebOS_ResponseProcessing($hash,$buf);
       
    } else {
   
        Log3 $name, 4, "LGTV_WebOS ($name) - coruppted data found, run LGTV_WebOS_ProcessRead: $buf";
        LGTV_WebOS_ProcessRead($hash,$buf);
    }
}


Umbau oder besser Zusatz dann so.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Tina

Vielen Dank für die Erläuterung.
Ich probiere es gleich aus, muss noch warten, bis mein fhem wieder aufwacht.

Ich habe aber zwei neue Erkenntnisse.
- An der Yamaha liegt es nicht, die Kopplung habe ich aufgehoben und Sicherheitshalber auch alle Verbindungskabel gezogen.
- Wenn der TV ausgeschaltet wird, wird nur noch das Reading "state" aktualisiert. Die anderen Readings werden nicht mehr aktualisiert (siehe Abbildung, ca. 16:12 habe ich auf Aus gedrückt).