Hallo,
in der Vergangenheit hat es mich oft gestört, dass ich bei den für die Erstellung der Filter-Adressen notwendigen Geräte einen lieblosen Dummy verwenden musste, bei dem die KOs keinerlei Zusammenhang haben.
Daher habe ich nun auf Basis des Weinzierl BAOS generic Dummy Geräts einen CSV Export geschrieben. Ihr benötigt dafür KEIN physikalisches Gerät von Weinzierl, nur die Applikation und die DCA.
Produktseite: KNX IP BAOS 774
Applikation: https://www.weinzierl.de/images/download/products/774/Weinzierl-774-KNX-IP-BAOS-5263-ETS4.zip
DCA: https://www.weinzierl.de/images/download/products/dca/baoscsvimporter/Weinzierl_DCA_Baos_Csv_Importer_1.1.0.etsapp
Ihr startet in IP-Symcon im Editor das u.s. Script. Den dann angezeigten Text kopiert ihr in ein ANSI codiertes Textdokument (Dateiendung sicherheitshalber .csv) und importiert es mit der DCA.
Hierfür im ersten Schritt Applikation in den ETS Katalog importieren und die DCA zu den Apps hinzufügen (in der Übersicht der verfügbaren Apps [ETS-Übersicht → rechts unten] gibt es das grüne Plus.
Im neuen Gerät auf DCA und dort auf „CSV zu Vorschau“. Danach auf „Vorschau zu“.
Fertig ist das Dummy Gerät.
In der ersten Version gibt es noch kein Möglichkeit die verwendete Objekt ID updatefest beizubehalten. Daher sollte man es noch mit vorsicht nutzen. Wenn es ein breites Interesse an diesem Script gibt, könnte man es vielleicht dahingehend erweitern (in einem Beschriebungsfeld o.ä. die ETS KO-Nr. speichern).
Es wäre ebenso denkbar das Script „rückwärts“ zu verwenden und mit einem KNX Konfiguration in IP-Symcon zu verbinden.
<?php
function compact_name($name){
$find = array('Licht', 'Beleuchtung','beleuchtung','Temperatur');
$repl = array('Li','Bel', 'bel', 'Temp');
if(mb_strlen($name)>20){
$name = str_replace($find,$repl,$name);
}
if(mb_strlen($name)>20){
$name = str_replace(" ","",$name);
}
return substr($name,0,20);
}
$gatewayIDs = IPS_GetInstanceListByModuleID("{1C902193-B044-43B8-9433-419F09C641B8}");
$instanceIDs = IPS_GetInstanceList();
$rootname = IPS_GetObject(0)['ObjectName'];
$j=1;
foreach($gatewayIDs as $gatewayID) {
print "Csv version;1.1;;;;\n";
print "Project name;".$rootname.";;;;\n";
print "Device type;".IPS_GetObject($gatewayID)['ObjectName'].";;;;\n";
print "Device name;IP-Symcon;;;;\n";
print ";;;;;\n";
print "Type;ID;DPT;Description;Addr/Val;Flags\n";
foreach($instanceIDs as $instanceID) {
$i = IPS_GetInstance($instanceID);
if($i['ConnectionID'] == $gatewayID) {
if(strpos($i['ModuleInfo']['ModuleName'], "DPT") !== false) {
//print_r(IPS_GetConfiguration($instanceID));exit;
$ga = IPS_GetProperty($instanceID, "Address1")."/".IPS_GetProperty($instanceID, "Address2")."/".IPS_GetProperty($instanceID, "Address3");
$dimension = IPS_GetProperty($instanceID, "Dimension");
$name = IPS_GetObject($instanceID)['ObjectName'];
// Type;ID;DPT;Description;Addr/Val
// Dimension
$dp = str_replace(
array("KNX "," "),
array("","-"),$i['ModuleInfo']['ModuleName']
) ;
if($dimension!="0"){
$dp = str_replace("DPT","DPST",$dp).".".sprintf("%03s",$dimension);
}
// CRWTUI
$flags = "C"; /* Communication - Deutsch: Kommunikation - grundsätzlich aktiv */
if(IPS_GetProperty($instanceID, "CapabilityTransmit")){
$flags.="R"; /*Antwortet auf Leseanfragen */
}
if(IPS_GetProperty($instanceID, "CapabilityReceive")){
$flags.="W"; /*Empfange Wertänderungen vom Bus */
}
if(IPS_GetProperty($instanceID, "CapabilityWrite")){
$flags.="T"; /*send a GroupValueWrite */
}
if(IPS_GetProperty($instanceID, "CapabilityReceive")){
$flags.="U"; /*Empfange Wertänderungen vom Bus */
}
if(IPS_GetProperty($instanceID, "CapabilityRead")){
$flags.="I"; /*Darf Leseanfragen stellen */
}
print "DP;".$j.";".$dp.";".compact_name($name).";".$ga."";
$mapping = IPS_GetProperty($instanceID, "Mapping");
$map = json_decode($mapping,true);
foreach($map as $mapitem){
print ",".$mapitem['Address1'] . "/".$mapitem['Address2'] . "/".$mapitem['Address3']."";
}
print ";".$flags."\n";
$j++;
}
}
}
}
?>