Elgato EyeTV Netstream auslesen

Hallo,

heute habe ich mir ein kleines Skript geschrieben, um den Status der DVB-T-Tuner meines EyeTV Netstream auszulesen.

Ausgelesen wird sowohl ob die entsprechenden Tuner gerade in Benutzung oder frei sind, als auch Signalstärke und -qualität.

<?

// hier die IP-Adresse des Netstream-Geräts eintragen, bzw. diese aus der entsprechenden Variablen auslesen:
$deviceIP = GetValue(57746  /*[Setup\Netzwerk\TV-Tuner]*/);

// wenn es ein Watchdog-Skript gibt, hier die entsprechende Variable auslesen, so dass nur versucht wird,
//das Gerät auszulesen, wenn es online ist. Falls es keinen Watchdog gibt, hier einfach true einsetzen:
$deviceStatus = GetValue(24321  /*[Setup\Netzwerk\TV-Tuner\Ping-Status]*/);

// es folgen die Variablen für die Darstellung der Tuner-Stati im Webfront:
// -Tuner-Status numerisch (Profil anlegen
//    -2=Empfangsstörung
//    -1=Allgemeiner Fehler
//     0=Gerät ist offline
//     1=Tuner ist bereit
//     2=Tuner wird benutzt
// -String der anzeigt womit der Tuner verbunden ist (wird ansonsten versteckt)
// -Prozentwert (Integer) für Signalstärke
// -Prozentwert (Integer) für Signalqualität
$tunerStatusIds = Array();
$tunerStatusIds[1] =
	Array(
		33892  /*[Gewerke\Audio / Video\TV-Tuner\DVB-T-Tuner 1]*/,
		35394  /*[Gewerke\Audio / Video\TV-Tuner\DVB-T-Tuner 1\Verbunden mit]*/,
		57203  /*[Gewerke\Audio / Video\TV-Tuner\DVB-T-Tuner 1\Signalstärke]*/,
		25244  /*[Gewerke\Audio / Video\TV-Tuner\DVB-T-Tuner 1\Signalqualität]*/
		);

$tunerStatusIds[2] =
	Array(
	   59460  /*[Gewerke\Audio / Video\TV-Tuner\DVB-T-Tuner 2]*/,
	   15411  /*[Gewerke\Audio / Video\TV-Tuner\DVB-T-Tuner 2\Verbunden mit]*/,
	   26245  /*[Gewerke\Audio / Video\TV-Tuner\DVB-T-Tuner 2\Signalstärke]*/,
	   16246  /*[Gewerke\Audio / Video\TV-Tuner\DVB-T-Tuner 2\Signalqualität]*/
	   );



// ab hier nichts mehr ändern!

