Hi allerseits,
ich wollte mal vorstellen, was ich bei mir alles gemacht habe, um bei sh.py den Überblick zu behalten. Das ist jetzt etwas länger
Ich habe ab ca. 600 Items festgestellt, dass quasi jede Änderung in irgendwelchen .conf-Files dazu geführt hat, dass durch Seiteneffekte irgendetwas anderes kaputt gegangen ist. Da dieses erst beim starten von sh.py festgestellt werden kann (wenn es schlecht läuft, auch erst viel später durch Laufzeitfehler), kann es passieren, dass es sehr lange dauert, bis sh.py wieder richtig läuft.
Mein Ziel war es, die Down-Zeit von sh.py möglichst kurz zu gestalten, so dass man möglichst viele Fehler vorher rausbekommt. Ferner sollte das Editieren von .conf-Files auch einfacher und übersichtlicher werden.
Herausgekommen ist ein .conf-Generator, der folgende Features hat:
Es gibt auch einige Nachteile bzw. Voraussetzungen:
Mehr fällt mir derzeit nicht ein... vielleicht später...
Wie bin ich vorgegangen: Erstmal wollte ich einfacher editieren können. Auf json-Schema kam ich durch meine Arbeit, damit kann man schon mal die syntaktische Korrektheit verifizieren, bevor man etwas auf den smarthome server deployed. Natürlich ist json als Eingabe auf den ersten Blick aufwändiger zu schreiben als die .conf-Files, und mit einem notepad-Ansatz hätte ich hier wohl auch nicht weiter gemacht. Aber in Visual Studio 2015 (auch in der kostenlosen Version) ist ein sehr guter json-Editor, der schemabasierte Eingaben erlaubt und all die Features hat, die man von einem komfortablen Editor erwartet: Syntax Highlighting, Code completion, Outline, Verifikation bei editieren. Es ist unglaublich, wie wenig man tippen muss, um korrektes json zu erhalten.
Da die config-Files jetzt in json da waren, brauchte ich einen Konverter json2conf, der mir .conf-Files erzeugt. Da ich sowieso konvertieren musste, konnte ich gleich relative Adressierung von Items einbauen. Damit konnte man schnell mal einen Block von A nach B kopieren und die Item-Adressen stimmten immer noch. Sobald relative Adressierung da war, habe ich sehr schnell gemerkt, dass man sich dabei genau so oft vertut wie bei absoluten Adressen - nur eben bei anderen Editier-Aktionen. Also habe ich eine Verifikation eingebaut, die alle aufgelösten relativen Adressen auf Existenz überprüft und als Fehler meldet. Von hier war es dann nur ein kurzer Weg, die Item-GA rauszufinden und mit der ETS zu vergleichen.
Mir ist bei meinen .conf-Files aufgefallen, dass sich bestimmte Item-Gruppen immer wieder wiederholen. Rollos, Temperatur, Luftfeuchte, Licht und Präsenz habe ich immer! Teilweise kommen noch Sachen wie Lüftung, Audio, Video, Tablet hinzu, die in bestimmten (aber mehreren) Räumen sind. Und wenn man schon einen Generator mit einer relativen Adressierung hat, kann man auch sich wiederholende Item-Gruppen generieren lassen - bei mir haben sie sich primär durch die KNX-Adressen und die Item-Namen unterschieden. Also habe ich eine kleine Template-Engine geschrieben, die ein Template (Datei mit einer Item-Struktur, so gesehen ein Teil-Conf-File) einliest, darin die KNX-GA ersetzt und in die aktuelle Datei einsetzt. Das Ganze geht rekursiv (Template in Template). In der Ziel-Datei kann man jedes Item, das aus einem Template kommt, überschreiben oder löschen. So kann man im Template die Grundfunktion haben, der Template-Verwender kann aber diese Grunfunktion ändern oder erweitern (oder auch Teile davon löschen, das ist aber noch nicht durchgängig).
Tja, das wars. Mein Hauptziel ist erreicht: Wenn ich alle Editier-Fehler im json bereinigt habe, dann noch alle Fehler, auf die mich der Konverter hinweist, dann kann ich die generierten .conf-Files auf den smarthome server deployen, kurz
machen und das System läuft. Natürlich bewahrt mich das nicht vor Logik-Fehlern, falschen evals etc. Aber es bewahrt mich vor Tippfehlern und falschen Item-Referenzen, was gerade bei Kopieroperationen viel ausmacht.
Ein anderer Vorteil kommt durch das Templating. Ich bin inzwischen bei ca. 2000 Items, alle .conf-Files zusammen haben 11048 Zeilen und werden aus gerade mal 3601 Zeilen json generiert.
Trotz 3.5 mal mehr Items haben sich die Probleme durch fehlerhaftes Deployment drastisch reduziert und die Übersicht ist (meiner Meinung nach) stark gestiegen.
Ich bin mir nicht sicher, ob es Interesse für diese sicherlich sehr individuelle Lösung gibt, ich könnte mir aber vorstellen, dass das json-Schema schon einen Wert hat - und wenn jemand einen Konverter in einer anderen Sprache will, in .NET sind das gerade mal 700 Zeilen code, das könnte man dann ja portieren. Neben Visual Studio als schemabasierten json-Editor soll das auch Visual Studio Code unterstützen, das konne ich aber mangels aktuellem Linux nicht ausprobieren.
In Zukunft werde ich den Generator noch dahingehend erweitern, dass die SmartVisu-Seiten auch noch aus dem json generiert werden. Derzeit nutze ich die Standard-Generierung von sh.py, aber die ist mir zu eingeschränkt und ich habe sie auch schon an 2 Stellen erweitern müssen... im eingenen Coding geht so was dann besser und schneller.
Bei Interesse können wir hier im Thread diskuttieren, wie man das Ganze verfügbar machen könnte und wie die (nicht vorhandene) Doku aussehen müsste.
Ich habe auch ein Video vom Editing aufgenommen, ich bekomme es aber hier nicht hochgeladen, da zu groß (6 MB, man darf nur 1 MB). Deswegen hier: https://drive.google.com/file/d/0B0H...ew?usp=sharing
Gruß, Waldemar
ich wollte mal vorstellen, was ich bei mir alles gemacht habe, um bei sh.py den Überblick zu behalten. Das ist jetzt etwas länger

