Frage zu fhem und Kodi Readings bei live tv

Begonnen von este0037, 26 April 2016, 11:05:53

Vorheriges Thema - Nächstes Thema

este0037

Hallo erstmal :)

nachdem ich dank vielem lesen von eurem Forum + wiki einige homematic Komponenten und Philips HUE laufen habe, wollte ich mal meine Kodi Installation im Wohnzimmer integrieren.
natürlich geht es darum das Licht ein/aus zu schalten.
Das klappt bei Filmen und Serien wunderbar, bei Live TV habe ich aber das Problem dass sich das Reading in dem der Medientyp steht nur sehr lansgam aktualisiert. das dauert meistens eine Minute. ist dann natürlich suboptimal wenn sich das Licht schaltet.
hat da jemand eine Idee bzw das selbe Problem? ich habe mich mal mit Telnet auf den Port verbunden, da scheint es eigentlich gleich aufzutauchen.
wie gesagt, bei Filmen und Serien passt es sofort.

danke, mfg Este

chrille76

Guten Abend,

ich muss den Thread mal hoch holen. Ich starte gerade mit FHEM und stehe vor dem gleichen Problem. @TE: Hast du mittlerweile eine Lösung? Dazu kommt noch, dass beim Umschalten der playStatus kurzzeitig auf stopped zu gehen scheint, was bei mir zum Anschalten des Lichts führt.

Danke und Gruß

visionsurfer

Hi,

da bin auch auch dabei. Ich bin gerade dabei alle meine Geräte usw. in FHEM einzubinden. Ich habe fast alles durch und mit als letzter Punkt stehen meine KODI Systeme.
Ich hab es noch nicht ausprobiert und installiert, aber das ist natürlich doof, wenn sich die Readings bei LIVE TV nicht sofort aktualisieren. Nach einer Minuten Licht aus oder sonst was gestartet, ist nicht so cool :)

Muss das System auch mal installieren.
Bin gespannt was die anderen sagen.

Grüße,
Visionsurfer

Syrex-o

Macht es euch doch einfach und nehmt nicht das reading für filme oder Serien,  sondern das reading playstatus
Und dann macht ihr eine einfache DOIF Funktion daraus.
Problem gelöst? 
MfG

visionsurfer

Hi,

ja ok. Wenn das geht, dann wäre das natürlich super. Ich muss erst mal FHEM und KODI bei mir verbinden. Hab ich noch gar nicht gemacht. Daher weiß ich auch nicht, welche Readings da ankommen. Wenn das Reading Playstatus sich sofort erneuert, dann ist es ja gut. Weil es ja egal ist ob Live TV oder Filme / Serien.

Grüße,
Visionsurfer

Syrex-o



Zitat von: visionsurfer am 07 November 2016, 14:33:56
Hi,

ja ok. Wenn das geht, dann wäre das natürlich super. Ich muss erst mal FHEM und KODI bei mir verbinden. Hab ich noch gar nicht gemacht. Daher weiß ich auch nicht, welche Readings da ankommen. Wenn das Reading Playstatus sich sofort erneuert, dann ist es ja gut. Weil es ja egal ist ob Live TV oder Filme / Serien.

Grüße,
Visionsurfer

Richtig so ist das auch gedacht.
Guck einfach mal im commandref unter xbmc
Ziemlich simples Modul.
Grüße

chrille76

#6
Zitat von: Syrex-o am 07 November 2016, 13:49:08
Macht es euch doch einfach und nehmt nicht das reading für filme oder Serien,  sondern das reading playstatus
Und dann macht ihr eine einfache DOIF Funktion daraus.

Genau das tu ich, also playStatus nutzen. Aber:
1. betrifft die (anscheinend nicht immer) verzögerte Aktualisierung alle Readings, also auch playStatus und
2. wechselt bei mir beim Umschalten im Live TV der playStatus kurz auf "stopped" und dann zurück auf "playing" (vermutlich da ja der Stream für Sender A gestoppt und für Sender B gestartet wird), was dazu führt, dass eben das Licht angeht beim Umschalten. Eine mögliche Lösung (für mich) wäre evtl. gewesen, dass am Reading fullscreen festzumachen, da TV bei mir immer fullscreen läuft. Das bleibt auch beim Umschalten auf on und wechselt beim Stoppen auf off. Aber dann kommt eben Problem 1 wieder zum Tragen (verzögerte Altualisierung).

