Hallo,
anbei die ersten Funktionen.
Senderlisten abgefragen
Nachrichten auf den Bildschirm senden
Auf aktive Antwort warten
(Benutze ich um festzustellen ob meine Frau wieder mal vorm Fernseher eingeschlafen ist, danach fahre ich den Receiver runter und schalte die Steckdosen aus).
Receiver in Standby oder Deepstandbay fahren
Morgen kommen dann noch die Funktionen für die Lautstärkeregelung,
damit man zb. bei Anrufen die Lautstärke regeln kann.
enigma2_fct.php
<?
/*
* Holt IPAdresse aus Variable 'IP' eines DummyModules obj
*/
function GetIpFromObj($obj)
{
$ip_obj = @IPS_GetObjectIDByName("IP", $obj); // Hole das Object aus Variable IP
$ip_adr = @GetValue($ip_obj);
return $ip_adr;
}
/**
* Prüft über Ping ob Gerät erreichbar
* Return
* true - wenn erreichbar
* false - nicht erreichbar
**/
function ENIGMA2_GetAvailable($ipadr)
{
$result = false;
if ($ipadr > "" )
{
$result = (Boolean) Sys_Ping($ipadr, 1000); // Ping max. 1 Sek. warten
}
return $result;
}
/**
* Setzt Dreambox in Standby/nicht StandBy
* -1 - bei Fehler
* 1 - wenn in StandBy
* 0 - wenn nicht in Standby
**/
function ENIGMA2_ToggleStandby($ipadr)
{
$powerstate = 0;
$result = -1;
if (ENIGMA2_GetAvailable( $ipadr ))
{
$xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/powerstate?newstate=$powerstate"));
print_r ($xmlResult);
if ($xmlResult->e2instandby == 'true')
{
$result = 1;
}
else
{
$result = 0;
}
}
return $result;
}
/**
* true - wenn ok
*/
function ENIGMA2_DeepStandby($ipadr)
{
$powerstate = 1;
$result = false;
if (ENIGMA2_GetAvailable( $ipadr ))
{
$xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/powerstate?newstate=$powerstate"));
print_r($xmlResult);
$result = (Boolean)$xmlResult->e2instandby;
}
return $result;
}
/**
* true - wenn ok
*/
function ENIGMA2_Reboot($ipadr)
{
$powerstate = 2;
$result = false;
if (ENIGMA2_GetAvailable( $ipadr ))
{
$xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/powerstate?newstate=$powerstate"));
$result = (Boolean)$xmlResult->e2instandby;
}
return $result;
}
/**
* true - wenn ok
*/
function ENIGMA2_RestartEnigma($ipadr)
{
$powerstate = 3;
$result = false;
if (ENIGMA2_GetAvailable( $ipadr ))
{
$xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/powerstate?newstate=$powerstate"));
$result = (Boolean)$xmlResult->e2instandby;
}
return $result;
}
/**
* liefert den Namen des aktuellen Sendernamens
*/
function ENIGMA2_GetCurrentServiceName($ipadr)
{
if (ENIGMA2_GetAvailable( $ipadr ))
{
$xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/subservices"));
$result = $xmlResult->e2service[0]->e2servicename;
}
return $result;
}
/**
* liefert den Namen der aktuellen Servicereferenz
*/
function ENIGMA2_GetCurrentServiceReference($ipadr)
{
if (ENIGMA2_GetAvailable( $ipadr ))
{
$xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/subservices"));
$result = $xmlResult->e2service[0]->e2servicereference;
}
return $result;
}
/**
* liefert ein Array mit den Namen der Bouquets wenn $bouquet = ""
* liefert ein Array mit den Namen der Sender eines Bouquet wenn $bouquet ungleich ""
* keys e2servicereference
* keys e2servicename
*/
function ENIGMA2_GetServiceBouquetsOrServices($ipadr,$bouquet = "")
{
if (ENIGMA2_GetAvailable( $ipadr ))
{
if ($bouquet == "" )
{
$xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/getservices"));
}
else {
$bouquet = urlencode($bouquet);
$xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/getservices?sRef=$bouquet"));
}
}
else
{
$xmlResult[] = "";
}
return $xmlResult;
}
/*
* Schreibt eine Infomessage auf den Bildschirm
* return
* true wenn erfolgreich
* false wenn nicht erfolgreich
**/
function ENIGMA2_WriteInfoMessage($ipadr,$message = "",$time=5)
{
$type = 1;
$result = false;
if (ENIGMA2_GetAvailable( $ipadr ))
{
$message = urlencode($message);
$xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/message?text=$message&type=$type&timeout=$time"));
if ($xmlResult->e2state == "True")
{
$result = true;
}
}
else
{
$result = false;
}
return $result;
}
/*
* Schreibt eine Errormessage auf den Bildschirm
* return
* true wenn erfolgreich
* false wenn nicht erfolgreich
**/
function ENIGMA2_WriteErrorMessage($ipadr,$message = "",$time=5)
{
$type = 3;
$result = false;
if (ENIGMA2_GetAvailable( $ipadr ))
{
$message = urlencode($message);
$xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/message?text=$message&type=$type&timeout=$time"));
if ($xmlResult->e2state == "True")
{
$result = true;
}
}
else
{
$result = false;
}
return $result;
}
/*
* Schreibt eine Message auf den Bildschirm
* return
* true wenn erfolgreich
* false wenn nicht erfolgreich
**/
function ENIGMA2_WriteMessage($ipadr,$message = "",$time=5)
{
$type = 2;
$result = false;
if (ENIGMA2_GetAvailable( $ipadr ))
{
$message = urlencode($message);
$xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/message?text=$message&type=$type&timeout=$time"));
if ($xmlResult->e2state == "True")
{
$result = true;
}
}
else
{
$result = false;
}
return $result;
}
/*
* Schreibt eine Message auf den Bildschirm die man mit ja oder nein beantworten muss
* man sollte die Frage immer so stellen, das nein als aktive Antwort ausgewertet wird,
* da in allen anderen Fällen 0 oder -1 gemeldet wird
* return
* -1 wenn keine erfolgreiche Verbindung
* 0 wenn mit ja oder garnicht geantwortet wurde
* 1 wenn mit nein geantwortet
**/
function ENIGMA2_GetAnswerFromMessage($ipadr,$message = "",$time=5)
{
$type = 0;
$result = -1;
if (ENIGMA2_GetAvailable( $ipadr ))
{
$message = urlencode($message);
$xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/message?text=$message&type=$type&timeout=$time"));
if ($xmlResult->e2state == "True")
{
sleep($time);
$result = -1;
$xmlResult = new SimpleXMLElement(file_get_contents("http://$ipadr/web/messageanswer?getanswer=now"));
if ($xmlResult->e2statetext == "Answer is NO!")
{
$result = 1;
}
else
{
$result = 0;
}
}
}
else
{
$result = -1;
}
return $result;
}
?>
Testprogramm für die Funktionen
<?
include "enigma2_fct" ;
// Test
$dreamboxIP = GetIpFromObj(31414 /*[Netz Geräte\Dreambox 8000]*/);
//$result = ENIGMA2_DeepStandby($dreambox);
//echo "Result.... $result";
echo "$dreamboxIP
";
$servicename = ENIGMA2_GetCurrentServiceName($dreamboxIP);
$serviceref = ENIGMA2_GetCurrentServiceReference($dreamboxIP);
echo "$servicename
";
echo "$serviceref
";
$liste = ENIGMA2_GetServiceBouquetsOrServices($dreamboxIP,"");
foreach ($liste as $bouquet)
{
echo "$bouquet->e2servicename
";
echo "$bouquet->e2servicereference
";
}
//Nun für leztes bouquet mal die Sender ausgeben
echo "Sender von $bouquet->e2servicereference
";
$liste = ENIGMA2_GetServiceBouquetsOrServices($dreamboxIP,$bouquet->e2servicereference);
foreach ($liste as $bouquet)
{
echo "$bouquet->e2servicename
";
echo "$bouquet->e2servicereference
";
}
/*
$result = ENIGMA2_WriteInfoMessage($dreamboxIP,"Dies ist ein Infotest",10);
if ($result)
{
echo "Übertragung OK";
}
else
{
echo "Übertragung nicht OK";
}
$result = ENIGMA2_WriteErrorMessage($dreamboxIP,"Dies ist ein Infotest",10);
if ($result)
{
echo "Übertragung OK";
}
else
{
echo "Übertragung nicht OK";
}
$result = ENIGMA2_WriteMessage($dreamboxIP,"Dies ist ein Infotest",10);
if ($result)
{
echo "Übertragung OK";
}
else
{
echo "Übertragung nicht OK";
}
*/
$result = ENIGMA2_GetAnswerFromMessage($dreamboxIP,"Soll die Box ausgeschaltet werden",10);
if ($result == 0 || $result == -1)
{
echo "Benutzer hat mit Ja oder keine Taste gedrückt";
}
else
{
echo "Benutzer hat mit aktiv mit nein geantwortet";
}
?>