ich bin gerade dabei, meine CCU-Programme aufzuräumen und zu überarbeiten und stehe dabei vor einer Grundsatz-Frage:
Ist es besser für jedes einzelne Gerät eines Gewerks (z.B. Heizungsthermostat) ein dediziertes Programm vorzuhalten, das konkret und fest "verdrahtet" nur dieses eine Gerät behandelt? Oder ist es besser, ein "übergreifendes" Programm zu implementieren, das auf alle Geräte eines Gewerks reagiert und in einem entsprechenden Script dann flexibel das auslösende Gerät dynamisch behandelt?
Als Beispiel mag mal das Auslesen der Ventilposition von Heizungsthermostaten und Speichern in einer entsprechenden Systemvariablen dienen.
Variante 1 - Viele Einzel-Programme - 1 je Thermostat
Das Script Programm ist auf den 1. Blick schön übersichtlich und man kann auch relativ einfach nachvollziehen was das Programm tut. Es gibt aber auch vieles, was mir an der Lösung nicht gefällt. So ist diese Variante mit sehr viel Klickaufwand verbunden (man muss das ja für jedes Thermostat erneut zusammen basteln).
Vorteile:
- Einfach zu verstehen und zu erstellen (so wie hier kommt man u.U. ohne HM-Script aus)
- Flexibel - da es für jedes Thermostat eine separates Programm gibt, können Sonderfälle individuell berücksichitgt werden. So ist in dem oben gezeigten Beispiel die Systemvariabel gar nicht dem Kanal des auslösenden Datenpunkts zugeordnet, sondern der virtuellen Heizungsgruppe!
- Wenig Vorbedingungen - es müssen keine Nomenklaturen oder ähnliches eingehalten werden
- Einfache De-/Aktivierung einzelner Geräte-Programme per Häckchen
- Einfacheres "Debugging" - Einzelner Trigger und Zeitstempel der letzten Ausführung.
- Vielzahl von gleichen Programmen erschwert die Übersicht in der CCU-Programmübersicht
- Hoher Wartungsaufwand - bei einer grundlegenden Änderung der Logik muss das in x Programmen separat nachgezogen werden
- Hohe Fehleranfälligkeit - die Menge der an sich gleichen Programm erhöht die Chance auf einen Flüchtigkeitsfehler
- Schlechte Skalierbarkeit - kommt ein neues Thermostat hinzu, muss eine neues Programm angelegt werden
Vorteile:
- Hohe Übersicht in der CCU-Programmübersicht
- Geringer Wartungsaufwand - 1 zentrale Anlaufstelle für grundlegende Änderung an der Logik
- Bessere Skalierbarkeit - kommt ein neues Thermostat hinzu, muss eine nur eine Eingangsbedingung im bestehenden Programm ergänzt werden
- Definierte Prämissen erforderlich - Damit das Master-Script im Dann-Teile die richtige Systemvariable finden kann, der es die Ventilposition des auslösenden Datenpunkts zuordnen soll, müssen bestimmte Regeln definiert und eingehalten werden. Z.B. dass die entsprechende Systemvariable einem bestimmten Namensschema folgt und/oder dem selben Kanal wieder auslösende Datenpunkt zugeordnet ist.
- Das Master-Script erzeugt höhere Last - dynamische Ermittlung von Datenpunkten, Error-Handling, ...
- Aufwendigeres Debugging - bei mehreren Triggern ist unklar, wer das Programm ausgelöst hat bzw. es bedarf einer zusätzlichen Logging Funktion im Script.
Momentan habe ich bei mir die meisten Aufgabenstellungen gemäß Variante 1 gelöst. Aus vielerlei (zugegeben: auch aus ästhetischen) Gründen favorisiere ich aber Variante 2.
Mich würde interessieren, ob es aus Eurer Sicht weitere Vor-/Nachteile für die jeweilige Variante gibt. Insbesondere eine Einschätzung was die Systemlast bei Variante 2 betrifft. Ist das vernachlässigbar oder kann das zum Showstopper werden.
gruß anderl