Mediacenter, eine Leidensgeschichte ;-)

Hallo zusammen,

heute habe ich mich mal hier bei euch angemeldet, um mal von meinen Erfahrungen mit meinem “Mediacenter” zu berichten.
Ich besitze seit fast 2 Jahren einen MacMini mit Leopard, 2Ghz, 2GB und 1 DVD-Laufwerk. Bedient hatte ich ihn damals ausschließlich mit der BT-Tastatur und BT-Maus von Apple. Der Fernseher war und ist noch eine schwere Röhre, die mir bis jetzt sehr gute Dienste geleistet hat und ich sie deshalb noch nicht entsorgen muss. Versorgt wird er direkt per RGB-Eingang, was dem Bild etwas besser steht als FBAS. Der Ton geht per digital in den Fernseher und beschallt meine Nachbarn mit netten 5.1 Bässen.
Ich hatte vorher schon ein MACBookPro und war von den vielen Freiheitsgraden bei der Konfigurierung des Systems (UNIX-Skripte sei Dank!) begeistert und dachte mir so ein Mini sieht bestimmt nicht schlecht unter dem Fernseher aus :wink:
Bei der Konfigurierung habe ich mir viele Denkanstöße aus dem Netz und natürlich auch hier aus dem Forum geholt. Danke noch mal!!

Als TV-Lösung kam damals natürlich nur ein ELGATO-Empfänger in Frage (250plus). Bei der Wahl des Videoplayers habe ich die verschiedensten durchprobiert.
Angefangen mit FrontRow. Sah schön aus, aber der Funktionsumfang und die Flexibilität ließen doch sehr zu wünschen übrig, sodass ich mich doch dann relativ schnell nach was anderem umgesehen hatte.
Letztendlich bin ich über Plex und Boxee bei XBMC gelandet. Bei XBMC ist die Auflösung für den SD-Bildschirm noch recht gut lesbar.
Aber schnell erkannte ich, dass die Bedienung von XBMC und EyeTV mit der Maus und der Tastatur recht hakelig war. Und das Zusammenspiel funktionierte auch nicht so richtig.

Aus der Not sind dann einige(mehr) apple- und shell-Skripte entstanden. Das Programm Butler benutze ich, um mit Tastenkürzel die diversen Skripte zu starten.
Hier kurz die Funktion der Skripte (1-8):

  1. Beim Booten, ob von Hand oder per automatik-Start von EyeTV ist hier egal, wird ein Skript ausgeführt, welches überprüft, wie gestartet wurde (automatik/manuell). Hieran mache ich später fest, ob der Rechner nach einer Aufnahme wieder runterfährt oder nicht. Außerdem startet es EyeTV und das Zusatzprogramm Butler. Zusätzlich werden noch Netzlaufwerke gesucht und wenn vorhanden eingebunden.
  2. Beim Runterfahren des Rechners werden die Netzlaufwerke ordnungsgemäß getrennt und temporäre Dateien gelöscht.
  3. Nach dem Beenden einer Aufnahme wird bei Automatikstart kurz gefragt, ob er wieder runterfahren soll oder nicht. Bei manuellem Start bleibt er an. Er sollte auch anbleiben, wenn die nächste Aufnahme nicht mehr lange hin ist. Diese Funktion läuft bei mir nicht mehr, da Elgato etwas am Programm EyeTV geändert hat :frowning:.
  4. Beim Erstellen einer Programmierung in EyeTV wird gefragt, ob der Rechner sich nach der Aufnahme ausschalten soll.
  5. Beim Einlegen einer Video-DVD wird XBMC gestartet und EyeTV in den Hintergrund geschickt.
  6. Ein Skript zum Umschalten nach XBMC. Hier geht EyeTV in den Hintergrund (Anzeige wird angehalten, Timeshift läuft weiter, evtl.Aufnahmen werden im Hintergrund gestartet.)
  7. Ein Skript zum Umschalten nach EyeTV. Hier wird XBMC beendet und EyeTV an der letzten Stelle wieder fortgesetzt.
  8. Ein Skript zum Ausschalten des Rechners und Fernsehers nach Filmende, wenn ich das Ende nicht mehr mitbekommen habe. (Den Sendeschluss gibt es ja nicht mehr :wink:)

Die Skripte sind bei mir eine Mischung aus Apple- und Shell-Scripten. Das liegt aber mehr daran, weil ich mit der Syntax von Apple überhaupt nicht zurechtkomme!!!
Weiterhin musste ich mir ein kleines Programm schreiben, welches den Mauszeiger an eine beliebige Stelle beamt, da er nach dem Start umschön im linken oberen Eck verweilte. Dies Problem kennt ihr ja auch! Für die Anzeige von Meldungen aller Art nutze ich Growl.

