EyeTV / RecordDone / Titelabfrage etc

H

HNR

Aktives Mitglied
Thread Starter
Dabei seit
15.02.2008
Beiträge
287
Reaktionspunkte
8
Hallo Spezialisten hier,
ich bin noch recht unbedarft im scripten, habe aber die ersten Gehversuche hinter mir. Ich würde gerne das Aufnehmen von Filmen mit EyeTV etwas stärker mit Applescript über die RecordDone etc. steuern. Dabei habe ich das hier vor einiger Zeit gepostete Script erfolgreich im Einsatz, das ich nun ergänzen wollte - und zwar um Code, der auf die Properties der recording zugreift (siehe try-Block). Diesen code habe ich mir aus einem elgato-Forum abgeschaut. Er funktioniert nicht und ich habe nicht verstanden, warum nicht. Der restliche Code wird problemlos ausgeführt. Vielleicht kann mir jemand helfen. Am Ende, übrigens, will ich mir nämlich von meinem Mac eine email senden lassen, mit dem Titel etc der Sendung die er aufgenommen hat, aber das nur am Rande...

[iMac Intel 2008, 10.5.8, EyeTV 3.2.1]

Danke



Code:
(* RecordingDone

hier ergänzt um Ausgabe des Titels als Test *)

on RecordingDone(RecordingID)
	tell application "EyeTV"
		try
			set rec to recording id RecordingID
			set theAufnahme to title of rec
			display dialog "Aufnahmetitel gelesen: " & theAufnahme with title "Test"
		end try
		if is_recording = false then
			activate
			set antwort to display dialog "Aufnahme durchgeführt. Rechner ausschalten?" buttons {"nein", "ja"} default button "ja" giving up after 30
			if button returned of antwort = "ja" or button returned of antwort = "" then
				tell application "Finder"
					sleep
				end tell
			end if
		end if
	end tell
end RecordingDone
 
Ich hab das Elgato-Programm nicht und weiß deshalb nichts von seinen Scriptkommandos. Grundsätzlich eine ganz dumme Frage: ist der Code, den Du gepostet hast Dein gesamtes Script?
Wenn dem so ist, kann das nicht funktionieren: der Code ist ein Handler (eine Funktion), der an einem bestimmten Punkt im "Hauptscript" aufgerufen werden muß, um seinen Job zu erledigen.
Desweiteren erwartet dieser Handler einen Parameter (RecordingID), ein Wert (da es sich um ein ID handelt, nehme ich an numerisch), der ebenfalls aus dem Hauptscript weitergereicht wird und ohne den er nicht arbeiten kann.
Im Code scheint mir eine weitere Variabile, is_recording zu sitzen, die nie definiert worden ist, oder ist das eine Property, die direkt zu EyeTV gehört?

Wenn Dein Script dagegen aus mehr Code besteht, soltest Du uns es als ganzes vorstellen, damit man verstehen kann, wo es hakt.

Good scripting
Farid
 
Im Code scheint mir eine weitere Variabile, is_recording zu sitzen, die nie definiert worden ist, oder ist das eine Property, die direkt zu EyeTV gehört?

die gehört zu eyetv, ist eine boolean, die anzeigt ob gerade aufgenommen wird.

seh jetzt spontan auch keinen fehler in dem script, ausser einem überflüssigen try block, der wohl dann auch die fehlermeldung verschluckt.
 
Den try Block hatte ich ja eingesetzt, weil das script ohne diesen nie zu Ende ausgeführt wurde. Damit wollte ich testen, ob das ganze überhaupt von EyeTV aufgerufen wird (was es tut). Es wurde aber keine Fehlermeldung produziert. Oder: wo finde ich denn eine eventuelle Fehlermeldung, die mir Hinweise geben könnte?
 
@chebfarid:

Das Script ist ein handler, der so von EyeTV aufgerufen wird, wenn eine Aufnahme abgeschlossen wurde. Wird so von EyeTV zur Verfügung gestellt. Ist auch funktionstüchtig, was die Abfragen nach dem try-Block angeht. Das einzige was nicht funktioniert ist das Auslesen der Daten, die über recordingID übergeben werden (sollen). Aber auch dieser Code ist von elgato mal so geposted worden. Bin also überfragt.
 
du kannst es auch so im scripteditor testen, mit einem unter dem recordingdone block ala
on run
RecordingDone(12345)
end run

bloss halt die zahl solltest du eventuell mal einem existierenden recording zuweisen, damit du von dort den namen dann kriegst und keinen fehler, weil es das recording nicht gibt.
 
Danke - werde ich ausprobieren. An welcher Stelle kann ich denn am besten Fehlermeldungen sehen? Im Scripteditor? Konsole? Woanders?
 
im scripteditor siehst du es noch am besten.
 
Für den Debug im ScriptEditor kannst Du entweder Dialoge benutzen um zu sehen, was z.B. mit Deinen Variabilen passiert:
PHP:
set rec to recording id RecordingID
display dialog RecordingID
set theAufnahme to title of rec
display dialog theAufnahme
oder Du fügst Log-Anweisungen ein:
PHP:
set rec to recording id RecordingID
log RecordingID
set theAufnahme to title of rec
log theAufnahme
Im ScriptEditor-Fenster "Event Log" werden dann (unter anderem) die einzelnen Log-Einträge aufgelistet.

Good scripting
Farid
 
Ich habe durch ein wenig probieren nun einen code gefunden, der tatsächlich den Titel ausliest. Wo jetzt wirklich der Fehler lag, ist mir weiterhin schleierhaft.

Code:
(* RecordingDone

hier ergänzt um Ausgabe des Titels als Test *)

on RecordingDone(RecordingID)
	tell application "EyeTV"
		set myid to RecordingID as integer
		set rec to recording id myid
		set theAufnahme to title of rec
		if is_recording = false then
			activate
			set antwort to display dialog "Aufnahme von " & theAufnahme & " durchgeführt. Rechner ausschalten?" buttons {"nein", "ja"} default button "ja" giving up after 30
			if button returned of antwort = "ja" or button returned of antwort = "" then
				tell application "Finder"
					sleep
				end tell
			end if
		end if
	end tell
end RecordingDone
 
Wo jetzt wirklich der Fehler lag, ist mir weiterhin schleierhaft.
Höchstwahrscheinllci in dieser Zeile:
PHP:
set rec to recording id RecordingID
die Du in Deinem neuen Beispiel in
PHP:
set myid to RecordingID as integer
geändert hast.
Anscheinend erwartet EyeTV einen numerischen Wert für das ID (macht auch Sinn) und in der ersten Fassung wurde dieser Parameter in einem anderen Format weitergegeben.

Ciao
Farid
 
Das hatte ich mir auch bereits gedacht. Aber, wie auch immer, folgender Code (hier nur der relevante Ausschnitt, die alten lines sind auskommentiert), funktioniert nicht und führt zu einem Abbruch des Scripts. Da es aus EyeTV gestartet wird, sehe ich keine Fehlermeldung. Das soll mal einer verstehen...

Code:
	tell application "EyeTV"
		#		set myid to RecordingID as integer
		#		set rec to recording id myid
		set rec to recording id RecordingID as integer
		set theAufnahme to title of rec
 
Zurück
Oben Unten