Ankündigung

Einklappen
Keine Ankündigung bisher.

CometVisu Config Tool "CV Builder"

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    CometVisu Config Tool "CV Builder"

    Jetzt möchte ich hier mal mein Tool "CV Builder" vorstellen. Das Tool dient hauptsächlich dazu, die Config-Dateien für die CometVisu aus mehreren Dateien zu generieren.
    Ich habe das Tool geschrieben, um meine CV-Config übersichtlich zu halten. Neben dem "Include" gibt's noch ein paar mehr Features, die ich nachfolgend vorstelle.
    Prinzipiell macht das Tool nix anderes als Textersetzung, es arbeitet also auf reinem Text und nicht auf XML-Basis.
    Das Tool entstand als Helfer für mich, deshalb nicht zu viel erwarten Es gibt bestimmt einige Bugs und undefiniertes bzw. mir unbekanntes Verhalten, wenn man's drauf anlegt.

    Zuerstmal, hier gibt's das Tool (Windows-EXE): http://files.chris-a.de/cv_builder140918.zip

    Vorraussetzung ist das .NET-Framework V4.0.
    Es ist eine Komandozeilen-Anwendung und erwartet eigentlich keine Eingaben (am Ende kann es per R-Taste neu gestartet werden, oder per anderer Taste beendet, das wars.).

    Als Start-Argumente hätte es gerne:
    1. den Dateinamen des Root-XMLs/der Quelldatei (wobei die Endung bzw. der Inhalt egal ist - es könnte mit beliebigen Dateien arbeiten, nicht nur mit CV-XMLs)
    2. den Ordnerpfad zu den genutzten Dateien
    Z.B. so:
    cv_builder.exe visu_haus.xml D:\Visu

    Es gibt einige Text-Ausgaben während der Verarbeitung, die aber nur bedingt hilfreich sind, wenn man etwas falsch gemacht hat... Da heißt es dann, die letzten Änderungen nochmal genau prüfen

    Das Tool verarbeitet alle Zeilen in der angegebenen Quell-Datei (und den inkludierten oder den templates), die mit # beginnen. In den ausgegebenen Config-Dateien sind alle diese Zeilen weg!
    -> So kann man auch Kommentare hinterlegen

    Es sollte in der Quelldatei zu Beginn (Vor dem XML, wenn überhaupt vorhanden) folgendes angegeben werden:

    #cvb_template_dir

    #cvb_template_dir dir="ZZZZ"

    ZZZZ Gibt das Unterverzeichniss an, indem die template files abgelegt werden. Könnte auch weggelassen werden, wenn man keine Templates nutzt (bin mir nicht sicher, was passiert).
    Wenn Also als Order D:\Visu übergeben und #cvb_template_dir dir="templates" definiert wurde, werden Templates im Verzeichniss D:\Visu\templates gesucht.
    Sollte nur einmal angegeben werden.

    #cvb_config_definition

    #cvb_config_definition name="ZZZZ" output="XXXX"

    Mindestens eine Konfiguration sollte angegeben werden.
    Der Name ZZZZ gibt einen Namen für die Konfiguration an, welcher für den config_include/exclude Mechanismuss (siehe weiter unten) gebraucht wird.
    XXXX gibt den Namen der Ausgabe-Datei, die erstellt wird, an. Diese wird immer ohne Rückfrage überschrieben.

    Es können belieb viele Konfigurationen angegeben werden.

    Beispiel:

    #cvb_config_definition name="normal" output="visu_config_haus.xml"
    #cvb_config_definition name="full" output="visu_config_haus_full.xml"

    #cvb_constant (Optional)

    #cvb_constant name="ZZZZ" value="XXXX"

    Hiermit können Konstanten (ZZZZ) angegeben werden, treten diese in der Quelldatei, einer inkludierten Datei oder einem Template auf, werden sie bei der Verarbeitung durch den angegeben Wert (XXXX) ersetzt.
    Beim Benutzen von Konstanten muss der Name mit $$ begonnen und abgeschlossen werden.

    Beispiel:

    #cvb_constant name="DefaultGroupColspan" value="6"

    Verwendung im XML

    <layout colspan="$$DefaultGroupColspan$$"/>

    Wird zu

    <layout colspan="6"/>

    #cvb_post_action (Optional)

    #cvb_post_action execute="xxxx" arguments="yyyy"

    Ermöglicht das ausführen eines Programms/scripts nachdem die Config-XMLs generiert wurden. Als "execute" (xxxx) wird der Pfad zur ausführbaren Datei angegeben, als arguments (yyyy) können argumente Übergeben werden.

    Beispiel:

    #cvb_post_action execute="D:\WinSCP\WinSCP.exe" arguments="/console /script=D:\WinSCP\winscp_script.txt"

    Hier rufe ich WinSCP auf und übergebe ihm ein Script, mit welchem meine Configs aufs Wiregate übertragen werden.
    Da das Tool per R-Taste nach abschluss immer neugestartet werden kann, kann ich es so beim Arbeiten an der Visu im Hintergrund laufen lassen, und muss um Änderungen zu testen nur zum Tool wechseln und per R-Taste die Verarbeitung neu anstoßen. Anschließend sind meine Configs auf dem Wiregate aktualisiert.

    Nun folgen Anweißungen, die beliebig verteilt werden können:

    #cvb_include

    #cvb_include name="ZZZZZ"

    Um die Config auf mehrere Dateien aufzuteilen, gibt's den Include Mechanismuss. Er funktioniert so, dass der Inhalt der inkludierten Datei (ZZZZZ) einfach anstelle der Anweißung eingefügt wird.
    Inkludierte Dateien können wiederum Dateien inkludieren, also kann man die Dateien schön entsprechend der Visu-Struktur aufbauen (z.B. Haupt-XML inkludiert Stockwerk-XML inkludiert Zimmer-XML).
    Man sollte aufpassen, dass man keine Schleifen einbaut.

    Beispiel aus meiner Visu:

    Code:
            
            <pages design="metal" enable_column_adjustment="true" lib_version="5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../visu_config.xsd">
              <meta>
                    #cvb_include name="mappings.xml"
                    #cvb_include name="stylings.xml"
                    #cvb_include name="plugins.xml"
              </meta>
              <page name="Übersicht" showtopnavigation="false" showfooter="false" shownavbar-left="false">
                    #cvb_include name="top_navbar.xml"        
                    #cvb_include name="cat_allgemein.xml"    
                    #cvb_include name="cat_eg.xml"        
                    #cvb_include name="cat_og.xml"
                    #cvb_include name="cat_außen.xml"
                    #cvb_include name="cat_garage.xml"
                    #cvb_include name="cat_audio.xml"
                    #cvb_include name="cat_tv.xml"
                    #cvb_include name="cat_technik.xml"
                    #cvb_include name="cat_meldungen.xml"
                    #cvb_include name="cat_gewerke.xml"
              </page>
            </pages>
    #cvb_template

    #cvb_template template_type="ZZZZ" xxxx="YYYY" ....

    Mit der #cvb_template anweißung wird ein Template inkludiert. Als template_type wird der name des xml-files angegeben (ohne Endung .xml), das File muss sich im Unterverzeichniss befinden, dass über cvb_template_dir festgelegt wurde.
    Ich habe das integriert, um schnell Änderungen an vom Layout identischen Elementen umsetzen zu können. Wenn ich z.B. alle Temperatur-Wert-Felder anpassen möchte, muss ich nur das dazugehörige Template ändern, und nicht alle Nutzungs-Stellen.
    Templates können widerrum weitere Templates enthalten, die Parameter können auch "durchgeschliffen" werden (Ein template kann ein Template nutzen, ich nutze das z.B. für ein allgemeines Sensor Template, und dann "wie abgeleitet" ein Temperatur-Sensor-Template, ein Luftfeuchtigkeits-Template etc...)
    Um Parameter im Template zu ersetzen, werden diese einfach an das #cvb_template template_type="ZZZZ" angehängt ( xxxx="YYYY" ) wobei xxxx für den Parameternamen steht und YYYY für den einzusetzenden Wert.

    Beispiel:

    #cvb_template template_type="tuerstatus" name="Wohnzimmer" ga_status="1/3/123"

    Hier wird das Template "tuerstatus" geladen und eingesetzt (tuerstatus.xml). Dabei wird für den Parameter "name" der Wert "Wohnzimmer" und für "ga_status" der Wert "1/3/123" eingesetzt.

    Das dazugehörige Template schaut so aus:

    Code:
            
            <group nowidget="true">
    
            <layout colspan="$$DefaultGroupColspan$$"/>
            
            <text>                                
                <label>??name??</label>
                <layout colspan="5"/>
            </text>
                            
            <info mapping="DoorCloseOpen">
                <layout colspan="1"/>
                <address transform="DPT:1.001" variant="">??ga_status??</address>
            </info>
                        
            </group>
    Die zu ersetzenden Parameter werden einfach mit der Syntax ??parametername?? im Template abgelegt.
    Hier im Beispiel-Template habe ich auch noch eine Konstante verwendet, siehe $$DefaultGroupColspan$$.

    Beispiel für verschachtelte Templates:

    Aufruf/Einbindung:

    #cvb_template template_type="sensor_diag_temp" name="Raumtemperatur" ga_status="1/3/200"


    sensor_diag_temp.xml:

    Code:
            
            #cvb_template template_type="sensor_diag" name="??name??" transform="DPT:9.001" ga_status="??ga_status??" format="%.1f °C"
    sensor_diag.xml:

    Code:
            
            <group nowidget="true">
    
                <layout colspan="$$DefaultGroupColspan$$"/>
    
                <info format="??format??">
                     <layout colspan="6"/>
                     <label>??name??</label>
                     <address transform="??transform??" mode="read">??ga_status??</address>
                </info>
                    
            </group>
    #cvb_config_include
    #cvb_config_include_end
    #cvb_config_exclude
    #cvb_config_exclude_end


    #cvb_config_include configs="xxxx"
    ....
    ....
    #cvb_config_include_end

    Mit #cvb_config_include und #cvb_config_include_end kann ein Bereich abgegrenzt werden, der nur in einer bestimmten Config (xxxx) enthalten sein soll.
    Es können mehrere Configs, mit Komma getrennt, angegeben werden. ( configs="xxxx,yyyy,zzzz" )
    Die Ausgabedatei der Configs, die nicht angegeben wurden, enthalten die abgegrenzten Zeilen nicht.

    #cvb_config_exclude configs="xxxx"
    ....
    ....
    #cvb_config_exclude_end

    Mit #cvb_config_exclude und #cvb_config_exclude_end kann ein Bereich abgegrenzt werden, der nur in einer bestimmten "Config" (xxxx) ausgeschlossen werden soll.
    Es können mehrere configs, mit Komma getrennt, angegeben werden. ( configs="xxxx,yyyy,zzzz" )
    Alle Ausgabedateien der configs, die nicht angegeben wurden, enthalten die abgegrenzten Zeilen.

    #cvb_config_include und #cvb_config_exclude können auch verschachtelt werden. ( weiß nicht ob ich das schon getestet habe? )

    Beispiel:

    Config-Defition (siehe oben):

    Code:
                    
            #cvb_config_definition name="normal" output="visu_config_haus.xml"
            #cvb_config_definition name="full" output="visu_config_haus_full.xml"
            #cvb_config_definition name="min" output="visu_config_haus_min.xml"
    Zeilen sollen in "normal" und "full" enthalten sein, darinn soll eine zeile nicht in "normal" enthalten sein:

    Code:
                
            #cvb_config_include configs="normal, full"
                ....             
                #cvb_config_exclude configs="normal"
                ....            
                #cvb_config_exclude_end
                ....
            #cvb_config_include_end
    Das war dann auch schon alles, was das Tool kann

    Wenn jemand Feature-Wünsche hat, kann er sie gerne äußern. Ich muss aber dazu sagen, dass ich nicht versprechen kann, ob/wann ich an dem Tool weiterarbeite.
    Für meine momentanen Ansprüche langt's so wie es ist - erstmal muss ich nun meine Visu komplettieren...

    Edith sagt: Jetzt funktioniert der Link.

    #2
    Hallo Chris,

    leider bekomme ich Dein Tool nicht zum laufen. Folgendes Setup:

    Ich habe mir ein Batch-Script geschrieben, welches folgenden Inhalt hat:

    Code:
    cd D:\diverses\cometvisu\config
    dir
    D:\Downloads\cometVISU\cv_builder140918\cv_builder.exe visu_config_swf_separated.txt D:\diverses\cometvisu\config\configParts
    Wenn ich dieses Batch-Script starte, erhalte ich folgenden Output:

    Code:
    D:\Downloads\cometVISU>cd D:\diverses\cometvisu\config
    
    D:\diverses\cometvisu\config>dir
     Datenträger in Laufwerk D: ist DATA
     Volumeseriennummer: A6E5-467C
    
     Verzeichnis von D:\diverses\cometvisu\config
    
    22.09.2014  22:20    <DIR>          .
    22.09.2014  22:20    <DIR>          ..
    22.09.2014  22:20    <DIR>          configParts
    19.06.2014  17:07    <DIR>          demo
    19.06.2014  17:07    <DIR>          media
    19.06.2014  17:07             1'536 structure_custom.js
    19.06.2014  17:07             3'042 visu_config.xml
    22.09.2014  22:14                87 visu_config_swf_separated.txt
                   6 Datei(en),         68'677 Bytes
                   5 Verzeichnis(se),  8'279'957'504 Bytes frei
    
    D:\diverses\cometvisu\config>D:\Downloads\cometVISU\cv_builder140918\cv_builder.exe visu_config_swf_separated.txt D:\diverses\cometvisu\config\configParts
    CV-Builder, Version für die KNX-User-Forum Community, von frankenChris. Stand 18.09.2014
    
    Building cv-config. sourceFile = [visu_config_swf_separated.txt]
    Source file does not exist.
    Die referenzierte Source-Datei ist vorhanden, wie der dir-Output oben zeigt. Warum meint Dein Tool nun Source file does not exist? Das ändert sich auch nicht, wenn ich beim zweiten Parameter den vollen Pfad angebe. Mache ich noch etwas falsch?
    Kind regards,
    Yves

    Kommentar


      #3
      Ich erkenne gerade auch keinen Fehler... darum habe ich mal eben eine Anpassung gemacht, dass der volle Dateipfad der Quelldatei ausgegeben wird, wenn diese nicht gefunden wird. Vielleicht kommen wir der Ursache so auf die Spur. Die neue Version ist hier zu finden: http://files.chris-a.de/cv_builder_140923.zip

      Kommentar


        #4
        Hallo Chris

        Zitat von frankenChris Beitrag anzeigen
        Ich erkenne gerade auch keinen Fehler... darum habe ich mal eben eine Anpassung gemacht, dass der volle Dateipfad der Quelldatei ausgegeben wird, wenn diese nicht gefunden wird. Vielleicht kommen wir der Ursache so auf die Spur. Die neue Version ist hier zu finden: http://files.chris-a.de/cv_builder_140923.zip
        Super, danke. Habe ich eben ausprobiert und das Problem gefunden.


        Zitat von frankenChris Beitrag anzeigen
        Als Start-Argumente hätte es gerne:
        1. den Dateinamen des Root-XMLs/der Quelldatei (wobei die Endung bzw. der Inhalt egal ist - es könnte mit beliebigen Dateien arbeiten, nicht nur mit CV-XMLs)
        2. den Ordnerpfad zu den genutzten Dateien
        Z.B. so:
        cv_builder.exe visu_haus.xml D:\Visu
        Folgendes ist passiert: Der zweite Parameter ist die zu parsende Datei. Diese wird ohne Pfad angegeben, also gehe ich davon aus, dass sie im aktuellen Verzeichnis gesucht wird. Du hast nirgendwo geschrieben, dass sie in dem Verzeichnis liegen muss, welches als dritter Parameter angegeben wird!

        Ich hatte meine Struktur so aufgebaut, dass die Datei des zweiten Parameters auf dem gleichen Folder-Level wie der Folder des dritten Parameters liegt, also so:
        Code:
        cometvisu
         + config
            + configParts
            |  - part1.xml
            |  - part2.xml
            - visu_config_swf_separated.txt
        Nachdem ich die Datei in den configParts-Ordner hinein geschoben habe, funktioniert es nun.

        Man kann sich jetzt wohl drüber streiten, ob das nicht anders gelöst werden kann. Mein Vorschlag: Da die Datei im angegebenen Folder gesucht wird, macht es keinen Sinn, das als zwei Parameter zu übergeben. Also würde ich die beiden Parameter zu einem Parameter zusammendampfen und die Konfig-Datei mit vollem Pfad übergeben. Dann kannst Du die referenzierten Files einfach im Pfad zu dieser Datei suchen und es gibt nur noch einen Parameter für das Executable.

        Weiteres habe ich aber noch nicht getestet, kommt erst heute Abend dann...
        Kind regards,
        Yves

        Kommentar


          #5
          Hi,

          gut dass es nun funktioniert. Ich werde das wie von dir vorgeschlagen bei Gelegenheit ändern.

          Kommentar


            #6
            Hallo Chris,

            bei mir geht's nun mit der Visu weiter. Hast Du den kleinen Umbau schon machen können?
            Kind regards,
            Yves

            Kommentar

            Lädt...
            X