Folgendes habe ich mal verändert:
in der Konfig ist ein neuer Key („Parent“ => „Allgemein“) dazugekommen:
private static $values = Array(
"ID" => Array("Parent" => "Allgemein", "Name" => "Basis ID", "Type" => 3, "Profile" => "", "Action" => false, "Position" => 50),
"VERS_SW_STM" => Array("Parent" => "Allgemein", "Name" => "Basis SW STM Version", "Type" => 3, "Profile" => "", "Action" => false, "Position" => 50),
"VERS_SW_ETH" => Array("Parent" => "Allgemein", "Name" => "Basis SW ETH Version", "Type" => 3, "Profile" => "", "Action" => false, "Position" => 50),
"VERS_HW" => Array("Parent" => "Allgemein", "Name" => "Basis HW Version", "Type" => 3, "Profile" => "", "Action" => false, "Position" => 50),
"TEMPERATUREUNIT" => Array("Parent" => "Allgemein", "Name" => "Basis Temperatureinheit", "Type" => 1, "Profile" => "MH.TemperatureUnit", "Action" => true, "Position" => 50),
"SUMMERWINTER" => Array("Parent" => "Allgemein", "Name" => "Basis Automatische Zeitumstellung", "Type" => 0, "Profile" => "MH.SummerWinter", "Action" => true, "Position" => 50),
private function MaintainArray($Array) {
foreach($Array as $key => $value){
if(!isset($value["Keep"])){
$keep = true;
} else {
$keep = $this->ReadPropertyBoolean($value["Keep"]);
}
$this->MaintainVariable($this->ReduceToIdent($key), $value["Name"], $value["Type"], $value["Profile"], $value["Position"], $keep);
$var_id = @IPS_GetObjectIDByIdent($this->ReduceToIdent($key), $this->InstanceID);
if(array_key_exists("Parent", $value))
{
// Kategorie prüfen und erstellen
$check_ident = @IPS_GetObjectIDByIdent("MH_ALLGEMEIN", $this->InstanceID);
if (!$check_ident)
{
$cat_id = IPS_CreateCategory();
// Namen aus $value["Parent"] übernehmen
IPS_SetName($cat_id, $value["Parent"]);
//Modul-Instanz als Parent setzen
IPS_SetParent($cat_id, $this->InstanceID);
IPS_SetIdent($cat_id, "MH_ALLGEMEIN");
IPS_SetParent($var_id, $cat_id);
}
else
{
IPS_SetParent($var_id, $check_ident);
}
}
if ($keep && $value["Action"]){
$this->EnableAction($this->ReduceToIdent($key));
}
}
}
Positive Ergebnisse:
- für diese Variablen wird unterhalb der Instanz eine Kategorie „Allgemein“ angelegt und selbige unter diese verschoben
- alle anderen Vars behalten die Instanz als Parent
Negative Ergebnisse:
- die Instanz bekommen keinen Namen (bleibt leer!)
- die Instanz wird unter der Root („IP-Symcon“ angelegt)
- bei Variablen mit „Action“ => true schlägt das EnableAction fehl, da in der __ipsmodule.inc.php davon ausgegangen wird, dass der Ident direkt unter der Instanz liegt und nicht unter der Kategorie „Allgemein“:
protected function EnableAction($Ident) {
IPS_EnableAction($this->InstanceID, $Ident);
}
Welchen Lösungsansatz könnte es geben, dass nicht alle Variablen direkt unter der Modulinstanz liegen müssen?
Kann man die Datei __ipsmodule.inc.php einfach ändern oder wird sie beim nächsten Update überschrieben?
EDIT: auch mit einer DummyInstanz anstelle der Kategorie kommen Fehler.