Aloha!
Ich steck in einem Dilemma. Ich habe nun etwa 14 Stunden damit verbracht, die einfache Anforderung in 300+ Zeilen Code umzusetzen: Steuern der jeweils 1x im Zimmer befindlichen
- RGBW-868-Controller Hardware 1 für an der Decke angebrachte Farbleisten (RGB)
- RGBW-868-Controller Hardware 1 für an der Decke eingelassene LED-Spots (W),
- RGBW-868 Controller Hardware 2 für einen in den Boden eingelassenes Floorlight und eines
- 1x HM-LC-Sw1-FM für die normale Deckenleuchte
Der HM-PB-6 ist wie folgt belegt (Short = kurzer, LONG = langer Tastendruck)
// 01SHORT = Spots heller
// 01LONG = Spots dunkler
// 02SHORT = Spots an/aus
// 02LONG = Deckenlampe an/aus
// 03SHORT = RGB Farbindex vor
// 03LONG = RGB Farbindex zurueck
// 04SHORT = RGB an/aus
// 04LONG = Floor an/aus
// 05SHORT = TODO Ansage an/aus
// 05LONG = frei
// 06SHORT = AN / AUS
// 06LONG = vorheriger Status an
Bei Tastendruck aktualisiert ein Ereignis eine Variable im Zimmer, welche Ihrerseits ein Ereignis auslöst, nämlich das Hauptskript für das Zimmer, welches über ein Include eingebunden ist.
Ich bin jetzt soweit, dass das Programm halbwegs läuft. Es beisst sich aber bspw. mit immer noch laufenden Master-Skripte, die sich etagenweise um die Timer der einzelnen Bewegungsmelder kümmern. Ich hänge aktuell an der 06SHORT-Funktion.
Bisher habe ich die Funktionen immer ergänzend programmiert. Mit den Anforderungen, das Licht nicht mehr einfach ein- und Auszuschalten, sondern autom. Lichtprogramme, visuelle Benachrichtigungen oder einen akustischen Status auszugeben, werden für jede Funktion mind. 3 Variablen benötigt. In meinem Fall bedeutet das für das Hauptskript ~25 Variablen, um dieses Konstrukt überhaupt zum Laufen zu bekommen. Ab jetzt arbeite ich mit IPS_GetObjectIDByName und habe die Instanzen in den Räumen standardisiert benannt. Das ganze wird als Include in 3 nahezu identischen Räumen genutzt. Das habe ich zu 97% geschafft.
Obwohl ich mir die Variablen eindeutig benannt habe, kommt es immer wieder vor, dass ich den Überblick in den einzelnen Routinen verliere und mir dann Zeile für Zeile klar machen muss, was hier überhaupt passiert. Ist man mal 2-3 Tage nicht am System, dann kann man quasi von vorne anfangen und sich alle Variablen neu einbläuen. Da liegt zum einen daran, dass ich eben kein Programmierer bin und bisher auch noch nicht die Erkenntnis gewonnen habe, mir den Programmworkflow inkl. aller notwendigen Variablen erst einmal zu designieren. Üblicherweise baue ich mir den Programmablauf über Tage im Hinterkopf zusammen und setze ihn dann einfach um. Das kostet natürlich auch im Alltag zusätzliche Ressourcen, weil die Murmel immer rattert.
Fragestellung in die Runde: Erklärt mir mal bitte, wie Ihr mit solchen komplexen Skripten umgeht, welche Methoden Ihr nutzt, dauerhaft den Überblick zu behalten und im Fehlerfall auch binnen Sekunden debuggen zu können? Wie managed Ihr komplexe Abhängigkeiten? Dokumentiert Ihr Eure Skripte und wenn ja, wie (Pflichtenheft oder als Chart)? Ich verdiene mein Geld in ziemlich komplexen DataCenter-Umgebungen, die zwar manchmal herausfordernd sind, aber in einem nicht gleich den Wunsch aufkommen lassen, doch besser als Gärtner tätig zu sein. Bei IPS habe ich diesen Punkt erreicht. Ich mag irgendwie nicht mehr, was natürlich auch daran liegt, dass ich kein „Test-System“ als solches habe und ich den 4-Personen-Haushalt verbunden mit aller Schelte im Live-Betrieb umstricke, mit allen Altlasten oder parallel laufenden Skripten. Die Sensoren/Aktoren sind nicht mit einander verknüpft, hier läuft alles nur automatisch. Wenn IPS nicht läuft, steht hier alles!
Für seelische Unterstüzung, praktische Hinweise oder Kritik bin ich dankbar. Meine Frau sagte nur, sie könne mir bei dem Problem nicht helfen. Aber das ist ja nicht weiter verwunderlich…
Disconnect me - I can be reworked…