Script zur Erstellung eines Dummy Geräts für Filtertabellen auf Weinzierl BAOS Basis

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

Über eine Rückmeldung, ob das Script mal jemand getestet hat oder ob diese Idee der dynamischen Dummy Erstellung überhaupt nicht sinnvoll ist, würde ich mich freuen.

Hallo,
ich habe heute mal wieder einige Gruppenadressen in die Linienkoppler setzen müssen und dabei dieses Script erneut verwendet. Dabei fiel mir auf, dass ich hier weiterhin keine Rückmeldung erhalten habe. Wie löst ihr das Problem denn derzeit? Ihr pflegt doch nicht ernsthaft eine der Jung/Gira/Theben/Siemens Dummy Applikationen per Hand?

Gruß
Tobias

Ich mache es per Hand. Das ist einmal bei Erstellung des Projektes ne halbe Stunde Arbeit und wenn man im Nachgang noch später etwas hinzufügt, ist es auch in 30 Sekunden erledigt.

Es gibt ja die App, die das kann. Habe bisher aber noch keine Lust gehabt, sie zu kaufen.

Welche App magst du kaufen? Die Weinzierl lädt man entweder über den KNXA Store ‚aka kostenloser Kauf‘ oder direkt auf der Weinzierl Seite (hatte ich auch verlinkt).

Ich habe hier ein Projekt, welches nach und nach wächst. Das immer per Hand zu machen, wäre mir irgendwie zu blöd.

@paresy wie gewünscht, hole ich den Beitrag nochmal hoch. Ggf. habe ich irgendwo noch eine verbesserte Version des Scripts laufen.

Hi, wo bekommt man die App her? Der Link ist tot…

Danke!

Auf der Produktseite zum 774 unter Download Weinzierl BAOS CSV Importer

1 „Gefällt mir“

Danke!
Bei mir werden aber leider nicht alle GA´s exportiert.
An was kann das liegen?

z.B. die 3/1/139

Und einige weitere. Sie erscheinen nicht in der csv Datei…

Update: Doch in der csv-Datei:

Gibt es vielleicht ein GA Limit? Ich habe vorher wieder alle GA´s gelöscht (vor dem Update)

Kann aber auch an dem liegen, das kommt jedesmal nach dem Import „Preview to Project“

Im Dummy erscheinen sie nicht:

lg

Kann es sein, dass du das Script ‚falsch herum‘ verwendest? Der aktuelle Stand (auch wenn ich das bei Interesse gerne ändern würde) exportiert die GAs aus Symcon in die ETS. Man muss etwas fummlig

  • die Kodierung der CSV anpassen (default ist idr utf-8, z.B. mit notepad als ANSI kodieren)
  • Die CSV dann in der ETS DCA importieren
  • CSV zu Vorschau → ist die Vorschau korrekt?
  • Vorschau zu (Projekt) → jetzt erscheinen die GAs an KOs innerhalb des Dummy-Moduls
1 „Gefällt mir“

Ja, habe ich genau so gemacht.

Hab jetzt diese eine Zeile gelöscht. Ich probiers gerade aus.

Das ist die Hardware:

Hauptlinie das enertex IP GW + das Dummy
Linie 1 Koppler
Linie 2 Koppler

Die Filtertabelle des enertex Ip Router sieht so aus ?

Gehts ohne die eine Zeile?

Ja, aber es fehlen noch andere. Mir kommt vor alle die einen „Doppeleintrag“ haben

Nächster Patient:

3/1/144

Weinzierl Dummy

Sehe ich das richtig, in der CSV sowie in der DCA Vorschau steht es korrekt? Übernommen ins Projekt wird es dann nicht korrekt?

Ich fürchte im ersten Moment, dass ich da nichts tun kann.

Was mich noch mehr Interssiert: Hast du den Eindruck, dass der Export Symcon zu CSV dem entspricht, was du in Symcon abgebildet hast?

Soweit ich das sehen kann JA.

Ich würde die CSV mal an Weinzierl senden.

Ich merke gerade, das sehr viele KO nicht funktionieren. Alle Raffstore z.B.
Das hat so leider keinen Sinn. Werde wieder alle LK auf Durchzug stellen…

:expressionless:

Hast du die CSV mal an Weinzierl geschickt? Selbst wenn es dir nicht (mehr) hilft, sorgt es vielleicht trotzdem dafür, dass sie die Applikation verbessern.

Denkst du, das es an der Applikation hängt?
Ich habe nun wieder alle LK und den Router auf Nicht filtern gestellt. Das hat so leider nicht funktioniert bei mir…