Modul für aktuelle LG-TVs?

Begonnen von oxident, 09 September 2013, 21:38:33

Vorheriges Thema - Nächstes Thema

d.schoen

Vielen Dank für das Modul! Da habe ich lange drauf gewartet.

Ich habe vorgestern mal meine erste Spielerei damit umgesetzt. Basierend auf DOIF, dem ENIGMA2 Modul und eurem Modul klappt es nun ENDLICH, dass der Fernseher automatisch den 3D Modus (de)aktiviert, wenn man auf Sky 3D umschaltet.

define ENABLE3D ([enigma2device:channel] eq "Sky_3D") (set Fernseher_LG remoteControl 3Dvideo; define tmp_at_3d_1 at +00:00:02 set Fernseher_LG remoteControl right; define tmp_at_3d_2 at +00:00:04 set Fernseher_LG remoteControl ok) DOELSE (set Fernseher_LG remoteControl 3Dvideo)

Vielleicht ist dieses Snippet ja für den einen oder anderen von euch interessant, bzw. ggf. kann man es auch gemeinsam weiterentwickeln, so dass das automatische Umschalten bspw. auch bei Aufzeichnungen mit "3D" im Namen aktiviert wird.
FHEM 5.7 auf RasPi2
COC 868MHz, Jeelink Clone
Devices: IT, HomeMatic, LaCrosse, ENIGMA2, LG-TV, Thinkingcleaner (iRobot Roomba), LIFX Wifi-Bulbs
Helper: TelegramBot, Homebridge (Siri), Geofency

Future001

Hallo,

Ich muss mal diesen Thread wieder hoch holen...

Das ist zwar mein erster Post, aber dank dieses Forums habe ich bisher (fast) alles hinbekommen.

Ich hab nun eine ganze Weile versucht, meinen LG mit den hier genannten Schritten zum laufen zu bewegen. Ich habe einen 55EC930V.
Auf Port 8080 antwortet er nicht, hat wohl ein anderes WebOS.
Ich habe aber im Netz diese Anleitung gefunden, um mit ihm kommunizieren zu können, allerdings sind meine Programmierkentnisse eher bescheiden.
https://www.npmjs.com/package/lgtv
Meiner produziert mit nmap die selben Ausgaben - mit ein bischen müsste es laufen.
Vielleicht findet sich ja ein versierter Fhem-User, der an dieser Stelle einspringen kann und ein Modul schreibt/erweitert?


mfG
FHEM auf Raspi3, CUL868, RFXTRX433
MAX! mit Cube eingebunden, Temps, und viele weitere Geräte

fiedel

#197
Auch Hallo!

Unser 2015er WebOS 2.0- TV redet leider auch nicht mit dem 2012er Modul. Auf die von Future verlinkte Software bin ich unabhägig von ihm auch gestoßen und habe in unserem Forum mal die Suche angeworfen - und bin hier gelandet... ;o)
Hätte also auch Interesse an einer Implementierung, oder sachdienlichen Tipps zur Selbsthilfe. Vielleicht lässt sich die Software neben FHEM installieren und entsprechend steuern?

Gruß

Frank

Edit: Hier wird beschrieben, wie man auf Debian node.js und npm installiert. Dann hat man die Voraussetzungen um die Software aus Futures Link zu installieren. Werde mich demnächst mal daran versuchen...
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

fiedel

Sooooooo, erste Erfolge:

Zum testen habe ich Linux Mint 17.2 Cinnamon per "LinuxLive_USB_Creator" auf einen schnellen Stick gespielt und das Notebook damit gestartet. Dann alles upgedatet und die benötigten Tools installiert:

mint@mint ~ $ sudo apt-get update && apt-get upgrade && apt-get dist-upgrade
mint@mint ~ $ sudo apt-get install nodejs
mint@mint ~ $ sudo apt-get install npm

mint@mint ~ $ nodejs -v
v0.10.25
mint@mint ~ $ npm -v
1.3.10

mint@mint ~ $ npm install lgtv

Kurz den TV angepingt: Antwortet. Nun ein erster Test, der noch nicht geklappt hat:
mint@mint ~/node_modules/lgtv/examples $ nodejs show-float.js
connecting to lgtv
Connect Error: Error: getaddrinfo ENOTFOUND
connecting to lgtv

Ursache: Der TV- Name wurde noch nicht aufgelöst. Also etc/hosts editiert:

