Neues Modul PHTV für Philips Fernseher (inkl. Ambilight)

Begonnen von Loredo, 06 März 2014, 22:09:17

Vorheriges Thema - Nächstes Thema

Christian72D

Klar, die TVs steuern die HUE an.

Aber a) möchte man ja evtl. den TV direkt steuern oder abfragen
b) evtl. auch die HUEs steuern wenn der TV aus ist.

pc1246

Zitat von: Christian72D am 19 Mai 2018, 08:47:57
Klar, die TVs steuern die HUE an.

Aber a) möchte man ja evtl. den TV direkt steuern oder abfragen
b) evtl. auch die HUEs steuern wenn der TV aus ist.
Moin
Wird jetzt OT:
a) wird durch dieses Modul hier realisiert
b) wird durch das HUE Modul von "justme" realisiert
Bei mir funktioniert das Zusammenspiel beider Module halt nicht, und darauf zielte meine Frage am 24.04.!
Und nun zurueck zum Thema!
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

v8turbo

Hallo, bin noch neu hier und habe einige Probleme... Eines ist das Siri (Fhem -> Homebridge) wenn ich sage Sie soll den Fernseher anschalten nicht den TV Anschaltet sondern das LED Licht im TV (stellt es komplett auf Weiß) und wenn Sie den TV Ausschalten soll geht alles aus .... ^^ Wie kann ich dies umstellen ? Ich will doch nur den Fernseher an und aus Schalten -.-

onkel_joerg

So, jetzt kommt der absolute Noob daher.
Moin erst mal.
Ich habe mir einen 2017er 55POS9002 gegönnt und wollte das gute stück in FHEM einbinden. Ich dachte, das ist so einfach, wie die anderen Sachen, die ich bisher drin habe (Denon X4400h, Vu Ultimo, Philips Hue, Logitech Harmony, Homematic)
Aber alles, ws ich bisher geschafft habe, ist ein Gerät, dass zwar anwesend ist, aber keine Befehle entgegen nimmt,

Internals:
   CHANGED   
   DEF        192.168.178.210
   INTERVAL   45
   NAME       TV
   NOTIFYDEV  global
   NR         568
   NTFY_ORDER 50-TV
   STATE      absent
   TYPE       PHTV
   READINGS:
     2018-09-03 17:11:09   ambiHue         off
     2018-09-03 17:01:30   ambiMode        internal
     2018-09-03 17:01:30   bri             0
     2018-09-03 17:01:30   channel         -
     2018-09-03 17:01:31   channelList     -,
     2018-09-03 17:01:30   currentMedia    -
     2018-09-03 17:01:30   frequency       -
     2018-09-03 17:01:30   hue             0
     2018-09-03 17:01:30   input           -
     2018-08-30 13:40:17   inputList       
     2018-09-03 17:01:30   level           0 %
     2018-09-03 17:01:30   mute            -
     2018-09-03 17:01:30   onid            -
     2018-09-03 17:01:30   pct             0
     2018-09-03 17:01:30   power           off
     2018-09-03 17:20:44   presence        present
     2018-09-03 17:01:30   receiveMode     -
     2018-09-03 17:01:30   rgb             000000
     2018-09-03 17:01:30   sat             0
     2018-09-03 17:01:30   servicename     -
     2018-09-03 17:01:30   sid             -
     2018-09-03 17:01:30   state           absent
     2018-09-03 17:01:30   stateAV         absent
     2018-09-03 17:01:30   tsid            -
     2018-09-03 17:01:30   volume          -
     2018-09-03 17:01:30   volumeStraight  -
   helper:
     ADDRESS    192.168.178.210
     lastInput  -
     wakeup     1
     audio:
     device:
     supportedAPIcmds:
       audio/volume 0
Attributes:
   devStateIcon on:rc_GREEN:off off:rc_YELLOW:on absent:rc_STOP:on
   group      Entertainment
   icon       it_television
   macaddr    70:AF:24:XX:XX:XX
   room       101_Wohnzimmer
   verbose    5
   webCmd     volume:input:rgb


Auf den vorigen Seiten habe ich auch schon gelesen, werde aber nicht richtig schlau daraus. Muss ich auf dem Raspi noch ein extra Script laufen lassen zum pairen, oder wie
Ich bin recht verwirrt.
Auf dem Android Handy läuft die Steuerun, der TV ist also im Netz
(mit meinem 2012er Samsung war das viel einfacher  :( )
FHEM Docker auf Intel NUCi,
Synology216play-12TB, Vu+ VTI15.x, Panasonic DMP-UB900EGK, Harmony Ultimate+Hub, DenonX4400, 2x HEOS1, Raumfeld S, Philips 55POS9002, Philips Hue, etwas Node Red, etwas Homeassistant
Win11pro64,  i7-11800H @ 2.30GHz, 16 GB, 250GB SSD, div ext HD

Loredo

Das Modul unterstützt keine neueren Geräte mit Android. Ich habe es 2013 für meinen damaligen TV entwickelt. Die Anpassung an die neue API ist ohne konkretes Testgerät vor Ort gescheitert. Es darf sich aber gerne jemand darum bemühen :-)
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

