Viele FHT's anlegen

Edit:

Na toll - Schreibfehler im Titel, kann das jemand ändern?[/Edit][Edit]Danke

Hallo allerseits,

dank guyabano habe ich es tatsächlich geschafft meine FHZ Wlan zur Kooperation mit IPS zu überzeugen (Danke nochmal).
Jetzt stand ich nur vor der Aufgabe ca. 80 FHT Regler anzulegen und mit Variablen zu versehen (damit 640 Stück).
Mit dem Point und Click Interface ist man bis dahin reif für den Urlaub.
/* Nicht zuletzt weil bei mir in den Eingabefledern des Variblen Editors die

  • Zwischenablage nicht funktioniert hat und leider ein Druck auf ENTER das
  • Fenster nicht schließt. Außerdem kommt man bei der Config Seite eines FHT
  • nicht mit TAB von der ersten Hälfte der Adresse in die zweite.
    */
    Kurzum hab ich mir selber ein Skript geschrieben, das diesen Job für mich erledigt.
    Der Ablauf für jemanden der vor dem selben Problem steht wie ich ist folgender:

[ol]
[li] !!!backup von settings.xml machen!!! So oft habe ich mein Skript nicht getestet[/li][li] Skript einmal ausführen - dann wird einem ein array angezeigt, das die FHZ Module enthält. Damit wird in dem $data array die Zuordnung von FHT zu FHZ geregelt.[/li][li] $varnames nach persönlichen Vorlieben anpassen[/li][li] $data eintragen [/li][li] das die() auskommentieren[/li][li] Execute[/li][/ol]

Und hier ist die beta Version (benötigt übrigens den Webserver):


<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File     : Create_Instances.ips.php
Trigger  :
Interval :
*/

/**************************************************
 * Hier kann man die Namen der Variablen anpassen 
 * sind dann in der Form z.B. s_e_199_IstTemp
 **************************************************/

$varnames = array(
   "TemeratureVar" => "IstTemp",
   "PositionVar" => "Pos",
   "WindowOpen" => "Fenster",
   "TargetTempVar" => "FhtTemp",
   "TargetIPSTempVar" => "SollTemp",
   "LowBatteryVar" => "Bat",
   "TargetModeVar" => "FhtMode",
   "TargetIPSModeVar" => "SollMode"
   );
   
/**************************************************
 * Hier werden die Daten für die FHT hinterlegt
 * - level entspricht den Kategorien in IPS
 * - die 199 entspricht der Adresse des FHT
 * - "fhz" muss erst durch einmaliges Ausführen
 *   des Skriptes herausgefunden werden.
 **************************************************/

$data = array(
   array(
      "level" => "Schloss\\EG",
        199 => array("fhz"=> 1,"name" => "Rittersaal"),
        198 => array("fhz"=> 1,"name" => "Speisesaal"),
        197 => array("fhz"=> 1,"name" => "Raucherzimmer")
	),
      
   array(
        "level" => "Verwaltungsgebäude",
        301 => array("fhz"=> 0,"name" => "Kiosk"),
        310 => array("fhz"=> 0,"name" => "EDV")
    )
);


$vartypes = array(
   "TemeratureVar" => "Float", // <= Schreibfehler in IPS
   "PositionVar" => "Float",
   "WindowOpen" => "Boolean",
   "TargetTempVar" => "Float",
   "TargetIPSTempVar" => "Float",
   "LowBatteryVar" => "Boolean",
   "TargetModeVar" => "Integer",
   "TargetIPSModeVar" => "Integer"
   );

require "../web/base/xmlparser.ips.php";

$modules = IPS_GetModules();
foreach($modules as $module) {
   $info=IPS_GetModuleInfo($module);
   if($info["name"]=="FHT") $fhtguid = $info["guid"];
   if($info["name"]=="ELV FHZ 1X00 PC") $fhzguid = $info["guid"];
}

$fhzmodules = IPS_GetInstanceIDsByGUID($fhzguid);
$fhtmodules = IPS_GetInstanceIDsByGUID($fhtguid);

$existingFhtModules = array();
$existingFhtModuleAdresses = array();
$xml = new IPS_XMLParser();
foreach($fhtmodules as $module) {
   $xmlstring = IPS_GetInstanceSettings($module);
   $xmlarray = $xml->GetArray($xmlstring);
   $existingFhtModules[$module] = $xmlarray;
   $existingFhtModuleAdresses[] = $xmlarray["ID"]["Settings"]["DeviceAdress"];
}

print_r($fhzmodules); 

/***************************************************************************
 * die(); Auskommentieren wenn alle "fhz" Parameter in $data angepasst sind
 ***************************************************************************/
die(); 

foreach($data as $category) {
   $level = $category["level"];
   unset($category["level"]);
   foreach($category as $adress => $value) {
      $fhz = $value["fhz"];
      $name = $value["name"];
      $binadress = floor($adress/100)*256+$adress%100;

      if(!in_array($binadress,$existingFhtModuleAdresses)) {
         echo "$binadress:$fhz:$name
";
         $instance = IPS_CreateModuleInstance($fhtguid);
         $xmlstring = IPS_GetInstanceSettings($instance);
         $xmlarray = $xml->GetArray($xmlstring);
         $xmlarray["ID"]["UniqueID"] = $fhtguid;
         $xmlarray["ID"]["ModuleName"] = "FHT";
         $xmlarray["ID"]["ModuleType"] = 3;
         $xmlarray["ID"]["GUI"]["X"] = 0;
         $xmlarray["ID"]["GUI"]["Y"] = 0;
         $xmlarray["ID"]["Settings"]["DeviceAdress"]=$binadress;
         $temp=explode("\\",$level);
         $varprefix="";
         foreach($temp as $key) {
            $varprefix.=strtolower(substr($key,0,1))."_";
         }
         foreach($varnames as $key => $value) {
            $varname=$varprefix.$adress."_".$value;
            if(!IPS_VariableExists($varname)) {
               IPS_CreateVariable($varname,$vartypes[$key]);
            }
            LOC_SetLocation_Variable($varname,"IP-SYMCON\\$level\\$name");
            $xmlarray["ID"]["Settings"][$key]=$varname;
         }
         print_r($xmlarray);
         $xmldata=$xml->SetArray($xmlarray);
         $result=IPS_SetInstanceSettings($instance,$xmldata);
         $result2=LOC_SetLocation_InstanceID($instance,"IP-SYMCON\\$level\\$name\\$name");
         IPS_ConnectModuleInstances($instance,$fhzmodules[$fhz]);
         IPS_ConnectModuleInstances($fhzmodules[$fhz],$instance);
      }
   }
}
/*print_r($existingFhtModules);
print_r($data);*/

?>