In Arbeit: SmartHome-Zentrale und Communicator
Translate from German into English (some links may be mistranslated, then turn back to the original site):
Ich muss etwas ausholen. Die Steuerung meiner Jalousienantriebe läuft seit einigen Jahren elektronisch. Sie wurde seinerzeit - der Not gehorchend - schnell aus dem Boden gestampft, weil ich sie nach dem Umbau auf elektrischen Antrieb möglichst schnell in Betrieb nehmen wollte. Ich habe daher zunächst auf eine moderne Steuerung mittels Controllern verzichtet. Die Zeit für solch eine Entwicklung war definitiv nicht vorhanden. Deshalb wurde auf eine "altbackene" Steuerung mittels CMOS-Logik und Transistoren gesetzt. Hier hatte ich bereits davon berichtet. Erst Jahre später kamen weitere Funktionen hinzu.
Geamtüberblick des Racks. Oben links finden sich die Jalousien-Interfaces, die den Fahrstrom schalten, und oben rechts sind die Steckkarten, die die Anschlusskabel der Jalousientaster aufnehmen. Die Logik dahinter ist ebenfalls CMOS (CD40xx). Lediglich 1 später nachgerüstete Einzeltastensteuerungs-Platine verwendet ausschließlich einen kleinen Microcontroller-Chip.
In 2021 habe ich die Steuerung um die Alarmanlage "ALA" ergänzt, die in der mittleren Reihe ihren Platz gefunden hat.
Die alte Jalousien-Zeitschaltuhr in der 3. Reihe unten links kann nun aufs Altenteil.
Direkt rechts neben den beiden Platinen für die Alarmanlage findet sich nun - in 2022 - die neue SmartHome-Zentrale "SYS" ihren Platz: rot umrandet. Das Display rechts wird davon gesteuert. Das schräg nach unten rechts abgehende Kabel führt zum DCF77-Empfänger, der für eine genaue Zeitbasis sorgt.
Impression: ganz früher Testaufbau.
Auf Schaltungseinzelheiten der Zentrale "SYS" will ich hier nicht weiter eingehen. Ebenso wenig auf die Programmierung der Controller. Wie bereits beschrieben, ist das ganze Konstrukt ein Stückwerk, historisch gewachsen, wie man so schön sagt. Und die älteren Teile davon würde ich heute anders realisieren... Besser so: zunächst alles sehr sorgfältig planen und die Steuerung mehr zentralistisch ausführen.
Aber es gilt das Motto: aus dem Vorhandenen das Beste machen. Mit den technisch nicht so tollen Kompromissen muss ich nun leben. Letztendlich funktioniert es trotzdem perfekt!
Test der Platine "SYS". Oben links am Bildrand: der DCF77-Empfänger samt Ferritantenne.
Hier wird das Zusammmenspiel mit der Alarmanlage "ALA" getestet.
Die SmartHomeZentrale:
In der Zentrale - hier das Schaltbild - kommt ein ATMEL-AVR-Controller MEGA644PA zum Einsatz. Die Buchstaben am Ende unterscheiden ihn von seinen sonst gleichlautenden Artgenossen: er hat abweichend 2 UARTs an Bord. Also 2 serielle Schnittstellen. Beide werden zwingend benötigt. Über den 1. Kanal wird die Kommunikation mit dem weiter unten beschriebenen SmartHome-Communicator "COM" durchgeführt. Über den 2. Kanal wird der interne Kommunikationsring ("Token-Ring") betrieben. Alle aktuellen und alle später noch dazu kommenden Komponenten (Einschubplatinen mit rückseitiger VG-Buchse) kommunizieren miteinander darüber. Nach dem Prinzip: jeder kann mit jedem sprechen. In alle Richtungen und auch nach Außen - über Kanal 1 - zum Communicator. Und von dort ins Web...
In der Zentrale laufen die essentiellen - unbedingt notwendigen - Funktionen: sehr genaue Uhrenfunktionen, Berechnung der Zeiten für das Auf- und Abwärtsfahren der Jalousien (dämmerungsabhängig), Anbindung an den Communicator "COM", Lauschen auf dem Antriebsbus (zur Ermittlung der Jalousienzustände, weil die manuelle Jalousien-Tastensteuerung weiterhin rein über Hardware gesteuert wird), Steuerung der LCD-Anzeige, Routing der Nachrichtentypen von außen und auf dem "Token-Ring" sowie die Überwachung deren Korrektheit. Und Funktionen, die ich heute noch nicht kenne... Für diese Funktionen muss der Communicator "COM" nicht verbunden sein!
Übersicht der Funtionen auf der LCD-Anzeige:
1. Seite: Aktuelles Datum, aktuelle Uhrzeit. Kennzeichen "Syn", ob die interne Uhr mit dem DCF77-Signal synchronisiert ist.
2. Seite: die Jalousien-Positionen der 8 Kanäle. "0" ist ganz unten, eine positive Zahl heißt: es wurde eine Laufzeit in 1/10 Sekunden gemessen, bzw. gesteuert.
3. Seite: ein "X" signalisiert, dass diese Jalousie automatisch auf- bzw. abwärts gesteuert wird.
4. Seite: Anzeige der 1x täglich neu berechneten Auf- bzw. Abwärtszeiten. Löschen des DCF77-Synchron-Kennzeichen durch Drücken der Taste (oben auf der "SYS"-Platine).
5. Seite: Laufzeit der "SYS" seit dem letzten Reset / Hochfahren.
6. Seite: Bei Drücken der Taste für 3 Sekunden fordert die "SYS" die Alarmanlage "ALA" auf, den aktuellen Status zu senden. Letzterer wird dann empfangen und angezeigt.
7. Seite: der letzte Alarm wurde durch den Bewegungsmelder im Wohnzimmer ausgelöst.
8. Seite: Anzeige der Software-Stände aller am "Token-Ring" angeschlossener Komponenten (z.Zt. nur 2).
Dieters SmartHome-Communicator:
Der Communicator "COM" ist zweierlei:
- das Konfigurationstool für die Zentrale "SYS". Damit werden die benötigten Parameter gepflegt und zur "SYS" gesendet. Um sie dort im Flash-ROM des Controllers zu speichern.
- das, was der Name sagt. Der Kommunikator. Mit seiner Hilfe werden Meldungen der "SYS", der "ALA" und später aller weiterer Module an die "COM" angezeigt und protokolliert - und ggf. werden von der Zentrale weitere Aktionen getriggert. Weiterhin kann man über Konsolenkommandos mit der "SYS" sprechen.
Das Programm läuft aktuell auf einem PC, der mittels seriellem Kanal (COM-Port) mit der Zentrale verbunden ist. Es ist in Lazarus programmiert. Ich hatte über Lazarus bereits hier berichtet.
Das Schöne an Lazarus ist, dass es ein plattformübergreifendes Entwicklungstool ist. Slogan: "Write once, compile anywhere". Also: einmal den Code schreiben und dann sowohl auf Windows als auch auf Linux zum Laufen bringen! Das funktioniert tatsächlich (s.u.)!
Mittelfristig soll der PC durch einen Einplatinencomputer RaspBerry Pi (mit dem Betriebssystem Linux) ersetzt werden. Letzterer wird dann in das Rack eingebaut.
Ein Klick auf das Bild vergrößert - dann zurück
Das Programm hat eine linke (Konfigurations-) und eine rechte (Kommunikations-) Seite.
Zunächst die linke Seite: im Tab "GEO" werden die Daten für Sonnenauf- und Untergang verwaltet. Die Tabelle habe ich in Excel berechnet und der Communicator importiert bei Programmstart die zugehörige CSV-Datei. Änderungen der Auf- und Abwärtszeiten sind aber auch hier möglich. Die Tabelle enthält 14-tägige Stützwerte. Dazwischen wird linear interpoliert. Die Genauigkeit ist ausreichend. Aktuell sind die Zeiten so berechnet: Aufwärtsfahrt bei Sonnenaufgang minus halbe Bürgerliche Dämmerung. Abwärtszeit bei Sonnenuntergang plus volle Bürgerliche Dämmerung. Diese Zeiten können gespeichert und zum Controller gesendet werden. Die Buttons "V" stehen für Verify, also für den Vergleich zwischen Controller und Communicator. Bei Differenz wird das Ergebnis rechts rot ins Protokoll geschrieben.
Die rechte Seite enthält Kommunikationsdaten. Im Tab "Ereignisse" werden relevante Ereignisse farbig dokumentiert. Ein Alarmanlagen-Alarm wird dort einen roten Eintrag erzeugen, das Ergebis der Zeitberechnungen wird in blau angezeigt.
Weiter geht es links mit den Konfigurationsdialogen. Im Tab "JA1" werden die gewünschten Jalousienaktionen für den Zeitpunkt Auf bzw. Ab beschrieben. Abschließend: Speichern, zum Controller schicken, Verify.
Der Dialog im Tab "JA2" erfasst die - mit Stoppuhr gemessenen - Laufzeiten der Antriebe. Für Auf und Ab, ebenso für die Lückenfahrt (Jalousie geht auf Lücke, liegt unten gerade noch auf).
Und das obligatorische Speichern, zum Controller senden, Verify..
Tab "Jobs1" erfasst KEINE Controller-Konfigurationsdaten. Die hier beschriebenen zeitgesteuerten Aktionen laufen nicht in der "SYS" sondern nur im Communicator. Es sind eher Luxus- und nicht essentielle Funktionen.
Auch die Daten der Tab "Jobs2" laufen vom Communicator getriggert ab. Abhängig von Sonnenauf- / Untergang, bzw. zu den berechneten Jalousienlaufzeitpunkten.
Bei Bedarf werden einfach neue Dialoge und Funktionen hinzu programmiert!
Zurück zur rechten Seite des Programms: Thema Kommunikation.
Die "Konsole" ist genau das: hier können Kommandos eingetippt und in Richtung "SYS" gesendet werden. Dort werden sie ggf. weitergeleitet. Antworten zurück werden angezeigt.
In der Box unten können Blockkommandos erfasst und gemeinsam gesendet werden. Zum Beispiel zur Abfrage der Stati bei Programmstart - auch automatisch.
Tab "Doku": damit man nicht immer und auch noch nach Jahren nicht alles auswendig wissen muss, gibt es hier als Hilfe die Online-Dokumentation
Hier ist auch die jetzige und künftige Topografie aufgezeigt. Ziemlich in der Mitte ist die Zentrale "SYS", nach rechts die Anbindung zum Communicator "COM", später weiter in die eigene Cloud. In Hin- und Rückrichtung.
Links geht es über den "Token-Ring" zu den Komponenten. Zur Zeit ist das lediglich die Alarmanlage "ALA".
In der Pipeline für die nächste Zeit stehen ein TCP-Modul und ein Funksteckdosenmodul (FSD). "DEV" ist nur ein Testdevice.
Dann habe ich so einen schönen Helligkeitssensor an einem Fenster hängen; damit ließe sich doch bestimmt auch was machen. Und eine Heizungs-Fernüberwachung, oder: eine Kopplung mit dem Stromzähler. Und...
Man kann schön die Ringstruktur erkennen: da sind jeweils der Ausgang des ersten mit dem Eingang des zweiten Moduls verbunden. und so fort. Und zurück zur "SYS".
Jedes Modul prüft beim Empfang eines Nachrichtenblocks, ob es selber zuständig ist. Wenn nicht, wird weitergeleitet, ansonsten wird nur die Antwort zum nächtsten Modul gesendet. Bis es beim gewünschten Empfänger ankommt. Das kann z.B. "WEB", sein, weil ich über die Cloud ein Kommando gesendet habe...
Tab "Notizen": selbstredend.
Tab "Verbindung": Über welchen Kanal kommunizieren die "SYS" und der "COM"? Möglich sind ein serieller Port (oder ein virtueller COM-Port eines eingesteckten USB-Seriell-Adapters) und eine TCP-Verbindung.
Tab "Cloud": nur ein schneller Entwurf. Wahrscheinlich wird die Realisierung später stark anders aussehen. Ich möchte nicht so sehr auf das http-Protokoll setzen. Da ist eher das Web-Socket-Protokoll besser geeignet. Wer weiß?
Alle Dialoge sind noch experimentell! Es wird sich zeigen, ob ein Lösungsansatz so passt, oder ob es bessere Antworten gibt. Da habe ich schon so Manches verworfen und neu gemacht, weil der Praxiseinsatz zeigte, dass der erste Gedankenblitz nicht der Beste war...
Mein neuer Raspi: ein Tastaturgehäuse samt eingebautem Linux-Rechner (Raspberry Pi 400). Damit will ich mich zunächst mit diesen Dingern vertraut machen.
Das Wissen benötige ich, will ich später einen Einplatinencomputer RaspBerry Pi 4B mit dem SmartHome koppeln. Der abgebildete Pi 400 ist leider aktuell (Ende 2022) der einzige Raspi, der zu nicht völlig überzogenen Preisen lieferbar ist...
Ein erster Kommunikationstest: im Hintergrund der Raspi-Desktop per VNC-Fernsteuerung. Links mit geöffnetem Chat-Testprogramm. Im Vordergrund rechts das Windows-Testprogramm. Derselbe Quelltext, einmal mit Lazarus auf dem kleinen Linux-Rechner und einmal mit Lazarus auf Windows compiliert. Die Daten kommen ggf. ge"chunked" an. Das ist kein Problem, da später alles zusammengehängt wird. Chunks kennt man auch von diversen Internetprotokollen.
Wird später fortgesetzt!
