Guten Morgen,
ich möchte hier kurz teilen, wie ich bei meinem Wechsel von der nvidia Shield zum HTPC mit madVR den Wiedergabe Status im MPC gelöst habe. Bei Verwendung von KODI auf dem HTPC und einem externem Player wie dem MPC (Media Player Classic) verliert man leider den vollständigen Status in KODI. Man kann zwar noch sehen, ob die Wiedergabe gestartet oder gestoppt wurde, aber keine Aktionen mehr welche während der Wiedergabe passieren.
Um dies weiterhin zur Verfügung zu haben und so auch meine automatische Lichtsteuerung in FHEM weiterhin voll nutzen zu können bedarf es ein paar Anpassungen.
Dazu gehen wir wie folgt vor:
1. Webinterface im MPC aktivieren:
View -> Options -> Webinterface und dort den Haken bei "Listen on Port" setzen -> Apply.
Das MPC Webinterace lauscht nun auf Port 13579 und wartet auf Verbindungen.
Screenshot 2025-03-24 082525.jpg
Spasseshalber kann man mit der IP des HTPC und Angabe des Ports mal das WebIf des MPC aufrufen.
In der Kommandozeile würden die gefilterten Werte dann in etwas so aussehen:
<p id="file">Akte_X_-_Der_Film.mkv</p>
<p id="filepatharg">\\192.168.178.10\share\Filme\Akte_X_-_Der_Film.mkv</p>
<p id="filepath">\\192.168.178.10\share\Filme\Akte_X_-_Der_Film.mkv</p>
<p id="filedirarg">\\192.168.178.10\share\Filme</p>
<p id="filedir">\\192.168.178.10\share\Filme</p>
<p id="state">2</p>
<p id="statestring">Wiedergabe</p>
<p id="position">6044028</p>
<p id="positionstring">01:40:44</p>
<p id="duration">7361280</p>
<p id="durationstring">02:02:41</p>
<p id="volumelevel">100</p>
<p id="muted">0</p>
<p id="playbackrate">1</p>
<p id="size">6,30 GB</p>
<p id="reloadtime">0</p>
<p id="hdr">SDR</p>
<p id="version">1.8.3.0</p>
Alles anzeigen
Sollte sich weder im Browser noch per Kommandozeile irgendetwas tun, bitte prüfen, ob hier vielleicht noch eine Ausnahme in der Windows Firewall gemacht werden muss.
2. Webinterface in FHEM einbinden
In FHEM gibt es ein fertiges Modul mit dem man Webseiten "parsen" kann. Dieses Modul heisst "HTTPMOD".
Im HTTPMOD Device gibt man an, welche Webseite man abfragen möchte und mithilfe von regular expression wird die Ausgabe dann gefiltert und in Readings geschrieben.
erstmal das device definieren:
die "0" am Ende gibt an, dass das Modul die Abfrage "NICHT" automatisch machen soll.
dann die regular expression definieren, damit die ausgelesenen Werte auch in Readings landen:
attr DEVICENAME reading01Name state
attr DEVICENAME reading01Regex statestring">(\S*?)<
attr DEVICENAME reading02Name position
attr DEVICENAME reading02Regex positionstring">(\S*?)<
attr DEVICENAME reading03Name DynamicRange
attr DEVICENAME reading03Regex hdr">(\S*?)<
Ich habe mich bei den Attributen für den Status (play, pause, stop) die Position und die DynamicRange entschieden.
Eventuell baue ich mir später dann z.B. für "position" eine Art Sprungmarke in KODI.
Jetzt wäre es FHEM tatsächlich schon möglich den Play-Status von MPC auszulesen. Hiermit könnten wir jetzt bereits in einem DOIF auf Änderungen reagieren. Allerdings ist das kleinste mögliche Abfrageintervall von HTTPMOD 5s und so die Verzögerung beim Wechsel von "Play" zu "Pause" etwas zu lang.
Um dies zu umgehen legen wir noch ein "at" an, welches das HTTPMOD Device manuell abfragt. Den Zeitinterval können wir beim "at" beliebig wählen.
3. at in FHEM erstellen
Damit würde das at das HTTPMOD Device alle 2 Sekunden manuell triggern
Ich gehe gleich noch mal weiter auf das Automatisieren ein, da das manuelle triggern alle 2 Sekunden nicht wirklich resourcen-schonend ist. Und schon gar nicht, wenn der HTPC gar nicht läuft.
Deswegen bauen wir gleich in einem Beispiel noch eine Art "An- Ausschalter" für diese Abfragen.
4. Alles in einem DOIF zwecks Automatisierung zusammenfassen
Nun bekommen wir alle 2 Sekunden verschiedene Werte vom MPC und können auf diese Readings in FHEM reagiren.
Um nun dynamisch auf den Status zu reagieren, nutze ich ein weiteres Modul in FHEM -> DOIF.
Mit diesem Modul kann man auf Ereignisse innerhalb von FHEM reagieren. Als Beispiel "If MPC_PlayStatus -eq "Wiedergabe" than set lamp off"
( [KODI_PC:playStatus] eq "playing" )(
set Kino_DeckenlichtKino off,
set Kino_Strahler off,
set CheckPlayStatusMPC active
)
DOELSEIF( [KODI_PC:playStatus] eq "playing" and [MPCBE_KODI:state] =~ "Pause") (
set Kino_DeckenlichtKino RGB 00034D 1,
set KG_Lampe_PosterBttF on
)
DOELSEIF( [KODI_PC:playStatus] eq "stopped" ) (
set Kino_DeckenlichtKino RGB 00034D 1,
set Kino_Strahler on,
set CheckPlayStatusMPC inactive
)
Alles anzeigen
Hier wird neben dem Status des MPC auch noch der KODI Playstatus verwendet. Für KODI gibt es ein separates Modul in FHEM.
Im DOIF könnt Ihr erkennen wie je nach Ereignis entsprechende Lampen an- bzw. aus geschaltet werden.
Ebenfalls, und hier komme ich wieder auf das Thema "ressourcen-schonend" zurück, wird die Abfrage vom MPC Status beim Starten der Wiedergabe ein- und beim Stoppen ausgeschaltet.
So triggert FHEM das MPC Webinterface nur dann, wenn es auch wirklich benötigt wird!
Bitte vergesst nicht eure Devicenamen entsprechend anzupassen, aber denke dass das klar ist.
Vielleicht gibt es hier ja auch noch FHEM Nutzer welches dies gebrauchen können!
Bei Fragen meldet Euch gerne.
Grüße
Christian