Der SmServer ist eine Software, die auf einem Debian-basierenden Linux-System installiert wird.
Der SmServer verwaltet angelegte Objekte und greift im Bedarfsfall auf diese zu.
Der Server nimmt unverschlüsselte (aus dem Heimnetz) und synchron verschlüsselte (aus dem Internet) Verbindungen an und führt entsprechend gewünschte Aktionen aus. Hierbei kann er mit mehreren gleichzeitigen Verbindungen umgehen. Er kann mit IPv4- als auch mit IPv6-Adressierungen umgehen.
Kleine Automatisierungen übernimmt er auch, z.Bsp. Treppenhausschaltungen und verknüpfte Schaltungen.
WLan-Module sind Schalteinheiten, die einen ESP-8266 enthalten. Damit ist diese Einheit in der Lage, Verbindungen vom Router anzunehmen. Somit kann SmServer mit dieser Einheit kommunizieren.
Mit einem WLan-Modul können bis zu 7 Ausgänge unabhängig voneinander geschaltet werden.
WLan-Module eignen sich für Mietswohnungen, wo meist elektrische Installationen nicht durchgeführt werden können.
Die Software in diesen Einheiten ist so aufgebaut, dass sie eigenständig agiert. Sie arbeitet mit SmServer zusammen. Im Leerlauf fährt sie den Energieverbrach auf ein mögliches Minimum herunter, bleibt aber erreichbar.
Die Kommunikation mit dem SmServer erfolgt unverschlüsselt, da sie nur für den Einsatz im Heimnetz gedacht sind. Deshalb kein man ein Wlan-Modul auch von einem anderen Gerät ansprechen.
Die Daten für das Heimnetz-WLan können mit jedem Gerät angegeben werden, welches WLan-fähig ist und einen Browser nutzen kann.
Momentan arbeiten wir an preisgünstigen Lösungen für komplette Einheiten, um diese in der Wohnung, auf dem Hof oder im Garten einfach anwenden zu können.
Das gesamte System war ursprünglich nur für Raspberry Pis gedacht, kann aber nun auch auf anderen Geräten verwendet werden, wo das Betriebssystem auf Debian basiert.
GPIOs sind General Purpose Inputs/Outputs an einem Raspberry Pi. Sie können also als Eingänge und Ausgänge genutzt werden.
Mit dem System kann man einige dieser GPIOs als Ausgänge nutzen. Sie werden direkt im SmServer intigriert.
Vorteile sind schnelle Zugreifbarkeit und hohe Schaltgeschwindigkeiten (mehrere Tausend pro Sekunde).
Aber der Nachteil ist, dass sie nur 3,3 V mit max 10 mA ausgeben. Um reale Geräte damit zu schalten, sind weitere elektrische Verstärkungen mittels Optokoppler, Solid-State-Relais oder anderen Bauelementen notwendig. Wir arbeiten momentan an einfachen Lösungen dafür.
Folgende 14 GPIOs können vom SmServer genutzt werden:
ExternSm-Objekte sind Objekte, die von einem anderen SmServer verwaltet werden. Dabei spielt es keine Rolle, ob diese Objekte dort als WLan-Modul, GPIO-Ausgang oder auch als ExternSm-Objekt dort angelegt wurden.
Der Gedanke dieser Sache ist folgender: Man hat weitere SmServer an anderen Orten laufen, z.Bsp. im Ferienhaus oder in der Hobby-Werkstatt. In der Hobby-Werkstatt ist es kalt aber man möchte dann noch was basteln. So kann man z.Bsp. schon von zu Hause in der Hobby-Werkstatt die Heizung einschalten, ohne sich mit dem dortigen SmServer verbinden zu müssen. Außerdem kann man zu Hause sehen, was dort noch eingeschaltet ist.
Für den Zugriff auf ExternSm-Objekte werden synchron verschlüsselte Verbindungen über das Internet genutzt. Deshalb benötigt SmServer den Schlüssel des entfernten SmServers, mehr dazu später.
So erfolgt ein Schaltvorgang:
TCP-Verbindung erstellen, wenn nicht vorhanden
Anweisung senden
Antwort empfangen
Wenn kein Datenverkehr in den letzten 3 Minuten erfolgte,
Verabschiedung
TCP-Verbindung beenden
Aufgrund des rotierenden Keys werden gleich wiederholenende Anweisungen jeweils mit einem anderen Schlüssel übertragen, d.h. im Netzwerk werden jeweils andere Daten gesendet.
Anmerkung Verkettungen
Verkettungen sind möglich. Ob das sinnvoll ist, steht auf einem anderen Blatt. Hierzu folgendes Beispiel:
Server 1 greift auf einem ExternSm-Objekt auf Server 2 mittels dessen Key zu.
Server 2 greift auf einem ExternSm-Objekt auf Server 3 mittels dessen Key zu.
Server 3 greift auf einem ExternSm-Objekt auf Server 4 mittels dessen Key zu.
Server 4 führt die Aktion aus und sendet die Antwort. Verbindung zu Server 3 wird beendet.
Server 3 leitet die Antwort an Server 2 weiter, Verbindung zu Server 2 wird beendet.
Server 2 leitet die Antwort an Server 1 weiter, Verbindung zu Server 1 wird beendet.
Server 1 gibt die Antwort aus.
Das Ganze sieht extrem aus, geschieht aber mit 3 verschiedenen Verschlüsselungen in Bruchteilen von einer Sekunde.
Pseudo-Objekte sind virtuelle Geräte. Ein reales Gerät kann damit nicht direkt geschaltet werden.
Pseudo-Objekte kann man ein-, aus- und umschalten. Aber in Wirkilichkeit passiert nichts. Die elektrische Leistung beträgt deshalb 0,0W.
Was soll dieser Unsinn für einen Zweck haben?
Im folgenden Absatz beschreibe ich, wie man Geräte miteinander verknüpfen kann. Allerdings werden Verknüpfungen immer beim Ein-, Aus- oder Umschalten eines Gerätes ausgeführt.
Sollen diese Verknüpfungen nicht immer ausgeführt werden, kann man ein Pseudo-Objekt anlegen und die Geräte mit diesem verknüpfen. So kann man trotzdem die Geräte einzeln schalten.
Mittels Links kann man mehrere Geräte miteinander verknüpfen. Beispiele:
Wenn ich das Wohnzimmerlicht einschalte, soll die Stehlampe ausgeschaltet werden. Eine Lichtquelle reicht.
Wenn ich den Fernseher einschalte, soll die Audio-Anlage mit eingeschaltet werden. Beim Ausschalten das gleiche.
Wenn ich mit dem Auto zu Hause ankomme, soll das Hoflicht und das Flurlicht eingeschaltet werden. Außerdem soll sich das Garagentor öffnen.
Beachtet hierbei bitte, das Links immer beim Ein-, Aus- oder Umschalten eines Gerätes erfolgen. Sollen ein Link nicht immer ausgeführt werden, kann man dafür Pseudo-Objekte nutzen.
Um auf einen Server vernünftig zugreifen zu können, benötigt man einen Client. Ein Client ist ein Programm, was dem Benutzer ermöglicht, auf Server zuzugreifen und Informationen darzustellen. So ist euer Web-Browser ein typischer Client.
SmClients sind eine Sammlung Programmen, die speziell für den Zugriff auf SmServer ausgelegt sind. Alle diese Clients sind so ausgelegt, dass sie auf verschiedene SmServer zugreifen können, vorausgesetzt man besitzt dessen Key.
Dokumentationen zu den einzelnen Clients folgen später.
SmClientWeb
SmClientWeb greift auf einen SmServer zu, holt Informationen und sendet Anweisungen. Als Ergebnis wird eine HTML-Seite erstellt, die mit Webbrowsern dargestellt werden kann.
Darstellung als "landscape"
Darstellung als "portrait"
Ob landscape oder portrait genutzt wird, entscheidet euer Browser selbst anhand der Darstellungsmöglichkeit.
Da SmServer mehrere hundert Geräte verwalten kann, wird als erstes eine Textübersicht (landscape links, portrait oben) ausgegeben. Rot dargestellte Objekte sind eingeschaltet. Mit einem Klick auf ein Objekt gelangt man direkt zu diesem hin und kann es bedienen.
Ist in eurem Browser Javascript für diese Webseite aktiviert (das ist meist der Fall), aktualisiert sich diese Webseite ca. alle 3 Minuten. Wenn Schaltungen ausgeführt werden, aktualisiert sich die Webseite serverseitig sofort.
Obwohl SmClientWeb der wohl meist genutzte Client sein wird, ist er für den Anwender uninterresant. Dieser Client wird vom Webserver aufgerufen.
SmClientWeb hat nur eine sehr kurze Laufzeit, da alle Aktionen nur einmal ausgeführt werden.
smcli
smcli (sm Command Line Interpreter) ist ein schmaler Client für ein Linux-Terminal / Konsole und kann auch mittels SSH problemlos genutzt werden.
smcli gibt vom SmServer erhaltene Informationen aus. Schaltungen erfolgen durch Eingabe einer Zahl.
Für Informationen vom SmServer wird eine TCP-Verbindung aufrecht erhalten, so kann eine schnelle Geschwindigkeit erreicht werden. Für auszuführende Schaltungen werden kurzzeitig neue TCP-Verbindungen zum SmServer erstellt.
transmitsm
transmitsm ist ein Tool für das Terminal/die Konsole, um eine einzelne (mehrere geht aber auch) Anweisung an einen SmServer zu senden.
transmitsm erstellt eine Verbindung, sendet die Anweisung, empfängt die Antwort und beendet die Verbindung. Die Antwort wird ausgegeben.
Wenn es nicht tausend Schaltungen pro Sekunde werden sollen, lässt sich so transmitsm in eigenen Skripten/Programmen nutzen, ohne sich mit TCP-Verbindungen oder gar Verschlüsselungen herum mühen zu müssen.
smclient
smclient ist ein grafischer Client basierend auf Gtk3, um es auf einer graphischen Oberfläche wie LXDE, KDE oder XFCE unter Linux anwenden zu können.
Allerdings wird dieser Client stiefmütterlich von Ulf gepflegt. Nur dann, wenn er Lust hat. Grund: Die meisten nutzten kein Linux-Debian.
Natürlich kann man hier Objekte schalten, Schaltungen von anderen werden angezeigt.
smautoswitch
Smautoswitch ist ein Client, der im Hintergrund kaum sichtbar läuft.
Smautoswitch verwaltet so genannte Events. Ein Event ist eine Schaltung eines Objektes zu einer bestimmten Zeit.
Um so eine Schaltung zu dieser Zeit durchzufühen, erstellt smautoswitch eine Verbindung zum SmServer, gibt die Anweisung an, erhält die Antwort und verabschiedet sich.
Anwender können auf der Weboberfläche Events anlegen oder löschen.
Es gibt einen Urlaubsmodus, wo Events nicht oder vielleicht doch gerade jetzt (Diebstahlvorbeugung) ausgeführt werden.
Außenbeleuchtungen lassen sich nach dem Sonnenaufgang und -untergang einstellen. Smautoswitch berechnet diese Zeiten jeden Tag neu.
Automatische Ausschaltzeiten, die im SmServer konfiguriert wurden, haben Priorität.