1. Wenn du alle Inhalte sehen, oder selber eine Frage erstellen möchtest, kannst du dir in wenigen Sekunden ein Konto erstellen. Die Registrierung ist kostenlos, als Mitglied siehst du keine Werbung!

EyeTV3 RecordingDone Script zum ausschalten

Diskutiere das Thema EyeTV3 RecordingDone Script zum ausschalten im Forum Sonstige Multimedia Hard- und Software.

  1. arnes1970

    arnes1970 Mitglied

    Beiträge:
    6
    Zustimmungen:
    0
    Mitglied seit:
    10.08.2010
    Hallo,

    ich habe einmal eine grundsätzliche Frage. Das RecordinDone-Skript funktioniert bei mir prima, allerdings nur wenn ich am System angemeldet bin. Lasse ich den Rechner durch eine programmierte Aufnahme von eyetv starten bleibt dieser im Login-Screen stehen (keine automatische Anmeldung aktiviert!). Im Hintergrund führt eyetv die Aufnahme korrekt durch, allerdings erfolgt keine Abschaltung. Meine Frage ist - muss zwingend ein Benutzer angemeldet sein, damit eyetv das Skript ausführen kann.

    Danke schon einmal vorab
     
  2. oneOeight

    oneOeight Thread Starter Mitglied

    Beiträge:
    53.640
    Zustimmungen:
    6.607
    Mitglied seit:
    23.11.2004
    hmm, steht in der eyetv anleitung nicht, dass man das automatische einloggen aktivieren muss?
     
  3. arnes1970

    arnes1970 Mitglied

    Beiträge:
    6
    Zustimmungen:
    0
    Mitglied seit:
    10.08.2010
    Hi oneOeight,

    Danke für Dein Feedback. Das mit der automatischen Anmeldung steht in der Anleitung, ist für mich aber keine Option, da auch meine Kids den Rechner nutzen, dies aber nur mit Anmeldung und aktivierter Kindersicherung. Da das Aufnehmen ohne Anmeldung und auch ohne Haken bei "EyeTV bei Anschluss des Geräts starten" funktioniert, würde es mich interessieren, ob es MAC seitig überhaupt möglich ist, ohne Anmeldung Skripte auszuführen, oder ob das generell nicht geht. EyeTV wird ja im Hintergrund ohne Anmeldung gestartet , nimmt die Sendung auf und wird dann auch wieder beendet, nur das Skript wird nicht gestartet oder zeigt zumindest nicht die gewünschte Wirkung
     
  4. Dr_Tee

    Dr_Tee Mitglied

    Beiträge:
    804
    Zustimmungen:
    91
    Mitglied seit:
    05.03.2007
    Hallo. Seit geraumer Zeit startet mein iMac nicht mehr automatisch wenn eine Aufnahme beginnt und er sich vorher automatisch durch eine Beendigung einer Aufnahme heruntergefahren hat.
    Wenn ich ihn in den Ruhestand schicke wacht er aber wieder auf.

    Gibt es die Möglichkeit in das Script hier einzubauen, dass er wenn in den nächsten 2 Stunden noch eine Aufnahme ansteht in den Ruhezustand geht, und ansonsten herunterfährt?
    Das wäre für mich perfekt.

    Über Hilfe wäre ich sehr Dankbar!
     
  5. BirdOfPrey

    BirdOfPrey Mitglied

    Beiträge:
    10.520
    Zustimmungen:
    488
    Mitglied seit:
    14.06.2005
    Wie vertraut bist Du denn mit AppleScript? Wenn mich nicht alles täuscht, hatte ich das damals in mein Skript mit eingebaut:
    https://www.macuser.de/forum/f28/eyetv3-recordingdone-script-333894/index14.html#post5202378

    Kurz zusammen gefasst müssten es diese Zeilen sein:
    Code:
    tell application "EyeTV"
    		set limit to 5 * minutes
    		set ausmachen to true
    		set vorlauf to (prepad time + 2) * minutes
    		set jetzt to current date
    		repeat with aufnahme in start time of programs
    			set diff to aufnahme - jetzt
    			if diff ≥ vorlauf then set diff to diff - vorlauf
    			if diff ≥ 0 and diff ≤ limit then set ausmachen to false
    		end repeat
    		
    		if not is_recording and ausmachen then
    			activate
    			set antwort to display dialog "Der Mac wird ausgeschaltet" buttons {"Abbrechen", "OK"} default button "Abbrechen" with icon 2 giving up after 30
    			set zeitAbgelaufen to gave up of antwort
    		end if
    	end tell
    Die "5" sollte die Zeit bis zur nächsten Aufnahme angeben, in der das Herunterfahren verhindert wird. Einfach entsprechend ändern. Ich hoffe, ich habe das alles richtig gedeutet. Ist schon etwas länger her, dass ich das geschrieben habe. Ich denke oneOeight war daran bestimmt beteiligt. ;)

    Gruß
     
  6. Dr_Tee

    Dr_Tee Mitglied

    Beiträge:
    804
    Zustimmungen:
    91
    Mitglied seit:
    05.03.2007
    Hi, vielen Dank erstmal für deine Antwort!! :)
    So klappt das. Jedoch würde mich interessieren ob man in das Script noch eine Abfrage einbauen kann, dass er in den Sleep Modus geht wenn in den nächsten 3 Stunden noch eine Aufnahme ansteht, aber wenn keine Aufnahme mehr ansteht, der Rechner dann richtig herunterfährt?
    Gibt es sowas?

    Mein Script sieht bis jetzt so aus:

    Code:
    on RecordingDone(recordingID)
    	tell application "EyeTV"
    		set limit to 30 * minutes
    		set ausmachen to true
    		set vorlauf to (prepad time + 2) * minutes
    		set jetzt to current date
    		repeat with aufnahme in start time of programs
    			set diff to aufnahme - jetzt
    			if diff ≥ vorlauf then set diff to diff - vorlauf
    			if diff ≥ 0 and diff ≤ limit then set ausmachen to false
    		end repeat
    		if is_recording = false and ausmachen = true then
    			activate
    			set antwort to display dialog "iMac schlafen legen" buttons {"Nee", "Jep"} default button "Nee" giving up after 30
    			if button returned of antwort = "Jep" or button returned of antwort = "" then
    				tell application "Finder"
    					shut down
    				end tell
    			end if
    		end if
    	end tell
    end RecordingDone
    
     
  7. BirdOfPrey

    BirdOfPrey Mitglied

    Beiträge:
    10.520
    Zustimmungen:
    488
    Mitglied seit:
    14.06.2005
    Oh, jetzt erst wieder den Thread gesehen.
    Da gibt es sicherlich mehrere Wege. Einer ist z.B. die Abfrage in einer Subroutine zu verlegen und jeweils mit der gewünschten Zeit aufzurufen. Auch wenn man dann vielleicht unnötig oft die Routine aufruft.
    So in etwa:
    Code:
    on RecordingDone(recordingID)
    	tell application "EyeTV"
    		set ausschalten to my anstehendeAufnahmeIn(180)
    		set ruhezustand to my anstehendeAufnahmeIn(30)
    		
    		if not is_recording then
    			if ausschalten then
    				my send_growl_message("Shut Down!", "Das System wird jetzt heruntergefahren.")
    				--
    				-- hier der Code fürs Ausschalten --
    				--
    			else if ruhezustand then
    				my send_growl_message("Ruhezustand!", "Das System wird jetzt in den Ruhezustand versetzt.")
    				--
    				-- hier Code für den Ruhezustand --
    				--
    			end if
    		else
    			my send_growl_message("Es steht eine Aufnahme an!", "Das System wird NICHT herunter gefahren")
    		end if
    	end tell
    end RecordingDone
    
    
    # steht innerhalb der nächsten xx Minuten (zeit) eine Aufnahme an?
    on anstehendeAufnahmeIn(zeit)
    	tell application "EyeTV"
    		try
    			set limit to zeit * minutes
    			set ausmachen to true
    			set vorlauf to (prepad time + 2) * minutes
    			set jetzt to current date
    			repeat with aufnahme in start time of programs
    				set diff to aufnahme - jetzt
    				if diff ≥ vorlauf then set diff to diff - vorlauf
    				if diff ≥ 0 and diff ≤ limit then set ausmachen to false
    			end repeat
    		end try
    	end tell
    	return {ausmachen}
    end anstehendeAufnahmeIn
    
    
    # Eine Nachricht mittels Growl anzeigen
    on send_growl_message(titel, textmessage)
    	try
    		tell application "GrowlHelperApp"
    			set the allNotificationsList to {"Test Notification", "Another Test Notification"}
    			set the enabledNotificationsList to {"Test Notification"}
    			register as application "Growl AppleScript Sample" all notifications allNotificationsList default notifications enabledNotificationsList icon of application "EyeTV"
    			
    			--	Send a Notification...
    			notify with name "Test Notification" title titel description textmessage application name "Growl AppleScript Sample" #with sticky
    		end tell
    	end try
    end send_growl_message
     
  8. Dr_Tee

    Dr_Tee Mitglied

    Beiträge:
    804
    Zustimmungen:
    91
    Mitglied seit:
    05.03.2007
    Wieder Zeit mich mal wieder um EyeTV zu kümmern :)

    Vielen Dank für das Script. Ich werde das diese Woche mal ausprobieren und dann berichten :)
     
  9. phreichmuth

    phreichmuth Mitglied

    Beiträge:
    101
    Zustimmungen:
    8
    Mitglied seit:
    20.06.2008
    ETVComSkip unterbricht Idle-Time: kein herunterfahren nach der Aufnahme

    Hallo zusammen

    Zuerst mal ein gutes neues Jahr an alle hier!

    Seit ich ETV-Comskip 2.0.2-10.6 installiert habe (auf Snow-Leo), fährt mein Mac mini nach der Aufnahme nicht mehr herunter. Er markiert brav die Werbung, bleibt dann aber laufen.
    Ich habe das normale RecordingStarted-Script aus dem ETVComSkip-Paket installiert und mein RecrodingDone-Script angepasst:

    RecordingStarted
    Code:
    on RecordingStarted(recordingID)
    	delay 10
    	set cmd to "/usr/bin/nice -n 2 '/Library/Application Support/ETVComskip/MarkCommercials.app/Contents/MacOS/MarkCommercials' --log " & recordingID & " > /dev/null"
    	-- display dialog cmd
    	do shell script cmd
    	
    	--disable this if you do not want a logfile written
    	-- write_to_file((short date string of (current date) & " " & time string of (current date)) & "Recording Started run for ID: " & recordingID & (ASCII character 13), (path to "logs" as string) & "EyeTV scripts.log", true)
    end RecordingStarted
    
    on write_to_file(this_data, target_file, append_data)
    	--from http://www.apple.com/applescript/sbrt/sbrt-09.html
    	try
    		set the target_file to the target_file as string
    		set the open_target_file to open for access file target_file with write permission
    		if append_data is false then set eof of the open_target_file to 0
    		write this_data to the open_target_file starting at eof
    		close access the open_target_file
    		return true
    	on error
    		try
    			close access file target_file
    		end try
    		return false
    	end try
    end write_to_file
    RecordingDone
    Code:
    global LogMsg
    
    on RecordingDone(recordingID)
    	do shell script "echo Kontrollmarke_1 > /comskip.txt"
    	
    	tell application "EyeTV.app"
    		set Aufnahme to recordingID as integer
    	end tell
    	-- Werbung markieren mit ETVcomskip
    	-- do shell script "/Library/Application\\ Support/ETVComskip/MarkCommercials.app/Contents/MacOS/MarkCommercials " & Aufnahme
    	set LogMsg to ""
    	do shell script "echo Kontrollmarke_2 >> /comskip.txt"
    	CheckMultiplePIDs(recordingID)
    	-- IDLE-Time abrufen
    	delay 60
    	do shell script "echo Kontrollmarke_3 >> /comskip.txt"
    	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
    	do shell script "echo " & idletime & " >> /comskip.txt"
    	-- Wenn IDLE-Time abgelaufen ist, überprüfen ob eine Aufnahme ansteht
    	if idletime > 60 then
    		tell application "System Events"
    			set itunes_running to (name of processes) contains "iTunes"
    			set quicktime_running to (name of processes) contains "Quicktime Player"
    			set frontrow_running to (name of processes) contains "Front Row"
    		end tell
    		if itunes_running is true then
    			tell application "iTunes"
    				if player state is playing then
    					set itunes_playing to true
    				else if player state is stopped then
    					set itunes_playing to false
    				else
    					delay 120
    					if player state is playing then
    						set itunes_playing to true
    					else
    						set itunes_playing to false
    					end if
    				end if
    			end tell
    		else
    			set itunes_playing to false
    		end if
    		if quicktime_running is true then
    			tell application "QuickTime Player"
    				if exists document 1 then
    					set quicktime_document to true
    				else
    					set quicktime_document to false
    				end if
    			end tell
    		else
    			set quicktime_document to false
    		end if
    		if itunes_playing is false and quicktime_document is false and frontrow_running is false then
    			tell application "EyeTV.app"
    				if «class IRcd» = false then
    					-- ü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 ruhezustand = true and ausmachen = false then
    						activate
    						set antwort to display dialog "EyeTV hat eine Aufnahme beendet.
    Die nächste Aufnahme steht in 15 - 30 Minuten an.
    
    Soll der Computer in den Ruhezustand gehen?" buttons {"Ja", "Nein"} 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 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 {"Ja", "Ruhezustand", "Nein"} 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 if
    			end tell
    		end if
    	end if
    end RecordingDone
    
    -- testing code: this will not be called when triggered from EyeTV, but only when the script is run as a stand-alone script
    on run
    	tell application "EyeTV.app"
    		set rec to «class Unqu» of item 1 of every «class cRec»
    		my RecordingDone(rec)
    	end tell
    end run
    
    on CheckMultiplePIDs(recordingID)
    	--check if there are multiple Video PIDs in the file
    	tell application "EyeTV.app"
    		set input_text to my read_from_file((path to "logs" as string) & "ETVComskip" & ":" & recordingID & "_comskip.log")
    		if (count of (input_text as string)) > 0 then
    			set logdata to every paragraph of input_text
    			set logdata_lastrow to (item ((count of logdata) - 1) of logdata) as string
    			
    			if (items 1 thru 19 of logdata_lastrow) as string = "Video PID not found" then
    				--multiple Video PIDs, rerun MarkCommercials until successful
    				
    				set recrdingIDInteger to recordingID as integer
    				set rec to «class cRec» id recrdingIDInteger
    				set LogMsg to "RecordingDone found multiple PIDs for recording ID: " & recordingID & ", Channel " & («class Chnm» of rec) & " - " & («class Titl» of rec)
    				
    				set PIDs to (items 44 thru ((count of logdata_lastrow) - 2) of logdata_lastrow) as string
    				set delims to AppleScript's text item delimiters
    				set AppleScript's text item delimiters to ", "
    				set PID_List to {}
    				set PID_List to every word of PIDs
    				set AppleScript's text item delimiters to delims
    				
    				repeat with pid in PID_List
    					my launchComSkip(recordingID, pid)
    					repeat while (my mcIsRunning())
    						delay 5
    					end repeat
    				end repeat
    				
    			end if
    		end if
    	end tell
    end CheckMultiplePIDs
    
    on read_from_file(target_file)
    	--return the contents of the given file
    	set fileRef to (open for access (target_file))
    	set txt to (read fileRef for (get eof fileRef) as «class utf8»)
    	close access fileRef
    	return txt
    end read_from_file
    
    on write_to_file(this_data, target_file, append_data)
    	--from http://www.apple.com/applescript/sbrt/sbrt-09.html
    	try
    		set the target_file to the target_file as string
    		set the open_target_file to open for access file target_file with write permission
    		if append_data is false then set eof of the open_target_file to 0
    		write this_data to the open_target_file starting at eof
    		close access the open_target_file
    		return true
    	on error
    		try
    			close access file target_file
    		end try
    		return false
    	end try
    end write_to_file
    
    on launchComSkip(recID, pid)
    	if pid = "" then
    		set cmd to "'/Library/Application Support/ETVComskip/MarkCommercials.app/Contents/MacOS/MarkCommercials' --force --log" & recID & " > /dev/null"
    	else
    		set cmd to "'/Library/Application Support/ETVComskip/MarkCommercials.app/Contents/MacOS/MarkCommercials' --force --log" & recID & " --pid=" & pid & " > /dev/null"
    	end if
    	
    	do shell script cmd
    end launchComSkip
    
    on mcIsRunning()
    	set processPaths to do shell script "ps -xww | awk -F/ 'NF >2' | awk -F/ '{print $NF}' | awk -F '-' '{print $1}' "
    	return (processPaths contains "MarkCommercials")
    end mcIsRunning
    Anhand der Kontrollmarken im ersten Teil sehe ich dann in der Datei /comskip.txt, dass alle Kontrollmarken erreicht wurden, aber die idletime heute z.B. nur 17 Sekunden erreicht hat. Es scheint mir, als ob das noch laufenden X11 die Idletime unterbricht.

    Habt ihr ähnliche Phänomene oder wie habt ihr das neue ETVComSkip implementiert, dass es funktioniert?
    Code:
    
    
     
  10. AgentMax

    AgentMax Super Moderator

    Beiträge:
    45.767
    Zustimmungen:
    7.521
    Mitglied seit:
    03.08.2005
    Sollte der Mac nach einer erfolgreichen Aufnahme auch ohne Script wieder in den Ruhezustand gehen? Also nach meiner eingestellten Zeit in "Energie sparen". Meiner macht das nämlich nicht.
     
  11. phreichmuth

    phreichmuth Mitglied

    Beiträge:
    101
    Zustimmungen:
    8
    Mitglied seit:
    20.06.2008
    AgentMax, hast du EyeTV in Vollbild laufen? Dann unterdrückt EyeTV den Standby-Modus.
    Du willst ja nicht, dass wenn du ein Film guckst und eine halbe Stunde nichts drückst die Kiste in Standby geht...
     
  12. plotto

    plotto Mitglied

    Beiträge:
    519
    Zustimmungen:
    3
    Mitglied seit:
    09.11.2005
    hmmm, also irgendwie krieg ichs nicht so ganz gebacken.

    was ich gern hätte: ein skript, welches mir mein macbook automatisch nach der aufnahme in den standby schaltet. allerdings will ich davor gefragt werden für 30 sekunden, ob er wirklich in den standby geht
    wenn man nichts klickt, sollte er in den standby gehen. ich brings einfach nicht zusammen :( kann mir da jemand helfen?
     
  13. maccoX

    maccoX Mitglied

    Beiträge:
    11.650
    Zustimmungen:
    2.583
    Mitglied seit:
    15.02.2005
    Wie wärs mal auf Seite 2 vorbei zu schauen? ;)

    Musst dort nur das shut down mit sleep ersetzen. Benutze das Script schon seit damals und ist eine echte Bereicherung! Macht aus meinem Mac den perfekten PVR.
     
  14. apple-byte

    apple-byte Mitglied

    Beiträge:
    36
    Zustimmungen:
    0
    Mitglied seit:
    23.09.2005
    wie kann ich in mein Script noch einbauen, dass das es prüft, ob gerade eine Wiedergabe läuft?

    Code:
    -- RecordingDone.scpt
    -- Shutdown:This script will shutdown your mac with an interactive 4 minute stop prompt after EyeTV completes a recording but only if nothing is recording at the time following a 65 second delay.
    
    on RecordingDone(recordingID)
    set isCurrentlyRecording to check_eyetv_is_recording()
    if isCurrentlyRecording is false then
    with timeout of 240 seconds
    tell me to activate
    display dialog "Warnung: EyeTV hat die Aufnahme beendet und wird den Mac in 4 Minuten automatisch in den Ruhezustand versetzen, wenn Du nicht Stop klickst" with icon 2 buttons {"Stop!"} giving up after 240 default button "Stop!"
    set theresults to the result
    if gave up of theresults is true then
    tell application "System Events" to sleep
    end if
    end timeout
    else
    quit
    end if
    end RecordingDone
    
    to check_eyetv_is_recording()
    delay 65
    tell application "EyeTV"
    if is_recording then
    return true
    else
    return false
    end if
    end tell
    end check_eyetv_is_recording
     
  15. oneOeight

    oneOeight Thread Starter Mitglied

    Beiträge:
    53.640
    Zustimmungen:
    6.607
    Mitglied seit:
    23.11.2004
    playing abfragen...
     
Die Seite wird geladen...
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite weitersurfst, akzeptierst du unseren Einsatz von Cookies. Akzeptieren Weitere Informationen...