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:
#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:
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:
sensor_diag.xml:
#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):
Zeilen sollen in "normal" und "full" enthalten sein, darinn soll eine zeile nicht in "normal" enthalten sein:
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.
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

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 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>
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"
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_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"
Code:
#cvb_config_include configs="normal, full" .... #cvb_config_exclude configs="normal" .... #cvb_config_exclude_end .... #cvb_config_include_end

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.
Kommentar