127.0.0.1 localhost
127.0.1.1 mint
192.168.1.100 lgsmarttv.lan

Nun wird er aufgelöst:

mint@mint ~/node_modules/lgtv/examples $ ping lgsmarttv.lan
PING lgsmarttv.lan (192.168.1.100) 56(84) bytes of data.
64 bytes from lgsmarttv.lan (192.168.1.100): icmp_seq=1 ttl=64 time=103 ms
64 bytes from lgsmarttv.lan (192.168.1.100): icmp_seq=2 ttl=64 time=109 ms

Jetzt die erste Verbindung mit dem TV (muss am TV bestätigt werden) und Anzeige von "It works":

mint@mint ~/node_modules/lgtv/examples $ nodejs show-float.js
connecting to lgtv
WebSocket Client Connected on IP:192.168.1.100
First usage, let's pair with TV.
Sending handshake: {"type":"register","id":"register_0","payload":{"forcePairing":false,"pairingType":"PROMPT","manifest":{"manifestVersion":1,"appVersion":"1.1","signed":{"created":"20140509","appId":"com.lge.test","vendorId":"com.lge","localizedAppNames":{"":"LG Remote App","ko-KR":"리모컨 앱","zxx-XX":"ЛГ Rэмotэ AПП"},"localizedVendorNames":{"":"LG Electronics"},"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"],"serial":"###"},"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":[{"signatureVersion":1,"signature":"###"}]}}}
<--- received: {"type":"response","id":"register_0","payload":{"pairingType":"PROMPT","returnValue":true}}
<--- received: {"type":"registered","id":"register_0","payload":{"client-key":"###"}}
Storing client key:###
---> Sending command:{"id":"1","type":"request","uri":"ssap://system.notifications/createToast","payload":{"message": "It works!"}}
<--- received: {"type":"response","id":"1","payload":{"toastId":"com.webos.service.apiadapter-###","returnValue":true}}
LG TV disconnected

Auch das Umschalten auf Browser und TV- Modus usw. (Verzeichnis "/examples") klappt auf Anhieb und ohne Verzögerung. Nun versuche ich das Ganze auf den FHEM- Rechner zu bekommen und per system- Befehlen zu steuern. Weitere Steuerbefehle sollte Wireshark während des Steuerns mit der Android- App zu Tage fördern. Ich hoffe, man braucht nur die Beispiele entspr. zu modifizieren. Auf den FHEM- (ARM) Rechnern könnte es ggf. etwas schwieriger werden node.js und npm zu installieren. Für die aktuellen Raspis mit Debian 8 gibt es aber auch schon fertige Pakete und entsprechende Anleitungen im Netz.

LG  ;D

Frank 


FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

fiedel

Jetzt auf dem FHEM- Rechner:

node.js, npm und lgtv installieren (Wheezy):

sudo apt-get update && apt-get upgrade && apt-get dist-upgrade
sudo echo "deb http://ftp.us.debian.org/debian wheezy-backports main" >> /etc/apt/sources.list
sudo apt-get update
sudo apt-get install nodejs-legacy curl
sudo curl -L --insecure https://www.npmjs.org/install.sh | bash

user@debian:~# sudo nodejs -v
v0.10.29
user@debian:~# sudo npm -v
3.3.8

# um lgtv zu installieren in das Verzeichnis wechseln, in dem man es installiert haben möchte, dann:

sudo npm install lgtv


Ggf. den TV in die etc/hosts eintragen (siehe vorheriger Post) und testen:

{system("nodejs /node_modules/lgtv/examples/show-float.js &");;}

Auf dem Bildschirm erscheint die Bestätigungsanforderung und dann "It works"
Nach dem Vorbild der Lautstärkeregelung kann man leicht ei Script basteln, dem man Texte als Argument übergeben kann:

lgtv = require("lgtv");
/*---------------------------------------------------------------------------*/
var args = process.argv.slice(2);
var msg = 'Es wurde kein Text übergeben';
if (args.length > 0) {
  try {
  msg = (args[0]);
  } catch(error) {
  }
}

console.log("setting volume to:");

var run_test = function() {
  lgtv.connect(function(err, response){
    if (!err) {
      lgtv.set_input("HDMI_1", function(err, response){
    if (!err) {
      lgtv.show_float(msg, function(err, response){
    if (!err) {
      lgtv.set_volume(10, function(err, response){
        lgtv.disconnect();
       });
      };
     });
    };
   });
  };
});
};

