Softwarekonzept: Unterschied zwischen den Versionen

Aus homeautomation.x-api.de
Wechseln zu: Navigation, Suche
K
K
Zeile 1: Zeile 1:
 
Die Software für die Geräte der dezentralen Heimautomatisierung wird grundsätzlich in C/C++ geschrieben. Damit ist sie vom Ansatz her auf allen Geräten, für die entsprechende Compiler zur Verfügung gestellt werden, lauffähig. Wir haben als Grundlage für die Softwareentwicklung die [[Wikipedia:de:Arduino_(Plattform)|'''Arduino Plattform''']] gewählt. Das Konzept, sowohl die Software als auch die Hardware offen zu legen, ist natürlich eine ideale Basis für die Ausbildung angehender Ingenieure. Allerdings setzen wir für die Softwareentwicklung die Umgebung Eclipse ein, genauer ein Paket, das mit einem geeigneten Plug-in für die Arduino-Umgebung under dem Namen Sloeber als Freeware verfügbar ist. Weiteres dazu auf der Seite '''[[Firmware]]'''.
 
Die Software für die Geräte der dezentralen Heimautomatisierung wird grundsätzlich in C/C++ geschrieben. Damit ist sie vom Ansatz her auf allen Geräten, für die entsprechende Compiler zur Verfügung gestellt werden, lauffähig. Wir haben als Grundlage für die Softwareentwicklung die [[Wikipedia:de:Arduino_(Plattform)|'''Arduino Plattform''']] gewählt. Das Konzept, sowohl die Software als auch die Hardware offen zu legen, ist natürlich eine ideale Basis für die Ausbildung angehender Ingenieure. Allerdings setzen wir für die Softwareentwicklung die Umgebung Eclipse ein, genauer ein Paket, das mit einem geeigneten Plug-in für die Arduino-Umgebung under dem Namen Sloeber als Freeware verfügbar ist. Weiteres dazu auf der Seite '''[[Firmware]]'''.
  
 +
= Schichtenmodell =
 
Bei unserem Projekt gehen wir noch einen Schritt weiter als bei Arduino, indem wir die Vernetzung beliebiger Geräte (neben den Mikrocontrollern auch Smartphones, Tablets und PCs) über das sogenannte [[Social_Manufacturing_Network|'''Social Manufacturing Network''']] vereinheitlichen. Die entsprechende Kommunikationssoftware ist daher auch eine der unteren Schichten in einem entsprechend organisierten Schichtenmodell für die Software. Für das Betriebssystem Android stehen entsprechende Klassen in Java zur Verfügung.
 
Bei unserem Projekt gehen wir noch einen Schritt weiter als bei Arduino, indem wir die Vernetzung beliebiger Geräte (neben den Mikrocontrollern auch Smartphones, Tablets und PCs) über das sogenannte [[Social_Manufacturing_Network|'''Social Manufacturing Network''']] vereinheitlichen. Die entsprechende Kommunikationssoftware ist daher auch eine der unteren Schichten in einem entsprechend organisierten Schichtenmodell für die Software. Für das Betriebssystem Android stehen entsprechende Klassen in Java zur Verfügung.
  
