[Q] Hilfe gesucht: Loewe Connect ID DR+ Smart-TV mit FHEM steuern

Begonnen von der.einstein, 08 April 2017, 15:40:50

Vorheriges Thema - Nächstes Thema

viegener

Zitat von: CoolTux am 17 September 2017, 11:23:40
Ok wenn ich das jetzt richtig verstanden habe, schreiben wir beide gleichberechtigt in den devel branch. Ist das richtig? Was genau hast du lokal bei dir gemacht?
Ist ja auch interessant für spätere Projekte

Ja, aber nicht vollständig gleichberechtigt, denn admin Rechte hast Du - ich habe nur schreibenden Zugriff (ähnlich wie wir im FHEM-SVN mit ganz vielen Leuten zusammenarbeiten)

Ich habe einfach nur für (den origin) mein lokales repository auf meiner Platte statt dem link auf meinen Fork den Link auf Dein Repository eingetragen. Das heisst meine push requests laufen jetzt auf Dein github-repository. Der fork ist gelöscht.
(Ich verwende für die git operationen aber nicht das commandline interface sondern "sourcetree" von atlassian - darunter liegt aber das normale git)


 

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

CoolTux

Dann schlage ich mal vor probieren wir es einfach. Müssen uns ja anscheinend beide erst in sowas einarbeiten  ;D

Zurück zum Modul.
Persönlich Versuche ich immer alle Sinnvollen Informationen als Reading dar zu stellen. Man glaubt gar nicht auf was für Ideen die Leute so kommen wenn sie erstmal die Info haben.

Auf jeden Fall
volume
mute
channel
channelName
extInput - HDMI1 u.s.w



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

viegener

Bin heute abend mal dazugekommen das mit den Readings anzugehen. Dazu gibt es jetzt auch Infrastruktur um Readings beim Auslesen des Ergebnisses / XMLs zu setzen (als Bulk update)
volume / mute werden jetzt als readings gespeichert - und es gibt entsprechende get funktionen


Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

der.einstein

#123
So, ich möchte mich auch mal wieder melden, nach einem Familienwochenende  8)

Ich habe mir die Implementation mit HttpUtils und Non-Blocking angeschaut, dass mit der Konstruktion und dem Absenden der Response hab ich geschnallt und kann gerne so bleiben.
Den Part mit Non-Blocking muss ich mir dagegen w
ohl noch paar mal zugemüte führen  ;D

@viegener: DIe SOAP Header "SOAPAction" muss (zumindest bei meinem TV) gesetzt sein, und zwar entsprechend dem enthaltenen Loewe-API Befehl, sonst lehnt der TV den Request sofort ab.

Getestet hab ich bei mir Version 0.0.28 aus dem Repository von CoolTux.
Hier funktionieren bei mir das Anlegen des TV, sowie das Update der Readings. Auch funktionieren die Set-Befehle SetVolume, SetMute, InjectRCKey. WakeUp und SetActionField klappen nicht (letzteres ist wohl auch noch nicht implementiert). Leider habe ich keine sinnvollen/passenden Fehler dazu im Log gefunden.

Bzgl. der Funktionen, die ich gerne am Ende hätte:
- channel (wobei dies beim Loewe auch HDMI etc. beinhalten sollte)
- channelName (dies ist schwieriger, aber machbar, und für mich unerlässlich, damit man z.B. in FHEM einen Aufruf a la "set LoeweTV channel "ARD" platzieren kann)
- currentEvent und ggf. nextEvent
- Angabe des Locator bzw. der URL (es ist tasächlich möglich die URL des TV zu einem bst. Kanal auch auf einem anderen Rechner oder am Smartphone zu öffnen, der TV streamt den Kanal ins LAN, somit könnte man den aktuell gesehenen Kanal auf ein anderes Gerät übertragen)
- Programmierung und Auslesen des Aufnahmearchivs (würde ich für mich persönlich erstmal als weniger wichtig sehen)
- die Implementierung der Funktion ZapToChannel (oder wie es heißt), damit kann man einen beliebigen im Netzwerk verfügbaren Stream/Datei abspielen aber auch alle im Loewe verfügbaren Medien)

