Hi Nils,
sehr interessant, was du da machst. Finde ich super, dass du das hier zur Verfügung stellst!
Ich habe bei mir einen ähnlichen Ansatz implementiert und beschreibe den hier mal. Vielleicht ergeben sich daraus sinnvolle Anforderungen für dich.
Also, bei mir geht es so:
Im Vorfeld lese ich einmalig die Metadaten jedes Films und das Aspect Ratio mit dem Tiny Media Manager (dort ist ARD inzwischen integriert) aus. TMM schreibt ein "_ARxxx-Tag" mit dem Seitenverhältnis (ggf. plus "_MFxxx" für Multiformat), sowie ggf. ein "_3D MVC"- und "_HDR"-Tag in den Dateinamen. Das dauert keine Minute pro Film.
Die Steuerung des Kinos übernimmt komplett meine Hausautomation FHEM (mit diversen Modulen für die Harmony-Fernbedienung, den Denon-Receiver, den JVC-Projektor, Spotify, Lichtsteuerung, Maskierungssteuerung). Damit lässt sich das Kino kinderleicht bedienen (sehr wichtig für den WAF ) und die Hausautomation stellt alles passend zu den Metadaten automatisch ein.
Das läuft dann so:
- Kino einschalten: FHEM startet nach Drücken eines Knopfes auf der Harmony-Fernbedienung automatisch den HTPC, Reciever, Lüftung der Hushbox, Projektor, setzt die Beleuchtung und startet über Spotify eine Hintergrundmusik
- Der HTPC startet automatisch KODI (Windows Autostart)
- Über die Harmony-Fernbedienung wird die KODI-Benutzeroberfläche gesteuert. Nach Auswahl und Start eines Films wird von KODI ein Event an FHEM gemeldet und dann passiert folgendes:
- KODI stellt automatisch den Grafikmodus des HTPC auf die Bildfrequenz des Quellmaterials
- FHEM dimmt die Beleuchtung
- FHEM stoppt der Hintergrundmusik
- FHEM stellt die Lautstärke ein (bei 2-Kanalaufnahmen aus der Mediathek leiser als bei Mehrkanal)
- FHEM pausiert KODI (die ganzen Umschaltungen des Bildmodus und Zoom/Maskierung brauchen einige Zeit, während dessen der Film noch nicht laufen soll)
- FHEM setzt die Maskierung (gemäß AR-Tag, das geht über einen Schrittmotor)
- FHEM setzt den Projektor-Zoom (gemäß AR-Tag). Bei Multiformat-Filmen wird im Projektor außerdem eine Maskierung gesetzt, damit ich immer im breiten Format schaue und bei "hohen" Szenen oben und unten schwarz maskiert wird. Es findet also keine Formatumschaltung während des Films statt.
- FHEM setzt den Bildmodus des Projektors (SDR oder gemäß 3D/HDR-Tag)
- Wenn 3. fertig ist, wird KODI von FHEM "unpausiert" und der Film mit Kodi Version 17.6 mit integriertem DSPlayer und MadVR abgespielt.
- Wenn man während der Filmwiedergabe auf der Harmony Pause drückt, bekommt FHEM das über Event gemeldet und dimmt das Licht etwas hoch und bei Unpause wieder runter.
- Wird der Film gestoppt oder ist zu Ende, wird FHEM wieder getriggert:
- Beleuchtung hochfahren
- JVC-Bildmodus auf Standard setzen
- Zoom und Maskierung auf 16:9 setzen
- Hintergrundmusik mit Spotify starten
- Grafikmodus des HTPC auf 60 Hz stellen
- Nach drücken des Off-Knopfes auf der Fernbedienung fährt FHEM das Kino herunter, d.h. Maskierung auf 21:9 fahren, Geräte ausschalten und Hushbox-Lüftung noch etwas nachlaufen lassen.
Die Reihenfolge der Befehle und das Timing bei 3. und 4. waren eigentlich das komplizierteste, denn der JVC mag es nicht gerne, wenn während der Umstellung des Videomodus weitere Befehle gesendet werden.
Hier der Quellcode für Nr. 3 und 4:
sub JVC_autoconfig()
{
my $currentmedia = ReadingsVal("kodi", "currentMedia", ""); # Dateiname des Videos aus KODI
Log3 undef,3,"JVC_autoconfig(): Main Feature started: " . $currentmedia;
kino_lichter("pause"); # Beleuchtung auf Pause-Lichtszene dimmen
stop_Musik(); # Spotify Hintergrundmusik stoppen
fhem("set kodi mute on");
# Lautstärke am Receiver einstellen: 2-Kanal (i.d.R. TV-Aufnahme) leiser als Multikanal
if (ReadingsVal("kodi", "currentAudioStream_channels", 2) > 2) {
fhem("set denon volumeStraight -10");
} else {
fhem("set denon volumeStraight -35");
}
# AR aus Dateinamen auslesen
my ($ar, $ar2) = $currentmedia =~ m/.*_AR(\d)(\d{2})\..*/;
if ($ar && $ar2) {
$ar = $ar . "." . $ar2;
}
else {
$ar = "1.78";
}
# Multiformat aus Dateinamen auslesen und Maskierung setzen
my $mf = $currentmedia =~ m/.*_MF(\d{3})\..*/;
if ($mf) {
if ($mf eq "178") {
fhem("set jvc InputSignal_Mask Custom1");
}
elsif ($mf eq "185") {
fhem("set jvc InputSignal_Mask Custom2");
}
else {
fhem("set jvc InputSignal_Mask Off");
}
}
# 3D und HDR aus Dateinamen auslesen
my $three_d = $currentmedia =~ m/.*(_3D\sMVC).*/;
my $hdr = $currentmedia =~ m/.*(_HDR).*/;
# Picture Mode und Zoom/Maskierung setzen
if ($three_d) {
# 3D Modus
fhem("sleep 8; set kodi pause");
fhem("sleep 20; set jvc PictureAdjust_PictureMode 3D_madVR");
fhem("sleep 28; {JVC_zoom($ar)}"); # Zoom & Maskierung setzen
fhem('sleep 29; set kodi mute off; {kino_lichter("aus_langsam")}');
fhem("sleep 38; set kdi.kg.kino play");
}
elsif ($hdr) {
# HDR Modus
fhem("sleep 1; {JVC_zoom($ar)}"); # Zoom & Maskierung setzen
fhem("sleep 4; set kodi pause");
fhem('sleep 11; set kodi mute off; {kino_lichter("aus_langsam")}');
fhem("sleep 15; set jvc PictureAdjust_PictureMode HDR_madVR");
fhem("sleep 20; set kodi play");
}
else {
# SDR Mode
fhem("sleep 1; {JVC_zoom($ar)}"); # Zoom & Maskierung setzen
fhem('sleep 3; {kino_lichter("aus_langsam")}');
fhem("sleep 4; set kodi pause");
fhem("sleep 5; set kodi mute off");
fhem("sleep 14; set kodi play");
}
Log3 undef,3,"JVC_autoconfig(): Kodi currentMedia: " . $currentmedia . " => Aspect Ratio: " .$ar . " HDR: " . $hdr . " 3D: " . $three_d;
}
Alles anzeigen