{| class="wikitable" style="float: left"  
+
{| class="wikitable" style="line-height:1.1em"  
 
! style="text-align:center width:15%" |  Schicht  
 
! style="text-align:center width:15%" |  Schicht  
 
! style="width:70%" | Beschreibung  
 
! style="width:70%" | Beschreibung  
 
! style="width:15%" | Dateien  
 
! style="width:15%" | Dateien  
 
|-  
 
|-  
| IDE<br/>Zielsystem
+
| (1)<br/>IDE und <br/>Zielsystem
 
|  
 
|  
 
In dieser Schicht werden die Eigenschaften des Entwicklungssystems und des Zielsystems beschrieben. Das sind in erster Linie Schalter, die für eine bedingte Kompilation des Quellcode herangezogen werden und Parameter für die Umgebung, wie z.B. das Netzwerk.
 
In dieser Schicht werden die Eigenschaften des Entwicklungssystems und des Zielsystems beschrieben. Das sind in erster Linie Schalter, die für eine bedingte Kompilation des Quellcode herangezogen werden und Parameter für die Umgebung, wie z.B. das Netzwerk.
Zeile 16: Zeile 17:
 
  socMananetUser.h
 
  socMananetUser.h
 
|-
 
|-
| Steuerung<br/>des<br/>Zeitverhalten
+
| (2)<br/>Steuerung<br/>des<br/>Zeitverhalten
 
|
 
|
 
Für möglichst genau Zeitabläufe in der loop-Funktion, unabhängig von der eingesetzten Hardware, wurde eine Zeitsteuerung eingerichtet, die eine Software-Uhr und einen Betriebsstundenzähler mit einer Auflösung von einer Millisekunde enthält. Daneben steht eine einstellbare Anzahl von Software-Zeitgebern zur Verfügung und das Echtzeitverhalten wird überwacht.
 
Für möglichst genau Zeitabläufe in der loop-Funktion, unabhängig von der eingesetzten Hardware, wurde eine Zeitsteuerung eingerichtet, die eine Software-Uhr und einen Betriebsstundenzähler mit einer Auflösung von einer Millisekunde enthält. Daneben steht eine einstellbare Anzahl von Software-Zeitgebern zur Verfügung und das Echtzeitverhalten wird überwacht.
Zeile 23: Zeile 24:
 
  LoopCheck.cpp
 
  LoopCheck.cpp
 
|-
 
|-
| Kommunikation
+
| (3)<br/>Kommunikation
 
|
 
|
 
Die Kommunikation erfolgt auf Basis von zyklischen Rundrufen, deren Inhalte vom Anwender asynchron eingestellt werden. Zur Zeit wird dafür das UDP-Protokoll bei den klassischen Internet-Schnittstellen Ethernet/LAN und WiFi/WLAN verwendet. Bei den typischen Arduino-Boards über das Ethernet- oder WiFi-Shield und bei den preiswerten WiFi-Modulen ESP8266 und ESP32 über die von Espressif für die Arduino-Umgebung zur Verfügung gestellten Bibliotheken.
 
Die Kommunikation erfolgt auf Basis von zyklischen Rundrufen, deren Inhalte vom Anwender asynchron eingestellt werden. Zur Zeit wird dafür das UDP-Protokoll bei den klassischen Internet-Schnittstellen Ethernet/LAN und WiFi/WLAN verwendet. Bei den typischen Arduino-Boards über das Ethernet- oder WiFi-Shield und bei den preiswerten WiFi-Modulen ESP8266 und ESP32 über die von Espressif für die Arduino-Umgebung zur Verfügung gestellten Bibliotheken.
Zeile 34: Zeile 35:
 
  Follower.cpp
 
  Follower.cpp
 
|-
 
|-
| Wartung
+
| (4)<br/>Wartung
 
|
 
|
 
Für die Wartung wird eine Schnittstelle für den Zugang durch den Gerätehersteller eingerichtet. Die kann ggf. auch proprietär ausgeführt sein. Allerdings geschieht der Zugriff auf das Gerät nach dem Pull-Prinzip (das Gerät initiiert die Kommunikation) und der Anwender wird eine angemessene Zeit vor dem Zugriff darüber informiert.
 
Für die Wartung wird eine Schnittstelle für den Zugang durch den Gerätehersteller eingerichtet. Die kann ggf. auch proprietär ausgeführt sein. Allerdings geschieht der Zugriff auf das Gerät nach dem Pull-Prinzip (das Gerät initiiert die Kommunikation) und der Anwender wird eine angemessene Zeit vor dem Zugriff darüber informiert.
Zeile 40: Zeile 41:
 
  in Entwicklung
 
  in Entwicklung
 
|-
 
|-
| Programmierung
+
| (5)<br/>Programmierung
 
|
 
|
 
Mit Programmierung ist an dieser Stelle die Gestaltung von Auswertungen und Abläufen im Gerät durch den Anwender gemeint. Die Programmierschnittstelle für den Anwender ist einheitlich für alle Geräte und ermöglicht in erster Linie die Kombination einzelner vordefinierter Module.
 
Mit Programmierung ist an dieser Stelle die Gestaltung von Auswertungen und Abläufen im Gerät durch den Anwender gemeint. Die Programmierschnittstelle für den Anwender ist einheitlich für alle Geräte und ermöglicht in erster Linie die Kombination einzelner vordefinierter Module.
Zeile 46: Zeile 47:
 
  in Entwicklung
 
  in Entwicklung
 
|-
 
|-
| Zustandsmaschine
+
| (6)<br/>Zustandsmaschine
 
|
 
|
 
Die funktionalen Abläufe erfolgen über eine Zustandsmaschine. Der aktuelle Zustand eines Gerätes ist Bestandteil der zyklischen Twitter-Botschaft.
 
Die funktionalen Abläufe erfolgen über eine Zustandsmaschine. Der aktuelle Zustand eines Gerätes ist Bestandteil der zyklischen Twitter-Botschaft.
Zeile 52: Zeile 53:
 
  in Entwicklung
 
  in Entwicklung
 
|-
 
|-
| Profile
+
| (7)<br/>Profile
 
|
 
|
 
In studentischen Projekten (auch Bachelor- und Masterarbeiten) werden Geräte für die Heimautomatisierung entwickelt und getestet. Hier ist eine enge Kooperation mit industriellen Geräteherstellern vorgesehen, soweit die hier vorgestellte dezentrale Heimautomatisierung in ihr Konzept passt.
 
In studentischen Projekten (auch Bachelor- und Masterarbeiten) werden Geräte für die Heimautomatisierung entwickelt und getestet. Hier ist eine enge Kooperation mit industriellen Geräteherstellern vorgesehen, soweit die hier vorgestellte dezentrale Heimautomatisierung in ihr Konzept passt.
Zeile 61: Zeile 62:
 
Intelligente Lichtsteuerung<br/></small>
 
Intelligente Lichtsteuerung<br/></small>
 
|}
 
|}
 +
