Wenn Du die Toggle Skripte nicht per Hand anlegen willst, kannst Du diese auch automatisch erstellen lassen. Dazu must Du für Intertechno dieses Skript einmal in IP-Symcon ausführen.
Intertechno NEO Toggle Skripte anlegen:
<?
//Script zum Anlegen von Toggle Script für Intertechno mit State
//-----------------------
$InstanzenListe = IPS_GetInstanceListByModuleID("{C45FF6B3-92E9-4930-B722-0A6193C7FFB5}"); // AIO Intertechno
$InstanzCount = 0;
foreach ($InstanzenListe as $InstanzID) {
//echo $InstanzID."\n";
createPowerToggle($InstanzID);
$InstanzCount++;
$Childs[] = IPS_GetChildrenIDs($InstanzID);
}
$Variablen = flatten($Childs);
$Variablen = count(array_unique($Variablen));
IPS_LogMessage("NEO Toggle Install", "Es wurden ".$InstanzCount." Intertechno Instanzen gefunden!");
IPS_LogMessage("NEO Toggle Install", "Es wurden ".$Variablen." Variablen in den Intertechno Instanzen gefunden!");
function flatten(array $array) {
$return = array();
array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
return $return;
}
function createPowerToggle($InstanzID)
{
$Name = IPS_GetName($InstanzID);
$ScriptName = $Name."_Power toggle";
$StatusID = @IPS_GetObjectIDByIdent("STATE", $InstanzID);
if ($StatusID)
{
$ScriptID = @IPS_GetObjectIDByIdent("Togglescript_".$InstanzID, $StatusID);
if($ScriptID)
{
IPS_LogMessage("NEO Toggle Install", "Es existiert bereits ein Toggle Skript für die Variable ".$StatusID."!");
}
else
{
$ScriptID = IPS_CreateScript(0);
IPS_SetName($ScriptID, $ScriptName);
IPS_SetIdent($ScriptID, "Togglescript_".$InstanzID);
IPS_SetParent($ScriptID, $StatusID);
$contentPowertoggle = '<?
$status = GetValueBoolean('.$StatusID.'); // Status des Geräts auslesen
IPS_LogMessage( "Intertechno:" , "NEO Script toggle" );
if ($status == false)// Befehl ausführen
{
IPS_LogMessage( "'.$Name.':" , "Anschalten" );
AIOIT_PowerOn('.$InstanzID.');
}
elseif ($status == true)// Befehl ausführen
{
IPS_LogMessage( "'.$Name.':" , "Ausschalten" );
AIOIT_PowerOff('.$InstanzID.');
}
?>';
IPS_SetScriptContent($ScriptID, $contentPowertoggle);
IPS_LogMessage("NEO Toggle Install", "Es wurde ein Skript mit der Objekt ID ".$ScriptID." für die Variable mit der Objekt ID ".$StatusID." angelegt!");
}
}
}
?>
Für Elro dieses Skript einmalig ausführen:
<?
//Script zum Anlegen von Toggle Script für Elro mit State
//-----------------------
$InstanzenListe = IPS_GetInstanceListByModuleID("{1B755DCC-7F12-4136-8D14-2ED86E6609B7}"); // AIO Elro
$InstanzCount = 0;
foreach ($InstanzenListe as $InstanzID) {
//echo $InstanzID."\n";
createPowerToggle($InstanzID);
$InstanzCount++;
$Childs[] = IPS_GetChildrenIDs($InstanzID);
}
$Variablen = flatten($Childs);
$Variablen = count(array_unique($Variablen));
IPS_LogMessage("NEO Toggle Install", "Es wurden ".$InstanzCount." Elro Instanzen gefunden!");
IPS_LogMessage("NEO Toggle Install", "Es wurden ".$Variablen." Variablen in den Elro Instanzen gefunden!");
function flatten(array $array) {
$return = array();
array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
return $return;
}
function createPowerToggle($InstanzID)
{
$Name = IPS_GetName($InstanzID);
$ScriptName = $Name."_Power toggle";
$StatusID = @IPS_GetObjectIDByIdent("STATE", $InstanzID);
if ($StatusID)
{
$ScriptID = @IPS_GetObjectIDByIdent("Togglescript_".$InstanzID, $StatusID);
if($ScriptID)
{
IPS_LogMessage("NEO Toggle Install", "Es existiert bereits ein Toggle Skript für die Variable ".$StatusID."!");
}
else
{
$ScriptID = IPS_CreateScript(0);
IPS_SetName($ScriptID, $ScriptName);
IPS_SetIdent($ScriptID, "Togglescript_".$InstanzID);
IPS_SetParent($ScriptID, $StatusID);
$contentPowertoggle = '<?
$status = GetValueBoolean('.$StatusID.'); // Status des Geräts auslesen
IPS_LogMessage( "Intertechno:" , "NEO Script toggle" );
if ($status == false)// Befehl ausführen
{
IPS_LogMessage( "'.$Name.':" , "Anschalten" );
AIOELRO_PowerOn('.$InstanzID.');
}
elseif ($status == true)// Befehl ausführen
{
IPS_LogMessage( "'.$Name.':" , "Ausschalten" );
AIOELRO_PowerOff('.$InstanzID.');
}
?>';
IPS_SetScriptContent($ScriptID, $contentPowertoggle);
IPS_LogMessage("NEO Toggle Install", "Es wurde ein Skript mit der Objekt ID ".$ScriptID." für die Variable mit der Objekt ID ".$StatusID." angelegt!");
}
}
}
?>
Dann sollte jeweils ein Skript existieren, das Dir dann bei Aufruf durch einen Button in NEO die Instanz ein/ausschaltet.
Von
Hallo Fonzo,
super, vielen Dank für die reichhaltige Info. Bin gerade auch auf das Projekt gestossen und werde es ausprobieren.
Danke für die Scripts fürs Toggle.
Wie performant ist eigentlich ips?
Ich lasse das gerade auf meiner Synology als Windows 10 (2GB RAM) unter dem Virtual Manager laufen.
Zum Test ok, aber keine Ahnung ob das später ausreichend ist.
Von
Wenn Du mit performant die Stabilität meinst, so läuft IPS absolut stabil, wenn Du damit meinst wieviel Rechnerleistung das braucht, dann hängt das ganz davon ab wie komplex das Gesamtsystem ist bzw. wieviele Geräte insgesamt gesteuert werden. Ich lasse ein IPS auf einem Raspberry laufen der langweilt sich zu tote und geht selten über 40% CPU Last. Bei der Synology wird das davon abhängen was da für ein Prozessor verbaut ist bzw. wie sehr dieser belastet ist wenn z.B. mehrere zeitgleiche Schreibzugriffe auf den NAS stattfinden. In der Regel hat aber selbst ein neuerer NAS ausreichende Rechenleitung wenn Du nicht noch zig andere Dinge den NAS gleichzeitig verrichten lässt. Wenn auf dem NAS z.B. auch auch Plex läuft und das gerade einen 4K Film on the fly transkodieren muss ist es weniger ratsam auf dem gleichen System eine Hausautomation laufen zu haben. Diese sollte immer und überall stabil laufen daher ist es ratsam rechenintensive Prozesse wie Videokodierung nicht auf dem gleichen System laufen zu haben wie eine Hausautomation, es sei denn es handelt sich um einen entsprechend ausgestatteten Server. Daher ist es stark davon abhängig was Dein NAS so im Alltag macht. Wie gesagt ein Raspberry alleine reicht da an sich locker aus. Bei mir läuft IPS auf einem Dedizierten Server der gleichenzeitig auch TV Server ist, Plex Server und Windows Server für die Domain. Der hat dann genug Rechenleistung für alles.
Von
Ich denke dann kann ich beruhigt sein. Ich habe eine DS718+ mit QuadCore und 6GB RAM. Die ist nur zur Datenablage, als Time Machine Ziel, NTP-Server, DNS-Server, Audio-Server, Kalender und eben ein Windows 10 in Virtual Machine zuständig. Ich mache keine Video-Rendering Geschichten oder so was. Die dümpelt so bei 10% CPU rum und wenn ich in Windows was mache bei ca. 25%-40%.
Von
Um den Kalender in NEO zu visualisieren bzw. damit Dinge zu setzten habe ich jetzt auf iCal Calender Modul umgestellt.
http://bit.ly/2nfYi2o
http://bit.ly/2nfR3HA
Von
Schau ich mir an.
Beim Import von NEO in Ips mit dem Import-Objekt bekomme ich einen Fehler.
Von
Das würde ich dann im IPS Forum klären wenn es dazu spezifische Fragen gibt bzw. eine Fehlermeldung.
Von
Hallo Fonzo,
gibt es auch eine Integration von Mi-Light im IPS AIO Gateway Projekt?
Falls nicht müsste ich doch auf die am Anfang angesprochene Variante der API Schnittstelle gehen.
Wir kann ich in IPS einen http befehl absetzen?
Von
MI Light wird nicht über das AIO Gateway gesteuert sondern über den MI Light Controller
Modul findest Du für IPS hier
http://bit.ly/2AqAFqI
Von
Danke werde ich checken.
Von
Funktioniert denn ein Toggle mit Elro und Intertechno inzwischen?
Von
Hallo Fonzo,
ich teste gerade die Toggle-Funktion mit Intertechno stehe aber etwas auf dem Schlauch mit den ID's.
Welche ID's sind das die in IPS ?
Von
Muss ich das Script unter den Intertechno-Schalter im Objektbaum legen ?
Von
Das Skript kann liegen wo auch immer. Entweder in einer Zentralen Kategorie sammeln oder man kann dies auch unterhalb der Instanz legen hat den Vorteil das NEO dies dann beim Import dem Gerät zuordnet. GetValueBoolean verweist auf die Objekt ID der Status Variable. Der Methodenaufruf zum schalten erfolgt mit der Objekt ID der Instanz.
Neuen Kommentar hinzufügen