Mehr als jeder zweite Nutzer hat bei der Erstellung von Skripten in ioBroker Schwierigkeiten. Das geht aus einer Umfrage in meinem Blog hervor. Dabei gilt diese Annahme sicherlich auch für weitere Systeme, wie zum Beispiel Home Assistant oder OpenHAB.

Doch woher kommen eigentlich die Schwierigkeiten? Und warum fällt es auch mir manchmal nicht leicht, Skripte zu erstellen? In diesem Artikel möchte ich gerne mit dir einen Blick hinter die Kulissen werfen. Einen Blick abseits von schönen Blockly-Blöcken und einfacher Adapter-Installation. Denn die wahre Kunst des Smart Homes ist die Vernetzung über Skripte. Und gerade hier fängt die Schwierigkeit erst richtig an. Wir schauen uns an, warum ioBroker nicht einfach ist und welche Tipps dir das Leben leichter machen.

Werfen wir zu Beginn jedoch nochmal einen genauen Blick auf die Umfrage. 50 % der Befragten sagen, dass sie Schwierigkeiten bei der Erstellung von Skripten haben. 38 % haben immerhin noch manchmal Probleme damit. Einzig und allein 12 % geben an, dass sie die Erstellung nicht schwierig finden. Das bedeutet, dass insgesamt 88 % mindestens in eine Schwierigkeit stolpern, die sie zum Aufgeben zwingen könnte. Erschreckend, oder?

ioBroker Skripte schwer zu erstellen

Woher stammen die Probleme?

ioBroker ist ein System zur Vernetzung verschiedener Smart Home Geräte. Über die gemeinsame Zentrale bist du dazu in der Lage, übergreifende Automationen zu erstellen. So kannst du zum Beispiel deine Lampe leuchten lassen, wenn die Kaffeemaschine eingeschaltet wurde.

Wenn man sich nun die Frage stellt, wo genau die Schwierigkeit liegt, muss man sich die Architektur etwas genauer vorstellen. Jedes Gerät arbeitet für sich selbstständig und kann auch ohne die Vernetzung zu ioBroker seinen Dienst verrichten. Das bedeutet, dass zwischen den Geräten lediglich eine lose Kopplung besteht.

Unter einer losen Kopplung kannst du dir in etwa vorstellen, dass die Geräte zwar miteinander kommunizieren können, auf die Verbindung aber nicht angewiesen sind. Hierdurch erhöht sich zwar die Ausfallsicherheit, allerdings steigt auch die Komplexität. Genauer gesagt steigt die Komplexität deshalb, da nun jedes Gerät völlig unabhängig Entscheidungen treffen und Automationen ausführen kann.

Diese Unabhängigkeit macht sich auch bei den Skripten bemerkbar. Gerade Anfänger denken oft, dass ihr Computer die Befehle in genau der Reihenfolge abarbeitet, wie man sie ihm übergibt. Doch seit es in der IT-Welt die Parallelität gibt, muss das nicht mehr so sein.

Die Asynchronität

Okay, du wirst jetzt bei dieser Überschrift vermutlich schon eine kleine Krise durchleben und dich fragen, was das nur alles zu bedeuten hat. Doch lass es mich dir ganz einfach erklären.

Ein synchroner Ablauf bedeutet, dass ein Befehl nach dem anderen ausgeführt wird. Erst wird eine Lampe eingeschaltet, dann das Radio und zum Schluss wird noch der PC hochgefahren. Die Reihenfolge entspricht dabei jener, die du in deinem Skript festlegst.

Bei einem asynchronen Ablauf hingegen passiert genau das nicht. Du legst in deinem Skript zwar eine Reihenfolge fest, diese kann in der Praxis aber abweichen.

Woran liegt das?

Nun ganz einfach gesagt liegt das daran, dass die Aufgaben innerhalb deines PCs verteilt werden. So kann ein Prozessor zum Beispiel mehrere Aufgaben parallel bearbeiten, wobei jede Aufgabe unterschiedlich lange dauert.

Stell dir einen Samstag vor, an dem die ganze Familie zusammen putzt. Während du den Boden saugst, verbringen deine Kinder ihre Zeit mit dem Aufräumen ihrer Kinderzimmer. Ich denke hier muss man kein Hellseher sein um zu erkennen, dass aller Wahrscheinlichkeit nach du zuerst fertig sein wirst. Obwohl alle an der gemeinsamen Aufgabe Putzen arbeiten, brauchen die jeweiligen Unteraufgaben unterschiedlich lange.

