MediaPortal - geplante Aufnahmen auslesen

Hallo, ich lese in diesem Forum schon eine ganze Weile mit. Die vielen guten Anregungen und Anleitungen, die man hier findet sind wirklich beeindruckend!

Heute will ich Euch (als meinen ersten Beitrag) mal eins meiner Scripte vorstellen.

Hintergrund: Ich benutze den MediaPortal TV Server (mit der MySQL DB) zum Aufnehmen von TV Sendungen. Mittlerweile habe ich jedoch keinen Wohnzimmer PC mehr, so dass ich den MediaPortal Client nur noch sehr sporadisch (vom Arbeitszimmer PC) starte. Aufnahmen programmiere ich auf tvinfo.de, MediaPortal fragt dort meinen Merkzettel per OpenEPG ab. So weit so gut. Nachteil dieser Konstellation ist Folgender: Wenn die Kommunikation MediaPortal <–> tvinfo.de fehlschlägt, fällt dies oft erst Tage später auf - wenn man die (ungünstigstenfalls zahlreichen) per Web programmierten Sendungen sucht und nicht auf der Festplatte vorfindet. Deshalb hatte ich die Idee, die MediaPortal Datenbank per IPS abzufragen und die jeweils nächsten fünf anstehenden Aufnahmen auf dem Dashboard anzuzeigen. Das folgende Script ist ein erstes Ergebnis.

Ablauf
Das Script füllt fünf String Variablen (Aufnahme1 bis Aufnahme5) mit für die fünf Aufnahmen jeweilig anzuzeigenden Texte und fünf boolean Variablen (Problem), die es auf true setzt, wenn sich die Aufnahme mit anderen Aufnahmen zeitlich überschneidet. Anhand der boolean-Problem- Variable lege ich auf dem Dashboard die Textfarbe fest. Die fünf String und boolean Variablen habe ich per Hand angelegt:

Script


<?
$mpServer = "john"; //anpassen!
$mpDB = "MpTvDb";
$mpDBUser = "root";
$mpDBPass = "MediaPortal"; //Standard MP database password



$texts    = array(40557 /*[Misc\Fernsehen\Mediaportal\Aufnahme1]*/,
                  43757,
                  35240 /*[Misc\Fernsehen\Mediaportal\Aufnahme3]*/,
                  34595,
                  12464 /*[Misc\Fernsehen\Mediaportal\Aufnahme5]*/);
$problems = array(50068 /*[Misc\Fernsehen\Mediaportal\Aufnahme1\Problem]*/,
                  24393,
                  49579 /*[Misc\Fernsehen\Mediaportal\Aufnahme3\Problem]*/,
                  11535,
                  56782 /*[Misc\Fernsehen\Mediaportal\Aufnahme5\Problem]*/);

$handle = mysql_connect($mpServer, $mpDBUser, $mpDBPass)
	or die("Verbindung zur Mediaportal DB fehlgeschlagen" .  $myServer);

$selected = mysql_select_db($mpDB, $handle)
	or die("Kann Mediaportal DB nicht öffnen" . $mpDB);

$schedules = mysql_query("SELECT name, startTime, endTime, programName, ".
                         "preRecordInterval, postRecordInterval ".
                         "FROM schedule INNER JOIN channel ".
                         "ON (schedule.idChannel = channel.idChannel) ".
                         "ORDER BY startTime ASC;");

$count = 0;
$lastEnd = 0;
$row = mysql_fetch_object($schedules);

while($row && $count<5)
{
  $start = strtotime($row->startTime);
  $end   = strtotime($row->endTime);

  // Checke auf Ueberlappung
  if($lastEnd + 60*$row->preRecordInterval > $start)
  {
	   SetValueBoolean($problems[$count], true);
	   if($count!=0)
	   	SetValueBoolean($problems[$count-1], true);
  } else {
	   SetValueBoolean($problems[$count], false);
  }
  $newLastEnd = $end + 60*$row->postRecordInterval;
  if($newLastEnd > $lastEnd)
  {
  		$lastEnd = $newLastEnd;
  }

  // Baue den Text zusammen
  $text = GetDateTimeStr($start)."-".GetTimeStr($end)." ".
                         "[".$row->name."] ".$row->programName;
  SetValueString($texts[$count], $text);

  // Weiter mit der nächsten Aufnahme
  $row = mysql_fetch_object($schedules);
  $count++;
}

// Wenn wir mehr als fünf Aufnahmen haben checke Überlappung 5.-6. Aufnahme
if($row && count==5)
{
  $start = strtotime($row->startTime);
  if($lastEnd + 60*$row->preRecordInterval > $start)
  {
	  SetValueBoolean($problems[4], true);
  }
}

// Wenn wir keine fünf Aufnahmen haben, lösche die Inhalte der übrigen Variablen
while($count<5)
{
  SetValueString($texts[$count], "");
  SetValueBoolean($problems[$count], false);
  $count++;
}

mysql_close($handle);

// ---------------------------------------------------------------------------



function GetDateTimeStr($date)
{
	return date("d.m. H:i", $date);
}

function GetTimeStr($date)
{
	return date("H:i", $date);
}
?>

Voraussetzungen
Um das Script nutzen zu können, muss wie gesagt MediaPortal mit einer MySQL DB installiert sein, für die Nutzung mit einer MS SQL DB müsste das Script entsprechend angepasst werden. Die der IPS PHP Version entsprechende php_mysql.dll muss in ext eingespielt und in der php.ini deklariert sein (extension = php_mysql.dll). Ausserdem muss libmySQL.dll installiert sein (habe ich bei mir ins IP-Symcon Verzeichnis gespielt). Die Variableninitialisierungen am Anfang des Scripts müsst Ihr anpassen (Zumindest $mpServer und die Objekt-IDs in $texts und $problems).

Anzeige
Hier meine Visualisierung der Variablen im Dashboard:
dashboard.png

Viel Spass
Andreas

alternativ könnte man auch bis 1.0.2 das mp webinterface nutzen oder aber der 1.1 rc x den mp webservice.

hat aber dann keine ips integration, dafür hat man aber auch direkt den epg drin und kan direkt aufnahmen planen.

Hallo,

gibt es hier was neues?

Ich würde gerne am IPS Computer die Aufnahmen am MediPortal PC planen und programmieren können.

Gruß Uwe