Mein RecordingDone-Skript
So, wie versprochen hier mein RecordingDone-Skript:
Code:
-- Skript zum automatischen Ausschalten nach einer Aufnahme.
-- Speichern als Skrpt mit Name: RecordingDone.scpt
-- Speichern in /Library/Application Support/EyeTV/Scripts/TriggeredScripts
on RecordingDone(recordingID)
-- Werbung markieren
do shell script "/Library/Application\\ Support/ETVComskip/MarkCommercials.app/Contents/MacOS/MarkCommercials " & recordingID
-- IDLE-Time abrufen
set idletime to do shell script "ioreg -c IOHIDSystem | grep Idle | tail -1 | awk '{printf(\"%d\", $NF/10^9);}'"
set idletime to idletime as integer
-- Wenn IDLE-Time abgelaufen ist, überprüfen ob eine Aufnahme ansteht
if idletime > 60 then
tell application "EyeTV.app"
-- überprüfen ob eine Aufnahme ansteht
set limitsleep to 15 * minutes
set limitoff to 30 * minutes
set ruhezustand to true
set ausmachen to true
set vorlauf to («class Prpd» 2) * minutes
set jetzt to current date
repeat with aufnahme in «class Stim» of every «class cPrg»
set diff to aufnahme - jetzt
if diff ≥ vorlauf then set diff to diff - vorlauf
if diff ≥ 0 and diff ≤ limitsleep then set ruhezustand to false
if diff ≥ 0 and diff ≤ limitoff then set ausmachen to false
end repeat
-- Wenn keine Aufnahme in den nächsten 15 Minuten ansteht, in den Ruhezustand gehen
if «class IRcd» = false and ruhezustand = true and ausmachen = false then
activate
set antwort to display dialog "EyeTV hat eine Aufnahme beendet.
Die nächste Aufnahme steht in mehr als 15 Minuten an.
Soll der Computer in den Ruhezustand gehen?" buttons {"Nein", "Ja"} default button "nein" with icon note with title "EyeTV-Recorder" giving up after 30
if button returned of antwort = "Ja" or button returned of antwort = "" then
tell application "Finder"
ignoring application responses
sleep
end ignoring
end tell
end if
end if
-- Wenn keine Aufnahme in den nächsten 30 Minuten ansteht, herunterfahren
if «class IRcd» = false and ausmachen = true then
activate
set antwort to display dialog "EyeTV hat eine Aufnahme beendet.
Es steht keine EyeTV-Aufnahme bevor.
Soll der Computer ausgeschaltet werden?" buttons {"Nein", "Ja", "Ruhezustand"} default button "nein" with icon note with title "EyeTV-Recorder" giving up after 30
if button returned of antwort = "Ja" or button returned of antwort = "" then
tell application "Finder"
ignoring application responses
shut down
end ignoring
end tell
end if
if button returned of antwort = "Ruhezustand" then
tell application "Finder"
ignoring application responses
sleep
end ignoring
end tell
end if
end if
end tell
end if
end RecordingDone
(Sieht beim Dialog etwas unschön aus, dafür ist der Dialog auf dem Bildschirm dann umso schöner ;-) )
Meine Erfahrungen vom Herumbasteln und ausprobieren der Inputs aus meinen unzähligen Vorrednern bzw. -schreibern und mit dem Skript selbst:
- Front Row: ob Front Row läuft oder nicht, muss nicht abgefragt werden, da Front Row (bei allen Anwendungen oder Funktionen, die daraus gestartet werden) die Ausführung von Applescripts sowieso blockiert
- iTunes: iTunes abzufragen bring auch nichts, da man immer ein Prozess mit dem Namen iTunes findet. Scheint im Hintergrund zu laufen.
- EyeTV: EyeTV ergibt immer ein playing, wenn ein TV-Fenster geöffnet wird.
Das TV-Fenster darf aber nicht im Vollbildmodus laufen, sonst wird das Herunterfahren verhindert. EyeTV verhindert auch den normalen Ruhezustand aus der Systemeinstellung "Energie sparen".
- ETV-Comskip: Muss über die Zeile
Code:
do shell script "/Library/Application\\ Support/ETVComskip/MarkCommercials.app/Contents/MacOS/MarkCommercials" & recordingID
in das Skript eingebaut werden! (hatte mich selbst vera...t durch rumbasteln). Funktioniert super, dauert aber je nachdem etwas.
- Andere Anwengungen: Wenn andere Anwenungen irgendwelche Dateien geöffnet halten und fragen, ob gespeichert werden soll, schlägt das Herunterfahren fehl, trotz ignore.
Somit ist eben obenstehendes Skript herausgekommen, was wie gesagt sehr gut funktioniert und mir bis jetzt noch nie in die Quere gekommen ist.
Funktioniert auch bei mehreren Aufnahmen hintereinander, mit oder ohne kurze Pause, sehr gut.
Bin mir noch am Überlegen, ob ich eine Unterscheidung einbauen soll, dass z.B. wenn es noch 15 Minuten bis zur nächsten Aufnahme geht, nur der Ruhezustand aktiviert werden soll, und ab 30 Minuten heruntergefahren werden soll.
Hat jemand Daten zur zusätzlichen Stromeinsparung von Ruhezustand gegenüber Idle?
Edit: Kommentar zu ETV-Comskip geändert, Comskip muss mit der eingefügten Zeile gestartet werden.
Edit: Skript angepasst, sodass der Computer in den Ruhezustand oder ausschaltet, je nachdem wie lange es bis zur nächsten Aufnahme dauert.
Edit: Kleiner Logik-Fehler korrigiert. Ansonsten kam bei Anklicken von Nein der zweite Dialog auch noch.