if($deviceStatus)
{
	for($tunerIndex = 1; $tunerIndex <= 2; $tunerIndex++)
	{
		$paramsObject = Array();
		$paramsObject['TunerIndex'] = $tunerIndex;
		$requestObject = Array();
		$requestObject['method'] = 'Toma.GetTunerInformation';
		$requestObject['id'] = 1;
		$requestObject['params'] = $paramsObject;

		$responseString = do_post_request('http://' . $deviceIP . '/control?nocache=' .
									rand(1000000, 9999999),
									json_encode($requestObject)) . "\r";

		if($responseString)
		{
			$responseObj = json_decode($responseString);
			//print_r($responseObj); // diese Zeile einkommentieren um zu sehen was so alles an Daten vorhanden ist

			if($responseObj->TunerIsRetained == 1)
			{
			   if($responseObj->TunerStatus->SignalQuality > 0)
			   {
				   SetValue($tunerStatusIds[$tunerIndex][0], 2);
				   SetValue($tunerStatusIds[$tunerIndex][1],
						$responseObj->UserInformation->MachineName . ' (' .
						$responseObj->UserInformation->Application . ')');
				   IPS_SetHidden($tunerStatusIds[$tunerIndex][1], false);
				   SetValue($tunerStatusIds[$tunerIndex][2],
						$responseObj->TunerStatus->SignalStrength * 100);
				   IPS_SetHidden($tunerStatusIds[$tunerIndex][2], false);
				   SetValue($tunerStatusIds[$tunerIndex][3],
						$responseObj->TunerStatus->SignalQuality * 100);
				   IPS_SetHidden($tunerStatusIds[$tunerIndex][3], false);
				}
				else
				{
				   SetValue($tunerStatusIds[$tunerIndex][0], -2);
				   SetValue($tunerStatusIds[$tunerIndex][1],
						$responseObj->UserInformation->MachineName . ' (' .
						$responseObj->UserInformation->Application . ')');
				   IPS_SetHidden($tunerStatusIds[$tunerIndex][1], false);
				   SetValue($tunerStatusIds[$tunerIndex][2],
						$responseObj->TunerStatus->SignalStrength * 100);
				   IPS_SetHidden($tunerStatusIds[$tunerIndex][2], false);
				   SetValue($tunerStatusIds[$tunerIndex][3],
						$responseObj->TunerStatus->SignalQuality * 100);
				   IPS_SetHidden($tunerStatusIds[$tunerIndex][3], false);
				}
			}
			else
			{
			   SetValue($tunerStatusIds[$tunerIndex][0], 1);
			   SetValue($tunerStatusIds[$tunerIndex][1], 'nicht verbunden');
			   IPS_SetHidden($tunerStatusIds[$tunerIndex][1], true);
			   SetValue($tunerStatusIds[$tunerIndex][2],
					$responseObj->TunerStatus->SignalStrength * 100);
			   IPS_SetHidden($tunerStatusIds[$tunerIndex][2], true);
			   SetValue($tunerStatusIds[$tunerIndex][3],
					$responseObj->TunerStatus->SignalQuality * 100);
			   IPS_SetHidden($tunerStatusIds[$tunerIndex][3], true);
			}
		}
		else
		{
		   SetValue($tunerStatusIds[$tunerIndex][0], -1);
		   SetValue($tunerStatusIds[$tunerIndex][1], 'unbekannt');
		   IPS_SetHidden($tunerStatusIds[$tunerIndex][1], true);
		   SetValue($tunerStatusIds[$tunerIndex][2],
				$responseObj->TunerStatus->SignalStrength * 100);
		   IPS_SetHidden($tunerStatusIds[$tunerIndex][2], true);
		   SetValue($tunerStatusIds[$tunerIndex][3],
				$responseObj->TunerStatus->SignalQuality * 100);
		   IPS_SetHidden($tunerStatusIds[$tunerIndex][3], true);
		}
	}
}
else
{
	for($tunerIndex = 1; $tunerIndex <= 2; $tunerIndex++)
	{
	   SetValue($tunerStatusIds[$tunerIndex][0], 0);
	   SetValue($tunerStatusIds[$tunerIndex][1], 'offline');
	   IPS_SetHidden($tunerStatusIds[$tunerIndex][1], true);
	   SetValue($tunerStatusIds[$tunerIndex][2],
			$responseObj->TunerStatus->SignalStrength * 100);
	   IPS_SetHidden($tunerStatusIds[$tunerIndex][2], true);
	   SetValue($tunerStatusIds[$tunerIndex][3],
			$responseObj->TunerStatus->SignalQuality * 100);
	   IPS_SetHidden($tunerStatusIds[$tunerIndex][3], true);
	}
}

function do_post_request($url, $data)
{
  $params = array('http' => array(
              'method' => 'POST',
              'content' => $data
            ));
  $ctx = stream_context_create($params);
  $fp = @fopen($url, 'rb', false, $ctx);
  $response = @stream_get_contents($fp);
  
  return $response;
}

?>

Hallo,
hat das schon jemand angepasst:
http://ip/status
schaut dann etwa so aus:

Elgato DVB>IP Server 1.1.0-402r1, Feb 19 2015, 17:49:21
Name: EyeTV Netstream 4Sat (3625)
System Status: {"CpuInfo":{"CPUs":1,"Idle":94,"Io":0,"Irq":0,"Nice":0,"Sirq":2,"Sys":1,"Usr":0}}
Board ID: 1
Streams: 4
(# Initialized Type Available Connected Active StreamID Setup Receiving Lock Transcoding TSPacketsReceived rate index sessionID [clientInfo])
#1: 1 4 1 1 1 10 0 1 1 0 14157353 3.518Mbps 85B3DC1B 192.168.2.77
#2: 1 4 1 1 0 -1 0 0 1 0 0
#3: 1 4 1 1 0 -1 0 0 0 0 0
#4: 1 4 1 1 0 -1 0 0 0 0 0
Users:
[
    {
        "Frontend":1,
        "IpAddress":"192.168.12.77",
        "MacAddress":"77:5b:xx:93:d4:a5",
        "MachineName":"imac-ixx",
        "SessionId":"85B5DC1B",
        "UserName":"konny"
    }
]
LNBs:
[
    {
        "Mode":"Quad"
    },
    {
        "Mode":"Quad"
    },
    {
        "Mode":"Quad"
    },
    {
        "Mode":"Quad"
    }
]


==== Multicast ====
IP:224.0.0.22 hasMembers:1 refreshCounter: 0 lastReportTime: 37520
IP:239.255.255.250 hasMembers:1 refreshCounter: 0 lastReportTime: 37521
IP:239.0.0.250 hasMembers:1 refreshCounter: 0 lastReportTime: 40540
IP:224.0.0.251 hasMembers:1 refreshCounter: 0 lastReportTime: 40110
IP:224.0.0.252 hasMembers:1 refreshCounter: 0 lastReportTime: 40110
IP:224.0.0.2 hasMembers:1 refreshCounter: 0 lastReportTime: 40110
IP:224.0.0.113 hasMembers:1 refreshCounter: 0 lastReportTime: 83691944

Gruß Konny

Gibst schon eine Anpassung an Netstream Sat4.
nach oben schieb…

Konny