run_test();

Das Script setzt die Quelle auf HDMI 1, gibt den Text aus, der als Arg. übergeben wurde und setzt die Lautstärke auf 10.
Der Befehl könnte dann so aussehen:
{system("nodejs /node_modules/lgtv/examples/test.js Das ist ein Test &");;}

Gruß

Frank

FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

tamash

#200
Hi!

Ich bin ziemlich neu hier und beschäftige mich erst seit kurzem mit FHEM.
Soviel zur kurzen Vorstellung.

Ich hab den Änderungsvorschlag von Markus übernommen und ein wenig erweitert.
- Set Befehl um Readings der installierten Apps zu generieren. (appListRequest)
- set: startApp und stopApp zum .... ja, wie der name schon sagt. Erst verfügbar wenn 'appListRequest' einmal ausgeführt wurde und die Readings verfügbar sind.

Der Code ist sicher noch verbesserungswürdig. (Bsp: Es werden einfach alle nicht ASCII chars aus den app namen entfernt.)
Weiters kann man den sicher noch etwas aufräumen und eleganter gestallten.

Feedback. Tests und Verbesserungen/Verbesserungsvorschläge sind immer willkommen.

In der Hoffnung es ist für irgendjemand nützlich.
LG
thomas

Markus Bloch

Hallo Thomas,

ich finde deine Variante etwas umständlich, was die Kommandosyntax angeht. Ich habe mal basierend auf deinem Patch, das ganze in meine Modulvariante integriert.

Die Liste aller Apps wird beim Start einmal abgerufen und dann als Set-Arguments direkt angeboten. Somit entfallen die vielen Readings.

Schau es dir einfach mal an.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

tamash

Hi Markus!

Super!
Das ist wesentlich besser so. Gefällt mir sehr gut.
Meine bescheidenes Wissen über den Aufbau von FHEM hat mir nicht erlaubt das so sauber auszuscripten.

Wie dem auch sei, vielen Dank fürs 'cleanup'.

Vielleicht kannst du mir eine Frage beantworten die mir etwas Unklar ist:
Es macht zwar für die Funktion aus meiner sicht keinen Unterschied aber sollte zb. "statusRequest" nicht eher ein 'get' command sein?
(nur für mein Verständnis)

Danke nochmals & LG
Thomas

CoolTux

Hallo,

Ich möchte das aktuelle Modul für meinen LG LF6309 verwenden. Leider bekomme ich immer wieder auf Port 8080 die Fehlermeldung "Verbindung abgelehnt"
Kann es sein das ich am Fernsehr noch was freischalten muß? Oder gibt es für WebOS2 einen anderen Port?




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

fiedel

Hi,

das Modul passt leider nicht zu den aktuellen TVs. Ich habe mir geholfen, indem ich "lgtv" auf Linux installiert habe und das Ganze per system- Kommandos aus FHEM steuere. Damit kann man Messages einblenden, Quellen umschalten, Lautstärke einstellen usw. Man könte darüber auch den TV auslesen, aber dazu müsste "lgtv" vermutlich in ein FHEM- Modul gegossen werden.

Gruß
Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

CoolTux

Alles klar, ich danke Dir. Ich schaue es mir bei Gelegenheit mal an.
Schade dachte echt ich müsste nicht schon wieder ein Modul schreiben    ::)



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

Markus Bloch

Das Modul LGTV_2012 geht nur für Smart-TV's die zwischen 2012 und 2014 produziert worden sind. Ab 2014 wurde webOS eingeführt, welches komplett anderes angesteuert wird.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

CoolTux

Vielen Dank Markus,

Die Info hatte mir noch gefehlt. Ich habe eine Menge Apps gefundden welche wohl die neuen TV's ansteuern können. Eventuell finde ich da mehr Infos.



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

fiedel

Dieses "lgtv" ist eine quelloffene API. Das müsste für einen Programmierer ohne Reverse- Eng. lesbar und verstehbar sein.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Markus Bloch

Das ist richtig. Nur leider benötigt man auch ein Testobjekt an dem man seine Implementierung testen kann. Programmieren rein nach Spezifikation oder Copy&Paste ist immer gefährlich.

Ich habe ein 2014'er Modell und kann daher nicht als Entwickler dienen.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)