[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: cartzilla am 04 Oktober 2017, 12:58:48
Das habe ich auch schon aus den Developertexten mitbekommen. Ich verstehe jetzt bloss nicht warum der Aufruf von LoeweTV_Presence am Ende der Funktion statt am Anfang einen Unterschied in der "Asynchronität" macht ?

Die These war ja, dass ein Aufruf von Presence am Anfang der Timerfunktion besser ist, damit der access status aktuell ist und genau das ist nicht der Fall, denn am Ende aufgerufen wird es aktueller sein beim nächsten Durchlauf.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

CoolTux

Zitat von: viegener am 04 Oktober 2017, 12:58:21
Die Loewe Chassis verhalten sind offensichtlich in vielerlei Hinsicht unterschiedlich und fürs debuggen kann ich nur mein Chassis verwenden, cooltux hat sogar gar keine Möglichkeit real zu debuggen (oder hast DU Dir inzwischen einen loewe zugelegt  ;) )

Ich habe einen LG und bin sehr zufrieden damit  :D
Ich kann also nur beratend zur Seite stehen und allgemeinen Code zum Aufbau dazu steuern.
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

cartzilla

Zitat von: viegener am 04 Oktober 2017, 12:58:21
Kannst Du das genauer beschreiben, was heisst aufhängen? --> Was steht im Log ? Ist es blockiert? Für wielange? stürzt FHEM ab?

Es würde helfen, wenn DU das verbose level mal auf 4 oder sogar 5 für den Loewe Device setzt und dann den Log-Teil nach aktivieren von interval hier bereitstellst.

Die Loewe Chassis verhalten sind offensichtlich in vielerlei Hinsicht unterschiedlich und fürs debuggen kann ich nur mein Chassis verwenden, cooltux hat sogar gar keine Möglichkeit real zu debuggen (oder hast DU Dir inzwischen einen loewe zugelegt  ;) )

FHEM verabschiedet sich dauerhaft. Erst wenn man über die Console in der fhem.cfg dass intervall attribute auskommentiert und dann rebootet (wahrscheinlich könnte man auch nur FHEM killen und neustarten) funktioniert es wieder. Ich werde aber noch schauen, ob sich im Log was aufschlussreiches finden lässt...

der.einstein

@viegener
Hier mal der seit langem versprochene Link zum Thread mit der Ansicht des aktuellen TV Programms: https://forum.fhem.de/index.php/topic,28123.750.html

Funktioniert mit HTTPMOD soweit ich das gesehen habe. Da bräuchte man jetzt noch unter jedem z. B. Senderdymbol einen Link/Knopf der den TV mit dem entsprechenden Sender startet.

Auch super wäre ein Knopf zum Aufnehmen.

Ich suche auch immer noch nach einer Möglichkeit, dass ein Reading bereitgestellt wird, dass die aktuelle Kanalnummer und dessen StreamingUrl bereitstellt (2 Readings).

Gesendet von meinem LG-D855 mit Tapatalk


cartzilla

Zitat von: viegener am 04 Oktober 2017, 12:54:50
Ich würde den activate call nicht so einbauen:
- Hier kommen sich unter Umständen mehrere sendRequest ins Gehege und auch mehrere Datenabfragen, es wäre besser das im aktuellen Timer abzubilden und damit das Polling des Status nicht durchzuführen, wenn gerade ein activate-wakeupEinschalten läuft
- Der RequestAccess sollte besser automatisch eingestreut werden, wenn das aktuelle Token nicht valide ist oder keines vorliegt
- Selbst wenn es keine Grenze gibt, aber ich würde lieber vermeiden viele Timer in einem Modul zu haben, da sich dadurch zusätzliche Fehlerquellen ergeben

Habe jetzt versucht die Bedenken zu berücksichtigen und das ganze etwas abzuändern. Set on schickt jetzt einfach erst mal alle Requests in den Befehlsstack:

...
    } elsif( lc $cmd eq 'on' ) {
        return "$cmd does not accept any arguments" if ( ( defined( $args[0] ) ) );
        LoeweTV_WakeUp_Udp($hash,$hash->{TVMAC},'255.255.255.255') if( defined($hash->{TVMAC}) );
        LoeweTV_SendRequest($hash,"RequestAccess" );
        LoeweTV_SendRequest($hash,"InjectRCKey", 22 );
        InternalTimer( gettimeofday()+5, "LoeweTV_Activate", $hash, 1 );

    } elsif ...


Die Activate-Routine enthält keine Request mehr und ist auf's mindeste reduziert (möglicherweise könnte man auch ganz auf sie verzichten und stattdessen LoeweTV_TimerStatusRequest mitverwenden :

