Neues Modul "PhilipsTV"

Begonnen von RalfP, 08 November 2022, 15:25:09

Vorheriges Thema - Nächstes Thema

dkreutz

Hallo,

Danke für das Modul. Mein 58PUS8506/12 (2021er ,,The One", AndroidTV 11) wird erkannt, aber das Pairing klappt nicht:
ZitatTV_192168001159: Error while HTTP requesting URL: https://192.168.1.159:1926/6/pair/request - Error - 500 Can't connect to 192.168.1.159:1926

Portfreigabe für PCP/UPnP ist in der Fritzbox freigeschaltet. Muss ich noch irgendwo was freigeben?
Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

RalfP

Hallo dkreuz,

Mit deiner Fritz!Box hat das eigentlich nichts zu tun. Die Fritz!Box selbst kann per Upnp Daten an entsprechende Clients geben. Mehr währe mir jetzt nicht gleich bekannt.

Zitat500 Can't connect to 192.168.1.159:1926

Bedeutet eher, das die Seite nicht aufgerufen werden konnte. Evtl. ist diese nicht vorhanden oder der TV war schlichtweg nicht erreichbar, weil nicht mit dem Netzwerk verbunden oder aus war.

Bei der ersten Verbindung zum TV wird ein SystemRequest durchgeführt. In den Internals sollte dabei auch "system_pairingType" angezeigt werden, was steht bei dir da als Wert? Sonst lass mich mal die "Raw definition" mit Internals wissen.

PS: ich hoffe mal, das das Pairing in deinem 2021 Gerät noch so funktioniert, wie bei meinem "älteren" Gerät.

Grüße
Ralf

dkreutz

Der Fernseher war an und auch im Netzwerk erreichbar. Ein Änderung der Lautstärke war auch im Reading "Volume" sichtbar. Ein Internal "system_pairingType" finde ich nicht, auch kein Eintrag im Logfile. Ich habe mich mal vor einiger mit der Python-Bibliothek PyLips beschäftigt, mit der Philips-TV gesteuert werden können. Da gab es Unterschiede bei den AndroidTV-Versionen bzw. der API (ich glaube die heißt "Jointspace")...

Raw-Defintion
defmod TV_192168001159 PhilipsTV TV 192.168.1.159
attr TV_192168001159 alias 58PUS8506/12
attr TV_192168001159 devStateIcon offline:control_home:on online:control_on_off:on standby:control_standby@red:on standby-keep:control_standby@red:on on:control_standby@gray:off set-online:refresh
attr TV_192168001159 room Wohnzimmer
attr TV_192168001159 verbose 3
attr TV_192168001159 webCmd :

setstate TV_192168001159 offline
setstate TV_192168001159 2022-12-03 13:53:31 Mute 0
setstate TV_192168001159 2022-12-03 12:54:02 Powerstate On
setstate TV_192168001159 2022-12-03 10:36:32 Storage Removed
setstate TV_192168001159 2022-12-03 13:53:31 Volume 23
setstate TV_192168001159 2022-12-03 14:58:23 state offline
Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

Brause

Zitat von: RalfP am 29 November 2022, 12:09:07

Kannst du mal attr expert 1 setzen (hast du evtl. schon) und im GET name NotifyChanges, wie auch GET name SystemRequest, mir die Informationen je Gerät zukommen lassen?


Erstmal vorne weg.
Mit der V024 scheinst Du irgendetwas richtig gemacht zu haben.
Die Readings bei beim 901F bleiben jetzt stehen.
Der 6580 hat jetzt auch das ChannelName und ChannelNo -Reading (keine Channellist).
Der Senior hat für mich aber auch nur noch sehr begrenztes Interesse, da er zu Weihnachten in die ewigen Jagdgründe geht.

Im Anhang findest Du die gewünschten Daten.

Gruss Brause

MDietrich

Hallo Ralph,
ich habe meinen "alten" Fernseher (75PUS7181/12) erfolgreich mit pylips gepairt und nutze ihn via pylips und Alexa.
Gibt es eine Möglichkeit das neue Modul zu verwenden, ohne den Fernseher erneut zu pairen - ich möchte beim Testen nicht immer einen neuen user bzw. passphrase bekommen.

Danke im Voraus,
Matthias
FB 6591 Cable / Raspberry 3b+ (Bookworm) / 4xECHO DOT 4/ Homematic Thermostate, Fenster- und Fenster-Sensoren / Philips HUE / CUL-HM /  Zigbee Schalter und Lampen / Shelly 1

Brause

Hallo Matthias

Du kannst beide Wege parallel benutzen, ohne etwas zwischendurch zu erneuern.
Läuft bei mir auch noch parallel. Pylibs = "produktiv", Modul = Test.

Gruss Brause

RalfP

Hallo,

wenn man den authKey und die deviceID schon hat, kann man diese per Attr setzen, ohne das ein neues Pairing durchführt werden muss.

Grüße
Ralf

RalfP

Hallo dkreutz,

bitte setze mal bei der RAW definition auch den Haken für Internals. Alternativ kannst du auch mal attr name expert 1 setzen und im GET name NotifyChanges, wie auch GET name SystemRequest, ausführen und mir die Informationen zukommen lassen.

Solltest du mit der Python-Bibliothek Pylips eine Verbindung etablieren können, müsste es mein Modul auch können. Hast du mal mit der originalen Philips Remote App einen Versuch gestartet? Die müsste ja ein Pairing durchführen.

Bis jetzt bin ich noch nicht über einen Hinweis auf eine Änderung der API bei den 2021 Geräten gestolpert. Wenn es da etwas geben sollte, bitte mal informieren.

Grüße
Ralf

RalfP

Hallo Brause,

ZitatDie Readings bei beim 901F bleiben jetzt stehen.
Der 6580 hat jetzt auch das ChannelName und ChannelNo -Reading (keine Channellist).

Sofern das NotifyChange nicht vorhanden ist, oder nicht alles liefert was ich benötige, werden die Endpoints einzeln abgerufen. Das sind:

  • Powerstate
  • NetworkInfo
  • CurrentChannel

Die Senderliste hole ich nur unter bestimmten Bedingungen, wie z.B. wenn die Version sich geändert hat.

Bei deinem 901F müsste alles vorhanden sein, was ich bisher vorgesehen hab, oder? Da die NotifyChange sehr minimalistisch ist, müssten die Endpoints direkt aufgerufen worden sein.

Bei dem 6580 wäre es interessant zu wissen was GET name CurrentChannel liefert. Dort gibt es zwei Schlüssel "Channel" und "ChannelList" unter letzterem auch die Version der Senderliste. Wäre mir jetzt nicht ganz sicher, wie meine Routine dies verarbeiten würde.

Grüße
Ralf

dkreutz

Zitat von: RalfP am 04 Dezember 2022, 19:40:28
Hallo dkreutz,

bitte setze mal bei der RAW definition auch den Haken für Internals. Alternativ kannst du auch mal attr name expert 1 setzen und im GET name NotifyChanges, wie auch GET name SystemRequest, ausführen und mir die Informationen zukommen lassen.


Habe heute das Pairing noch einmal gestartet - dieses Mal hat es geklappt. Ob es am expert=1 oder an zwischenzeitlich durchgeführten Updates oder an kosmischer Strahlung lag - keine Ahnung. Trotzdem vielen Dank für Support und Modul!
Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

MDietrich

Hallo Ralph,
danke für das neue Modul. Installation und Nutzung funktionieren.

Den Fernseher habe ich mit vorh. Key und ID (aus Pylips) definiert.

Nach ein paar Versuchen habe ich Fragen und Anmerkungen:
-

  • Das Umschalten auf einen HDMI Eingang dauert recht lange
  • Wenn der Fernseher auf einen HDMI Eingang eingestellt ist, werden kontinuierlich die Readings ChannelCount und ChannelListVersion aktualisiert. Dies scheint auch erhebliche Last zu generieren. die CPU Last, normalerweise bei 5 - 7 %, steigt bis auf 30%
  • Nach einem Zurückschalten auf einen Fernsehkanal werden ChannelName und ChannelNo nicht aktualisiert. Beim Ändern der Lautstärke tritt dann ein Fehler auf
  • Ab und an geht vermutlich der Powerstate verloren, dann werden nur die StandBy-Optionen in der Set Auswahlliste angezeigt.
  • In solchen Situationen erfolgt eine Serie von refreshs, die da System bremsen
und noch ein paar Wünsche:
- ein Reading für den gerade aktiven Input/Source
- Liste und Auswahl der verfügbaren Apps

Ich werde versuchen jetzt zur Steuerung das Alexa-Modul zu verwenden. U.U. sind dann noch weitere Readings erforderlich. Werde berichten.
Wenn möglich unterstütze ich die weitere Entwicklung gerne.

Gruß
Matthias
FB 6591 Cable / Raspberry 3b+ (Bookworm) / 4xECHO DOT 4/ Homematic Thermostate, Fenster- und Fenster-Sensoren / Philips HUE / CUL-HM /  Zigbee Schalter und Lampen / Shelly 1

RalfP

Hallo Matthias,

bitte sende mir mal die RAW definition mit Internals. Alternativ kannst du auch mal attr name expert 1 setzen und im GET name NotifyChanges, wie auch GET name SystemRequest, ausführen und mir die Informationen zukommen lassen. Ich möchte gern sehen welche API (von meiner Diva ist es 6.4.0) Version bei dir zur Verfügung steht.

Das HDMI Umschalten wird nicht direkt über die API abgewickelt. Hier kommt google Assistant zur Anwendung. Im Prinzip die selbige Funktion, als ob du in dein Micro "HDMI 1" sprichst. Prinzipiell sind mit dieser Methode alle vorhandenen Sprachbefehle anwendbar, welche aber in ihrer Anzahl beschränkt sind (https://www.amazon.de/Philips-Television-Smart-TV-Sprachsteuerung/dp/B07JFSPV73). Bis auf die HDMI Umschaltung kann ich alles andere auch mit der API abdecken. Evtl. ist dies aber auch der Grund, warum man den Input nicht abfragen kann. Der Endpoint sources/current gibt einfach keine Antwort.

Die Liste der verfügbaren Apps, sowie das Umschalten auf diese ist eines meiner nächsten ToDo's. Ich muss aber auch gleich sagen, das es scheinbar keine Möglichkeit gibt abzufragen, welche App gerade aktiv ist.
Mit expert 1 habe ich derzeitig nur die Abfrage der Raw-Daten integriert zum Testen - GET name Applications und GET name CurrentApp (was aber nichts Aussagefähiges liefert).

ChannelCount und ChannelListVersion sollte eigentlich sich nur aktualisieren, wenn die Version sich geändert hat (TV hat neue Sender gefunden) oder die ChannelList ist leer (Antenne abgezogen und Sendersuchlauf) sonst eigentlich nicht.
Deine Fehlerproblematik konnte ich bisher nicht reproduzieren. Hier hilft nur ein Blick ins Log. Versuche erst einmal verbose 4, sonst 5 - da wird aber alles geloggt, was schnell unübersichtlich wird. Trotzdem würde mich ein Auszug daraus interessieren, wo die Probleme auftreten.

ZitatAb und an geht vermutlich der Powerstate verloren, dann werden nur die StandBy-Optionen in der Set Auswahlliste angezeigt.
In solchen Situationen erfolgt eine Serie von refreshs, die da System bremsen
Das klingt ja danach, das der Ping nicht erfolgreich war und mit dem nächsten Polling wieder OK ist. Ich versuche mit einem Ping vor jeder Schleife zu prüfen, ob der TV noch erreichbar ist. Wenn sich der Status dabei ändert mache ich ein refresh der Webseite. Sollte der Ping bei dir Verluste haben? Ich rufe Ping nur mit einer Wiederholung und einem Timeout von 1s auf, sollte das zu kurz sein für dein Netz? (Zeile 1379 im Code)

...lass mal hören

Grüße
Ralf

MDietrich

#42
Hallo Ralf,
hier die gewünschten Informationen (edit) im Anhang.

Die laufende Aktualisierung von "ChannelCount" und "ChannellistVersion" tritt nur HDMIx als Quelle auf. "ChannelName" und "ChannelNo" werden gelöscht.
2022.12.06 17:38:02 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:38:02 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:38:02 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:38:02 4:  TV_19216817830: 1st try - error while HTTP requesting URL: https://192.168.178.30:1926/6/powerstate - Error - 401 Unauthorized
2022.12.06 17:38:02 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:38:02 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:38:02 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:38:16 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:38:16 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:38:16 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:38:17 4:  TV_19216817830: 1st try - error while HTTP requesting URL: https://192.168.178.30:1926/6/network/devices - Error - 401 Unauthorized
2022.12.06 17:38:17 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:38:17 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:38:17 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:38:31 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:38:31 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:38:31 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:38:32 4:  TV_19216817830: 1st try - error while HTTP requesting URL: https://192.168.178.30:1926/6/activities/tv - Error - 401 Unauthorized
2022.12.06 17:38:32 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:38:32 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:38:32 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:38:45 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:38:45 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:38:45 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:38:46 4:  TV_19216817830: 1st try - error while HTTP requesting URL: https://192.168.178.30:1926/6/channeldb/tv/channelLists/all - Error - 401 Unauthorized
2022.12.06 17:38:46 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:38:46 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:38:46 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:38:59 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:38:59 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:38:59 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:39:00 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:39:00 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:39:00 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:39:06 4:  TV_19216817830: 1st try - error while HTTP requesting URL: https://192.168.178.30:1926/6/powerstate - Error - 401 Unauthorized
2022.12.06 17:39:07 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:39:07 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:39:07 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:39:08 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:39:08 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:39:08 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:39:08 3:  PhilipsTV: attr TV_19216817830 set pollingInterval 600
2022.12.06 17:39:15 4:  TV_19216817830: 1st try - error while HTTP requesting URL: https://192.168.178.30:1926/6/network/devices - Error - 401 Unauthorized
2022.12.06 17:39:15 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:39:15 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:39:15 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:39:16 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:39:16 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:39:16 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:39:16 4:  TV_19216817830: 1st try - error while HTTP requesting URL: https://192.168.178.30:1926/6/activities/tv - Error - 401 Unauthorized
2022.12.06 17:39:16 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:39:16 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:39:16 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:39:30 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:39:30 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:39:30 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:39:30 4:  TV_19216817830: 1st try - error while HTTP requesting URL: https://192.168.178.30:1926/6/channeldb/tv/channelLists/all - Error - 401 Unauthorized
2022.12.06 17:39:31 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:39:31 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:39:31 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:39:31 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:39:31 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:39:31 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:39:46 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:39:46 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:39:46 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:39:46 4:  TV_19216817830: 1st try - error while HTTP requesting URL: https://192.168.178.30:1926/6/powerstate - Error - 401 Unauthorized
2022.12.06 17:39:46 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:39:47 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:39:47 PhilipsTV TV_19216817830 ChannelListVersion: 194
2022.12.06 17:39:47 3:  TV_19216817830: Channellist loaded with 628 entries!
2022-12-06 17:39:47 PhilipsTV TV_19216817830 ChannelCount: 628
2022-12-06 17:39:47 PhilipsTV TV_19216817830 ChannelListVersion: 194


Wenn eine App genutzt wird, passiert das nicht.

Für die Sprachsteuerung benutze ich nicht den Alexa Skill, sondern die FHEM Bordmittel. Es klappt soweit ganz gut, am Mapping muss ich z.B. für Play und Pause noch arbeiten, evtl. hast du einen Tip.

Gruß
Matthias

[Edit: Musste die Nachricht neu schreiben, da ich sie mir selber abgeschossen habe  :-[
FB 6591 Cable / Raspberry 3b+ (Bookworm) / 4xECHO DOT 4/ Homematic Thermostate, Fenster- und Fenster-Sensoren / Philips HUE / CUL-HM /  Zigbee Schalter und Lampen / Shelly 1

RalfP

Hallo Matthias,

ich denke ich hab das Problem erkannt, denke ich. CurrentChannel verhält sich zwischen API 6.4.0 und 6.2.0 anders. Bei mir wird auch bei einer HDMI Quelle der zu letzt eingestellte Sender übermittelt. Bei dir sind die Schlüssel leer, als ob ich bei mir alle Sender gelöscht hätte.
GET name CurrentChannel wird bestimmt einen unterschiedliche Ausgabe bei dir anzeigen bei HDMI und TV.

Zeile 1967
# wenn Liste noch nicht geladen || Version ist neu || Liste wurde gelöscht
    if(($versionStored == -1) || ($versionNew > $versionStored) || ((ReadingsVal($name, "ChannelCount", 0) > 0) && ($versionNew == -1))){


versuche mal den letzteren Part in der Codezeile zu löschen (achte auf die Klammern):
# wenn Liste noch nicht geladen || Version ist neu
    if(($versionStored == -1) || ($versionNew > $versionStored)){


Dies sollte das ständige neu Laden der Senderliste erst einmal verhindern. Jetzt muss ich aber überlegen, wie ich das unterschiedliche Verhalten zusammenbringen kann.

Wird etwas dauern, da ich auf Dienstreise bin und meine Frau zu Hause nicht ärgern möchte, indem ich den TV immer mal an- und ausschalte  ;)

Kannst du mal GET name Input ausführen? Vielleicht gibt es bei API 6.2.0 damit Infos über den aktuellen Eingang.

Hinweis zu "attr name pollingInterval 600" - derzeitig habe ich es jetzt so, das mit diesem Wert eine Zufallszahl ermittelt wird und so der Abstand zwischen den Pollings sich verändern soll. Ich hatte den Eindruck, das sich die Diva dann etwas weniger verschluckt mit "401 Unauthorized", als mit einem festen Wert. Standard ist eine Zufallszahl zwischen 0..30s +10s.
InternalTimer(gettimeofday() + 10 + int(rand(AttrVal($name,"pollingInterval",30))), "PhilipsTV_GetStatus", $hash);

Grüße
Ralf

Brause

Guten Morgen

Der 6580 gibt bei get CurrentChannel dies zurück
{
          'channel' => {
                         'preset' => 1,
                         'name' => 'SRF1HD',
                         'ccid' => 469
                       },
          'channelList' => {
                             'id' => 'allcab',
                             'version' => '2'
                           }
        };


ein get ChannelList dann dies
no data aviable: ChannelsList
und das Log sagt
Error - 500 Internal Server Error

Und ja beim 901F habe ich alle Readings.