Kann ich gern heute Abend machen. Ist allerdings erst eine Beta Fassung für eine Aktion .

Kinosteuerung mit FHEM (Hausautomation) + Harmony
-
-
Code
Alles anzeigen####################################### my $version="2020-06-06"; ####################################### package main; use strict; use warnings; use POSIX; use Time::Local; ####################################### ## Init ####################################### sub myUtils_Kino_Initialize($$) { my ($hash) = @_; } ####################################### ## ROUTING ####################################### # Aufruf über HarmonyActivitiesNtfy sub HarmonyActivities($) { my ($activity) = @_; my $sub = "HarmonyActivity_" . $activity; my $coderef=__PACKAGE__->can($sub); fhem("setreading KinoSteuerung Activity $activity;"); fhem("setreading KinoSteuerung Version $version;"); if ($coderef) { $coderef->($activity); } } # Aufruf über HarmonyActionNtfy sub HarmonyAction($) { my ($action) = @_; if ($action eq "Search"){$action = "Play"} elsif ($action eq "Info"){$action = "Pause"} elsif ($action eq "Home"){$action = "Vorflm"}; my $sub = "HarmonyAction_" . $action; my $coderef=__PACKAGE__->can($sub); fhem("setreading KinoSteuerung LastAction $action;"); fhem("setreading KinoSteuerung Version $version;"); if ($coderef) { $coderef->($action); } } ####################################### ## Blu-ray ####################################### sub HarmonyActivity_Bluray ($) { my ($activity) = @_; Log 1, ("$activity Modus wird eingeleitet"); if (ReadingsVal('KinoSteuerung','StatusDev','NN') eq "off") { KinoLicht("on"); KinoRelais("on"); KinoRoll("down"); fhem("setreading KinoSteuerung StatusDev on;"); } else { Log 1, ("Geraete sind bereits eingeschaltet, es ist nicht zu tun"); } if (ReadingsVal('Bluray','power','NN') ne "on") { fhem("sleep 10;set Bluray PowerOn; setreading Bluray power on;"); Log 1, ("Blueray Power on "); } if (ReadingsVal('Denon','power','NN') ne "on") { fhem("sleep 10;set Denon on; setreading AVR power on;"); Log 1, ("Denon Power on "); } if (ReadingsVal('Denon','input','NN') ne "Blu-Ray") { fhem("sleep 10;set Denon input Blu-Ray;"); Log 1, ("Denon Input Blu-Ray"); } if (ReadingsVal('Beamer','power','NN') ne "on") { fhem("sleep 10;set Beamer PowerOn; setreading Beamer power on;"); Log 1, ("Beamer on"); } if (ReadingsVal('KinoSteuerung','Vorfilm','NN') ne "off") { fhem("sleep 30; {HarmonyAction_Vorfilm('Home')};"); Log 1, ("Mit Vorfilm"); } } ####################################### ## Ende ####################################### sub HarmonyActivity_Ende($) { my ($activity) = @_; Log 1, ("$activity Modus wird eingeleitet"); if (ReadingsVal('KinoSteuerung','StatusDev','NN') eq "on") { KinoLicht("ende"); KinoRelais("off"); KinoRoll("up"); fhem("setreading KinoSteuerung StatusDev off;"); } else { Log 1, ("Geraete sind bereits aus, es ist nicht zu tun"); } if (ReadingsVal('Bluray','power','NN') ne "off") { fhem("sleep 10;set Bluray PowerOff; setreading Bluray power off;"); } if (ReadingsVal('Denon','power','NN') ne "off") { fhem("sleep 10;set Denon off; setreading AVR power off;"); Log 1, ("Denon Power off"); } if (ReadingsVal('Beamer','power','NN') ne "off") { fhem("sleep 10;set Beamer PowerOff; setreading Beamer power off;"); Log 1, ("Beamer off"); } } ####################################### ## Action - Play - "search" ROKU ####################################### sub HarmonyAction_Play($) { my ($action) = @_; Log 1, ("$action wird eingeleitet"); KinoLicht("play"); } ####################################### ## Action - Pause - "Info" ROKU ####################################### sub HarmonyAction_Pause($) { my ($action) = @_; Log 1, ("$action wird eingeleitet"); KinoLicht("pause"); } ####################################### ## Action - Vorspann abspielen /Home ####################################### sub HarmonyAction_Vorfilm($) { my ($action) = @_; Log 1, ("$action wird eingeleitet"); fhem("set Dimmer.Kino.Deckenfries 20 0 10;"); fhem("set Bluray pause;"); fhem("set FireTVKino connect;"); fhem("sleep 1;set FireTVKino screen wakeup;"); fhem("sleep 1;set FireTVKino appstart org.xbmc.kodi;"); fhem("sleep 1;set FireTVKino_KODI back;set FireTVKino_KODI opendir nfs://192.168.178.28/volume1/filme/Kodi-Test/Intro/;"); fhem("set Denon input Mediaplayer;"); fhem("sleep 2;set FireTVKino_KODI pause;"); fhem("sleep 1;set Denon volume 45"); fhem("sleep 2;set FireTVKino_KODI play;"); } ####################################### ## Action - VorfilmEnde ####################################### sub HarmonyAction_VorfilmEnde($) { my ($action) = @_; Log 1, ("$action wird eingeleitet"); fhem("set Dimmer.Kino.Deckenfries 0 0 10;"); fhem("set Denon volume 57"); fhem("set Denon input Blu-Ray;"); fhem("set HarmonyHub.Kino command UBP-X700 play;"); fhem("setreading KinoSteuerung Vorfilm off;"); } ####################################### ## LED und Spot schalten ####################################### sub KinoLicht ($) { my ($state) = @_; my $spotdim = AttrVal("KinoSteuerung","KinoSpotDimAn","nn"); my $spotramp = AttrVal("KinoSteuerung","KinoSpotRampAn","nn"); my $ledcolor = AttrVal("KinoSteuerung","KinoLEDFarbeAn","nn"); my $ledramp = AttrVal("KinoSteuerung","KinoLEDRamp","nn"); my $spotdimpause = AttrVal("KinoSteuerung","KinoSpotDimPause","nn"); my $spotramppause = AttrVal("KinoSteuerung","KinoSpotRampPause","nn"); my $ledcolorpause = AttrVal("KinoSteuerung","KinoLEDFarbePause","nn"); my $spotrampplay = AttrVal("KinoSteuerung","KinoSpotRampPlay","nn"); if ($state eq "on") { if (ReadingsVal("Dimmer.Kino.Deckenfries","state","NN") eq "off") { fhem("set Dimmer.Kino.Deckenfries $spotdim 0 $spotramp;"); } if (ReadingsVal("LedStripesAlle.Kino","state","NN") eq "off") { fhem("set LedStripesAlle.Kino HSV $ledcolor $ledramp;"); } if (ReadingsVal("Relais.Kino.1.LichtBar","state","NN") eq "off") { fhem("set Relais.Kino.1.LichtBar on;"); } } elsif ($state eq "off") { if (ReadingsVal("Dimmer.Kino.Deckenfries","state","NN") ne "off") { fhem("set Dimmer.Kino.Deckenfries 0 0 120;"); } if (ReadingsVal("LedStripesAlle.Kino","state","NN") ne "off") { fhem("set LedStripesAlle.Kino HSV 0,0,0 10;"); } if (ReadingsVal("Relais.Kino.1.LichtBar","state","NN") ne "off") { fhem("defmod Relais.LichtBar_at at +00:03:00 set Relais.Kino.1.LichtBar off;"); } } elsif ($state eq "play") { if (ReadingsVal("Dimmer.Kino.Deckenfries","state","NN") ne "off") { fhem("set Dimmer.Kino.Deckenfries 0 0 $spotrampplay;"); } if (ReadingsVal("LedStripesAlle.Kino","state","NN") ne "off") { fhem("set LedStripesAlle.Kino HSV 0,0,0 $ledramp;"); } if (ReadingsVal("Relais.Kino.1.LichtBar","state","NN") ne "off") { fhem("set Relais.Kino.1.LichtBar off;"); } } elsif ($state eq "pause") { if (ReadingsVal("Dimmer.Kino.Deckenfries","state","NN") ne "on") { fhem("set Dimmer.Kino.Deckenfries $spotdimpause 0 $spotramppause;"); } if (ReadingsVal("LedStripesAlle.Kino","state","NN") ne "on") { fhem("set LedStripesAlle.Kino HSV $ledcolorpause $ledramp;"); } if (ReadingsVal("Relais.Kino.1.LichtBar","state","NN") ne "on") { fhem("set Relais.Kino.1.LichtBar on;"); } } elsif ($state eq "ende") { if (ReadingsVal("Dimmer.Kino.Deckenfries","state","NN") ne "on") { fhem("set Dimmer.Kino.Deckenfries 50 0 60;"); } if (ReadingsVal("LedStripesAlle.Kino","state","NN") ne "on") { fhem("set LedStripesAlle.Kino HSV $ledcolor $ledramp;"); } if (ReadingsVal("Relais.Kino.1.LichtBar","state","NN") ne "on") { fhem("set Relais.Kino.1.LichtBar on;"); } fhem("defmod DimmerAus_at at +00:04:00 set Dimmer.Kino.Deckenfries 0 0 120;"); fhem("defmod LedsAus_at at +00:04:00 set LedStripesAlle.Kino HSV 0,0,0 10;"); fhem("defmod Relais.LichtBar_at at +00:04:00 set Relais.Kino.1.LichtBar off;"); } fhem("setreading KinoSteuerung Leds $state;"); fhem("setreading KinoSteuerung Spots $state;"); } ####################################### ## Kino Rollladen steuern ####################################### sub KinoRoll ($) { my ($state) = @_; my $ARSnextDown = ReadingsVal("Roll.KinoVorne","ARSnextDown","NN"); my $timedif = ZeitDiff($ARSnextDown); if ($state eq "down") { if (ReadingsNum("Roll.KinoVorne","level","NN") > 0) { fhem('set Roll.KinoVorne down'); Log 1, ("$timedif ... Rollo fährt runter."); } } elsif ($state eq "up") { if (ReadingsNum("Roll.KinoVorne","level","NN") == 0) { if ($timedif >5 and $timedif <600){ fhem('set Roll.KinoVorne up'); Log 1, ("$timedif ... Rollo fährt hoch"); fhem("setreading Roll.KinoVorne ARSlocked on;"); } else { Log 1, ("$timedif ... Rollo bleibt unten, weil gleich die Nacht beginnt."); } } } } ####################################### ## Relais schalten ####################################### sub KinoRelais ($){ my ($state) = @_; if ($state eq "on") { if (ReadingsVal("Relais.Kino.1.AVR","state","NN") eq "off") { fhem("set Relais.Kino.1.AVR on;"); } if (ReadingsVal("Funkschalter.Kino.Subwoofer","state","NN") eq "off") { fhem("defmod Funkschalter.Kino.Subwoofer_at at +00:00:01 set Funkschalter.Kino.Subwoofer on;"); } if (ReadingsVal("Relais.Kino.1.Beamer","state","NN") eq "off") { fhem("defmod Relais.KinoBeamer_at at +00:00:02 set Relais.Kino.1.Beamer on;"); } } elsif ($state eq "off") { if (ReadingsVal("Relais.Kino.1.AVR","state","NN") eq "on") { fhem("defmod Relais.KinoAVR_at at +00:05:00 set Relais.Kino.1.AVR off;"); } if (ReadingsVal("Relais.Kino.1.Beamer","state","NN") eq "on") { fhem("define Relais.KinoBeamer_at at +00:10:00 set Relais.Kino.1.Beamer off;"); } if (ReadingsVal("Funkschalter.Kino.Subwoofer","state","NN") eq "on") { fhem("defmod Funkschalter.Kino.Subwoofer_at at +00:00:30 set Funkschalter.Kino.Subwoofer off;"); } } fhem("setreading KinoSteuerung RelaisAVR $state;"); fhem("setreading KinoSteuerung RelaisBeamer $state;"); } ####################################### ## Zeit Differenzen berechnen ####################################### sub ZeitDiff($) { my ($MeH,$MeM,$MeS)=split(':',shift(@_)); my $ZtA = int($MeH*3600 + $MeM*60 + $MeS); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time()); # aktuelle Zeit/Datum in Einzelvariabeln zerlegen für die weitere Verarbeitung my $ZtB = int($hour*3600 + $min*60 + $sec); my $Zd_diff = int(($ZtA-$ZtB)/60); # Differenz in Minuten ausrechnen return($Zd_diff); }
Wie gesagt, dass ich noch beta Status. Macht aber alles, was es soll. Da sind noch einige Kürzungen und Vereinfachungen drin. Aber .. 1-Click mit Vorfilm, Werbung usw. funktioniert schon mal.
-
Danke,
das sieht gut aus. Ich muss mir das mal in Ruhe anschauen
-
Hallo,
setze gerade FHEM mit fakeRoku auf neuer HW neu auf und habe Probleme mit dem Erkennen der Events. Das Aufsetzen lief eigentlich vor Jahren problemlos, so wie hier beschrieben: https://forum.fhem.de/index.php?topic=51619.0
Harmony App erkennt auch ein Roku 3 Gerät im Netz, aber ich bekomme im Event Monitor keine Tastendrücke angezeigt. Auch mit verbose 5 nicht...
Weiß jemand Rat?
-
Hast du in der Harmony diesen Entwicklungszugang eingestellt?
-
Hi,
ja ist an. Danke für die schnelle Hilfe.
Hat sich erledigt. Roku Events gehen jetzt auch. Meine Fhem Skills sind nur ein wenig eingerostet...
-
Kurzes Update zur Kinosteuerung.
Da mich das Harmony Thema nicht loslässt, habe ich angefangen dem Kino eine eigene TabletUI Seite zu bauen.
Screenshot_20221203-124835_Fully Kiosk Browser.jpgScreenshot_20221203-125419_Fully Kiosk Browser.jpgScreenshot_20221203-125401_Fully Kiosk Browser.jpg
das gane ist erstmal für mein Handy skaliert.
Die Hauptbedienung erfolgt nach wie vor noch die Harmony.
Um ein unbeabsichtigtes ausschalten der Geräte zu verhindern, erfolgt das Schaltern über PopUps.
-
Aries
Hat das Thema aus dem Forum Heimkinobau und Ausstattung nach Heimkinoausstattung verschoben
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!