Die Tabelle zeigt das Schichtenmodell für die Organisation der Software. In der Regel bauen die Schichten mit den höheren Nummern auf die mit den niedrigeren Nummern auf. Die Software für die Schichten wird als Open Source (siehe folgenden Abschnitt) auf [https://github.com/RobertPatzke/homeautomation '''GitHub'''] zur Verfügung gestellt.
 +
 +
= Lizenzmodell =
 +
Für den Anwender ist es schwer, die vielfältigen Lizenzmodelle zu durchschauen. Da die hier beschriebene Software für die Ausbildung angehender Elektronik-Ingenieure (Schwerpunkt: Einsatz von Mikrocontrollern und Internet der Dinge (IoT) bzw. Cyber-physische Systeme (CPS)) eingesetzt wird und eine Basis für eigene Entwicklungen darstellt, liegt das Modell von [[Wikipedia:de:Open_Source|'''Open Source''']] nahe. Allerdings sollen die mit Einfluss dieser Software erstellten studentischen Projekte sowie Bachelor- und Masterarbeiten ebenfalls allen Interessierten zur Verfügung stehen. Darum wird hier auf die [[Wikipedia:de:Creative_Commons|'''Creative Commons''']] verwiesen, und zwar, wie bei Wikipedia, auf die Variante CC-BY-SA. Das heißt, mit der Verwendung dieser Software verpflichtet man sich, die Namen der ursprünglichen (bisherigen) Autoren zu nennen und sie nur unter diesen Bedingungen auch weiterzugeben.

Version vom 20. Oktober 2017, 17:11 Uhr

Die Software für die Geräte der dezentralen Heimautomatisierung wird grundsätzlich in C/C++ geschrieben. Damit ist sie vom Ansatz her auf allen Geräten, für die entsprechende Compiler zur Verfügung gestellt werden, lauffähig. Wir haben als Grundlage für die Softwareentwicklung die Arduino Plattform gewählt. Das Konzept, sowohl die Software als auch die Hardware offen zu legen, ist natürlich eine ideale Basis für die Ausbildung angehender Ingenieure. Allerdings setzen wir für die Softwareentwicklung die Umgebung Eclipse ein, genauer ein Paket, das mit einem geeigneten Plug-in für die Arduino-Umgebung under dem Namen Sloeber als Freeware verfügbar ist. Weiteres dazu auf der Seite Firmware.

Schichtenmodell

Bei unserem Projekt gehen wir noch einen Schritt weiter als bei Arduino, indem wir die Vernetzung beliebiger Geräte (neben den Mikrocontrollern auch Smartphones, Tablets und PCs) über das sogenannte Social Manufacturing Network vereinheitlichen. Die entsprechende Kommunikationssoftware ist daher auch eine der unteren Schichten in einem entsprechend organisierten Schichtenmodell für die Software. Für das Betriebssystem Android stehen entsprechende Klassen in Java zur Verfügung.

Schicht Beschreibung Dateien
(1)
IDE und
Zielsystem

In dieser Schicht werden die Eigenschaften des Entwicklungssystems und des Zielsystems beschrieben. Das sind in erster Linie Schalter, die für eine bedingte Kompilation des Quellcode herangezogen werden und Parameter für die Umgebung, wie z.B. das Netzwerk.

arduinoDefs.h
environment.h
socMananetUser.h
(2)
Steuerung
des
Zeitverhalten

Für möglichst genau Zeitabläufe in der loop-Funktion, unabhängig von der eingesetzten Hardware, wurde eine Zeitsteuerung eingerichtet, die eine Software-Uhr und einen Betriebsstundenzähler mit einer Auflösung von einer Millisekunde enthält. Daneben steht eine einstellbare Anzahl von Software-Zeitgebern zur Verfügung und das Echtzeitverhalten wird überwacht.

LoopCheck.h
LoopCheck.cpp
(3)
Kommunikation

Die Kommunikation erfolgt auf Basis von zyklischen Rundrufen, deren Inhalte vom Anwender asynchron eingestellt werden. Zur Zeit wird dafür das UDP-Protokoll bei den klassischen Internet-Schnittstellen Ethernet/LAN und WiFi/WLAN verwendet. Bei den typischen Arduino-Boards über das Ethernet- oder WiFi-Shield und bei den preiswerten WiFi-Modulen ESP8266 und ESP32 über die von Espressif für die Arduino-Umgebung zur Verfügung gestellten Bibliotheken.

SocManNet.h
SocManNet.cpp
Twitter.h
Twitter.cpp
Follower.h
Follower.cpp
(4)
Wartung

Für die Wartung wird eine Schnittstelle für den Zugang durch den Gerätehersteller eingerichtet. Die kann ggf. auch proprietär ausgeführt sein. Allerdings geschieht der Zugriff auf das Gerät nach dem Pull-Prinzip (das Gerät initiiert die Kommunikation) und der Anwender wird eine angemessene Zeit vor dem Zugriff darüber informiert.

in Entwicklung
(5)
Programmierung

Mit Programmierung ist an dieser Stelle die Gestaltung von Auswertungen und Abläufen im Gerät durch den Anwender gemeint. Die Programmierschnittstelle für den Anwender ist einheitlich für alle Geräte und ermöglicht in erster Linie die Kombination einzelner vordefinierter Module.

in Entwicklung
(6)
Zustandsmaschine

Die funktionalen Abläufe erfolgen über eine Zustandsmaschine. Der aktuelle Zustand eines Gerätes ist Bestandteil der zyklischen Twitter-Botschaft.

in Entwicklung
(7)
Profile

In studentischen Projekten (auch Bachelor- und Masterarbeiten) werden Geräte für die Heimautomatisierung entwickelt und getestet. Hier ist eine enge Kooperation mit industriellen Geräteherstellern vorgesehen, soweit die hier vorgestellte dezentrale Heimautomatisierung in ihr Konzept passt.

Intelligente Bewegungsmelder
Universelle Funkschalter
Intelligente Steuerung von Jalousien
Intelligente Lichtsteuerung

Die Tabelle zeigt das Schichtenmodell für die Organisation der Software. In der Regel bauen die Schichten mit den höheren Nummern auf die mit den niedrigeren Nummern auf. Die Software für die Schichten wird als Open Source (siehe folgenden Abschnitt) auf GitHub zur Verfügung gestellt.

Lizenzmodell

Für den Anwender ist es schwer, die vielfältigen Lizenzmodelle zu durchschauen. Da die hier beschriebene Software für die Ausbildung angehender Elektronik-Ingenieure (Schwerpunkt: Einsatz von Mikrocontrollern und Internet der Dinge (IoT) bzw. Cyber-physische Systeme (CPS)) eingesetzt wird und eine Basis für eigene Entwicklungen darstellt, liegt das Modell von Open Source nahe. Allerdings sollen die mit Einfluss dieser Software erstellten studentischen Projekte sowie Bachelor- und Masterarbeiten ebenfalls allen Interessierten zur Verfügung stehen. Darum wird hier auf die Creative Commons verwiesen, und zwar, wie bei Wikipedia, auf die Variante CC-BY-SA. Das heißt, mit der Verwendung dieser Software verpflichtet man sich, die Namen der ursprünglichen (bisherigen) Autoren zu nennen und sie nur unter diesen Bedingungen auch weiterzugeben.