Grundsatzfrage: Viele Einzelprogramme vs Master-Script

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
anderl1969
Beiträge: 167
Registriert: 15.10.2013, 20:15
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Grundsatzfrage: Viele Einzelprogramme vs Master-Script

Beitrag von anderl1969 » 28.07.2018, 11:32

Hallo Forum,

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
thermostat einzel.JPG
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.
Nachteile:
  • 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
Variante 2 - Ein Programm für alles Thermostate
thermostat alle.JPG
Dieses Script Programm für sich ist schon nicht mehr ganz schön wie bei Variante 1, da hier viel mehr Eingangsbedingungen geprüft werden müssen. In dem schnell von mir zusammengeklickten Beispiel sind's nur 3, aber je nach Installation kämen da noch viel mehr dazu - bei mir wären es aktuell 16 Thermostate. Außerdem sieht man im Dann-Teil nur, dass ein Script ausgeführt wird. Was das dann tatsächlich macht, sieht man auf den ersten Blick nicht.

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
Nachteile:
  • 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.
Fazit
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
Zuletzt geändert von anderl1969 am 28.07.2018, 16:25, insgesamt 1-mal geändert.
CCU - RaspberryMatic 3.73.9.20231130 (OVA) / Proxmox VM + HB-RF-ETH + RPI-RF-MOD
LAN GW 1 - CCU2GW (CCU2)
LAN GW 2 - CCU2GW (CCU2)

LAN GW 3 - HmIP-HAP
LAN GW 4 - HmIP-HAP


NickHM
Beiträge: 3733
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 66 Mal
Danksagung erhalten: 120 Mal

Re: Grundsatzfrage: Viele Einzelprogramme vs Master-Script

Beitrag von NickHM » 28.07.2018, 12:24

Guten Abend

es hat beides Vor und nachteile, die Du schon gut aufgezählt hast.
Ob das Beispiel jetzt so gut geeignet ist ... ? Denn es werden nur SysVar befüllt, was für die CCU unkritisch ist. Es erfolgt keine Reaktion mit Funkverkehr.
Einzelne Programme können einfach per Haken mal deaktiviert werden.
Bei einzelnen Programmen sieht man am Zeitstempel wann sie gelaufen sind und es gibt nur einen Trigger.
Sind mehrere Trigger vorhanden ist unklar, wer das Programm ausgelöst hat bzw. es bedarf einer zusätzlichen Logging Funktion im Script.

Bei Programmen mit Aktionen die Funkpakete aussenden, ist das etwas anders. Zum Beispiel Setzen der Soll Temperatur oder Betriebsmodus.
Bei einem einzigen Masterprogramm wird das Programm gestartet und an alle Heizungen wird die größtenteils unveränderte Solltemperatur übertragen, nur weil sich in einem Zimmer etwas geändert hat. (nur ein Beispiel) Da muss man gut überlegen, wie nur der notwendige Funkverkehr generiert wird.

Es ist also eine Einzelfallentscheidung. Bei der Performance von CCU3 / Raspi würde ich auch kein Problem bei der Wartung vieler Einzelprogramme sehen. Auf der CCU2 nervt die (nicht)Geschwindigkeit da schon ganz schön :(

d3h56r
Beiträge: 192
Registriert: 29.10.2017, 10:23
Hat sich bedankt: 24 Mal
Danksagung erhalten: 4 Mal

Re: Grundsatzfrage: Viele Einzelprogramme vs Master-Script

Beitrag von d3h56r » 28.07.2018, 13:07

Ich habe bei mir „weder–noch“ im Einsatz. Ich bündelte meine Programme über Themenbereiche (z.B. Gartenbewässerung, Heizungssteuerung, Lichtsteuerung (raumweise), ...).
186 Kanäle in 59 Geräten:
1x HM-LC-Sw1-FM, 10x HM-CC-RT-DN, 1x HM-OU-LED16, 2x HM-LC-Sw1-Pl-DN-R1, 18x HM-Sec-SCo, 1x HM-Sec-TiS, 1x HM-LC-Sw1-Pl-CT-R1, 2x HM-LC-Sw2-FM, 5x HM-LC-Bl1PBU-FM, 3x HM-LC-Sw1PBU-FM, 12x HM-RC-2-PBU-FM, 1x HM-ES-PMSw1-Pl, 1x HM-WDS100-C6-O, 1x HmIP-RCV-50

anderl1969
Beiträge: 167
Registriert: 15.10.2013, 20:15
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Re: Grundsatzfrage: Viele Einzelprogramme vs Master-Script

Beitrag von anderl1969 » 28.07.2018, 16:18

NickHM hat geschrieben:
28.07.2018, 12:24
Bei Programmen mit Aktionen die Funkpakete aussenden, ist das etwas anders. Zum Beispiel Setzen der Soll Temperatur oder Betriebsmodus.
Bei einem einzigen Masterprogramm wird das Programm gestartet und an alle Heizungen wird die größtenteils unveränderte Solltemperatur übertragen, nur weil sich in einem Zimmer etwas geändert hat. (nur ein Beispiel)
Das ließe sich aber vermeiden. Das Master-Programm nach meiner Interpretation würde berücksichtigen, wer oder was der Auslöser war und entsprechend Deinem Beispiel nur für das betroffene Thermostat eine neue Soll-Temperatur übertragen.

Deine zusätzlichen Vorteile für Einzelprogramme sind valide und ich erlaube mir, sie in meinem Ursprungsposting zu ergänzen.
d3h56r hat geschrieben:
28.07.2018, 13:07
Ich habe bei mir „weder–noch“ im Einsatz. Ich bündelte meine Programme über Themenbereiche (z.B. Gartenbewässerung, Heizungssteuerung, Lichtsteuerung (raumweise), ...).
Das hört sich aber auch nach einem "Master-Skript" je Themenbereich an, oder was soll ich mir unter "bündeln" vorstellen?


gruß anderl
CCU - RaspberryMatic 3.73.9.20231130 (OVA) / Proxmox VM + HB-RF-ETH + RPI-RF-MOD
LAN GW 1 - CCU2GW (CCU2)
LAN GW 2 - CCU2GW (CCU2)

LAN GW 3 - HmIP-HAP
LAN GW 4 - HmIP-HAP


d3h56r
Beiträge: 192
Registriert: 29.10.2017, 10:23
Hat sich bedankt: 24 Mal
Danksagung erhalten: 4 Mal

Re: Grundsatzfrage: Viele Einzelprogramme vs Master-Script

Beitrag von d3h56r » 28.07.2018, 21:56

@anderl: weitestgehend korrekt. :roll:
186 Kanäle in 59 Geräten:
1x HM-LC-Sw1-FM, 10x HM-CC-RT-DN, 1x HM-OU-LED16, 2x HM-LC-Sw1-Pl-DN-R1, 18x HM-Sec-SCo, 1x HM-Sec-TiS, 1x HM-LC-Sw1-Pl-CT-R1, 2x HM-LC-Sw2-FM, 5x HM-LC-Bl1PBU-FM, 3x HM-LC-Sw1PBU-FM, 12x HM-RC-2-PBU-FM, 1x HM-ES-PMSw1-Pl, 1x HM-WDS100-C6-O, 1x HmIP-RCV-50

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Grundsatzfrage: Viele Einzelprogramme vs Master-Script

Beitrag von dtp » 03.08.2018, 13:53

Beides hat seine Berechtigung. So ist es z.B. kein großes Problem, eine Vielzahl von Sensoren bzw. Aktorzuständen mit einem Gewerk-Skript oder dergleichen auszulesen. Umgekehrt ist es aber oftmals nicht so geschickt, mehrere Aktoren, insb. Funk-Aktoren, per Skript anzusteuern. Da wäre dann im Skript eine Verzögerung hilfreich. Es gibt da zwar eine Lösung hier im Forum, die auf TCL basiert, aber die ist meines Wissens nach nicht so ganz ohne Risiko anzuwenden.

Leider gibt es bisher immer noch keine Build-In-Lösung für das verzögerte Ausführen von Befehlen innerhalb von WebUI-Skripten. Man könnte das vielleicht mit Dummy-Zählschleifen lösen, aber auch das ist nicht unbedingt elegant.

Besonders nervig an einer Vielzahl von WebUI-Programmen sind für mich Änderungen, die alle Programme betreffen. Da muss man dann immer besonders genau hinschauen, ob man auch überall das Richtige gemacht hat. Und wehe, man hat mal irgendwo einen Zustand oder Wert übersehen. Das lässt sich zwar weitestgehend mit der geschickten Verwendung von Systemveriablen umgehen, aber auch das ist nicht wirklich elegant.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“