Ich habe ab ca. 600 Items festgestellt, dass quasi jede Änderung in irgendwelchen .conf-Files dazu geführt hat, dass durch Seiteneffekte irgendetwas anderes kaputt gegangen ist. Da dieses erst beim starten von sh.py festgestellt werden kann (wenn es schlecht läuft, auch erst viel später durch Laufzeitfehler), kann es passieren, dass es sehr lange dauert, bis sh.py wieder richtig läuft.
Mein Ziel war es, die Down-Zeit von sh.py möglichst kurz zu gestalten, so dass man möglichst viele Fehler vorher rausbekommt. Ferner sollte das Editieren von .conf-Files auch einfacher und übersichtlicher werden.
Herausgekommen ist ein .conf-Generator, der folgende Features hat:
- Erzeugt korrekte und gut formatierte .conf-Files
- Erkennt einige Fehler bereits beim editieren:
- Tippfehler bei Item-Eigenschaften
- Formatfehler bei Werten (z.B. dass die KNX-GA korrekt geschrieben ist)
- Eingabeunterstützung (code completion) für bekannte Item-Eigenschaften (auch für einige plugins)
- Eingabeunterstützung für aufzählbare Werte (true, false, KNX-DPT, Item-type etc.)
- Kurzdoku (als Tooltip) für jede bekannte Item-Eigenschaft (leider nicht auch für die Werte von enums, das kann json-Schema noch nicht)
- Überprüfung von Item-Referenzen (ist noch unvollständig)
- Relative Adressierung von Items
- Outline (zusammenklappen von Items mit allen Unteritems - für Übersichtlichkeit)
- Templates (bestimmte Item-Kombinationen können als Template abgelegt werden und dann von mehreren Stellen referenziert werden, z.B. für Rolladen, Lüftung, Heizung etc)
- Die Angaben in Templates können durch lokale Werte immer übersteuert werden
- Es können auch Templates in Templates genutzt werden
- Mehrzeilenfähigkeit für einige Eigenschaften (z.B. sv_widget, eval_trigger, ...)
- Wenn ein ETS4 Projekt vorliegt, dann erzeugt mein Konverter noch 4 Info-Files
- Alle GA aus der ETS mit deren Beschreibung
- Alle GA aus allen .conf-Files mit dem Item-Pfad zur GA
- Alle GA, die in der ETS sind, aber in smarthome fehlen
- Alle GA, die in smarthome sind, aber in der ETS fehlen
- Alles ist nach GA sortiert und lässt sich gut vergleichen
Es gibt auch einige Nachteile bzw. Voraussetzungen:
- Nur unter Windows lauffähig
- Die Editier-Features sind nur mit einem Schemabasierten json-Editor zu nutzen, mir ist derzeit nur der Visual Studio Editor bekannt
- Stark gewachsenes Coding, sicherlich so nicht publizierbar (da kann man aber was dran machen...)
- Unvollständig (sollte um User- und Plugin-Eigenschaften erweiterbar sein)
- Um die überprüfbarkeit durch ein json-Schema zu ermöglichen, musste ich die Möglichkeiten in den .conf-Files einschränken
- Alle Items müssen mit einem Großbuchstaben beginnen
- Alle Eigenschaften mit einem kleinbuchstaben
- Bei Templates werden derzeit nur KNX-Adressen angepasst, weiteres wäre denkbar, habe ich aber noch nicht gebraucht
- Für das Templating braucht man eine sehr regelmäßige GA-Struktur in der ETS (ist nicht wirklich ein Nachteil, aber eine Voraussetzung)
- es gibt derzeit keinerlei Integration mit den Logik-Files, das ist noch immer eine große Fehlerquelle
- Keinerlei Doku - das müsste man definitiv auch ändern!
Mehr fällt mir derzeit nicht ein... vielleicht später...
Wie bin ich vorgegangen: Erstmal wollte ich einfacher editieren können. Auf json-Schema kam ich durch meine Arbeit, damit kann man schon mal die syntaktische Korrektheit verifizieren, bevor man etwas auf den smarthome server deployed. Natürlich ist json als Eingabe auf den ersten Blick aufwändiger zu schreiben als die .conf-Files, und mit einem notepad-Ansatz hätte ich hier wohl auch nicht weiter gemacht. Aber in Visual Studio 2015 (auch in der kostenlosen Version) ist ein sehr guter json-Editor, der schemabasierte Eingaben erlaubt und all die Features hat, die man von einem komfortablen Editor erwartet: Syntax Highlighting, Code completion, Outline, Verifikation bei editieren. Es ist unglaublich, wie wenig man tippen muss, um korrektes json zu erhalten.
Da die config-Files jetzt in json da waren, brauchte ich einen Konverter json2conf, der mir .conf-Files erzeugt. Da ich sowieso konvertieren musste, konnte ich gleich relative Adressierung von Items einbauen. Damit konnte man schnell mal einen Block von A nach B kopieren und die Item-Adressen stimmten immer noch. Sobald relative Adressierung da war, habe ich sehr schnell gemerkt, dass man sich dabei genau so oft vertut wie bei absoluten Adressen - nur eben bei anderen Editier-Aktionen. Also habe ich eine Verifikation eingebaut, die alle aufgelösten relativen Adressen auf Existenz überprüft und als Fehler meldet. Von hier war es dann nur ein kurzer Weg, die Item-GA rauszufinden und mit der ETS zu vergleichen.
Mir ist bei meinen .conf-Files aufgefallen, dass sich bestimmte Item-Gruppen immer wieder wiederholen. Rollos, Temperatur, Luftfeuchte, Licht und Präsenz habe ich immer! Teilweise kommen noch Sachen wie Lüftung, Audio, Video, Tablet hinzu, die in bestimmten (aber mehreren) Räumen sind. Und wenn man schon einen Generator mit einer relativen Adressierung hat, kann man auch sich wiederholende Item-Gruppen generieren lassen - bei mir haben sie sich primär durch die KNX-Adressen und die Item-Namen unterschieden. Also habe ich eine kleine Template-Engine geschrieben, die ein Template (Datei mit einer Item-Struktur, so gesehen ein Teil-Conf-File) einliest, darin die KNX-GA ersetzt und in die aktuelle Datei einsetzt. Das Ganze geht rekursiv (Template in Template). In der Ziel-Datei kann man jedes Item, das aus einem Template kommt, überschreiben oder löschen. So kann man im Template die Grundfunktion haben, der Template-Verwender kann aber diese Grunfunktion ändern oder erweitern (oder auch Teile davon löschen, das ist aber noch nicht durchgängig).
Tja, das wars. Mein Hauptziel ist erreicht: Wenn ich alle Editier-Fehler im json bereinigt habe, dann noch alle Fehler, auf die mich der Konverter hinweist, dann kann ich die generierten .conf-Files auf den smarthome server deployen, kurz
Code:
smarthome.py -s smarthome.py -v
Ein anderer Vorteil kommt durch das Templating. Ich bin inzwischen bei ca. 2000 Items, alle .conf-Files zusammen haben 11048 Zeilen und werden aus gerade mal 3601 Zeilen json generiert.
Code:
admin@smarthome:/usr/smarthome/items$ cat *.conf | wc -l 11048 admin@smarthome:/usr/smarthome/items$ cat *.json | wc -l 3601
Ich bin mir nicht sicher, ob es Interesse für diese sicherlich sehr individuelle Lösung gibt, ich könnte mir aber vorstellen, dass das json-Schema schon einen Wert hat - und wenn jemand einen Konverter in einer anderen Sprache will, in .NET sind das gerade mal 700 Zeilen code, das könnte man dann ja portieren. Neben Visual Studio als schemabasierten json-Editor soll das auch Visual Studio Code unterstützen, das konne ich aber mangels aktuellem Linux nicht ausprobieren.
In Zukunft werde ich den Generator noch dahingehend erweitern, dass die SmartVisu-Seiten auch noch aus dem json generiert werden. Derzeit nutze ich die Standard-Generierung von sh.py, aber die ist mir zu eingeschränkt und ich habe sie auch schon an 2 Stellen erweitern müssen... im eingenen Coding geht so was dann besser und schneller.
Bei Interesse können wir hier im Thread diskuttieren, wie man das Ganze verfügbar machen könnte und wie die (nicht vorhandene) Doku aussehen müsste.
Ich habe auch ein Video vom Editing aufgenommen, ich bekomme es aber hier nicht hochgeladen, da zu groß (6 MB, man darf nur 1 MB). Deswegen hier: https://drive.google.com/file/d/0B0H...ew?usp=sharing
Gruß, Waldemar
Kommentar