Hier mal mein Code für's notify, wie er bei Film und Serie, aber nicht bei TV funktioniert:


define notify_wz_KODI_playStatus notify wz_KODI:playStatus.* {
    my $type = ReadingsVal("wz_KODI", "type", "");
    my $lightsOn = (ReadingsVal("HUEDevice6", "state", "") ne "off") && (ReadingsVal("HUEDevice8", "state", "") ne "off");

    # nur bei Film, Serie oder TV
    if ($type eq "movie" or $type eq "episode" or $type eq "channel") {
        my $playStatus = ReadingsVal("wz_KODI", "playStatus", "");
        my $transitiontime = 80;

        # wenn play gedrückt und Licht ist an
        if ($playStatus eq "playing" && $lightsOn) {
            # LightScene speichern, aber nur wenn noch nicht vorhanden -> Play kann auch nach Pause gedrückt werden,
            # bei Pause wird das Licht allerdings anders geschaltet,
            if (fhem("get tv_lights scene tmp_pre_movie") eq "no scene <tmp_pre_movie> defined") {
                fhem("set tv_lights save tmp_pre_movie");
            }           

            fhem("set HUEGroup9 off : transitiontime $transitiontime");

        } elsif ($playStatus eq "paused" && (fhem("get tv_lights scene tmp_pre_movie") ne "no scene <tmp_pre_movie> defined")) { #nur anschalten, wenn auch vorher Licht an war

            fhem("set HUEGroup9 pct 20 : transitiontime $transitiontime");

        } elsif ($playStatus eq "stopped") {

            fhem("set tv_lights scene tmp_pre_movie");
            fhem("set tv_lights remove tmp_pre_movie");

        }
    }
}


Zitat von: Syrex-o am 07 November 2016, 13:49:08
Problem gelöst? 

