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

Begonnen von CoolTux, 02 Februar 2022, 12:54:52

Vorheriges Thema - Nächstes Thema

CoolTux

Bei einem HTTP 400 scheint fhem eine falsche Anfrage an den LG zu stellen.

Das könnte an einem nicht vorhandenen Pairing liegen.
Aktuell fällt mir dazu gerade nichts ein.
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

locodriver

Zitat von: CoolTux am 21 Februar 2026, 09:08:42
Zitat von: locodriver am 20 Februar 2026, 17:47:09
Zitat von: CoolTux am 27 Januar 2026, 19:02:05appId":"de.zdf.app.zdfm3

Das ist genau das was ich brauche. Danke Dir Uwe. Ich schau mal das ich die Tage die Anpassungen mache.

Hallo CoolTux, hast du schon Zeit gefunden,die Ergänzung einzubauen?

Dankeschön.

Erledigt. Sollte morgen früh im Update enthalten sein.

@Cooltux: funzt wunderbar - danke für die Umsetzung.
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

mabula

Guten Tag,
ich wollte meinen neuen LG der G5 Serie in FHEM integrieren. Gleiches Fehlerbild wir bei Fireball. Das Python Modul aus Seite 18 funktioniert und beim Pairing kommt die notwendige Abfrage zur Zustimmung auf dem TV. Daraus schließe ich, dass das FHEM Modul kein Pairing durchführt.
FHEM auf RPI mit FS20, Homematic, ELERO, Zigbee, Eigenbau z.B. Heizölsensor auf Basis Arduino, Anemometer; Sprachsteuerung offline über vosk/Python

mabula

Anbei für die Fehlersuche ein verbose 5 Mitschnitt für das "connect" Kommando.

2026.02.28 16:38:54.091 4: LGTV_WebOS (TV) - Baue Socket Verbindung auf
2026.02.28 16:38:54.184 4: LGTV_WebOS (TV) - Socket Connected
2026.02.28 16:38:54.185 4: LGTV_WebOS (TV) - WriteFn called
2026.02.28 16:38:54.185 4: LGTV_WebOS (TV) - GET / HTTP/1.1
Host: 192.168.178.35
User-Agent: FHEM
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: MTc3MjI5MzEzNC4xODUwNw==