MidtschMusic

Hallo bei mir funktioniert das PH TV nicht habe schon im log geschaut was passiert und beim on schalten sendet er ein Signal an die richtige mac aber an die falsche ip (255.255.255.0) es wird mir angezeigt das das Gerät immer aus ist und deswegen gibt es keine Funktionen.
Ich hoffe ihr könnt mir helfen bin auch sehr neu auf dem Gebiet FHEM und Programmierung

Netten Gruß René

pc1246

Zitat von: MidtschMusic am 07 Oktober 2018, 14:50:59
Hallo bei mir funktioniert das PH TV nicht habe schon im log geschaut was passiert und beim on schalten sendet er ein Signal an die richtige mac aber an die falsche ip (255.255.255.0) es wird mir angezeigt das das Gerät immer aus ist und deswegen gibt es keine Funktionen.
Ich hoffe ihr könnt mir helfen bin auch sehr neu auf dem Gebiet FHEM und Programmierung

Netten Gruß René
Moin, und willkommen im Forum
Du hast aber schon einen aelteren Philipps TV, ansonsten lies mal den Post direkt vor Deinem!
Falls du einen aelteren hast, dann gib uns bitte mal ein list des Devices!
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

katylemon

#382
Zitat von: Jan_H am 04 Oktober 2017, 18:20:32
Hallo Kurt!

Ich bekomme bei Deinem Pairingscript die Fehlermeldung:


Starting pairing request
HTTP POST error code: 500
HTTP POST error message: Can't connect to 192.168.1.123:1926 (certificate verify failed)
malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "(end of string)") at ./pair.sh line 110.




Hast Du eine Idee woran das liegen könnte? Hat Philips inzwischen ein Zertifikat hinterlegt?

Gruß,
Jan

Den selben Fehler hatte ich auch.
Mit einer Modifikationen (in Zeile 25) funktioniert das script bei mir, siehe unten.

Mit dem Modul in FHEM bekomme ich leider auch keine PIN-Abfrage am Fernseher.
Ich vermute, dass die Ursache ähnlicher Natur ist.

Direktes Eintragen der von Script generierten user/key Kombination scheint ebenfalls nicht zum Erfolg zu führen.

#!/usr/bin/perl

use strict;
use warnings;
use JSON;
use Digest::SHA qw(hmac_sha1_base64 hmac_sha1_hex);
use MIME::Base64;
use LWP::UserAgent;
use HTTP::Request::Common;
use IO::Socket::SSL;

my $secretkey;
my @chars;
my $len;
my $deviceid;
my $tosign;
my $authsignature;
my %config;
my %devicespec;
my %data;
my $data_json;
my $uri;
my $authTimestamp;
my $authTimeout;
my $ua = LWP::UserAgent->new(ssl_opts => { SSL_verify_mode => 0, verify_hostname => 0, });
my $req;
my $res;
my $message;
my %resp;
my $authtimestamp;
my $authtimeout;
my $pin;
my %auth;
my %grantdevice;
my %grant_request;


# Übergabeparameter

# IP-Adresse TV
$config{'address'} = "xxx.xxx.xxx.xxx";

# Secret Key (Base64-encoded) für die HMAC-Signatur
$secretkey = "ZmVay1EQVFOaZhwQ4Kv81ypLAZNczV9sG4KkseXWn1NEk6cXmPKO/MCa9sryslvLCFMnNe4Z4CPXzToowvhHvA==";

# Zufällige 16-stellige Device-ID aufbauen
sub createDeviceId(){
        @chars = split("","abcdefghkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ123456789");
        $len = 16;
                foreach (0..$len-1) {
                        $deviceid .= $chars[int(rand(@chars))];
                }
        return $deviceid;
}

# HMAC-Signatur (SHA1 Base64-encoded) aufbauen
sub createsignature(){
        $secretkey = decode_base64($secretkey);
        print "secretkey: ",$secretkey, "\n";
        $authsignature = hmac_sha1_hex($tosign, $secretkey);
        while (length($authsignature) % 4) {
                $authsignature .= '=';
        }
        $authsignature = encode_base64($authsignature);
        chomp $authsignature;
        return $authsignature;
}

# JSON-Data für Pairing-Anfrage aufbauen
sub getDeviceSpecJson(){
        $data{'device'} =  {
        device_name => 'heliotrope',
        device_os => 'Android',
        app_name => 'ApplicationName',
        type => 'native',
        app_id => $config{'application_id'},
        id => $config{'device_id'},
        };
        return $data{'device'};
}