nein :(


chrille76

Zitat von: visionsurfer am 07 November 2016, 14:33:56
... Weil es ja egal ist ob Live TV oder Filme / Serien.
Das schon. Ich will aber auch NUR DA das Lichtb aus haben. playStatus gibt es aber auch für Musik und Bilder etc. Also muss man beides kombinieren

Syrex-o

ZitatHier mal mein Code für's notify, wie er bei Film und Serie, aber nicht bei TV funktioniert:
Setze mal bei deiner XBMC definition updateInterval niedriger also meinetwegen alle 10 sekunden.
Und um eine überblendung zu erzeugen benutze einfach das: attr xbmc wait 0:0:10
das reicht völlig.
Grüße

chrille76

Vielen Dank erstmal für die Tipps!
Zitat von: Syrex-o am 08 November 2016, 12:17:49
Setze mal bei deiner XBMC definition updateInterval niedriger also meinetwegen alle 10 sekunden.
Daran habe ich auch schon gedacht. Kann ich mal probieren. Für's Verständnis... Führt das nicht aber zu einer erhöhten Kommunikation zwischen FHEM Server und KODI Rechner? Und wie gesagt, bei "movie" und "episode" gibt's das Problem nicht, nur bei "channel".
Zitat von: Syrex-o am 08 November 2016, 12:17:49
Und um eine überblendung zu erzeugen benutze einfach das: attr xbmc wait 0:0:10
das reicht völlig.
Grüße
Kannst du evtl. in ein, zwei Sätzen genauer erläutern, was das bewirkt? Was genau wird da überblendet?

Syrex-o

Also zur Erklärung.
Wenn du z. B. Eine DOIF Funktion definierst und sie hat 3 Bereiche, dann kannst du damit festlegen ob gewartet werden soll wenn der Status Eintritt.
Und da der Status ja nur kurz wechselt, Wird nichts geschaltet. Einfaches beispiel:
define di_kodi_steuerung_Verstaerker DOIF ([SZ_XBMC:type] eq "unknown" or "episode" and [SZ_XBMC:playStatus] eq "playing" ) \
(set Verstaerker on) \
DOELSEIF ([SZ_XBMC:type] eq "unknown" or "episode" and [SZ_XBMC:playStatus] eq "paused") \
(set Verstaerker on) \
DOELSEIF ([SZ_XBMC:type] eq "unknown" or "episode" and [SZ_XBMC:playStatus] eq "stopped") \
(set Verstaerker off)
attr di_kodi_steuerung_Verstaerker wait 0:0:240

Sollte selbsterklärend sein hoffe ich.
Grüße

chrille76

#11
Ich habe jetzt mal mit den Minimalvarianten getestet.

Notify:

define notify_test notify wz_KODI:playStatus.* {#
   my $playStatus = ReadingsVal("wz_KODI", "playStatus", "");
   
    if ($playStatus eq "playing") {
        Log 3, "playing";
    } elsif ($playStatus eq "paused") {
        Log 3, "paused";
    } elsif ($playStatus eq "stopped") {
        Log 3, "stopped";
    }
}

Log mit tail -f beobachtet.
Führt dazu, dass bei Film und Serie sofort geloggt wird und bei TV erstmal nichts passiert OBWOHL die Änderung im Web IF sofort angezeigt wird.

DOIF:


define di_test DOIF ([wz_KODI:playStatus] eq "playing")
({Log 3, "playing"})
DOELSEIF ([wz_KODI:playStatus] eq "paused")
({Log 3, "paused"})
DOELSEIF ([wz_KODI:playStatus] eq "stopped")
({Log 3, "stopped"})


Hier erfolgt die Logausgabe IMMER sofort.

Was soll mir das jetzt sagen? Probleme beim Notify? Ich versteh's nicht.

Edit:
Fazit: mit DOIF funktioniert es, mit notify nicht. Und das wait hilft auch beim Umschalten. Für mich damit gelöst, auch wenn mir nach wie vor das Problem beim notify nicht klar ist. Danke für die Hilfe!

@Syrex-o: Ich hab immer noch nicht ganz verstanden, was mir das wait hilft. Mal abgesehen, dass ich den Code so wie in deinem Beispiel gar nicht so im Web IF eingeben kann (Fehlermeldung...), habe ich es so verstanden, dass das wait bewirkt, dass frühestens nach Ablauf der Zeit das DOIF das nächste mal ausgeführt wird. In deinem Beispiel also frühestens nach 10sec. Was hilft mir das, wenn ich nach 2 min umschalte? Edit: Hat sich erledigt

Syrex-o

Hat sich ja doch noch selbst gelöst.
Was ich mit dem Code zeigen wollte ist, dass das wait Attribut dafür sorgt, dass der Befehl erst nach 10 sekunden erfolgen würde. Bis dahin hat sich jedoch das Reading schon wieder geändert.

ZitatFür mich damit gelöst, auch wenn mir nach wie vor das Problem beim notify nicht klar ist. Danke für die Hilfe!
Also mit deinem Notify weiß ich gerade auch nicht was da falsch sein soll.
Würde mich aber interessieren.
Kannst du es irgendwie anschaulicher machen, damit ich das Problem erkenne?
Grüße

chrille76

Zitat von: Syrex-o am 08 November 2016, 18:27:23
Kannst du es irgendwie anschaulicher machen, damit ich das Problem erkenne?

Ich versuche es mal. Die Codeschnipsel oben sollten m. M. n. ja beide das gleiche tun, nämlich bei Kodi Aktionen (start, stop, play) ins Log schreiben. Variante notify: Wenn ich in Kodi Aktionen ausführe, sehe ich unmittelbar die gewünschten Logausgaben. Allerdings NUR bei Filmen und Serien, NICHT bei TV. Variante DOIF: Egal, welcher Medientyp, es wird IMMER sofort geloggt. Sprich, bei DOIF werden die Aktionen IMMER sofort ausgeführt, bei notify nicht (bei TV jedenfalls nicht).

Ich hoffe, das war verständlicher.

Syrex-o

Ok vom Verständnis klar.
Jedoch macht das nicht wirklich sinn für mich.
Vielleicht wird da etwas nicht richtig übergeben.
Naja solange es funktioniert  :)
Grüße