Seit drei Monaten benutze ich zum Bedienen mein iPhone mit der App mobileMouse. Das Programm hat mich eigentlich überzeugt, da es wie eine Fernbedienung zu benutzen ist und die Tasten frei zu belegen sind. Das einzige Problem habe ich in der Dunkelheit, da fehlen dann die “gefühlten” Tasten an denen man sich orientieren könnte.

Puh, ich bin jetzt selber erschrocken, wie umfangreich das Ganze schon geworden ist. Ich hoffe nur, dass mein Timemachine-Backup im Notfall funktioniert :wink:

Im Großen und Ganzen funktioniert das Gebilde recht gut bis auf einige Schönheitsfehler.
-Das Umschalten zwischen den Programmen (EyeTv und XBMC) könnte geschmeidiger sein. (Kann ich aber mit leben!)
-Leider bekomme ich den Zeitpunkt der nächsten Aufnahme nicht mehr heraus!! (wakein von Elgato funktioniert nicht mehr) Skript 3.
-Die Elgato 250 Box wird manchmal nicht richtig initialisiert, d.h. kein Ton bei der Aufnahmen. Das ist sehr ärgerlich, wenn man sich in die Stummfilm-Zeit versetzt fühlt :frowning:
Hier suche ich nach einer Möglichkeit EyeTV zurückzusetzen, trotz gestarteter Aufnahme!?!?

Achja, fast hätte ich es vergessen. Ich war kurz davor, mir einen aktuelleren MacMini zu besorgen, da meiner bei HD-Filmen viele DropOuts hatte und die CPU-Last dauerhaft bei 100% lag. Dann hatte ich ein Update auf Snow gemacht und ich konnte es nicht glauben. Jetzt liegt die CPU-Last bei 35% mit knapp 50fps!! Trotz aktivem EyeTV im Hintergrund!
Jetzt fehlt mir doch nur noch der richtige HD-Schirm. :smile:

Ich hoffe mein kleiner Bericht ist euch nicht zu trocken und ich kann einiges an meinen Erfahrungen weitergeben. Die Skripte sind ja kein Geheimnis, obwohl sie sicherlich keinen Schönheitswettbewerb gewinnen würden. Ich müßte sie nur vorher mal ein bisschen ausmisten, wenn sie gewünscht sind!!

Ich bin gespannt auf eure Kommentare :smile:

Grüße,
Jörg

P.S.: Für mich ist es fast eine kleine Erfolgsgeschichte geworden!!

Hallo Jörg,

willkommen im MMF :smile: Vielen Dank für Deinen ausführlichen und interessanten Bericht!

Kannst Du mal beschreiben, wie das in der Praxis aussieht? Wo hakelt es, bzw. was stört Dich?

Brauchst Du das um herauszufinden, ob der Mini in den Sleep gehen kann (Zeit bis zur nächsten Aufnahme)? Da kann ich evtl. helfen. Ich habe ein RecordingDone Script, welches das erledigt. Wenn Du interessiert bist, dann poste ich das mal sobald ich wieder zu Hause bin.

Hilft ein EyeTV Restart? Wenn ja, dann könnte man den vor Aufzeichnungsbeginn durchführen, z.B. wenn der Mini aus dem Standby aufwacht.

lg

Michael

[quote]Hallo Michael,

Bitte, gerne :smile:

EyeTv schicke ich per AppleScript in den Hintergrund. Dabei habe lange daran getüftelt, in welcher Reihenfolge ich die Befehle absetzen sollte.
1.EyTV pause aktivieren, 2.EyeTV in Fenster-Ansicht bringen, 3. EyeTV vom digitalen Audio-Ausgang trennen, 4. EyeTV Fenster minimieren und dann 5. XBMC starten!
Ich hatte andere Reihenfolgen ausprobiert, aber dann hatte ich Probl mit dem Ton-Ausgang. Weil eyeTV den Ausgang noch nicht freigegeben hatte bevor XBMC sich draufschalten wollte. Die Folge ist ein Zucken des EyeTV-Fensters! Das hätte ich schon gerne zu Anfang verborgen, aber das ging nicht.
Als Ausgleich habe ich jetzt einen kurzen THX-Trailer vor den Sprung ins Hauptmenü von XBMC gepackt. Der lenkt dann wieder ab :smile:

Genau, wenn die nächste Aufnahme in z.B. 1Stunde später anfängt, dann sollte er warten. Kritisch ist dies wahrscheinlich dann, wenn zwei aufeinanderfolgende Sendungen aufgenommen werden sollen. Wenn du da was hast, das ich die Zeit in einer Vaiablen bekomme, das wäre echt super!

Ja, ich denke schon. Das Problem tritt nur leider sehr sporadisch auf, d.h. so ein richtiges Debugging ist nicht möglich. So was hatte ich mir auch schon gedacht, aber bei den Versuchen ging EyeTV sofort nach dem Start in Aufnahme. Da war an ein Schliessen und wieder Öffnen nicht mehr zu denken. Es sei denn, ich könnte noch eine zusätzliche Vorlaufzeit eingeben. Nur leider nicht die in EyeTV, da er dann auch früher mit der Aufnahme starten würde. Ein Teufelskreis!!
Ich müßte den Zeitpunkt des Aufweckens selber vor dem Runterfahren per Skript im System setzen können. Hmm! Keine Ahnung ob das geht?

Danke für die Mühe!

Grüße,
Jörg
[/quote]

Hi Jörg,

[quote]EyeTv schicke ich per AppleScript in den Hintergrund. Dabei habe lange daran getüftelt, in welcher Reihenfolge ich die Befehle absetzen sollte.
1.EyTV pause aktivieren, 2.EyeTV in Fenster-Ansicht bringen, 3. EyeTV vom digitalen Audio-Ausgang trennen, 4. EyeTV Fenster minimieren und dann 5. XBMC starten!
Ich hatte andere Reihenfolgen ausprobiert, aber dann hatte ich Probl mit dem Ton-Ausgang. Weil eyeTV den Ausgang noch nicht freigegeben hatte bevor XBMC sich draufschalten wollte. Die Folge ist ein Zucken des EyeTV-Fensters! Das hätte ich schon gerne zu Anfang verborgen, aber das ging nicht.
Als Ausgleich habe ich jetzt einen kurzen THX-Trailer vor den Sprung ins Hauptmenü von XBMC gepackt. Der lenkt dann wieder ab :smile:
[/quote]

Verstehe… Das ist halt der Nachteil, wenn man mit Gui Scripting arbeiten muss. Mit dem Audio out hatte ich auch so meine Probleme. Mein erster Ansatz war ein Script, welches sich durch das EyeTV Onscreen Menü hangelt. Also eher eine Art Makro. Mit Gui Scripting hat es dann schon besser geklappt, aber eben mit dem von Dir erwähnten Effekt. Kennst Du eigentlich Remote Buddy? Damit kann man nicht nur alle möglichen Dinge mit der Fernbedienung anstellen, Remote Buddy hat auch eine Fade-in / -out Funktion, die sich über Apple Script steuern lässt. Mein Script sieht jetzt so aus:

  1. Der Bildschirm wird mit Remote Buddy dunkel gesteuert
  2. Die EyeTV Befehle werden abgesetzt (Pause, Umschaltung Audioausgang, …)
  3. Plex (oder xbmc) wird gestartet
  4. Der Bildschirm wird wieder eingeblendet

Die Bedienung der EyeTV Menüs wird also in der Zeit durchgeführt, während der Bildschirm schwarz ist. Beim Wechsel von Plex / xbmc zu EyeTV läuft der Vorgang umgekehrt ab.

Kein Problem, bitte schön :smile:

set limit to 60 * minutes

tell application "EyeTV"
	set recording_in to 0
	set forerun to (prepad time + 2) * minutes
	set present_time to current date
	repeat with my_recordings in start time of programs
		set diff to my_recordings - present_time
		if diff > forerun then set diff to diff - forerun
		if diff > 0 and diff < limit then set recording_in to round (diff / minutes)
	end repeat
end tell

In der ersten Zeile kannst Du festlegen welcher Zeitraum betrachtet werden soll. Wenn eine Programmierung innerhalb des Limits gefunden wird, dann steht in der Variablen recording_in die Zeit bis zur nächsten Aufnahme (in Minuten). Ist keine Aufnahme programmiert, oder liegt die Aufnahmezeit ausserhalb des Limits, dann steht in recording_in einfach eine 0.

Hm, da muss ich erst mal drüber meditieren :wink: Vielleicht fällt mir noch etwas dazu ein…

lg

Michael

1 „Gefällt mir“

Mal ein erster Entwurf…