Exklusiv für dich:  ioBroker Visualisierung - Worauf du achten musst

Die Asynchronität bedeutet also, dass Aufgaben parallel ausgeführt werden, wobei die Reihenfolge von der festgelegten abweichen kann. Nicht muss!

Asynchron vs synchron

Warum Asynchronität schwierig ist

Während du bei der synchronen Bearbeitung von Aufgaben immer weißt, wann diese beendet ist (vor Beginn der neuen Anweisung), kannst du das bei der Asynchronität nicht sagen. Das trägt nun natürlich dazu bei, dass du dir über die Erstellung von Automatisierungen mehr Gedanken machen musst.

Wenn du nicht weißt, wann ein bestimmter Zustand schlussendlich eingetreten ist, kannst du mit diesem auch nicht direkt weiterarbeiten. Über genau dieses Hindernis stolpern selbst Softwareentwickler hin und wieder.

Du musst also dein Vorgehen anpassen, damit trotz der zeitlichen Unsicherheit die Abarbeitung deiner Aufgaben weiter gewährleistet bleibt. Das kannst du zum Beispiel tun, indem du einen kleinen Trick anwendest. Dazu kommen wir gleich.

Das Vorstellungsvermögen

Ein wenig kitschig klingt das Vorstellungsvermögen. Jedoch gehört genau das zur Umsetzung eines Skripts dazu.

Im Grunde bist du bei der Erstellung eines Skripts damit beschäftigt, bestimmte Verhaltensmuster bei Eintreten eines Ereignisses schriftlich festzuhalten. Du sagst deinem System, wenn ein bestimmtes Ereignis eintritt, musst du etwas tun. Was genau es tun muss, das legst du in deinem Skript fest.

So einfach das nun auch klingt, es wird bei größeren Skripten immer schwieriger. Denn neben den Ereignissen spielen nun auch noch Wechselwirkungen eine Rolle. Zum Beispiel gibt es Leuchten, die nach dem Einschalten einen Initialzustand annehmen und man erst dann die Farbe setzen kann. Wenn du es andersrum machst, ist eventuell deine Farbe gar nicht sichtbar. Die unterschiedlichen Funktionen und Eigenschaften beeinflussen sich somit gegenseitig.

Dann gilt es natürlich auch zu beachten, dass die Schaltungen in eine sinnvolle Reihenfolge gebracht werden. Dabei spielen vor allem die eigenen Wünsche und Vorstellungen sowie technischen Gegebenheiten eine Rolle.

Klingt zu kompliziert? Naja, auch wir Entwickler behelfen uns meist mit ein paar kleinen Tricks, um nicht den Überblick zu verlieren.

Wie du dir selbst helfen kannst

Nachdem wir nun einerseits die technische Schwierigkeit und andererseits die menschliche identifiziert haben, kommen wir doch direkt zu passenden Tipps.

Ich kann dir aus eigener Erfahrung – und der Praxis – erzählen, dass selbst erfahrene Entwickler zumindest hin und wieder auf Tricks zurückgreifen, die das Leben leichter machen. Denn sobald du mit unterschiedlichen Verlaufsarten und Komplexitäten konfrontiert wirst, brauchst du eine vernünftige Übersicht.

Erstelle dir daher vor jedem Skript eine kleine Skizze, wie das Ergebnis aussehen muss. Dazu kannst du dir unterschiedliche Geräte aufzeichnen und diese über Pfeile miteinander verbinden. So weißt du zumindest schon einmal, wie die Geräte jeweils angesteuert werden.

Nun gehst du dazu über, dass du rein textuell aufschreibst, wie das Skript ablaufen soll. Das kannst du dabei in einzelne Schritte unterteilen, so dass du später weißt, wie genau das Skript zusammengebaut werden muss. Sobald du dabei auf Input von einem anderen Gerät wartest, empfiehlt sich ein zweites Skript. Dazu erzähle ich dir gleich mehr.

Exklusiv für dich:  ioBroker Cloud Kosten - das musst du wissen

Sobald du nun eine Übersicht erstellt hast, konntest du deine Gedanken bereits strukturieren und dir fallen womöglich noch einzelne Logikfehler auf. Diese kannst du direkt korrigieren, so dass dein Skript im Anschluss aller Wahrscheinlichkeit nach zu urteilen fehlerfrei arbeitet. Dabei kannst du dir natürlich auch noch eine zweite Person suchen, die zusammen mit dir den logischen Part übernimmt. Nichts anderes machen Entwickler übrigens häufig beim sogenannten Pair-Programming.

