Ankündigung

Einklappen
Keine Ankündigung bisher.

Sleep Timer für das Mediacenter

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Allgemein Sleep Timer für das Mediacenter

    Hi@all

    Der User ChrisK. hat im Thread zum Mediacenter HowTo die Frage nach einem Sleep Timer gestellt. Die Idee: mit der Apple Remote soll eine Funktion aktiviert werden können, die das System nach einer festgelegten Zeit in den Standby schickt. Hier ist eine erste Umsetzung. Sobald diese Funktion ausführlich getestet wurde, integriere ich sie in den Mediacenter Installer.

    Der Sleep Timer besteht aus 2 Apple Scripten. Das "SLTimerRB.scpt" Script dient zur Auswahl der Zeit und startet / beendet die "SLTimer.app", die das System nach Ablauf der eingestellten Zeit in den Standby schickt. Die Kombination aus Script und App lässt viele unterschiedliche Einsatzmöglichkeiten zu. Ich beschreibe hier mal die Implementierung in Remote Buddy. Das Ziel: mit der Taste Play/Pause der Apple Remote soll der Timer bedient werden.


    Benötigte Dateien

    SLTimer.zip


    Installation

    Im SLTimer.zip Paket sind 2 Dateien enthalten. Die "SLTimer.app" muss in den "Programme" Ordner kopiert werden. Dort muss die App einmalig per Hand gestartet werden, damit die Warnmeldung "Wurde aus dem Internet..." quittiert werden kann. Die App ist damit einsatzbereit. Jetzt geht es an die Implementierung in Remote Buddy.

    Benutzer der Logitech Harmony lesen bitte hier weiter: Klick!


    Ab hier wird die nachträgliche Implementierung für User der Apple Remote beschrieben.

    Öffne das "SLTimerRB.scpt" Script im Apple Script Editor.

    Klicke nun auf das Remote Buddy Icon in der Menu Bar und wähle den Punkt "Behavior Construction Kit...".

    sc1.jpg

    Klicke in der "Action Factory" auf den "Plus" Button (1) und füge so eine neue Aktion hinzu. Ich habe die Aktion "SleepTimer" benannt und "MMC Tools" als Gruppenbezeichnung eingetragen (2). Klicke anschliessend auf "Metadaten" (3) und setze den Haken bei der Option "Aktion global verfügbar" (4)

    sc2.jpg

    Jetzt geht es zur "Implementation" (1). Füge hier einen AppleScript Actor hinzu (2). Kopiere nun den vollständigen Code des "SLTimerRB.scpt" Scripts aus dem Apple Script Editor in das Remote Buddy "Quelltext" Fenster (3). Klicke auf den "Übersetzen" Button. Wenn die Meldung "Übersetzung erfolgreich" angezeigt wird, dann hat der Kopiervorgang geklappt (4). Wähle zum Schluss noch "beim Drücken der Taste" für die "Ausführen" Option (5).

    sc3.jpg

    Du kanst das Fenster des Behavior Construction Kit nun schliessen und in die Remote Buddy Einstellungen / Belegung wechseln. Wähle dort die "Globale Belegung" und suche eine geeignete Taste der Remote aus. In diesem Beispiel ist es die Taste "Abspielen/Pause (lang)". Beim Festhalten der Taste wird also der Timer aktiviert.

    sc4.jpg

    Öffne nun die Systemeinstellungen/Dock und setze den Haken bei der Oprion "Dock automatisch ein- und ausblenden".

    sx1.jpg

    Die Installation ist damit bereits abgeschlossen.


    Bedienung

    Die Aktivierung, Deaktivierung und Programmierung erfolgt einfach durch Tastendruck. Der Timer lässt sich auf eine Laufzeit zwischen 15 Minuten und 2 Stunden einstellen. Jeder Tastendruck schaltet um eine Stufe weiter. Die gerade gewählte Einstellung wird durch eine Message-Box angezeigt. Diese Anzeige wird nach 5 Sekunden automatisch ausgeblendet.

    1 x
    sl1.jpg
    2x
    sl2.jpg
    3x
    sl3.jpg
    4x
    sl4.jpg
    5x
    sl5.jpg
    6x
    sl6.jpg
    7x
    sl7.jpg
    -> zurück zum Anfang

    60 Sekunden vor Ablauf des Timers wird eine letzte Meldung eingeblendet.

    sl8.jpg

    Hier besteht noch die Möglichkeit den Standby zu verhindern. Dafür muss die Timer Taste gedrückt werden, bis die Meldung "Der Sleep Timer ist ausgeschaltet" angezeigt wird.


    Viel Erfolg bei der Einrichtung

    lg

    Michael
    Zuletzt geändert von lifeflow; 15.02.2014, 09:45.
    HowTos: Mac Mini Mediacenter mit Plex oder XBMC / Logitech Harmony und der Mac

  • #2
    So, noch ein paar Worte zu den einzelnen Funktionen der Scripte.

    Der Sleep Timer besteht aus 2 Apple Script Teilen. Ich nenne sie mal "Trigger" und "Timer". Der Trigger hat die Aufgabe den Timer zu starten und die gewünschte Laufzeit zu übergeben. Der Timer läuft nun im Hintergrund, bis diese Zeit abgelaufen ist, und schickt das System in den Standby.

    Trigger und Timer kommunizieren über 2 Config Dateien im Home Ordner. Die Datei "SLTimer.conf" enthält die eingestellte Laufzeit. In der Datei "SLTapp.conf" ist der Name der Anwendung enthalten, die sich gerade im Vordergrund befindet. Timer braucht beide Informationen. Der Name der Vordergrundanwendung hat folgende Bedeuteung:

    Wenn ein Programm startet, zieht es normalerweise automatisch den Fokus zu sich. Es wird zur Vordergrundanwendung. Das würde auch mit dem Timer passieren, sobald dieser vom Trigger gestartet wird. Die eigentliche Vordergrundanwendung (z.B. EyeTV oder XBMC) verliert damit den Fokus und ist nicht mehr per Remote bedienbar. Um das zu verhindern, schreibt Trigger den Namen der Anwendung in die Config Datei und startet den Timer. Timer wird zur Vordergrundanwendung, liest die Config ein und schickt die darin gespeicherte App in den Vordergrund. Genau das geschieht auch immer dann, wenn Timer eine Meldung eingeblendet hat.


    Trigger (SLTimerRB.scpt)

    Funktionen:

    - Prüft, ob SLTimer läuft. Wenn ja, wird SLTimer bendet. Das passiert jedes mal, wenn der Trigger gestartet wird. Damit soll erreicht werden, dass der Timer einen Reset durchführt und die Config neu einliest.
    - Prüft, ob der Timer zum ersten Mal verwendet wird (first run?). Wenn ja, wird das Config File "SLTimer.conf" angelegt, mit dem Inhalt "0". Die Timerfunktion ist jetzt betriebsbereit und ausgeschaltet.
    - Liest den Wert im Config File "SLTimer.conf" und verändert ihn gemäss den Vorgaben. Der Wert wird wieder in das Config File geschrieben.
    - Ermittelt die Anwendung im Vordergrund und schreibt den Namen in das Config File "SLTapp.conf".
    - Startet SLTimer

    Code:

    Code:
    on run
        activate
        set SLTimer to 0 as number
        set conpath to (path to home folder) & "SLTimer.conf" as text
        set frunpath to (path to home folder) & "SLTapp.conf" as text
        set firstrun to 0 as number
        
        tell application "System Events"
            set frontapp to item 1 of (get name of processes whose frontmost is true)
            get every process
            if exists application process "SLTimer" then
                set app_name to "SLTimer"
                set the_pid to (do shell script "ps ax | grep " & (quoted form of app_name) & " | grep -v grep | awk '{print $1}'")
                if the_pid is not "" then do shell script ("kill -9 " & the_pid)
            end if
        end tell
        
        tell application "Finder"
            if not (exists file conpath) then
                set firstrun to 1 as number
            end if
        end tell
        
        if firstrun = 1 then
            writeconf(SLTimer, conpath, frunpath, frontapp)
            set firstrun to 0
        end if
        
        tell application "Finder"
            try
                set OpenMyFile to open for access conpath as «class utf8»
                set SLTimer to read OpenMyFile as «class utf8»
                close access OpenMyFile
            on error
                close access OpenMyFile
            end try
        end tell
        
        set SLTimer to SLTimer as number
        
        if SLTimer < 60 then
            set SLTimer to SLTimer + 15
            writeconf(SLTimer, conpath, frunpath, frontapp)
            tell application frontapp to activate
        else
            set SLTimer to SLTimer + 30
            writeconf(SLTimer, conpath, frunpath, frontapp)
            tell application frontapp to activate
        end if
        
        if firstrun = 1 then return
        
        do shell script "open -a 'SLTimer'"
        
    end run
    
    on writeconf(SLTimer, conpath, frunpath, frontapp)
        set fPath to POSIX path of frunpath as text
        do shell script "rm -f " & fPath
        
        if SLTimer = 150 then
            set PosPath to POSIX path of conpath as text
            set SLTimer to 0
            try
                do shell script "rm -f " & PosPath
            end try
        end if
        
        tell application "Finder"
            set RefNum to (open for access file conpath with write permission)
            try
                write SLTimer to RefNum as «class utf8»
                close access RefNum
            on error
                close access RefNum
            end try
            
            set RefNum to (open for access file frunpath with write permission)
            try
                write frontapp to RefNum as «class utf8»
                close access RefNum
            on error
                close access RefNum
            end try
        end tell
    end writeconf

    Timer (SLTimer.app)

    Funktionen:

    - Liest den Inhalt der Config Files "SLTimer.conf" und "SLTapp.conf".
    - Gibt Statusmeldungen aus.
    - Schickt das System nach Ablauf in den Standby.

    Code:

    Code:
    on run
        set SLTimer to 0 as number
        set conpath to (path to home folder) & "SLTimer.conf" as text
        set frunpath to (path to home folder) & "SLTapp.conf" as text
        set shReminder to 0 as number
        set frontapp to "" as text
        
        tell application "Finder"
            if not (exists file conpath) then return
        end tell
        
        tell application "Finder"
            try
                set OpenMyFile to open for access conpath as «class utf8»
                set SLTimer to read OpenMyFile as «class utf8»
                close access OpenMyFile
            on error
                close access OpenMyFile
            end try
            try
                set OpenMyFile to open for access frunpath as «class utf8»
                set frontapp to read OpenMyFile as «class utf8»
                close access OpenMyFile
            on error
                close access OpenMyFile
            end try
            set frontapp to frontapp as text
        end tell
        set SLTimer to SLTimer as number
        activate
        if SLTimer = 0 then
            display dialog "    Der Sleep Timer ist ausgeschaltet." buttons {"OK"} default button "OK" with title "Sleep Timer" with icon 1 giving up after 5
        else
            display dialog " Standby wird in " & SLTimer & " Minuten aktiviert!" buttons {"OK"} default button "OK" with title "Sleep Timer" with icon 1 giving up after 5
        end if
        
        tell application frontapp to activate
        if frontapp = "EyeTV" then tell application "EyeTV" to enter full screen
        
        
        set SLTimer to (SLTimer * 60) as number
        if SLTimer = 0 then return
        set nowtime to current date
        set sleeptime to nowtime + SLTimer
        
        repeat
            delay 1
            set nowtime to current date
            set diff to sleeptime - nowtime
            if diff < 65 then
                if shReminder = 0 then
                    set shReminder to 1
                    tell application "System Events" to set frontapp to item 1 of (get name of processes whose frontmost is true)
                    activate
                    set theAnswer to display dialog "  Achtung! Standby in 60 Sekunden!" buttons {"Abbruch", "OK"} default button "OK" with title "Sleep Timer" with icon 1 giving up after 5
                    if button returned of theAnswer = "Abbruch" then
                        tell application frontapp to activate
                        if frontapp = "EyeTV" then tell application "EyeTV" to enter full screen
                        exit repeat
                    end if
                end if
            end if
            if diff < 5 then
                tell application "System Events"
                    set frontapp to item 1 of (get name of processes whose frontmost is true)
                    sleep
                end tell
                delay 3
                tell application frontapp to activate
                if frontapp = "EyeTV" then tell application "EyeTV" to enter full screen
                return
            end if
        end repeat
    end run
    Damit die App beim Start keine Störungen verursacht (z.B. durch das Einblenden des Dock Icons), muss ein Eintrag zur info.plist hinzugefügt werden. Die info.plist ist in der App selbst zu finden:

    - Rechtsklick auf die SLTimer.app
    - "Paketinhalt zeigen" auswählen

    Die info.plist befindet sich im "Contents" Ordner. Für die Bearbeitung der Datei kann ich z.B. den kostenlosen Editor Fraise empfehlen. Der hinzugefügte Schlüssel schaltet die Menubar und das Dockicon der App aus. Dadurch wird ein ausgeblendetes Dock beim Start der App nicht aktiviert. Einziger Nachteil: eine gestartete App kann nur über den Prozess in der Aktivitätsanzeige gefunden werden, da sie auch im "Sofort beenden" Menü nicht angezeigt wird.

    sc1.jpg
    Zuletzt geändert von lifeflow; 08.02.2014, 15:55.
    HowTos: Mac Mini Mediacenter mit Plex oder XBMC / Logitech Harmony und der Mac

    Kommentar


    • #3
      Perfekt, vielen vielen Dank schon einmal werde es direkt installieren und testen Feedback wird folgen!

      Schönen Abend,
      Christian

      #Nachtrag
      Also Installation klappt super easy hätte ich nicht gedacht, Message Box gefällt mir auch sehr gut *Thumps up*
      Nun hätte ich noch eine Frage, wenn ich den Timer einstelle, öffnet sich ja das Programm, welches dann auch in den Vordergrund geholt wird, somit EyeTV nicht mehr und es ist die Apple Menüleiste zu sehen sowie der Mauszeiger erst ein erneuter Vollbildmodus macht es rückgängig, kann man den Schritt EyeTV wieder in den Vordergrund / Vollbildmodus in das Script einbauen?

      Ist jetzt kein Problem, nur als Anreiz damit ich dich an der Arbeit halte! Vielen Dank nochmals!
      Zuletzt geändert von ChrisK.; 06.02.2014, 22:23. Grund: #Nachtrag

      Kommentar


      • #4
        Hallo Christian

        Sicher, das kann ich einbauen. Werde ich am Abend gleich erledigen

        lg

        Michael
        HowTos: Mac Mini Mediacenter mit Plex oder XBMC / Logitech Harmony und der Mac

        Kommentar


        • #5
          Hallo Christian

          Auf meinem System werden Dock und Menubar ausgeblendet, wenn die Messagebox verschwindet. Ich habe trotzdem mal einen EyeTV Fullscreen Befehl eingebaut. Das wird hoffentlich helfen. Wenn nicht, müssen wir das Problem an einer anderen Stelle suchen.

          In Anhang findest Du eine neue Version der SLTimer.app. Kopiere die App einfach in den "Programme" Ordner (alte Version überschreiben) und starte sie einmal per Hand.

          lg

          Michael

          SLTimer.app.zip
          HowTos: Mac Mini Mediacenter mit Plex oder XBMC / Logitech Harmony und der Mac

          Kommentar


          • #6
            Hallo Christian

            Hier ist noch eine neue Version. Diese App erzeugt keine Menüzeile und auch kein Dockicon. Setze bitte den Haken in "Systemeinstellungen/Dock/Dock automatisch ein- und ausblenden". Wenn die Messagebox jetzt eingeblendet wird, dann ist weder Dock noch Menubar zu sehen. Ausserdem bleibt EyeTV im Vollbild

            lg

            Michael

            SLTimer.app.zip
            HowTos: Mac Mini Mediacenter mit Plex oder XBMC / Logitech Harmony und der Mac

            Kommentar


            • #7
              Hey Michael,

              werde ich morgen sofort testen und dir dann berichten.
              Vielen Dank nochmal bin echt begeistert wie gut das klappt. Wenn mir neue Ideen kommen würde ich gern noch einmal auf deine Hilfe zurück kommen, wenn ich darf.


              Schönen Abend,
              Christain

              Kommentar


              • #8
                Hallo Christian

                Wenn es sich mit Applescript lösen lässt, gerne

                lg

                Michael
                HowTos: Mac Mini Mediacenter mit Plex oder XBMC / Logitech Harmony und der Mac

                Kommentar


                • #9
                  Hallo Christian

                  Konntest Du die neue App schon testen? Funktioniert das wie erwartet?

                  lg

                  Michael
                  HowTos: Mac Mini Mediacenter mit Plex oder XBMC / Logitech Harmony und der Mac

                  Kommentar


                  • #10
                    Hey Michael,

                    bis jetzt läuft alles wie geplant. Vielen Dank! Was mich wundert aber was nicht schlimm ist, wenn der mac wieder aufwacht ist eyetv immer der Sound komplett runtergedreht. Aber das ist kein Problem.

                    lg
                    Christian

                    Kommentar


                    • #11
                      Hallo Christian

                      Danke für das Feedback! Dann werde ich den Timer am WE mal in den Installer einbauen

                      Code:
                      wenn der mac wieder aufwacht ist eyetv immer der Sound komplett runtergedreht.
                      Danke für den Hinweis. Das ist ein Bug in der WAKEUP.app. Im Anhang findest Du eine neue Version. Könntest Du diese bitte mal testen?

                      lg

                      Michael

                      WAKEUP.app.zip
                      HowTos: Mac Mini Mediacenter mit Plex oder XBMC / Logitech Harmony und der Mac

                      Kommentar


                      • #12
                        Guten Abend,

                        werde ich morgen früh sofort testen und dir dann berichten!

                        lg
                        Christian

                        Kommentar


                        • #13
                          Guten morgen,

                          Datei ist ausgeraucht, erster Test verläufft sehr gut, vielen Dank.
                          Wenn mir etwas neues auffällt sag ich beschied.

                          lg
                          Christian

                          Kommentar


                          • #14
                            Hallo Christian

                            Hier noch eine Version für die Logitech Harmony. Du musst dafür 3 zusätzliche Display Tasten einrichten und mit den Funktionen F5, F6 und F7 verknüpfen. Hier mal Screenshots aus meiner lokalen Harmony Software (Harmony One). Die Online Einrichtung für die Touch sieht etwas anders aus, ist aber prinzipiell gleich.

                            Es gibt jetzt die 3 Tasten Timer UP, Timer Down und Timer Off.

                            sct1.jpg

                            sct2.jpg

                            Timer Up ist mit dem Script aus dem ersten Posting identisch (0-15-30-45-60-90-120-0). Timer Down funktioniert genau gleich, zählt aber Rückwärts (0-120-90-60-45-30-15-0). Timer Off setzt den Timer auf 0 und killt den SLTimer Prozess. Der Timer ist damit sofort deaktiviert.

                            In diesem Archiv sind fertige Remote Buddy Configs: RB_Configs_Timer.zip

                            Achtung! Wenn Du diese Configs installierst, dann gehen alle bisher vorgenommenen Einstellungen verloren! D.h. falls Du selbst Änderungen an der Remote Buddy Belegung vorgenommen hast, musst Du diese jetzt erneut einbauen. Auch die Belegung der "Play / Pause (lang)" taste aus dem ersten Posting ist weg. Die wird ja bei der Harmony nicht benötigt und ich habe deshalb wieder die originale Belegung eingestellt. Die Timer Funktion lässt sich also nicht mehr mit der Apple Remote bedienen. Wenn Du diese Funktion auch mit der Apple Remote bedienen möchtest, dann musst Du erneut in die globale Belegung wechseln und die Taste "Abspielen/Pause (lang)" belegen. Diesmal aber mit der Funktion "Verschiedenes/Timer Up (Sleep Timer)" belegen. Du musst natürlich nicht die ganze Anleitung aus dem ersten Posting durchführen. Das Script ist ja bereits implementiert, nur jetzt unter der Bezeichnung "Timer Up (Sleep Timer)" zu finden.

                            - Lade die Datei herunter und packe sie auf dem Desktop aus
                            - Beende Remote Buddy
                            - Kopiere alle Dateien aus dem Archiv in den Ordner ~/Library/Preferences (vorhandene Dateien überschreiben)
                            - Starte Remote Buddy

                            Bitte beachte: es handelt sich um den Library Ordner in Deinem Home Verzeichnis, nicht um den im Hauptverzeichnis der Festplatte! Falls Library in Deinem Home Ordner nicht sichtbar ist, dann öffne ein Terminal Fenster (Programme/Dienstprogramme/Terminal) und führe folgenden Code aus:

                            Code:
                            chflags nohidden ~/Library
                            lg

                            Michael
                            HowTos: Mac Mini Mediacenter mit Plex oder XBMC / Logitech Harmony und der Mac

                            Kommentar


                            • #15
                              Hey Michael,

                              hab es gerade gemacht! Du bist ein Gott, vielen Dank es klappt genauso wie erwartet und endlich kommt meine Freundin auch mit dem System klar, Fernweh an, Mac an, klappt ja alles automatisch und läuft perfekt zusammen, hätte nie gedacht das sie sogar mit Plex klar kommt und ihre Serien darüber gucken kann! - Sehr sehr geil! Da hängt der Haussegen wieder gerade nachdem Kauf von dem Mac.

                              Schönes ruhiges Wochenende!

                              Chrsitian

                              Kommentar

                              Lädt...
                              X