Ich habe hier ein ScheduleCreated Script gebastelt. Das Script läuft automatisch an, wenn eine Aufzeichnung programmiert wird. Am Ende steht in der Variablen nextrec ein String, der ein Datum enthält das 3 Minuten vor der geplanten Aufzeichnung liegt. Den String könnte man jetzt ummodeln und per Shellscript an pmset schicken, zusammen mit einem Wakeup Befehl. Der Mini würde dann 3 Minuten vor der geplanten Aufnahme aufwachen. In diesen 3 Minuten könnte man den EyeTV Restart durchführen.

Was meinst Du…?

lg

Michael

on ScheduleCreated(programID)
	set myrec to programID as integer
	tell application "EyeTV"
		set nextrec to start time of program id myrec
		set nextrec to nextrec - 3 * minutes as text
	end tell
	display dialog nextrec
end ScheduleCreated
1 „Gefällt mir“

Moin Michael,

die Variante mit RemoteBuddy und dem Fadeout kannte ich noch nicht! War gerade mal auf der Homepage. Sieht auf jeden Fall sehr vielversprechend aus. Da werde ich mal bei Gelegenheit ein bisschen mit rumspielen. :smile:

Wow, die Skripte sehen ja einfach aus. Ich hätte mir da einen bei abgebrochen. :blush:
Jetzt brauche ich die beiden Skripte nur noch zu kombinieren und beim Runterfahren zu starten. Anschließend muss mit pmset (Der Befehl ist irgendwie bisher an mir vorbeigegangen!) nur noch der nächste Start gesetzt zu werden.

Wenn das klappt, gebe ich ein Bier aus!! :laughing:

LG,
Jörg

Hi Jörg,

ich habe das letzte Script noch etwas ausgebaut. Es erzeugt jetzt per pmset ein Wakeup Event, welches 3 Minuten vor der Aufnahmezeit liegt.


Hier das Script:

on ScheduleCreated(programID)
	set myrec to programID as integer
	tell application "EyeTV"
		set d to start time of program id myrec
		set d to d - 6 * minutes as date
	end tell
	set theday to text -2 thru -1 of ("0" & d's day)
	set mlist to {January, February, March, April, May, June, July, August, September, October, November, December}
	repeat with i from 1 to 12
		if d's month = item i of mlist then
			set themonth to text -2 thru -1 of ("0" & i)
			exit repeat
		end if
	end repeat
	set thejear to ((year of d) as text)
	set thetime to time string of (d)
	set recdate to themonth & "/" & theday & "/" & thejear & " " & thetime
	set recdate to (quoted form of recdate)
	do shell script "pmset schedule wakeorpoweron " & recdate user name "MeinUserName" password "MeinPasswort" with administrator privileges
end ScheduleCreated

In der Zeile

set d to d - 6 * minutes as date

kannst Du bestimmen, wann der Mini geweckt werden soll. Hierbei musst Du eine evtl. eingestellte Vorlaufzeit beachten. D.h., wenn Du in EyeTV eine Vorlaufzeit von 3 Minuten eingestellt hast, dann musst Du diese hier dazu zählen. Ein Beispiel:

Du programmierst eine Sendung, die um 12:00:00 Uhr beginnt. Wenn Du in EyeTV einen Vorlauf von 3 Minuten eingestellt hast, dann erzeugt EyeTV ein Wakeup Event um 11:57:00 Uhr. Soll der Mini 3 Minuten vor Aufzeichnungbeginn geweckt werden, dann musst Du im Script 6 Minuten eintragen. Das Script erzeugt dann ein Wakeup Event um 11:54:00 Uhr.

pmset muss mit Admin Rechten ausgeführt werden. Damit das alles schön automatisch läuft, müssen beim Shell Script Aufruf der Username und das Passwort übergeben werden. In der Zeile

do shell script "pmset schedule wakeorpoweron " & recdate user name "MeinUserName" password "MeinPasswort" with administrator privileges

musst Du also MeinUserName und MeinPasswort gegen gegen den passenden User mit Admin Rechten auf auf Deinem System austauschen. Der Nachteil dabei ist, dass diese Angaben anschliessend im Klartext im Script stehen. Ein “Besucher” könnte diese also auslesen, wenn er das Script öffnet. Wenn Dein Mini aber primär von Dir im Wohnzimmer genutzt wird, dann sollte das kein allzu grosses Problem sein. Vielleicht hat trotzdem noch jemand eine Idee, wie man das eleganter gestalten könnte?

Hier mal noch ein Beispielscript für Fadein / -out in Remote Buddy. Das Script dunkelt den Bildschirm ab, schaltet den Audio Ausgang um, startet XBMC, und blendet den Bildinhalt wieder ein. Mit den Timings (delay) musst Du evtl. noch etwas experimentieren. Ich selbst nutze Plex. Das startet auf meinem System schneller als xbmc(…?). Die Timings sind daher an Plex angepasst.

set AudioOut to "System-Audioausgabe"
tell application "Remote Buddy"
	visualize effect "fadeReserve" for duration 5.0
	visualize effect "fadeOut" for duration 0.5 with color "black"
end tell
tell application "EyeTV"
	activate
	pause
	exit full screen
end tell
tell application "System Events"
	tell process "EyeTV"
		click menu item AudioOut of menu 1 of menu item "Audioausgang" of menu 1 of menu bar item "Ton" of menu bar 1
	end tell
	tell application "EyeTV"
		enter full screen
	end tell
end tell
tell application "XBMC" to activate
tell application "System Events" to set frontmost of process "XBMC" to true
tell application "Remote Buddy"
	delay 0.5
	visualize effect "fadeIn" for duration 0.5 with color "black"
	visualize effect "fadeCleanUp" for duration 0.0
end tell

Ich hoffe, das hilft Dir erst mal ein Stück weiter :smile:

lg

Michael

1 „Gefällt mir“

Ach so, noch etwas…

Das pmset Script ist übrigens gebrauchsfertig. Du musst es an einen bestimmten Ort kopieren, damit das funktioniert. Ich schreibe das nur, falls Du die Funktion der EyeTV Trigger nicht kennst.

EyeTV kennt einige Trigger, die bei bestimmten Ereignissen ausgelöst werden. Es gibt da z.B.:

RecordingDone
EyeTV kann ein Script mit dem Namen RecordingDone.scpt starten, wenn eine Aufzeichnung beendet wurde.

ExportDone
Wie RecordingDone, nur dass das Script ExportDone.scpt nach dem Ende einer Aufzeichnung gestartet wird.

ScheduleCreated
Das ist “unser” Trigger. Wenn Du eine Aufzeichnung programmierst, dann startet EyeTV in gleichen Moment ein ScheduleDone.scpt, sofern vorhanden. In unserem Fall würde das oben gepostete Script gestartet, und damit ein Wakeup Event erzeugt.

Damit das funktioniert, müssen die Scripte im Ordner HD/Library/Application Support/EyeTV/Scripts/TriggeredScripts liegen. Falls die letzten beiden Ordnerebenen nicht vorhanden sind, bitte anlegen. Dann kopierst Du den oben geposteten Code in den Apple Script Editor und speicherst das ganze unter dem Namen ScheduleDone.scpt. Das kopierst Du dann in den TriggeredScripts Ordner.


Es ist also gar nicht nötig, diesen Teil in eine Shutdown oder Sleep Routine einzubinden. Das würde so auch gar nicht funktionieren, weil die ProgramID, auf der das Script aufsetzt, vom EyeTV ScheduleCreated Trigger übergeben wird. Und das passiert nur im Moment der Programmierung. Weitere Infos zu EyeTV Trigger, und auch ein paar Beispielscripte, findest Du übrigens hier.

lg

Michael

1 „Gefällt mir“

Guten Morgen,

mir ist gerade noch ein Fehler aufgefallen:

Der Name des Scripts muss natürlich ScheduleCreated.scpt lauten, wie im Screenshot zu sehen. Sorry dafür :wink:

lg

Michael

1 „Gefällt mir“

Hi Michael,

Vielen Dank für die vielen Anregungen und Skripte.

Habe sie soweit bei mir eingebaut. Und so wie es aussieht, läuft alles :smile:

Also wie versprochen: Hier zwei kühle :beer: :beer:

Ich hatte ja zuerst versucht, beim Runterfahren des Rechners den nächsten Start herauszubekommen, um den Zeitpunkt dann zu setzen.
Dein Weg ist aber um einiges einfacher :wink:
Ich hatte nur bedenken, ob das PRAM genug WakeUp-Events speichern kann? Beim Versuch mit 30 Events hatte ich aufgegeben. Da scheint es noch genug Luft nach oben zu geben.

Viele Grüße,
Jörg

Hallo Jörg,

freut mich, dass es klappt. Und die kühlen Bierchen kommen bei diesen Temperaturen auch gerade richtig :smile:

Viel Spass noch mit Deinem Mediacenter!

lg

Michael