# HTTP-Request für Pairing ausführen

$config{'application_id'} = "app.id";
createDeviceId();
$config{'device_id'} = $deviceid;
$data{'scope'} = ["read", "write", "control"];
getDeviceSpecJson();
$data_json = encode_json \%data;
$uri = "https://".$config{'address'}.":1926/6/pair/request";

print "Starting pairing request", "\n";

$res = $ua->post(
        $uri,
        'Content' => $data_json,
        'Content-Type'=>'application/json',
);

# HTTP-Respose auswerten
if ($res->is_success) {
    $message = $res->decoded_content;
        print "Received reply: $message \n";
}
else {
     print "HTTP POST error code: ", $res->code, "\n";
     print "HTTP POST error message: ", $res->message, "\n";
}

%resp = %{decode_json($message)};

$authtimestamp = $resp{'timestamp'};
$config{'auth_key'} = $resp{'auth_key'};
$authtimeout = $resp{'timeout'};

# PIN vom TV eingeben
print "Enter onscreen passcode: ";
$pin = <STDIN>;
chomp $pin;

# JSON-Data für Pairing - Erweiterung aufbauen

$tosign = $authtimestamp.$pin;
createsignature();

%auth = (
        "auth_AppId" => "1",
        "pin" => $pin,
        "auth_timestamp" => $authtimestamp,
        "auth_signature" => $authsignature,
);

%grant_request = ();
$grant_request{"auth"} = \%auth;
$grant_request{"device"} = $data{'device'};

# Pairing - Erweiterung ausführen
print "Attempting to pair", "\n";

$uri = "https://".$config{'address'}.":1926/6/pair/grant";
$data_json = encode_json \%grant_request;

print "device_id :",$config{'device_id'},"\n";
print "auth_key :",$config{'auth_key'},"\n";

print "Starting pairing request", "\n";

$ua->credentials($config{'address'}.':1926', 'XTV', $config{'device_id'} => $config{'auth_key'});
$res = $ua->post(
        $uri,
        'Content' => $data_json,
        'Content-Type'=>'application/json',
);

# Pairing - Erweiterung auswerten

if ($res->is_success) {
        print "HTTP POST code: ", $res->code, "\n";
    $message = $res->decoded_content;
        print "Received reply: $message \n";
}
else {
     print "HTTP POST error code: ", $res->code, "\n";
     print "HTTP POST error message: ", $res->message, "\n";
}

print "Username for subsequent calls is: ", $config{'device_id'}, "\n";
print "Password for subsequent calls is: ", $config{'auth_key'}, "\n";

### Lautstärke abfragen

print "Taste drücken um Lautstärke abzufragen!", "\n";

# Lautstärke abfragen

$pin = <STDIN>;
chomp $pin;

$uri = "https://".$config{'address'}.":1926/6/audio/volume";

$ua->credentials($config{'address'}.':1926', 'XTV', $config{'device_id'} => $config{'auth_key'});
$res = $ua->get(
        $uri,
        'Content-Type'=>'application/json',
);

if ($res->is_success) {
    $message = $res->decoded_content;
print "Received reply: $message \n";
}
else {
     print "HTTP GET error code: ", $res->code, "\n";
     print "HTTP GET error message: ", $res->message, "\n";
}

katylemon

Weitere Versuche haben ergeben, dass offenbar die Prüfung des von TV-Webserver präsentierten Zertifikats fehlschlägt.
Das Zertifikat des Fernsehers ist von einer Root-CA , die standardmäßig nicht im Zertifikatspeicher zu finden ist.

Um dies zu beheben, kann man die Zertifikatskette von TV herunterladen:
openssl s_client -connect <ip nummer>:1926

In der Ausgabe sind mehrere Zertifikate (-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----), deren Inhalt man wie folgt anzeigen kann:
openssl x509 -in <zertifikat> -text -noout

Zertifikat des Fernshers:
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            92:8f:60:4c:24:4a:ae:6d
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: C = IN, ST = Karnataka, L = Bengaluru, O = TP VISION India Pvt. Ltd., OU = Smart TV, CN = ca.tpvision.com
        Validity
            Not Before: May 19 10:51:53 2015 GMT
            Not After : Oct  4 10:51:53 2042 GMT
        Subject: C = IN, ST = Karnataka, L = Bengaluru, O = TP VISION India Pvt. Ltd., OU = Smart TV, CN = restfultv.tpvision.com
[...]


