Vorlagen für Enigma2 Visualisierung mit IP-Symcon und NEO

Haussteuerung mittels mediola

Moderator: Co-Administratoren

Fonzo
Beiträge: 6853
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 502 Mal

Vorlagen für Enigma2 Visualisierung mit IP-Symcon und NEO

Beitrag von Fonzo » 08.03.2016, 10:31

Um mit NEO Variablen in IP-Symcon togglen zu können werden Scripte benötigt die dann von NEO aufgerufen werden.

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;
}


?>
Anschließend können dann die Scripte für einen Button in NEO aufgerufen werden um bei Mute, Power, Zum Wechseln der Sender und zum Senden eines Fernbedienungsbefehls zu schalten.


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;
}
Im Ordner neo legen wir die Datei zum Abrufen und anzeigen des Covers innerhalb eines Webseitenelements in NEO ab.

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>

CarnivoreD
Beiträge: 82
Registriert: 29.10.2015, 09:28

Re: Vorlagen für Enigma2 Visualisierung mit IP-Symcon und NE

Beitrag von CarnivoreD » 15.10.2016, 10:32

Hallo Fonzo,

leider scheiter ich bei der Installation des o.g. Moduls. Ich erhalte eine Fehlermeldung
Error:SSL error:140E0114:SSL routines:ssl_shutdown:uninitialized
wenn ich die URL in Modul Control unter Kern-Instanzen eingeben möchte.

Auch bei Bestätigung der URL, die bereits im Eingabefeld steht
git://github.com/paresy/SymconMisc.git
bekomme ich eine Fehlermeldung:
Error: Failed to resolve adress for github.com: Name or service not known.
Da ich Laie bin, sagt mir dies leider jeweils nichts. Kannst Du mir weiterhelfen?

Der IPS-Server liegt auf einem Raspi3, die Konsole starte ich aus Windows auf dem Rechner (wenn das von Bedeutung sein sollte).

Vielen Dank und Grüße

C.

Fonzo
Beiträge: 6853
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 502 Mal

Re: Vorlagen für Enigma2 Visualisierung mit IP-Symcon und NE

Beitrag von Fonzo » 15.10.2016, 12:54

Die Version des Moduls ist eine ältere die aktuelle findet man auf der Seite von bayaro
https://bayaro.lima-city.de

Welche IP-Symcon Version benutzt Du. Mit einem aktuellen Raspberry Update gibt es Probleme bei der DNS Auflösung daher ist zur Zeit nur Version 4.1 von IP-Symcon voll lauffähig.


Gesendet von iPhone mit Tapatalk

CarnivoreD
Beiträge: 82
Registriert: 29.10.2015, 09:28

Re: Vorlagen für Enigma2 Visualisierung mit IP-Symcon und NE

Beitrag von CarnivoreD » 15.10.2016, 15:53

Danke Fonzo.

Die Modulversion habe ich von der von Dir genannten Seite.

IPS habe ich die Woche erst installiert. Ich meine, es ist 4.00. Ich werde mal alles updaten und erneut versuchen (schaffe ich allerdings erst morgen). VG...

CarnivoreD
Beiträge: 82
Registriert: 29.10.2015, 09:28

Re: Vorlagen für Enigma2 Visualisierung mit IP-Symcon und NE

Beitrag von CarnivoreD » 15.10.2016, 15:56

Wo bekomme ich denn die V 4.1 her? Auf der IPS-Seite ist nur die 4.0 zu sehen...


CarnivoreD
Beiträge: 82
Registriert: 29.10.2015, 09:28

Re: Vorlagen für Enigma2 Visualisierung mit IP-Symcon und NE

Beitrag von CarnivoreD » 15.10.2016, 23:59

Vielen Dank, Fonzo, ich werde es versuchen...

VG, C.

CarnivoreD
Beiträge: 82
Registriert: 29.10.2015, 09:28

Re: Vorlagen für Enigma2 Visualisierung mit IP-Symcon und NE

Beitrag von CarnivoreD » 22.10.2016, 09:00

Hallo Fonzo,

leider ich schon wieder, aber bei mir wird das Cover nicht gezeigt, so dass ich Dir noch einmal für Deine Hilfe dankbar wäre:

Ich habe folgende dreamboxlogo.php im Ordner neo angelegt (sie ist nur leicht verändert zu Deiner ursprünglichen, mit der ursprünglichen Datei hat es aber auch nicht funktioniert):

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/neowebelement.css" />
    <script type="text/javascript" src="js/reflex.js"></script>
    </head>

    <body>
    <div>
    <?php
    $pref = GetValue(12345);
    echo '<img class="reflex" idistance="0" iheight="33" iopacity="33" iborder="0" src="piconneo/'.$pref.'.png" alt="logo">';

    ?>   
    </div>

    </body>

    </html>
Die neowebelement.css liegt bereits von der Sonos-Geschichte im Ordner neo/css. Die Objekt ID in der dreamboxlogo.php passt, das habe ich merhfach geprüft, und auch die Dateinamen-pref in dem piconneo-Ordner stimmt mit der in IPS angezeigten pref überein (z.B. bei VOX in IPS angezeigte pref: 1_0_1_2F1C_441_1_C00000_0_0_0 und Datei im Piconneo-Ordner: 1_0_1_2F1C_441_1_C00000_0_0_0.png). Dennoch wird mir das Picon nicht angezeigt.

Hast Du eine Idee, was ich falsch mache?

Wieder einmal besten Dank und viele Grüße...

Fonzo
Beiträge: 6853
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 502 Mal

Re: Vorlagen für Enigma2 Visualisierung mit IP-Symcon und NE

Beitrag von Fonzo » 22.10.2016, 10:52

Hast Du mal probiert ob die Grafik angezeigt wird wenn Du die URL zum png in den Browser eingibst?
Wahrscheinlichlich ist die Pfadangabe zum piconneo Ordner falsch wo liegt der genau unter welchem Verzeichnis?

CarnivoreD
Beiträge: 82
Registriert: 29.10.2015, 09:28

Re: Vorlagen für Enigma2 Visualisierung mit IP-Symcon und NE

Beitrag von CarnivoreD » 22.10.2016, 11:39

Der piconneo-Ordner ist im neo-Ordner.

Über http://URL:3777/user/neo/piconneo/1_0_1 ... _0_0_0.png bekomme ich es angezeigt...

Auch wenn ich die dreamboxlogo.php nach jedem Senderschaltvorgang im Browser ausführe, wird immer das jeweils aktuelle Senderlogo gezeigt.

Nur über Neo funktionierte es dann nicht...!?!

Nun scheint es aber zu klappen (keine Ahnung, woran es lag).

Vielen Dank!
Zuletzt geändert von CarnivoreD am 22.10.2016, 12:12, insgesamt 1-mal geändert.

Antworten

Zurück zu „mediola“