Folgendes Script erstellt für die Visualisierung von Enigma2 Receivern in NEO automatisch Scripte.
Grundvoraussetzung:
- IP Symcon in Version 4
- Installiertes und konfiguriertes BY_Enigma2BY PHP Modul für IP-Symcon 4 für Enigma2 Boxen
https://github.com/BayaroX/BY_Enigma2BY
- Für die Visualisierung in NEO das IP-Symcon Plugin von Mediola für NEO
Bevor das Script ausgeführt wird ist eine Kategorie in IP-Symcon anzulegen unter der dann die Scripte angelegt werden. Die ObjectID der Kategorie ich am Anfang des Scriptes zu ergänzen. dann einfach Inhalt in IP-Symcon kopieren und ausführen.
Script in IP-Symcon ausführen
Code: Alles auswählen
<?
//Konfig
// Angabe des ObjectID der Kategorie unter der die Scripte und Variablen angelegt werden sollen
$KatID = 41328 /*[Geräte\Heimkino\Video\Testneo]*/;
//Konfig End-----------------------
$InstanzenListe = IPS_GetInstanceListByModuleID("{A2938F57-E1E2-427A-92FA-5F43EFF1F3FF}");
$InstanzCount = 0;
foreach ($InstanzenListe as $InstanzID) {
//echo $InstanzID;
createZap($InstanzID, $KatID);
createSendKey($InstanzID, $KatID);
createPowerToggle($InstanzID, $KatID);
createMuteScript($InstanzID, $KatID);
$InstanzCount++;
$Childs[] = IPS_GetChildrenIDs($InstanzID);
}
$Variablen = flatten($Childs);
$Variablen = count(array_unique($Variablen));
echo "Es wurden $InstanzCount Dreambox Instanzen gefunden!\n";
echo "Es wurden $Variablen Variablen in den Dreambox Instanzen gefunden!\n";
function flatten(array $array) {
$return = array();
array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
return $return;
}
function createMuteScript($InstanzID, $KatID)
{
$name = IPS_GetName($InstanzID)." Mute Toggle";
$CatID = IPS_CreateCategory(); // Kategorie anlegen
IPS_SetName($CatID, "Mute"); // Kategorie benennen
IPS_SetParent($CatID, $KatID); // Kategorie einsortieren unter dem Objekt mit der ID $ParentCatID
$ScriptID = IPS_CreateScript(0);
IPS_SetName($ScriptID, $name);
IPS_SetParent($ScriptID, $CatID);
$content = '
<?
$InstanceID = '.$InstanzID.';
$MuteID = @IPS_GetVariableIDByName("Mute", $InstanceID);
$status = GetValueFormatted($MuteID); // Status des Geräts auslesen
IPS_LogMessage( "'.$name.' Mute:" , "Mute $status ausführen" );
if ($status == false)// Befehl ausführen
{
SNS_SetMute($InstanceID, true);
}
elseif ($status == true)// Befehl ausführen
{
SNS_SetMute($InstanceID, false);
}
?>';
IPS_SetScriptContent($ScriptID, $content);
}
function createZap($InstanzID, $KatID)
{
$name = IPS_GetName($InstanzID)."_";
$CatID = IPS_CreateCategory(); // Kategorie anlegen
IPS_SetName($CatID, "Zap"); // Kategorie benennen
IPS_SetParent($CatID, $KatID); // Kategorie einsortieren unter dem Objekt mit der ID $ParentCatID
$list = Enigma2BY_GetSenderliste($InstanzID);
foreach ($list as $key => $sender)
{
$scriptname = $name.$key;
$ScriptID = IPS_CreateScript(0);
IPS_SetName($ScriptID, $scriptname);
IPS_SetScriptContent($ScriptID, "<? Enigma2BY_ZapTo(".$InstanzID.", '".$key."'); ?>");
IPS_SetParent($ScriptID, $CatID); // Script einsortieren unter der Kategorie
}
}
function createSendKey($InstanzID, $KatID)
{
$name = IPS_GetName($InstanzID)."_";
$CatID = IPS_CreateCategory(); // Kategorie anlegen
IPS_SetName($CatID, "RemoteKey"); // Kategorie benennen
IPS_SetParent($CatID, $KatID); // Kategorie einsortieren unter dem Objekt mit der ID $ParentCatID
$keylength = "short";
$CommandArray = array("Power" => "116", "1" => "2", "2" => "3", "3" => "4", "4" => "5", "5" => "6", "6" => "7", "7" => "8", "8" => "9", "9" => "10", "0" => "11", "VolumeUp" => "115", "VolumeDown" => "114", "MUTE" => "113", "Previous" => "412", "Next" => "407", "BouquetUp" => "402", "BouquetDown" => "403", "ArrowUp" => "103", "ArrowDown" => "108", "ArrowLeft" => "105", "ArrowRight" => "106", "Menu" => "139", "OK" => "352", "Info" => "358", "Audio" => "392", "Video" => "393", "RED" => "398", "GREEN" => "399", "YELLOW" => "400", "BLUE" => "401", "TV" => "377", "Radio" => "385", "Text" => "388", "Help" => "138", "Exit" => "174", "Rewind" => "168", "Play" => "207", "Stop" => "128", "Forward" => "159", "Record" => "167");
foreach($CommandArray as $key => $value)
{
$keyname = $name.$key;
//echo $keyname."<br>";
$ScriptID = IPS_CreateScript(0);
IPS_SetName($ScriptID, $keyname);
IPS_SetScriptContent($ScriptID, "<? Enigma2BY_SendKey(".$InstanzID.", '".$key."', '".$keylength."'); ?>");
IPS_SetParent($ScriptID, $CatID); // Script einsortieren unter der Kategorie
}
}
function createPowerToggle($InstanzID, $KatID)
{
//$StatusID = @IPS_GetObjectIDByName("Status", $InstanzID);
$Name = IPS_GetName($InstanzID)."_Power";
$CatID = IPS_CreateCategory(); // Kategorie anlegen
IPS_SetName($CatID, "Power"); // Kategorie benennen
IPS_SetParent($CatID, $KatID); // Kategorie einsortieren unter dem Objekt mit der ID $ParentCatID
$Profilname = "~Switch";
$powerID = CreatePowerVar ($Name, $Profilname, $CatID);
$Wakeup = $Name." Wakeup";
$contentWakeup = '
<?
IPS_LogMessage( "Dreambox Power:" , "Wakeup ausführen" );
Enigma2BY_SetPowerState('.$InstanzID.', 4);
SetValueBoolean('.$powerID.', true);
?>';
$WakeupScriptID = IPS_CreateScript(0);
IPS_SetName($WakeupScriptID, $Wakeup);
IPS_SetScriptContent($WakeupScriptID, $contentWakeup);
IPS_SetParent($WakeupScriptID, $powerID); // Script einsortieren
$Standby = $Name." Standby";
$contentStandby = '
<?
IPS_LogMessage( "Dreambox Power:" , "Wakeup ausführen" );
Enigma2BY_SetPowerState('.$InstanzID.', 5);
SetValueBoolean('.$powerID.', false);
?>';
$StandbyScriptID = IPS_CreateScript(0);
IPS_SetName($StandbyScriptID, $Standby);
IPS_SetScriptContent($StandbyScriptID, $contentStandby);
IPS_SetParent($StandbyScriptID, $powerID); // Script einsortieren
$PowerToggle = $Name." toggle";
$contentPowerToggle = '
<?
$status = GetValueBoolean('.$powerID.'); // Status des Geräts auslesen
IPS_LogMessage( "Dreambox Power:" , "Befehl ausführen" );
if ($status == false)// Befehl ausführen
{
IPS_RunScript('.$WakeupScriptID.');
}
elseif ($status == true)// Befehl ausführen
{
IPS_RunScript('.$StandbyScriptID.');
}
?>';
$PowerToggleScriptID = IPS_CreateScript(0);
IPS_SetName($PowerToggleScriptID, $PowerToggle);
IPS_SetScriptContent($PowerToggleScriptID, $contentPowerToggle);
IPS_SetParent($PowerToggleScriptID, $powerID); // Script einsortieren
$ToggleWF = $Name." togglewf";
$contentToggleWF = '
<?
IPS_LogMessage( "Dreambox:" , "erkannt" );
Switch ($_IPS[\'SENDER\']) //Prüfen wer Script auslöst
{
Default:
Case "RunScript":
break;
Case "Execute":
Case "TimerEvent":
break;
Case "Variable":
Case "WebFront": // Zum schalten im Webfront
$action = IPS_GetName($_IPS[\'VARIABLE\']); // Name der Variablen
Switch ($action){
case "Status":
if ($_IPS[\'VALUE\'] == True){
IPS_RunScript('.$WakeupScriptID.');
}
else {
IPS_RunScript('.$StandbyScriptID.');
}
Default:
break;
};
break;
}
?>';
$ToggleWFScriptID = IPS_CreateScript(0);
IPS_SetName($ToggleWFScriptID, $ToggleWF);
IPS_SetScriptContent($ToggleWFScriptID, $contentToggleWF);
IPS_SetParent($ToggleWFScriptID, $powerID); // Script einsortieren
//Aktionscript zuordnen
IPS_SetVariableCustomAction($powerID, $ToggleWFScriptID);
}
function createSendMsg($InstanzID, $KatID)
{
$name = IPS_GetName($InstanzID)."_";
$CatID = IPS_CreateCategory(); // Kategorie anlegen
IPS_SetName($CatID, "SendMessage"); // Kategorie benennen
IPS_SetParent($CatID, $KatID); // Kategorie einsortieren unter dem Objekt mit der ID $ParentCatID
/*
$Type:
1 = Schickt eine Nachricht mit einem "Info-Symbol" an den Receiver.
2 = Schickt eine Nachricht ohne Symbol an den Receiver.
3 = Schickt eine Nachricht mit einem "Achtung-Symbol" an den Receiver.
0 = Schickt eine Nachricht/Frage mit Ja/Nein als Antwortmöglichkeit an den Receiver.
Die Antwort steht dann in der Integer-Variable "Frage-Antwort" und in der Rückmeldung der Funktion.
Antwort-Bedeutungen: 0 = Nein // 1 = Ja // 2 = Keine Antwort innerhalb Timeout-Zeit
*/
$Text = "Text zum Senden.";
$TimeoutSekunden = 2;
$Type = 2;
$ScriptID = IPS_CreateScript(0);
IPS_SetName($ScriptID, $keyname);
IPS_SetScriptContent($ScriptID, "<? Enigma2BY_SendMsg(".$InstanzID.", '".$Text."', ".$Type.", ".$TimeoutSekunden."); ?>");
IPS_SetParent($ScriptID, $CatID); // Script einsortieren unter der Kategorie
}
function CreatePowerVar ($Name, $Profilname, $KatID)
{
$VarID_Power = IPS_CreateVariable(0);
IPS_SetName($VarID_Power, $Name); // Variable benennen
IPS_SetParent($VarID_Power, $KatID); // Variable einsortieren unter dem Objekt mit der ID
IPS_SetVariableCustomProfile($VarID_Power, $Profilname);
return $VarID_Power;
}
?>
Um ein Cover des Aktuell laufenden Programms aus IP-Symcon von dem Enigma2 Receiver (z.B. Dreambox) in NEO anzeigen zu können wird zur Zeit ein Webseitenelement benötigt. Dazu ist in IP-Symcon unterhalb von webfront/user der Ordner neo anzulegen und unterhalb des Ordners neo zwei neue Ordner js und css .
In den Unterordner js legen wir die datei reflex.js von
http://www.netzgesta.de/reflex/
ab.
Im Ordner css legen wir die Datei neowebelement.css mit dem folgenden Inhalt ab
neowebelement.css
Code: Alles auswählen
@charset "utf-8";
#webelementwrapper {
position: relative;
}
.button .icon img {
background-image: -webkit-linear-gradient(270deg,rgba(255,255,255,1.00) 0%,rgba(83,75,75,0.60) 100%);
background-image: -moz-linear-gradient(270deg,rgba(255,255,255,1.00) 0%,rgba(83,75,75,0.60) 100%);
background-image: -o-linear-gradient(270deg,rgba(255,255,255,1.00) 0%,rgba(83,75,75,0.60) 100%);
background-image: linear-gradient(180deg,rgba(255,255,255,1.00) 0%,rgba(83,75,75,0.60) 100%);
top: 160px;
left: 141px;
position: absolute;
border-radius: 64px;
-webkit-box-shadow: 2px 2px 3px rgba(46,44,44,1.00);
box-shadow: 2px 2px 3px rgba(46,44,44,1.00);
}
body {
background-color: transparent;
}
dreamboxlogo.php
Wir müssen noch in der Datei User, Passwort und die ObjektID anpassen.
User [USER] Emailadresse (Nutzername (Emailadresse) die beim Registrieren von IP-Symcon verwendet wurde)
Passwort [PASSWORT] Passwort für den Fernzugriff auf IP-Symcon. Falls der Fernzugriff auf IP-Symcon noch nicht eingerichtet worden ist ist dies wie hier (https://www.symcon.de/service/dokumenta ... rnzugriff/) beschrieben nachzuholen.
IP-Adresse [IP IPS] IP Adresse vom IP-Symcon Server
ObjektID [OBJEKTID] 5 stellige Zahl der Variable Akt. Sender PRef der Enigma2 Instanz in IP-Symcon.
dreamboxlogo.php
Code: Alles auswählen
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Aktueller Sender Dreambox</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8">
<link rel="icon" href="../../favicon.ico" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="css/dreambox.css" />
<script type="text/javascript" src="js/reflex.js"></script>
</head>
<body>
<div>
<?php
$rpc = new JSONRPC("http://[USER]:[PASSWORT]@[IP IPS]:3777/api/");
$pref = $rpc->GetValue([OBJECTID]);
echo '<img class="reflex" idistance="0" iheight="33" iopacity="33" iborder="0" src="piconneo/'.$pref.'.png" alt="logo">';
?>
</div>
</body>
</html>