Das o.g. Zertifikat ist auf den Namen "restfultv.tpvision.com" ausgestellt (Sugject) und von "ca.tpvision.com" signiert (Issuer). Nun suchen wir nach dem Zertifikat dieser CA:
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            bb:b1:0b:17:56:a2:b8:8c
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: C = IN, ST = Karnataka, L = Bengaluru, O = TP VISION India Pvt. Ltd., OU = TP VISION, CN = www.tpvision.com
        Validity
            Not Before: May 19 10:44:57 2015 GMT
            Not After : Oct  4 10:44:57 2042 GMT
        Subject: C = IN, ST = Karnataka, L = Bengaluru, O = TP VISION India Pvt. Ltd., OU = Smart TV, CN = ca.tpvision.com
[...]


Dieses Zertifikat nach /usr/local/share/ca-certificates kopieren und danach mit sudo update-ca-certificates den Zertifikatspeicher aktualisieren.
Voila: nach einem Neustart von FHEM ist das pairing möglich.

kalle86

Zitat von: katylemon am 17 Oktober 2018, 18:40:34
Weitere Versuche haben ergeben, dass offenbar die Prüfung des von TV-Webserver präsentierten Zertifikats fehlschlägt.
Das Zertifikat des Fernsehers ist von einer Root-CA , die standardmäßig nicht im Zertifikatspeicher zu finden ist.

Um dies zu beheben, kann man die Zertifikatskette von TV herunterladen:
openssl s_client -connect <ip nummer>:1926

In der Ausgabe sind mehrere Zertifikate (-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----), deren Inhalt man wie folgt anzeigen kann:
openssl x509 -in <zertifikat> -text -noout
Was hast du für einen Philips Tv?

Ich habe einen PUS7502/12. Was gibst du anstelle von <zertifikat> ein?
wenn ich
openssl x509 -in restfultv.tpvision.com -text -noout
eingebe kommt folgendes?

Error opening Certificate restfultv.tpvision.com
1995748560:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('restfultv.tpvision.com','r')
1995748560:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
unable to load certificate

Irgendwi komme ich da nicht weiter...

Loredo

Zitat von: katylemon am 17 Oktober 2018, 18:40:34
Weitere Versuche haben ergeben, dass offenbar die Prüfung des von TV-Webserver präsentierten Zertifikats fehlschlägt.


Wie kommst du zu diesem Ergebnis bzw. welche Schritte hast du unternommen, um das zu validieren?
Das Modul hat die SSL Verifizierung bereits ausgeschaltet:




                sslargs => {
                    SSL_verify_mode => 'SSL_VERIFY_NONE',
                },


Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

deify

So jetzt melde ich mich hier auch Mal, in der Hoffnung dass jemand das Problem schon irgendwie gelöst hat.

Ich habe auch einen Android TV von 2017 den 55POS9002/12 um genau zu sein.

Ich bin mir dessen bewusst, dass das Modul nicht mehr für diese Modelle supported werden kann. Dennoch habe ich mein Glück probiert.

Out of the box passiert erstmal gar nichts.
Durch entfernen der drei SSL Zeilen bekomme ich schon Mal dad pairing hin. Dieses danach allerdings in Dauerschleife. Auch der bereits genannte Bugfix hilft leider nicht.

Hat jemand weitere Lösungsansatze? Möglichkeiten etwa mit logs die Entwicklung zu unterstützen?

Ich unterstütze jeder Zeit gerne.

Grüße
Michi

GregPac

Zitat von: stauraum am 26 Januar 2018, 17:59:39
Hallo zusammen,

Seit ein paar Tagen habe ich mit meinen PHTV und FHEM so meine kleineren Problemchen.

lt. Fhem meldet sich mein PHTV immer wieder alle paar Sekunden im Netz ab, sprich er geht auf absent, kurz danach wieder auf on.

Edit: Auch mit statischer IP hab ich das Problem.

Hallo,
gibt es hier mittlerweile eine Lösung bzw. einen Ansatz was das Problem verursacht.
Habe einen 48PFS8209/12 aus 2014, diesen mit dem Modul angebunden. Bei mir wechselt der State alle paar Sekunden zwischen Absent und On.

Gruß
Greg
FHEM Raspberry, CUL V3 868 // FS-20 Aktoren, div. Funksteckdosen, Homebridge

Loredo

Ich besitze keinen Philips TV mehr, hat sich also an der Situation kein Testgerät zu haben nichts verändert.

Wer sich berufen fühlt, kann die Maintenance gerne übernehmen.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Zitat von: Loredo am 23 Oktober 2018, 18:44:57
Das Modul hat die SSL Verifizierung bereits ausgeschaltet:


Wie sich (an anderer Stelle) herausstellte, muss der Wert für verify_none auf 0 stehen und nicht auf der Konstante VERIFY_NONE.
Das habe ich vor einigen Tagen behoben, vielleicht funktioniert damit das Modul jetzt besser mit neuen Modellen.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER