Probleme einfaches Schalterskript und kognitives Defizit(?)

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…

Hi!

Irgendwie kommt mir das bekannt vor was du schreibst :smiley: Wobei mein Hirn aber noch etwas „spezieller“ ist :rolleyes:

Entweder baut man sich die Skripte einfach nach seiner eigenen Logik auf, damit man immer weiß wie wo was läuft. Variablen so benennen, dass man damit etwas anfangen kann.
Und dazu >> Hin und wieder kleine Kommentierungen in den Code mit „//“. Dort einfach mal z.B. schreiben:

// hier wird über den Raum-Name im Array gesucht und als Rückgabe bekommt man die Anzahl der eingeschalteten Lampen

…hilft :slight_smile:

Ich versuche meine Skripte immer vom Code her „einfach“ zu halten. Nicht kreuz und quer mit massig Funktionen und hier wieder ein Array mit 10000 Daten und noch ein Array und und und… Also nicht einen Wert durch 100 Funktionen schicken, bis das „Ergebnis“ kommt. Gut lesbar halt…

Desto mehr man sich kommentiert oder die Variablen gut benennt und dazu noch vlt. eine unabhängige Doku pflegt, desto leichter/schneller kommt man in ein Projekt nach „Abstinenz“ wieder rein :slight_smile:

Grüße,
Chris

Hi Chris,

von Dir zu hören, dass man nicht alle Funktionen integrieren muss und Dinge mit der einen oder anderen Variable mehr vielleicht besser am Laufen hält, hat mich in meiner Umsetzung wieder bestärkt. Ich werde weiter daran arbeiten, die einzelnen Definitionen besser zu kommentieren, wie Du schon geschrieben hattest.

Ich dachte, hier der einzige mit Hirnsalat zu sein, der die Dinge nicht immer checkt… Manchmal zweifelt man ja an der Richtigkeit. Danke für Deine Worte!

Viele Grüße
Björn

Abend Björn!

Ich GARANTIERE dir, das JEDER hier sich schon mal gefragt hat „was hab ich mir dabei nur gedacht“ :smiley: :smiley: 100%ig!!! :smiley:

Steck den Kopf nicht in den Sand, heute versteht man nur Bahnhof und morgen sieht die Welt schon ganz anders aus. Aber wirklich hilfreich sind nur SINNVOLL benannte Variablen und Funktionen :slight_smile: Dazu noch hier und da ein kleiner Kommentar und schon passt es.

Bei mir hat es „Klick“ gemacht, nachdem ich ein Skript von jemand anderem wieder zum Laufen bringen wollte und total daran verzweifelt bin, weil der Code -für mich- total wirr und nicht „entschlüsselbar“ war, absolut keine Chance für mich da durch zu blicken :frowning:

Von da an versuche ich immer alles „erkennbar“ zu programmieren. Auch wenn es nur ein „if ($var === true)“ ist, anstatt nur eines „if ($var)“ :slight_smile: Schwer zu beschreiben, aber ich denke du weißt was ich meine.
Und manchmal muss man halt auch etwas „speziell/komplizierter“ machen, aber da kommt dann ein Kommentar hin und gut ist es :slight_smile:

Also > nicht aufhören! Weiter gehts! :slight_smile:

Guten Start in die neue Woche und Grüße,
Chris