{"id":277,"date":"2017-06-11T21:53:22","date_gmt":"2017-06-11T19:53:22","guid":{"rendered":"https:\/\/www.pingu-mobil.de\/iot\/?p=277"},"modified":"2021-05-14T10:07:51","modified_gmt":"2021-05-14T08:07:51","slug":"objektorientierter-systementwurf-datenmodell-fuer-unser-alarmsystem","status":"publish","type":"post","link":"http:\/\/www.iot-embedded.de\/iot-2017\/home-security\/objektorientierter-systementwurf-datenmodell-fuer-unser-alarmsystem\/","title":{"rendered":"Objektorientierter Systementwurf (Datenmodell) f\u00fcr unser Alarmsystem"},"content":{"rendered":"<p>Zur Abbildung unseres Vorhabens, ein Alarmsystem bestehend aus diversen Funk-Sensoren und -Aktoren mittels eines Raspberry Pi zu realisieren, war der Entwurf eines objektorientierten Datenmodells notwendig. Diese Architektur bildet den Grundstein f\u00fcr die Alarmsystem-Logik, also das Alarmsystem-Backend, auf dem Raspberry Pi. Die Wahl bez\u00fcglich der Programmiersprache f\u00fcr diesen Teil unserer L\u00f6sung ist auf Java gefallen.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-278\" src=\"https:\/\/www.pingu-mobil.de\/iot\/wp-content\/uploads\/2017\/06\/klassen_model-300x143.png\" alt=\"\" width=\"803\" height=\"383\" srcset=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/klassen_model-300x143.png 300w, http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/klassen_model-1024x488.png 1024w, http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/klassen_model-768x366.png 768w, http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/klassen_model.png 1187w\" sizes=\"(max-width: 803px) 100vw, 803px\" \/><\/p>\n<p>Das grundlegende Element in unserem entworfenen Datenmodell bildet die abstrakte Klasse Component. Diese Klasse beerbt die Klasse Sensor und die Klasse Aktor. Ein Sensor stellt in unserem Datenmodell eine Komponente dar, welche Input f\u00fcr eine Alarmregel ist und deren Zustand beziehungsweise die logische Verkn\u00fcpfung der Zust\u00e4nde mehrerer Sensoren einen Alarm ausl\u00f6sen kann. Die Klassen Motionsensor (Bewegungssensor) und Doorsensor (T\u00fcrsensor bzw. Reed-Sensor) sind konkrete Implementierungen eines Sensors und erben hierf\u00fcr von der Klasse Sensor.<\/p>\n<p>Hierzu analog spiegelt sich diese Vererbungshierarchie bei den Aktoren hab. Aktoren sind aktive Komponenten unseres Alarmsystems, welche als Ergebnis eines Alarms aktiviert werden k\u00f6nnen. Hierbei stehen die konkreten Implementierungen f\u00fcr eine Sirene und eine Steckdose, an welche beispielsweise eine Lampe angeschlossen werden kann, zur Verf\u00fcgung. Des Weiteren enth\u00e4lt das Modell bei den Aktoren auch eine Kamera, wobei diese sich von den anderen Komponenten bez\u00fcglich der Funk-Kommunikation wesentlich unterscheidet, da hier kein 868-Mhz-Funk eingesetzt wird, sondern jede IP-f\u00e4hige Kamera unterst\u00fctzt werden soll, welche eine URL zum Abfragen eines Livebildes beziehungsweise Videostreams bereitstellt.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-280\" src=\"https:\/\/www.pingu-mobil.de\/iot\/wp-content\/uploads\/2017\/06\/2-300x193.png\" alt=\"\" width=\"860\" height=\"553\" srcset=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/2-300x193.png 300w, http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/2-1024x660.png 1024w, http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/2-768x495.png 768w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/p>\n<p>Die Funktionalit\u00e4ten der konkreten Sensor- und Aktortypen sind in die Superklassen Sensor, Aktor beziehungsweise bei den absoluten Grundfunktionalit\u00e4ten in die Klasse Component ausgelagert. Die Kamera beispielsweise weicht von dem sonst verwendeten typischen Schema (da kein 868-Mhz-Funk) ab und \u00fcberschreibt folglich die relevanten Methoden um die abweichende Funktionalit\u00e4t zu realisieren.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-282\" src=\"https:\/\/www.pingu-mobil.de\/iot\/wp-content\/uploads\/2017\/06\/diagram-266x300.png\" alt=\"\" width=\"825\" height=\"930\" srcset=\"http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/diagram-266x300.png 266w, http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/diagram-909x1024.png 909w, http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/diagram-768x865.png 768w, http:\/\/www.iot-embedded.de\/iot-2017\/wp-content\/uploads\/sites\/2\/2017\/06\/diagram.png 1238w\" sizes=\"(max-width: 825px) 100vw, 825px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Zentraler Einstiegspunkt f\u00fcr unser Alarmsystem stellt die Klasse Alarmsystem dar. Bei der Implementierung wurde ein Singleton-Entwurfsmuster eingesetzt, sodass maximal eine Instanz f\u00fcr ein Alarmsystem zur Verf\u00fcgung steht. Auf diese Instanz kann mit Alarmsystem.getInstance() zugegriffen werden. Dieses Alarmsystem stellt Methoden bereit, welche beim Eintreffen einer Registrierungsmessage eines Sensors oder Aktors aufgerufen werden, und dann die entsprechenden Datenobjekte erzeugen. Auch Datennachrichten, beispielweise das \u00d6ffnen einer T\u00fcr eines registrierten T\u00fcrsensors, werden vom Alarmsystem-Singleton prozessiert.<\/p>\n<p>Das Ausl\u00f6sen eines Alarms funktioniert \u00fcber Datenobjekte der Klasse Rule (Regel). Eine Regel enth\u00e4lt mindestens einen Sensor als ausl\u00f6senden Input und mindestens einen Aktor, welcher dann aktiviert wird, wenn die Sensoren den in der Regel definierten Input zum Ausl\u00f6sen der jeweiligen Alarmregel liefern.<\/p>\n<p>Das Persistieren der Datenobjekte erfolgt \u00fcber die Implementierung der Serializable-Schnittstelle. Sowohl Aktoren und Sensoren, als auch die Regeln implementieren diese Schnittstelle. So kann beim initialen Starten des Raspberry Pi der aktuelle Sensor-, Aktor- und Regelstand wiederhergestellt werden.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zur Abbildung unseres Vorhabens, ein Alarmsystem bestehend aus diversen Funk-Sensoren und -Aktoren mittels eines Raspberry Pi zu realisieren, war der Entwurf eines objektorientierten Datenmodells notwendig. Diese Architektur bildet den Grundstein f\u00fcr die Alarmsystem-Logik, also das Alarmsystem-Backend, auf dem Raspberry Pi.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"_links":{"self":[{"href":"http:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/277"}],"collection":[{"href":"http:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/comments?post=277"}],"version-history":[{"count":1,"href":"http:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/277\/revisions"}],"predecessor-version":[{"id":578,"href":"http:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/277\/revisions\/578"}],"wp:attachment":[{"href":"http:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/media?parent=277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/categories?post=277"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/tags?post=277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}