2026.02.28 16:38:54.185 4: LGTV_WebOS (TV) - send Handshake to WriteFn
2026.02.28 16:38:54.185 4: LGTV_WebOS (TV) - start timer status request
2026.02.28 16:38:54.185 4: LGTV_WebOS (TV) - HASH handshakePayload
2026.02.28 16:38:54.186 5: LGTV_WebOS (TV) - Sending command: {"id":"register_1772293134.18582","type":"register","payload":{"manifest":{"signed":{"appId":"com.lge.test","permissions":["TEST_SECURE","CONTROL_INPUT_TEXT","CONTROL_MOUSE_AND_KEYBOARD","READ_INSTALLED_APPS","READ_LGE_SDX","READ_NOTIFICATIONS","SEARCH","WRITE_SETTINGS","WRITE_NOTIFICATION_ALERT","CONTROL_POWER","READ_CURRENT_CHANNEL","READ_RUNNING_APPS","READ_UPDATE_INFO","UPDATE_FROM_REMOTE_APP","READ_LGE_TV_INPUT_EVENTS","READ_TV_CURRENT_TIME"],"created":"20161123","localizedAppNames":{"":"FHEM LG Remote","de-DE":"FHEM LG Fernbedienung"},"serial":"2f930e2d2cfe083771f68e4fe7bb07","localizedVendorNames":{"":"LG Electronics"},"vendorId":"com.lge"},"permissions":["LAUNCH","LAUNCH_WEBAPP","APP_TO_APP","CLOSE","TEST_OPEN","TEST_PROTECTED","CONTROL_AUDIO","CONTROL_DISPLAY","CONTROL_INPUT_JOYSTICK","CONTROL_INPUT_MEDIA_RECORDING","CONTROL_INPUT_MEDIA_PLAYBACK","CONTROL_INPUT_TV","CONTROL_POWER","READ_APP_STATUS","READ_CURRENT_CHANNEL","READ_INPUT_DEVICE_LIST","READ_NETWORK_STATE","READ_RUNNING_APPS","READ_TV_CHANNEL_LIST","WRITE_NOTIFICATION_TOAST","READ_POWER_STATE","READ_COUNTRY_INFO"],"signatures":[{"signature":"eyJhbGdvcml0aG0iOiJSU0EtU0hBMjU2Iiwia2V5SWQiOiJ0ZXN0LXNpZ25pbmctY2VydCIsInNpZ25hdHVyZVZlcnNpb24iOjF9.hrVRgjCwXVvE2OOSpDZ58hR+59aFNwYDyjQgKk3auukd7pcegmE2CzPCa0bJ0ZsRAcKkCTJrWo5iDzNhMBWRyaMOv5zWSrthlf7G128qvIlpMT0YNY+n/FaOHE73uLrS/g7swl3/qH/BGFG2Hu4RlL48eb3lLKqTt2xKHdCs6Cd4RMfJPYnzgvI4BNrFUKsjkcu+WD4OO2A27Pq1n50cMchmcaXadJhGrOqH5YmHdOCj5NSHzJYrsW0HPlpuAx/ECMeIZYDh6RMqaFM2DXzdKX9NmmyqzJ3o/0lkk/N97gfVRLW5hA29yeAwaCViZNCP8iC9aO0q9fQojoa7NQnAtw==","signatureVersion":1}],"manifestVersion":1,"appVersion":"1.1"},"pairingType":"PROMPT","client-key":""}}
2026.02.28 16:38:54.187 4: LGTV_WebOS (TV) - WriteFn called
2026.02.28 16:38:54.187 4: LGTV_WebOS (TV) - ��␆�␙2K{;[/"#␐9e~[8t|@␔1.␅y2 ␁z3-␜z8,
y"5␐?yiWi:;@.gpA?ek␐g"iS2lvS/"#Iimx\"f|A?"#IispU%e}␐q{;S;pPVi:;Q$m7^,e7F.sm␐g"iW9mpA8iv\8"#iiT\a␟_Jw␈UKwi,;q␄NM`␄LF{␅PLf␔T\j␟"5␐␈OWf␙OUm␆OLa␎_X|␏_Rw␒BVs␙D;␞iR\s␏_P|␘TX~␇E]m
PIai,;`␎A]m␇G\m␘DA␐g"Kw
DF|␄TPt␂CXf␂OWai,;a␎AKq␃"5␐␜RPf␎_Jw␟TP|␌S;␞iWK{␟EF|␄TPt␂CXf␂OWm
L\`␟"5␐␈OWf␙OUm␛ONw␙"5␐␙EXv␔CL`␙EWf␔CQs␅N\~i,;`␎A]m␙UW|␂N^m
PIai,;`␎A]m␞P]s␟EF{␅FV␐g"Lb␏AMw␔FK}␆_Kw␆OMw␔AIbi,;`␎A]m␇G\m␟VF{␅PLf␔EOw␅TJ␐g"Kw
DFf␝_Zg␙R\|␟_M{␆E;og"z@.amW/"#␐y0(␄z1+␁i,;^$cx^"z|V
pi|*m|Ai:b␐i:;t␃ET␒␇G9`.mvF."5␐/e4v␎"#␐
H\�kL^␒
ek\)e}[.nl\,"d␞is|@"au␐q"+Tr3)Wyd+Q-e)
x7.␃-6!W�f|␅)b)␅i,;^$cx^"z|V␝ewV$rWS&ej␐q{;␐q"UukEuW(tk]%izAi}5␐=ewV$rPVi:;Q$m7^,e;Og"iW9mpA8iv\8"#iiLXg␅CQ␐g"Us␞NZz␔W\p
PI␐g"Xb␛_M}␔AIbi,;q␇OJwi,;f␎SMm␄P\|i,;f␎SMm␛RVf␎CMw␏"5␐␈OWf␙OUm
U]{␄"5␐␈OWf␙OUm␏IJb␇A@␐g"Z}␅TK}␇_P|␛UMm␁O@a␟IZyi,;q␄NM`␄LF{␅PLf␔M\v␂AF`␎CV`␏IWui,;q␄NM`␄LF{␅PLf␔M\v␂AFb␇A@p
CR␐g"Z}␅TK}␇_P|␛UMm␟V;␞iCV|␟RV~␔PVe␎R;␞iR\s␏_Xb␛_Jf
TLai,;`␎A]m␈UK`␎NMm␈HX|␅EU␐g"Kw
DF{␅PLf␔D\d␂C\m␇IJfi,;`␎A]m␅EMe␄RRm␘TXf␎"5␐␙EXv␔RL|␅IWu␔AIb␘"5␐␙EXv␔TOm␈HX|␅EUm␇IJfi,;e␙IMw␔NVf␂FPq
TP}␅_M}
SM␐g"Kw
DFb␄W\`␔SMs␟E;␞iR\s␏_Z}␞NM`␒_P|
O;og"j[,nxF>r|Ai:BIispU%amG9e;␈ie`x#b^V=ct^{a^␂"Opx␘U)w?U)Z MsgyIpE"a+d~SNc"Opx{ZA|{LA|;Z+␇;btQ?Y+d2dZ{8Iw|;Z+␇#dQd2ZOh'cw|;b+␆"Ostr.q@␝R~X␈wAd=E+}␄Siv␑5!Z␙+,␋*FWE␒D`X␚gRYxalG d.B(e~_␎2ZH␛Cx␂)J)h8RXQkZf␁rN]~i]H␅hTp␜R`S␆Oo␇1WJ@?huT|G(sqo{'pTf{YWk`n6t*OQw|3l~9S6U|sn^x/hzdB^t␌2QG�Ru~�8|PxlUy:Tm3KQV␈s/q/4K�-JIk%z~D␂4[|9FLy8jrQ>+Nv�OV
2.b:1w␇{cTQ#mzS␓a}x#Gk}:H,k&H}}␈j,|␘Hcx␒rje{HI^;uXJdEZ�.ICk␏h/`␆qxt␆2]j1dRjrNt_2qcxxo6␂'kr␝␅9.U-VK~␜5qsy9`W
wxq␝iC|␈P![␈9x}{q T␚os]*7Wc%AmEv=;␞ispU%amG9eOW9sp]%"#␃6]5␐&aw[-ejF␝ekA"ow␐q15␐*pid.rj[$n;␈i17␃i}5␐;ap@"n~f2p|␐q"I`␄MIfi,;Q'i|\?-rW2"#␐i}d
2026.02.28 16:38:54.187 4: LGTV_WebOS (TV) - Send pairing informations
2026.02.28 16:38:54.187 4: LGTV_WebOS (TV) - start pairing routine
2026.02.28 16:38:54.187 4: LGTV_WebOS (TV) - start Handshake
2026.02.28 16:38:54.187 4: LGTV_WebOS (TV) - ReadFn started
2026.02.28 16:38:54.187 4: LGTV_WebOS (TV) - coruppted data found, run LGTV_WebOS_ProcessRead: HTTP/1.1 400 Bad Request
Connection: close


2026.02.28 16:38:54.187 4: LGTV_WebOS (TV) - process read
2026.02.28 16:38:54.188 4: LGTV_WebOS (TV) - No PARTIAL buffer
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Incoming data: HTTP/1.1 400 Bad Request
Connection: close


2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Current processing buffer (PARTIAL + incoming data): HTTP/1.1 400 Bad Request
Connection: close


2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: H
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: T
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: T
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: P
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: /
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: 1
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: .
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: 1
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: 
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: 4
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: 0
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: 0
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: 
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: B
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: a
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: d
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: 
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: R
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: e
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: q
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: u
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: e
2026.02.28 16:38:54.188 5: LGTV_WebOS (TV) - Garbage character before message: s
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: t
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message:
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message:

2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: C
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: o
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: n
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: n
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: e
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: c
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: t
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: i
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: o
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: n
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: :
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: 
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: c
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: l
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: o
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: s
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message: e
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message:
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message:

2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message:
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Garbage character before message:

2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - return msg:  and tail:
2026.02.28 16:38:54.189 4: LGTV_WebOS (TV) - PARTIAL lenght: 0
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - Tail:
2026.02.28 16:38:54.189 5: LGTV_WebOS (TV) - PARTIAL:
2026.02.28 16:38:54.191 4: LGTV_WebOS (TV) - ReadFn started
2026.02.28 16:38:54.192 4: LGTV_WebOS (TV) - can't read from socket, autodie exception: Can't sysread(IO::Socket::SSL=GLOB(0x555642678a68), <UNDEF>, 10240): Broken pipe at lib/FHEM/Devices/LGTV/LGTVWebOS.pm line 778

2026.02.28 16:38:54.193 5: Starting notify loop for TV, 1 event(s), first is off
2026.02.28 16:38:54.198 5: End notify loop for TV
2026.02.28 16:38:54.198 5: Starting notify loop for TV, 1 event(s), first is power: off
2026.02.28 16:38:54.200 5: End notify loop for TV
2026.02.28 16:38:54.200 4: LGTV_WebOS (TV) - Socket Disconnected
FHEM auf RPI mit FS20, Homematic, ELERO, Zigbee, Eigenbau z.B. Heizölsensor auf Basis Arduino, Anemometer; Sprachsteuerung offline über vosk/Python

schic

Guten Tag LGTV_WebOS Nutzer,

bei einer Netzwerkumstrukturierung und anschließenden Bremsersuche (IPs in 99_myUtils) mit apptime, ist mir aufgefallen, dass das LGTV_WebOS-Modul ca. 4 mal so viel Laufzeit hat wie das nächst langsamere Modul (durchschnittliche 220 ms zu 52 ms). Nach Recherche etc. ist mir in LGTVWebOS.pm das IO::Socket::SSL Interface in "sub Open" als (Haupt)Bremser im Zusammenhang mit dem presence-Reading "absent" aufgefallen. Ich habe den TV nicht auf Quickstart, so dass eine Verbindung mit IO::Socket::SSL weder möglich ist, noch Sinn macht (evtl. besteht das Brems-Problem nicht, wenn Quickstart aktiviert ist).
Also habe ich eine entsprechende Abfrage vor die Socket-Verbindung eingefügt und siehe da, apptime ist von max 260 ms auf max 16 ms gefallen und das Web-Interface fühlt sich nun auch noch viel schneller an (nur gefühlt ;-).

Da ich vorher den ping-Aufruf unter "sub PresenceRun" in Verdacht hatte, habe ich auch diesen Teil ein klein wenig beschleunigt, glaube aber nicht, dass dieser Teil viel bewirkt, sond. könnte in einem langsameren Netz mit den gewählten knapp bemessenen Parametern sogar zu Fehlern führen.

Die Änderung in sub Open:
sub Open {
    my $hash    = shift;
    my $name    = $hash->{NAME};
    my $host    = $hash->{HOST};
    my $port    = 3000;
    my $timeout = 0.1;

# geändert, eingefügt:
    if ( ::ReadingsVal( $name, 'presence', 'none' ) eq 'absent' )
    {
      return ::Log3( $name, 4, "LGTV_WebOS ($name) is absent. Must not connect to $host:$port/3001" );
    }
# hier geht's im Original weiter

und noch die sub PresenceRun:
sub PresenceRun {
    my $string = shift;
    my ( $name, $host ) = split( "\\|", $string );

    my $tmp;
    my $response;

# geändert: die alte ping-Funktion wird ersetzt
    #$tmp = qx(ping -c 3 -w 2 $host 2>&1);    ## no critic (Backtick operator used)

# ersetzt mit Net::Ping und mit 0.1 als sehr knappen(!) timeout-Parameter
    use Net::Ping;
    my $p = Net::Ping->new;
    $tmp = $p->ping($host,0.1);
    $p->close();

    if ( defined($tmp) && $tmp ne '' ) {
# geändert: einiges an Text-Verarbeitung entfällt, da nur 0 oder 1 geliefert wird
        #chomp $tmp;
        ::Log3( $name, 4,
            "LGTV_WebOS ($name) - ping command returned with output:\n$tmp" );
        #$response = $name . '|' . (
        #    $tmp =~ /\d+ [Bb]ytes (from|von)/         ## no critic (Regular expression without "/x")
        #      && $tmp !~ /[Uu]nreachable/x
        #    ? 'present'
        #    : 'absent'
        #);
# neue Text-Verarbeitung der Rückgabe
        if ($tmp){$response = $name . '|' .'present'}
        else     {$response = $name . '|' .'absent'}
# hier geht's im Original weiter
    }
    else {

        $response = "$name|Could not execute ping command";
    }

    ::Log3( $name, 4,
        "sub PresenceRun ($name) - Sub finish, Call LGTV_WebOS_PresenceDone with $response responded" );

    return $response;
}

Das gesamte geänderte LGTVWebOS.pm hängt an. 

grappa24

@schic: Könntest du dich ggf auch dem Problem annehmen, dass einige user mit dem Modul kein "connect" mehr mit ihrem (neueren) WebOS hinbekommen?
Gebäudesicherheit/-komfort, PV-Prognose/Verbrauchssteuerung, Heizungssteuerung, Multimedia, ...
KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200, Netatmo, Nuki, SolarForecast, HEOS, Alexa-FHEM, ...
FHEM 6.4, 2 x RasPi 3B+, Debian Bullseye

schic

@grappa24: leider kenne ich mit WebOS garnicht aus und müsste durch rumprobieren erkunden, was vor sich geht. Das ist zum einen sehr zeitaufwändig und zum anderen habe ich das letzte WebOs-Update nicht eingespielt -> müsste zum rumprobieren updaten und stünde dann bei Misserfolg mit nicht mehr funktionierendem Modul da ...

grappa24

@schic: Wie viele updates hast du denn ausgelassen  ;)
das connecten geht bei "uns" schon seit über einem Jahr und gefühlt 10 updates nicht mehr  :)
Gebäudesicherheit/-komfort, PV-Prognose/Verbrauchssteuerung, Heizungssteuerung, Multimedia, ...
KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200, Netatmo, Nuki, SolarForecast, HEOS, Alexa-FHEM, ...
FHEM 6.4, 2 x RasPi 3B+, Debian Bullseye

schic

das letzte Update-Verlangen (ich glaube es war das einzige überhaupt) kam vor ein paar Wochen. Ich habe einige inoffizielle Apps auf dem TV installiert und das deshalb abgewiesen. Der Bezug zum FHEM-Modul war mir dabei überhaupt nicht bewusst. Die auf meinem LGTV laufende WebOs-Version ist 06.10.45. Der Fernseh ist inzwischen auch schon ein bisschen in die Jahre gekommen - ich schau nicht sehr oft da rein.

schic