Unterteilung in einzelne Skripte

Da du im Smart Home häufig damit konfrontiert sein wirst, dass du auf Statusänderungen wartest, gibt es noch einen weiteren Tipp. Sobald du auf mehrere Statusänderungen wartest, kannst du dir ein Skript erstellen, das jedes Mal auf eine Änderung reagiert. Dort überprüfst du nun, ob alle Datenpunkte sich nach jeder Änderung im gewünschten Zustand befinden. Sollte das der Fall sein, schreibst du einen definierten Wert (wahr/falsch) in eine weitere Variable, die einzig und allein von deinem Skript gesetzt wird.

Über diese Variable kannst du nun auswerten, ob sich mehrere Datenpunkte im gewünschten Zustand befinden, ohne dass du hierfür ein unendlich langes Skript brauchst.

Der Sinn dabei ist, dass die Wahrscheinlichkeit von Fehlern abnimmt, sobald du deine Logik in kleinere Einheiten unterteilst. Passend dazu gibt es eine schöne Redewendung, die ich bereits in meinem ersten Semester verinnerlicht habe:

Divide et impera (Latein für: teile und herrsche)

Teilweise: Niccolò Machiavelli und Ludwig XI

Diese Redewendung kannst du dir als Leitspruch für die Entwicklung der Logik deines Smart Homes vornehmen. Sobald ein Skript zu groß und unüberschaubar wird, beginne damit es zu teilen. Dadurch verringerst du die Komplexität und neigst nicht dazu, unnötige Fehler einzubauen.

Beginne außerdem immer mit kleinen Teilfunktionen und baue diese immer weiter aus. Wer zu viel auf einmal will, wird meist scheitern. So ist es auch in der beruflichen Praxis. Immer einen Schritt nach dem anderen, auch wenn es vielleicht schwerfällt (Stichwort: Ungeduld).

Übung macht den Meister

Ganz ehrlich? Ich habe diesen Spruch immer gehasst. Ich gehöre eigentlich zu den Menschen, die besonders ungeduldig sind, gelobe aber Besserung. Und teilweise zumindest gelingt mir das auch.

Allerdings – und das ist wirklich so – kannst du deine eigenen Fähigkeiten deutlich verbessern, wenn du am Ball bleibst und immer wieder neue Herausforderungen annimmst. Zum Beispiel lassen sich erstellte Skripte nach und nach immer weiter ausbauen, um so neue Erkenntnisse zu gewinnen und das Smart Home zu verbessern.

Hilfreich sind dabei vor allem die offizielle Dokumentation, vorgefertigte Skripte anderer Nutzer und YouTuber sowie Blogger, die ihr Wissen und ihre Erfahrung an dich weitergeben. Darüber hinaus bietet gerade ioBroker eine sehr aktive Community und ein Forum, in dem man sich ganz gezielt über solche Themen austauschen kann.

Wer dann immer noch nicht genug von den Skripten bekommt, kann sich gerne einmal ein JavaScript-Buch zur Hilfe nehmen und darin ein paar Dinge lesen. Denn auch wenn Blockly sehr verführerisch wirkt, schlussendlich basiert es auf JavaScript und wer die Technologie versteht, kann sie auch ganz leicht meistern.

Kategorien: ioBroker

Lukas

Hey, ich bin Lukas. Seit einigen Jahren schreibe ich in meinem Smart Home Blog über Hausautomation und Digitalisierung. Als Wirtschaftsinformatiker weiß ich, wie wichtig die Vernetzung von IT-Systemen ist. Diese Erkenntnisse übertrage ich auf mein eigenes Smart Home, das ich auf Basis von ioBroker betreibe. Hierzu nutze ich die Leistung eines eigenen Rackservers in meinem Keller, der alle Dienste und Smart Home Systeme aufrecht erhält. Mit ihm habe ich mir einen großen Traum erfüllen können. In deinen Ohren klingt das mindestens genauso spannend, wie für mich? Dann komm mit auf unsere Reise zu einem vollwertigen, sicheren und komfortablen Smart Home. Ganz oben findest du Verknüpfungen zu Social Media, wo du mir gerne folgen darfst. Ich freue mich auf dich!

0 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.