Für ChannelName habe ich schon ein paar Infos und paar Vorarbeiten gemacht:
- zuerst muss die Kanalliste abgefragt werden (zu Beginn erstmal die Hauptliste "favlist0"
- diese enthält alle MediaItems der Kanäle
- für jedes MediaItem muss mit GetMediaItem abgefragt werden, wie der "ShortTitle" des Kanals ist, und wie dessen "Locator" lautet. Letzteren braucht man, um zu dem definierten Kanal zu zappen, also bräuchte man hier so etwas wie eine Tabelle (in Perl dann ein "Hash of Hashes"?)
- EDIT: D.h. man muss bei jedem Lesen der Kanalliste für jeden Eintrag nocheinmal ein "SendRequest" bzw. "GetMediaItem" schicken.

Wenn Ihr mir sagt, in welcher Form ich meine Änderungen am Code, die sich dann auf einen bestimmten Bereich des Moduls beschränken werden, einbringen kann, würde ich hier gern beitragen.

Grüße.

CoolTux

Zitat von: viegener am 17 September 2017, 22:30:49
Bin heute abend mal dazugekommen das mit den Readings anzugehen. Dazu gibt es jetzt auch Infrastruktur um Readings beim Auslesen des Ergebnisses / XMLs zu setzen (als Bulk update)
volume / mute werden jetzt als readings gespeichert - und es gibt entsprechende get funktionen

Super. Kurze Anmerkung, sollte sowas nicht automatisiert geholt werden. Also Infos die in Readings dargestellt werden? Niemand drückt ein Knopf um das aktuelle Volume zu erfragen. Oder habe ich da was falsch verstanden?


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

der.einstein

Ein Satz noch zu InjectRCKey:
- falls das zum Umschalten benutzt werden sollte, geht das nur gut für Kanäle von 0-9
- das liegt daran, dass man in der aktuellen Konfiguration nur 1 Taste senden kann
- über die "Press" und "Release" Statements könnte man prinzipiell mehrere Tasten schicken, ist aber kompliziert
- eine Alternative ist "ZapToMedia", dafür braucht man den "Locator"

CoolTux

@der.einstein
Kannst du bitte ein list vom Device hier einstellen.

Du kannst immer die neuste Version von Githib holen und dann ein diff mit Deinen Änderungen hier posten. Wenn es okay ist.



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

viegener

Zitat von: CoolTux am 17 September 2017, 22:47:12
Super. Kurze Anmerkung, sollte sowas nicht automatisiert geholt werden. Also Infos die in Readings dargestellt werden? Niemand drückt ein Knopf um das aktuelle Volume zu erfragen. Oder habe ich da was falsch verstanden?


Grüße

Ja das ist vorgesehen, dass alle diese Daten automatisch über den regelmässigen update geholt werden. Ich habe das momentan noch deaktiviert, da das beim Entwicklen probleme gibt (beim Reload mit syntaxfehlern etc)
Habe ich auch in den TODOs eingetragen
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

der.einstein

Gerne:

Internals:
   CFGFN
   CLIENTID   LRemoteClient-0-1505682001
   DEF        192.168.0.2 00:09:82:19:ab:58
   FCID       1234
   HOST       192.168.0.2
   INTERVAL   15
   NAME       LoeweTV
   NR         75
   STATE      connected
   TVMAC      00:09:82:19:ab:58
   TYPE       LoeweTV
   VERSION    0.0.28
   doStatus
   lastresponse <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header/> <SOAP-ENV:Body>  <m:SetVolumeResponse xmlns:m="urn:loewe.de:RemoteTV:Tablet">  <m:fcid>1234</m:fcid><m:ClientId>LRemoteClient-0-1505682001</m:ClientId><m:Value>230000</m:Value></m:SetVolumeResponse> </SOAP-ENV:Body></SOAP-ENV:Envelope>
   Hu_do_params:
     args:
       SetVolume
       239976
       undef
       1
   Hu_sr_params:
     NAME
     action     SetVolume
     addr       http://192.168.0.2:905
     buf
     conn
     displayurl http://192.168.0.2:905/loewe_tablet_0001
     handlers
     header     User-Agent: Assist Media/23 CFNetwork/808 Darwin/16.0.0

Accept: */*

Accept-Encoding: gzip, deflate

Accept-Language: de-de

Content-Type: application/soap+xml; charset=utf-8

Connection: keep-alive

SOAPAction: SetVolume
     host       192.168.0.2
     httpheader HTTP/1.1 200 OK

Date: Sun, 17 Sep 2017 23:00:51 GMT

Server: Nano HTTPD library

Content-Type: text/xml

Content-Length: 499
     hu_blocking 0
     hu_filecount 1
     hu_portSfx :905
     loglevel   4
     method     POST
     path       /loewe_tablet_0001
     protocol   http
     redirects  0
     timeout    30
     url        http://192.168.0.2:905/loewe_tablet_0001
     Sr_readings:
     Hash:
     Sslargs:
   Readings:
     2017-09-17 23:00:05   Chassis         SL220
     2017-09-17 23:00:05   SW_Version      2.4.55.0
     2017-09-17 23:00:05   TVMAC           00:09:82:19:ab:58
     2017-09-17 23:00:05   access          accepted
     2017-09-17 23:00:02   presence        present
     2017-09-17 23:00:55   requestAction   SetVolume
     2017-09-17 23:00:55   requestResult   SUCCESS
     2017-09-17 23:00:05   state           connected
   actionQueue:
   Helper:
Attributes:
   fhemMAC    00:1e:06:33:95:c9


Mir ist auch aufgefallen, dass ich TVMAC nicht selbst setzen kann, fhemMAC aber schon. Ist das so gewollt, wenn ja, was ist der HIntergrund?

Danke.

viegener

Zitat von: der.einstein am 17 September 2017, 22:45:46

@viegener: DIe SOAP Header "SOAPAction" muss (zumindest bei meinem TV) gesetzt sein, und zwar entsprechend dem enthaltenen Loewe-API Befehl, sonst lehnt der TV den Request sofort ab.

Getestet hab ich bei mir Version 0.0.28 aus dem Repository von CoolTux.
Hier funktionieren bei mir das Anlegen des TV, sowie das Update der Readings. Auch funktionieren die Set-Befehle SetVolume, SetMute, InjectRCKey. WakeUp und SetActionField klappen nicht (letzteres ist wohl auch noch nicht implementiert). Leider habe ich keine sinnvollen/passenden Fehler dazu im Log gefunden.



Das ist ja klasse, dass das soweit funktioniert.
Ich habe übrigens festegestellt, dass bei mir grundsätzlich volume 0 zurückkommt, wenn eine externe audioausgabe aktiv ist - mute geht dann auch nicht....

Ja das mit SOAPAction hatte cooltux schon vorher eingabut - ich hatte er nur übersehen, da ich den httpheader nicht ausgegeben habe

Wakeup kann ich definitiv nicht testen, denn das erlaubt mein chassis wohl nicht

An den Kanälen beisse ich mir gerade die Zähne aus, ich bekomme momentan nur SOAPFaults zurück...
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

CoolTux

Zu der Frage mit der MAC setzen. Alles was uns geliefert wird vom System brauchen wir nicht setzen lassen. Versetzt euch in die Lage eines Otto normal Users. Der will das Modul definieren und loslegen. Die wenigsten wissen überhaupt was eine MAC ist. Daher sollte ja die MAC automatisch ausgelesen werden und dann als Internal sowie in der DEF neu gesetzt werden. Ein setzen der MAC ist im übrigen Bein define möglich.

Bitte kurz festhalten das die MAC des TV worüber ich die ganze Zeit rede nicht als Reading vorgehalten werden muss. Es gibt sie ja bereits als Internal.

Durchaus möglich das wakeup nicht geht. Ich kann das leider nicht testen in meinem Netz, nicht Mal an meinem LG Fernsehr.



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

viegener

OK - channels (zumindest default) lassen sich jetzt abfragen und per media tiem (muss die uuid angegebn werden) auch die Info dazu. Findet sich als Version 30 in github

Jetzt müssen wir aber überlegen, wie wir die Informationen zu den Programmen ablegen/verwalten wollen. Denn Pro kanal kommt da ziemlich viel Info zurück:


<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header/> <SOAP-ENV:Body>  <m:GetMediaItemResponse xmlns:m="urn:loewe.de:RemoteTV:Tablet">  <m:fcid>1234</m:fcid><m:ClientId>LRemoteClient-0-1505676484</m:ClientId><m:ResultItem><m:MediaItem itemInfoClass="object.item.videoItem"><m:uuid>chl0:00-0009a401ffff041b2b5c</m:uuid><m:Locator>dvb://localhost/#?chlview=default&amp;progNum=1&amp;gcn=9&amp;onid=41985&amp;tsid=1051&amp;sid=11100</m:Locator><m:Caption>1</m:Caption></m:MediaItem><m:MediaInformation><m:ShortInfo>Das Erste HD</m:ShortInfo></m:MediaInformation></m:ResultItem></m:GetMediaItemResponse> </SOAP-ENV:Body></SOAP-ENV:Envelope>


Man braucht wohl auf jeden fall die uuid (damit bekommt man diese Infos)
shortinfo wohl auch, da kommt ja der Name raus

Die eigentlichen Infos zur programm nummer stecke wohl bei mir in der Locator

Ideen?
Ich denke an ein hash in den internals (mit uuid als key) und im value ein Array oder ein space separierter String mit den anderen Infos. Dann eine Reihe von Zugriffsfunktionen. Vermutlich braucht man noch etwas was namen in uuids wandelt für den use case von der.einstein.


Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

CoolTux

Zitat von: viegener am 18 September 2017, 00:04:26
OK - channels (zumindest default) lassen sich jetzt abfragen und per media tiem (muss die uuid angegebn werden) auch die Info dazu. Findet sich als Version 30 in github

Jetzt müssen wir aber überlegen, wie wir die Informationen zu den Programmen ablegen/verwalten wollen. Denn Pro kanal kommt da ziemlich viel Info zurück:


<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header/> <SOAP-ENV:Body>  <m:GetMediaItemResponse xmlns:m="urn:loewe.de:RemoteTV:Tablet">  <m:fcid>1234</m:fcid><m:ClientId>LRemoteClient-0-1505676484</m:ClientId><m:ResultItem><m:MediaItem itemInfoClass="object.item.videoItem"><m:uuid>chl0:00-0009a401ffff041b2b5c</m:uuid><m:Locator>dvb://localhost/#?chlview=default&amp;progNum=1&amp;gcn=9&amp;onid=41985&amp;tsid=1051&amp;sid=11100</m:Locator><m:Caption>1</m:Caption></m:MediaItem><m:MediaInformation><m:ShortInfo>Das Erste HD</m:ShortInfo></m:MediaInformation></m:ResultItem></m:GetMediaItemResponse> </SOAP-ENV:Body></SOAP-ENV:Envelope>


Man braucht wohl auf jeden fall die uuid (damit bekommt man diese Infos)
shortinfo wohl auch, da kommt ja der Name raus

Die eigentlichen Infos zur programm nummer stecke wohl bei mir in der Locator

Ideen?
Ich denke an ein hash in den internals (mit uuid als key) und im value ein Array oder ein space separierter String mit den anderen Infos. Dann eine Reihe von Zugriffsfunktionen. Vermutlich braucht man noch etwas was namen in uuids wandelt für den use case von der.einstein.

Was sagt Ihr zu $hash->{helper}{channelinfo}
Und da als Array die Daten ablegen.
Das selbe dann mit Channellist.


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

CoolTux

Wegen dem wake on lan habe ich da wohl was gefunden. Mein Fehler, Variablen dreher. Ich mache gleich mal ein fix fertig
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

der.einstein

@viegener:
Das Wake-On-LAN musste ich im Loewe-Menü erst einstellen! Heißt irgendwas mit  Netzwerkfähigkeit auch im Standby oder so
ACHTUNG: Bei der "Default" Liste waren es bei mir über 200 Treffer, das ist eine Liste, in der alle gefundenen Kanäle stehen. In der "favlist0" sind bei mir nur 38, die ich selber dahin geschoben habe. Das ist die Liste, die der TV benutzt, wenn du ihn anschaltest. Jetzt kommt das Brenzelige: Sind in der Liste über 100 Einträge, dann kann es sein / muss man mehrmals abfragen, da zumindest mein TV nur bis zu 100 Sender gleichzeitig ausgibt. Ich würde daher erstmal bei der "favlist0" bleiben, falls du so eine hast? Lass doch mal die Abfrage mit "favlist0" laufen bei dir...

@CoolTux:
$hash->{helper}->{channellist} finde ich gut.
Allerdings müsste es sich mindestens um einen %channellist (also ein hash) handeln, dann die MediaItems in den keys und jeweils ein Array als Value. Der Array enthält dann Locator, ShortInfo, Caption (d.h. eventuell verziechtbar?), und Stream (sehr wichtig für mich, diese URL funktioniert dann auch bei anderen Geräten z.B. Smartphone).
Für die andere Richtung, d.h. ShortInfo (Das Erste) -> Locator müsste man das Ganze quasi umgekehrt abspeichern.
Eine Alternative wäre eine andere Datenstruktur, in der Perl das Gnaze tatsächlich als Tabelle ablegt, da bräuchte man aber wieder ein Paket  8)

Grüße.