# method to activate tv
sub LoeweTV_Activate($) {

    my $hash = shift;

    LoeweTV_Presence($hash);
    if( ! LoeweTV_IsPresent( $hash )) {
      InternalTimer( gettimeofday()+5, "LoeweTV_Activate", $hash, 1 );
    }

}



Der eigentlichen Neuerungen sind jetzt eine Änderung in der LoeweTV_SendRequest. Wenn der TV nicht present ist landen die Befehle immer im Stack:

...
   if ( ( ! LoeweTV_IsPresent($hash)  ) ||  ( ( defined( $hash->{doStatus} ) ) && ( $hash->{doStatus} =~ /^WAITING/ ) && (  $retryCount == 0 ) ) ) {
  ...

und zweite Änderung im Callbackhandler der Presence-Routine LoeweTV_PresenceDone:

...
    Log3 $name, 4, "Sub LoeweTV_PresenceDone ($name) - Der Helper ist disabled. Daher wird hier abgebrochen" if($hash->{helper}{DISABLED});
    return if($hash->{helper}{DISABLED});

    if ( ReadingsVal($hash->{NAME},'presence','absent') ne $response ) {
      readingsSingleUpdate($hash,'presence',$response,1);
      Log3 $name, 4, "Sub LoeweTV_PresenceDone ($name) - Reading geaendert!";
      if ( LoeweTV_IsPresent($hash) ) {
        Log3 $name, 4, "Sub LoeweTV_PresenceDone ($name) - Reading ist jetzt present!";
        # start command in queue if available
        if ( ( defined( $hash->{actionQueue} ) ) && ( scalar( @{ $hash->{actionQueue} } ) ) ) {
          my $ref = shift @{ $hash->{actionQueue} };
          Log3 $name, 4, "LoeweTV_PresenceDone $name: handle queued cmd with :@$ref[0]: ";
          LoeweTV_SendRequest( $hash, @$ref[0], @$ref[1], @$ref[2] );
        }
      }
    }

    Log3 $name, 4, "Sub LoeweTV_PresenceDone ($name) - Abschluss!";
    ...


Wenn sich der TV present meldet, wird die Abarbeitung des Befehlsstacks automatisch gestartet.

cartzilla

Zitat von: viegener am 04 Oktober 2017, 12:58:21
Kannst Du das genauer beschreiben, was heisst aufhängen? --> Was steht im Log ? Ist es blockiert? Für wielange? stürzt FHEM ab?

Es würde helfen, wenn DU das verbose level mal auf 4 oder sogar 5 für den Loewe Device setzt und dann den Log-Teil nach aktivieren von interval hier bereitstellst.

Die Loewe Chassis verhalten sind offensichtlich in vielerlei Hinsicht unterschiedlich und fürs debuggen kann ich nur mein Chassis verwenden, cooltux hat sogar gar keine Möglichkeit real zu debuggen (oder hast DU Dir inzwischen einen loewe zugelegt  ;) )
So jetzt ein genauerer Bericht:
Wenn ich fhem starte (mit attr interval 360 für das LoeweModul) ist fhem über die Weboberfläche nicht erreichbar (der Browser zeigt nur immer das Wartesymbol). Über die Konsole habe ich mir jetzt das fhem.log mal angeschaut. Dort werden im interval-Abstand immer Logeinträge generiert, ansonsten aber keine weiteren. Scheint so als ob sich fhem ausschließlich mit der interval-Routine beschäftigt :(

...
2017.10.05 11:18:49 3: hmusb device opened
2017.10.05 11:18:49 3: telnetPort: port 7072 opened
2017.10.05 11:18:49 3: WEB: port 8083 opened
2017.10.05 11:18:49 3: WEBphone: port 8084 opened
2017.10.05 11:18:49 3: WEBtablet: port 8085 opened
2017.10.05 11:18:49 2: eventTypes: loaded 1055 events from ./log/eventTypes.txt
2017.10.05 11:18:49 3: LoeweTV myTv: defined LoeweTV device
2017.10.05 11:18:49 4: LoeweTV (myTv) - set interval: 360
2017.10.05 11:18:49 4: Sub LoeweTV_TimerStatusRequest (myTv) - start requests
2017.10.05 11:18:49 5: Sub LoeweTV_TimerStatusRequest (myTv) - Done - new sequence - 360 s
2017.10.05 11:18:51 5: LoeweTV (myTv) - ping command returned with output:
PING 192.168.16.203 (192.168.16.203) 56(84) bytes of data.

--- 192.168.16.203 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1000ms

2017.10.05 11:18:51 4: Sub LoeweTV_PresenceRun (myTv) - Sub finish, Call LoeweTV_PresenceDone
2017.10.05 11:24:49 4: Sub LoeweTV_TimerStatusRequest (myTv) - start requests
2017.10.05 11:24:49 5: Sub LoeweTV_TimerStatusRequest (myTv) - Done - new sequence - 360 s
2017.10.05 11:30:49 4: Sub LoeweTV_TimerStatusRequest (myTv) - start requests
2017.10.05 11:30:49 5: Sub LoeweTV_TimerStatusRequest (myTv) - Done - new sequence - 360 s
2017.10.05 11:36:49 4: Sub LoeweTV_TimerStatusRequest (myTv) - start requests
2017.10.05 11:36:49 5: Sub LoeweTV_TimerStatusRequest (myTv) - Done - new sequence - 360 s
2017.10.05 11:42:49 4: Sub LoeweTV_TimerStatusRequest (myTv) - start requests
2017.10.05 11:42:49 5: Sub LoeweTV_TimerStatusRequest (myTv) - Done - new sequence - 360 s


viegener

@cartzilla: Das scheint mir einfach zu fixen zu sein, das Problem liegt einfach darin, dass beim Starten der timerStatusRequest aufgerufen wird und dort wird ein ReadingsSingleUpdate gemacht FHEM ist aber noch nicht hochgefahren und das löst wohl ein Problem aus.

Requests werden gar nicht ausgeführt, da ja der Loewe nicht present ist.

Ich habe in github mal einen Fix eingebaut.

Hast Du das ganze mal ohne Neustart ausprobiert, denn das sollte schon funktioniert haben

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

CoolTux

Johannes, ich glaube das Problem liegt an der 1 am Ende

InternalTimer( gettimeofday()+$hash->{INTERVAL}, "LoeweTV_TimerStatusRequest", $hash, 1 );


Irgendeine Änderung gab es da in letzter Zeit, vorher lief das immer super. Wenn init_done ok war lief es mit 1 am Ende immer, seit einem Update wohl nicht mehr. Es wird eh empfohlen das nicht mehr zu nehmen. Entweder 0 oder gar nicht.
Daher

InternalTimer( gettimeofday()+$hash->{INTERVAL}, "LoeweTV_TimerStatusRequest", $hash);


Musste gerade mein LG Modul auch Ändern weil eine Userin Probleme mit blockierten FHEM hat.



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

@CoolTux: Du hast Recht, da steckt doch noch einer mit der 1 am Ende - Sehr Gut! - Danke fürs Finden!

Habe es in github auch noch korrigiert
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

CoolTux

Ich würde es in zukünftigen Versionen komplett weg lassen. Ist die Empfehlung.
Aber erstmal schauen ob es so klappt.

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

cartzilla

Zitat von: viegener am 05 Oktober 2017, 12:08:14
@cartzilla: Das scheint mir einfach zu fixen zu sein, das Problem liegt einfach darin, dass beim Starten der timerStatusRequest aufgerufen wird und dort wird ein ReadingsSingleUpdate gemacht FHEM ist aber noch nicht hochgefahren und das löst wohl ein Problem aus.

Requests werden gar nicht ausgeführt, da ja der Loewe nicht present ist.

Ich habe in github mal einen Fix eingebaut.

Hast Du das ganze mal ohne Neustart ausprobiert, denn das sollte schon funktioniert haben

Mit dem Fix klappt's jetzt. Auf https://wiki.fhem.de/wiki/DevelopmentModuleAPI steht übrigens dick geschrieben, dass der entsprechende Parameter nicht verwendet werden sollte (aus eben diesen Gründen) ;)
Na, hab gesehen, dass ich den in meinen geposteten Patches beim InternalTimer auch gesetzt habe. Oops, gehört da natürlich auch nicht hin...

CoolTux

Wenn man weiß was man macht konnte man diesen Parameter früher verwenden.
Da dürfte man ihn halt nicht in der define verwenden aber in den anderen Routinen lief es. Hat sich wohl was geändert.
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

Habe gerade noch die Version 45 hochgeladen
- mit ein paar Logänderungen
- ausserdem wird der access status zurückgesetzt wenn der Loewe nicht present ist (möglicherweise muss man auch noch die clientid zurücksetzen, dass müsstet ihr ausprobieren.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

der.einstein

Musste gestern leider den LoeweTV erstmal aus FHEM löschen, da er immer wiederblockoert hat. Vermutlich nach mehreren Fehlern bei den SOAP Messages.

Gibt's eigentlich was aus den Logs zu holen dazu? In welcher Form soll man das Posten?

Gesendet von meinem LG-D855 mit Tapatalk


der.einstein

Was mir auch aufgefallen ist: das Internal State bleibt bei mir nach einem Einschalten des TV auf Off, bis ich manuell ein Connect Mache. Das sollte aber so nicht sein, oder? Fehlt uns da noch was in einer Routine?

Gesendet von meinem LG-D855 mit Tapatalk