Softwareentwicklung

Allgemeines

MED greift zur Realisierung seiner Software-Komponenten auf einige bestehende Bibliotheken und Projekte zurück, basierend auf welchen er seine eigenen Komponenten aufbaut.

Auf dem verwendeten Raspberry Pi laufen (auf einem kopflosen Raspbian-Betriebssystem) zwei Projektrelevante Softwares:

  • NodeRED stellt mit seiner graphischen Programmieroberfläche und vielseitigen Integrationen die zentrale Steuereinheit MEDs dar. Zur Ergänzung der Standardfunktionen NodeREDs werden folgende Pakete verwendet:
    • node-red-contrib-speakerpi erlaubt das Abspielen von Tönen auf dem Raspberry Pi selbst
    • node-red-contrib-discord erlaubt das Empfangen und Senden von Nachrichten über den Anbieter Discord.
    • node-red-contrib-telegrambot erlaubt das Empfangen und Senden von Nachrichten über den Anbieter Telegram
    • node-red-dashboard erlaubt das Anlegen einer Website als Steuereinheit
  • Mosquitto ist ein einfacher MQTT-Broker, welche eine einfache, kabellose Kommunikation zwischen verschiedenen Geräten – hier Raspberry Pi und ESP8266 – ermöglicht.

Auf beiden verwendeten Microcontrollern kommen bestehende Softwarebibliotheken zum Einsatz, welche folgende Funktionalitäten bereitstellen:

  • WiFiManager (v0.15.0) von tzapu und tablatronix – Ermöglicht die dynamische Eingabe von WiFi-Verbindungsdaten sowie weiteren Parametern, anstatt diese fest im Quelltext zu hinterlegen
  • PubSubClient (v2.7.0) von Nick O’Leary– Implementiert MQTT-Kommunikation auf Seiten der Microcontroller
  • ArduinoJSON (v6.18.3) von Benoit Blanchon – Erlaubt das Erstellen und Auslesen von JSON-Strukturen, welche dann etwa über ein Netzwerk übertragen oder lokal gespeichert werden können.

Zusätzlich werden die Standard-Bibliotheken ESP8266WiFi und FS (Filesystem) verwendet.

Dazu kommt auf dem Klingel-Microcontroller die Bibliothek LiquidCrystal_I2C (v1.1.2) von Frank de Brabander, welche zur Steuerung des angeschlossenen LCD über einen I2C-Bus verwendet wird.

Systemaufbau und Schnittstellen

Gesamtsystem

Das System besteht, wie bereits in der Hardwaredokumentation beschrieben, aus einem Raspberry Pi und zwei ESP8266 Microcontrollern.
Aus der obenstehenden Grafik kann der Aufbau des Systems und die Verknüpfung der einzelnen Geräte entnommen werden: Die zentrale Steuereinheit des Systems befindet sich innerhalb von NodeRED und kommuniziert von dort aus auf zwei Arten mit anderen Geräten und Systemen:
Der direkt an den Raspberry Pi angeschlossene Reed-Switch für die Überwachung der Haustür wird über einen GPIO-Pin des Raspberry Pi angesteuert, die beiden Microcontroller jeweils per MQTT über einen lokalen Mosquitto-Server als Broker.
Die an die Microcontroller angeschlossenen Komponenten sind fest verlötet und werden über die zuvor genannten Bibliotheken angesprochen.

Entwicklungsablauf

Vor Beginn der eigentlichen Entwicklung wurden die oben genannten Bibliotheken und Packages gewählt und installiert.

Als erster eigentlicher Entwicklungsschritt werden die grundlegenden NodeRED-Flows angelegt, welche zu diesem Zeitpunkt bereits eine erste Version des Dashboards sowie einen Debug-Flow enthalten, welcher zur Simulation von MQTT-Eingaben genutzt werden kann.
Außerdem enthalten ist die grundlegende Version des Ablaufs, welcher beim Eintreten eines Events (Klingeln, Briefeinwurf, Tür geöffnet/geschlossen) aufgerufen wird:

Flow bei Klingel Event (finale Version)

Dieser Ablauf setzt maßgeblich auf eigenprogrammierte “Gate”-Functions. Diese haben zwei mögliche Inputs: Zum einen die kleinen, grauen Nodes, welche hier Eingänge aus den Dashboard-Einstellungen darstellen – hiermit kann der Status (An/Aus) des Gates verändert werden, wenn eine entsprechende Änderung im Dashboard vom Nutzer vorgenommen wird. Der zweite mögliche Input des Gates wird vom Gate selbst nicht weiter verarbeitet, sondern weitergeleitet, sofern der Status des Gates aktuell “An” ist – andernfalls wird die Nachricht ignoriert. Je nach Gate wird die Nachricht an eine entsprechende Node weitergeleitet – das Aktiv-Gate leitet jeweils an alle Funktionsgates weiter, das Audio-Gate an die Lautsprecherfunktion und so weiter.

Als nächstes werden die grundlegenden Versionen des Microcontroller-Codes angelegt. Diese basieren grob auf Beispielen aus Vorlesung und Übungen, werden jedoch angepasst, um gleichzeitig den WiFiManager und MQTT-Verbindungen benutzen zu können. Dabei werden die Verbindungsdaten zum MQTT-Broker nicht fest im Quelltext hinterlegt sondern dynamisch zum Systemstart als Custom Parameter über den WiFiManager abgefragt:

WiFiManager Custom Parameter

Diese Parameter werden nach einer erfolgreichen Verbindung in Variablen zwischengespeichert und vom System verwendet. Um die Daten nicht bei jedem Systemstart erneut eingeben zu müssen werden diese darüber hinaus noch im Dateisystem in einer .json Datei gespeichert (und vor dem Anlegen der Custom Parameter erneut geladen).

Als nächstes wird Unterstützung für die Messenger Telegram und Discord implementiert, sodass Benutzer des Systems von diesen Nachrichten erhalten und Nachrichten an diese Senden können. Hierfür werden die oben genannten Bibliotheken für die jeweiligen Messenger verwendet, welche jedoch jeweils vom Endbenutzer an zwei Stellen konfiguriert werden müssen: Zum einen muss jeder Benutzer einen eigenen API-Token angeben (erhalten für Telegram vom sog. BotFather, für Discord über die Discord Developer Seite), zum andern muss jeweils klargemacht werden, an welchen Chat oder Chatkanal der jeweilige Bot eine Nachricht senden soll. Diese haben jeweils eine dem jeweiligen System zugehörige ID, welche der Benutzer herausfinden muss. Um dies zu erleichtern, wird die Möglichkeit bereitgestellt, beim Empfang einer Nachricht, welche das Kommando /start oder /info enthält, dem jeweiligen Benutzer diese ID automatisch zuzuschicken:

Ablauf des ID-Findens (Telegram)
handleMessage Function Node

Die gefundene ID muss vom Benutzer selbst dann noch einmalig in eine Function-Node eingetragen werden. Diese könnte auch im Dashboard übergeben werden, dort ist sie jedoch nicht persistent, geht also bei Neustarts des Systems verloren – beim Eintragen in einer function-Node ist dies nicht der Fall, weshalb diese Variante ausgewählt wurde.

An dieser Stelle werden die NodeRED-Flows in drei Teile aufgeteilt (sowie den aktuell noch vorhandenen Debug-Flow):
> Configuration: Enthält, der Übersicht halber, beinahe ausschließlich Nodes, welche vom Endbenutzer einmalig konfiguriert werden müssen.
> MED-Logik: Enthält den Großteil der logischen Abläufe
> Dashboard: Enthält alle Komponenten welche direkt im Dashboard verwendet werden sowie die Reaktionen auf Dashboard-Aktionen, welche nicht ebenfalls in anderen Flows verwendet werden.
Die drei Flows werden dabei untereinander durch Link in/Link out Nodes verbunden, welche drahtlose Verbindungen zwischen Nodes (auch zwischen verschiedenen Flows) ermöglichen. [Genauere Übersicht über die einzelnen Flows weiter unten]

Zwischenzeitlich werden die tatsächlichen Detektions-Funktionen der Microcontroller programmiert: Ein Knopfdruck für die Klingel und ein IR-Sensor, welche jeweils beim Auslösen eine MQTT-Nachricht versenden, welche dann von NodeRED empfangen und verarbeitet werden.

Nun wird die Historienfunktion hinzugefügt. Diese speichert, sofern jeweils im Dashboard aktiviert, Events sowie die aktuelle Zeit in einer csv-Datei und gibt diese wenn gewünscht auf einer Extraseite im Dashboard wieder aus.

Historientabelle mit Beispieleinträgen

Als letztes Feature wird nun noch das LCD integriert, auf welchem Nachrichten des Benutzers angezeigt werden können. Hierbei kann der Benutzer entweder mit dem Kommando /send Nachricht seine gewünschte Nachricht an NodeRED senden, oder diese direkt im Dashboard in das zuständige Textfeld eingeben. Darüber hinaus kann er im Dashboard auswählen, wie lange die jeweilige Nachricht angezeigt werden soll, wodurch ggf. Akkuleistung gespart werden kann.
Wird eine Nachricht von einem Messenger erhalten, so prüft NodeRED zunächst, ob die Nachricht auf das Display passt (Dieses unterstützt mit 2 Reihen a 16 Zeichen insgesamt 32 maximal Zeichen) – ist dies nicht der Fall so wird dem Nutzer eine entsprechende Fehlermeldung angezeigt, andernfalls wird das Display mit der Nachricht für die im Dashboard gewählte Zeit aktiviert. Eine Beispiel-Ausgabe (auf einem 4×20 Display) sieht wie folgt aus:

Ausgabe eines Beispiel-Textes auf einem (größeren) LCD

Nachdem die Softwareentwicklung an sich nun abgeschlossen ist, bleiben nur noch einige Aufräumarbeiten, wie etwa den bisherigen working-title in allen Instanzen durch den neu gewählten Projekttitel MED zu ersetzen oder den Debug-Tab des Dashboards und diverse Serial.println()s aus dem Quelltext der Microcontroller zu entfernen.

Erstellte Oberflächen

An dieser Stelle werden die entworfenen Oberflächen gezeigt, welche entwickelt wurden, bisher aber noch nicht direkt vorgestellt wurden.

Dashboard

Das Dashboard bietet, wie bereits erwähnt, genaue Kontrolle darüber, welche Aktion ausgehend von einem Event getroffen werden soll. Darüber hinaus kann pro Event festgelegt werden, wieviel Zeit zwischen zweimaligem Auslösen des Events vergehen muss.
Zusätzlich kann der Nutzer Nachrichten an das LCD im Klingelgehäuse versenden und die Dauer der Nachrichtenanzeige auf dem LCD bestimmen.
Zuletzt kann noch ausgewählt werden, ob Nachrichten via Telegram, Discord oder Beidem empfangen werden sollen.

WiFiManager mit MQTT-Custom-Parametern

Diese Oberfläche wird vom WiFiManager automatisch generiert – aus den Standard-Daten, die für einen WiFi-Login benötigt werden, und den übergebenen Custom Parametern (s. Quelltext oben).

Erstellte Flows

An dieser Stelle werden die drei Flows gezeigt, welche entwickelt wurden, bisher aber noch nicht direkt in Gänze vorgestellt wurden.

Configuration-Flow

Der Configuration-Flow enthält Nodes, welche der Benutzer einmalig beim Aufsetzen des Systems konfigurieren muss. Diese sind jeweils mit einem [!] gekennzeichnet und beziehen sich hauptsächlich auf das Empfangen und Senden von Nachrichten über die verschiedenen Messenger.

Dashboard

Der Dashboard-Flow enthält alle Nodes, welche direkt im Dashboard angezeigt werden (türkis/hellblau), oder direkt durch diese Nodes aber keine anderen beeinflusst werden – dies sind teils MQTT-Nodes, die Intervalle oder Texte an Microcontroller versenden, aber auch die Nodes, welche sich mit der Historientabelle befassen (unten) – entweder um Daten zu laden oder um die Tabelle zu leeren.

MED-Logik

Der MED-Logik Flow stellt die grundsätzliche Logik MEDs bereit – einen Eingang für MQTT-Nachrichten, welche dann nach Thema zugeordnet werden und anschließend den bereits beschriebenen Teilflow mit verschiedenen Gates und Ausgängen durchlaufen, sowie einen Eingang für Nachrichten des am Raspberry Pi angeschlossenen Reed-Switches, welche dann ebenfalls einen ähnlichen Ablauf durchlaufen.
Außerdem werden wieder verwendbare Teilflows zum schreiben in die Historie und zum Senden von Nachrichten über die jeweils im Dashboard aktivierten Messenger-Dienste definiert (oben).

Hardwareentwicklung

Durch den modularen Aufbau von MED lässt sich die Hardware in 3 Abschnitte unterteilen: die Türklingel mit Display, den Tür-Sensor und den Briefkasten-Detektor. Im folgenden Beitrag wird die verwendete Hardware sowie der genaue Aufbau jedes Moduls beschrieben und die jeweilige Funktionsweise vorgestellt.

Die Türklingel

Die in Abb.2 gezeigte Türklingel ist aus Hardware-Sicht das komplexeste Modul. Sie besteht aus einem Mikrocontroller, dem Klingelknopf, dem LCD-Display zum Anzeigen der Nachrichten sowie einem Akku-Pack zur Energieversorgung. Außerdem wurde ein Widerstand benötigt, da die am Knopf anliegende Spannung sonst zu hoch wäre. Wie man dem in Abb. 1 gezeigten Schaltplan entnehmen kann liegt dabei das LCD-Display an den Pins D1 und D2 an, der Knopf ist mit Pin D5 verbunden. Beim drücken des Knopfs sendet dieser nun ein Signal an den Mikrocontroller, wodurch eine Benachrichtigung beim jeweiligen Endgerät des Nutzers ankommt. Dieser kann nun als Reaktion eine eigene Nachricht schreiben, welche über WLAN vom Mikrocontroller empfangen wird und anschließend am LCD-Display angezeigt wird.

Abb. 1: Schaltplan Türklingel
Abb. 2: Die fertige Klingel

Der Tür-Sensor

Für den in Abb. 4 dargestellten Türsensor wurde ein Raspberry Pi 3B als Mikrocontroller verbaut. Dieser hat gleichzeitig die Funktion, die Konfiguration von NodeRED sowie das dort gestaltete Dashboard zu verwalten. Außerdem verbaut sind zwei Widerstände, welche dazu dienen, die Spannung auf einen für die Reed-Switches brauchbaren Wert zu verringern. Für die eigentliche Funktion des Tür-Sensors wurden schließlich Reed-Switches verwendet. Davon befindet sich einer am Raspberry Pi, der andere muss vom Nutzer gegenüber an der Tür angebracht werden. Wird nun die Tür geöffnet, so wird das Magnetfeld des Reed-Switches unterbrochen, wodurch eine vom Mikrocontroller eine Benachrichtigung an den Nutzer geschickt wird.

Abb. 3: Schaltplan Tür-Sensor
Abb. 4: Der fertige Tür-Sensor

Der Briefkasten-Detektor

Die Erkennung von Posteinwürfen findet hier über eine Lichtschranke statt. Diese besteht aus dem in Abb.1 gezeigten Widerstand und einer Infrarot-Diode, sowie dem in Abb.2 gezeigten IR-Shield und dem dazugehörigen Mikrocontroller. Dabei wird die Diode auf einer Seite des Briefkastens angebracht und über ein Kabel mit dem Mikrocontroller verbunden. Dieser empfängt nun das IR-Signal am Receiver und sendet wenn die Lichtschranke durchbrochen wird per WLAN eine Benachrichtigung an den Nutzer, dass Post gekommen ist.

Abb. 5: Schaltplan Lichtschranke
Abb. 6: IR-Shield
Abb. 7: Der fertige Briefkasten-Detektor

3D-Modellierung

Verwendete Werkzeuge

Modellierungssoftware: Fusion360

Messwerkzeug: digitaler Messchieber

Raspberry-PI-Gehäuse

Das Modell besteht aus dem Gehäuse selbst, sowie dem Deckel

Bemaßung: Deckel (LxBxH):  63.6×24.8×2.7mm, Gehäuse (LxBxH): 88.9×62.3×24.5mm

Deckel
Gehäuse

Modellierungsprozess

Um den Zeitaufwand zu verringern, wurde vor der Modellierung nach bereits bestehenden Gehäusen für Raspberry-PIs gesucht. Dabei wurde sich dann für dieses Gehäuse entschieden. Bei der Anpassung wurde das bestehende Modell auf 103,5% skaliert, da es eng ausfallen solle. Zudem wurde eine Wandhalterung hinzugefügt und ein Deckel für die Aussparung der GPIO Pins modelliert. Letzterer wurde nicht gedruckt, da es zu Komplikationen kam. Außerdem trägt der Deckel nichts zur Funktion bei und auch nicht zur Optik, wenn der Raspberry-PI an der Wand hängt.

Um sicher zu gehen, dass das Modell nicht zu groß und nicht zu klein ist, wurde der Raspberry-PI nach der ersten Vergrößerung ausgemessen. Daraus ergab sich eine Verkleinerung.

Klingelkasten und Briefdetektor

Wie der Klingelkasten besteht der Briefdetektor aus dem Gehäuse selbst und dem Deckel.

Bemaßungen: Klingelkasten (LxBxH): 108x73x25mm, Klingeldeckel (LxBxH): 104x72x2mm, Briefdetektorkasten (LxBxH): 63x38x24.5mm, Briefdetektordeckel (LxBxH): 59x37x2mm

Klingelkasten (innen)
Klingekkasten (außen)
Klingeldeckel
Briefdetektorkasten und -deckel

Modellierungsprozess

Für die Behausungen der Klingel mit Display und dem Briefdetektor wurde zunächst ermittelt, wie man die elektronischen Bauteile anordnet. Dabei wurde einerseits auf ein möglich kompaktes Design gesetzt. Gleichzeitig wurde darauf geachtet, dass beim Druck so wenige Stützstrukturen wie möglich gebraucht werden, um die Nachbearbeitung der Modelle zu minimieren. Das Anordnen der Bauteile diente auch dazu die Grundmaße der Gehäuse zu erhalten. Um möglichst wenige Iteration von Prototypen zu benötigen, wurden die Maße der 3D-Modelle mit den Maßen der Anordnungen der Bauteile, sowie der Bauteile selbst, mehrmals verglichen.

Projektplanung, Aufgabenteilung und Risikomanagement

Projektplanung

Zu Beginn der Projektphase wurde innerhalb der Gruppe über eine Woche ein Brainwriting durchgeführt, in welchem zunächst grobe Ideen gesammelt wurden. Anschließend wurden diese Ideen zusammengesetzt und abgewandelt, um so die finale Projektidee zu erhalten.

Die eigentliche Bearbeitungsphase begann ab dem 31.07.2021. Ab diesem Zeitpunkt waren alle Deadlines (vgl. Tabelle) des Projekts sowie einige Meilensteine (Fertigstellung 3D-Modelle, Fertigstellung bestimmter Softwareteile, …) über eine Google Docs Tabelle festgehalten, in welche außerdem von jedem Teammitglied eingetragen wurde, an welchem Tag welche Tätigkeiten durchgeführt werden sollten.

DatumPerson(en)Tätigkeit
04.08.Jamal Frerichs, Jonas KöhlerMakerspace: brauchbare Hardware
06.08.Hagen EickhoffPlanung: Anforderungen (Soll/Muss/Kann)
26.08.Marcel OppermannMakerspace: 3D-Modelle (v1) fertigstellen und drucken
14.09.Hagen Eickhoff, Jonas KöhlerSoftware Feature-Complete
16.09AlleFertigstellung Werkstück, Dokumentation, Präsentation
Tabelle: Deadlines

Verantwortungen, Aufgabenteilung

Anhand der zuvor abgestimmten Interessensgebiete der einzelnen Gruppenmitglieder übernahm jedes einen Verantwortungsbereich innerhalb des Projekts.

Aufgaben wurden dabei primär aus dem jeweils eigenen Bereich bearbeitet, einige wurden jedoch auch gemeinsam und/oder über Verantwortungsbereiche hinaus bearbeitet (vgl. Tabelle).

PersonZuständigkeitSonstige Tätigkeiten
Hagen EickhoffSoftwareentwicklung Dokumentation, Organisation
Jamal FrerichsAufbau3D-Design, Hardwareentwicklung, Dokumentation
Jonas KöhlerHardwareentwicklungSoftwareentwicklung, Dokumentation
Marcel Oppermann3D-DesignDokumentation
Tabelle: Zuständigkeiten und sonstige Tätigkeiten

Risikomanagement

Im Vorfeld der Bearbeitungsphase wurden einige Risiken identifiziert und, sofern möglich, schützende Maßnahmen bzw. Reaktionen festgelegt.

Risiko: Ausfall einzelner Gruppenmitglieder (z.B. krankheitsbedingt)
mögliche Auswirkungen: je nach Phase; leichter bis schwerer Projektverzug
Vorbeugung: Jeden Tag: aktuelle, digitale Arbeitsfortschritte im GitHub Repository sichern
Behandlung: Anderes Gruppenmitglied übernimmt temporär Aufgaben mit den Daten aus dem GitHub Repository

Risiko: Fehler bei 3D-Modellierung
mögliche Auswirkungen: keine (fertigen) Cases
Vorbeugung: Möglichst frühzeitiges Abschließen des 3D-Designs und -Drucks, um notfalls korrigieren zu können
Behandlung: sofern zeitlich möglich: Korrekturen

Risiko: Fehler bei Hardware-Zusammenbau
mögliche Auswirkungen: kaputte Hardware
Vorbeugung: Ersatzteile vorrätig haben
Behandlung: erneuter, korrigierter Aufbau

Risiko: Datenverlust
mögliche Auswirkungen: je nach Daten; leichter Verzug bis Projektverlust
Vorbeugung: Daten online speichern; je nach Art im GitHub Repository oder Google Drive
Behandlung:

Risiko: IR-Sensor nicht verwendbar (fehlerhafte Hardware, Probleme bei Software-Implementierung da Sensor unbekannt)
mögliche Auswirkungen: Projektteil nicht realisierbar
Vorbeugung: Frühzeitiger Beginn mit Implementierung und Funktionsprüfung
Behandlung: Ersetze IR-Sensor durch Reed-Switch

Anforderungen

Projektanforderungskatalog

Durch ein Brainwriting wurden alle Anforderungen an das Projekt gesammelt und aufgelistet. Anschließend wurden die Punkte in einem Meeting nach Bereich und Wichtigkeit eingeteilt und schließlich in der Tabelle 1 zusammengefasst.

Da die Hardware für das Projekt unerlässlich war gab es hier lediglich Muss- und Soll-Ziele. Diese wurden, wie in der Hardware-Dokumentation aufgezeigt, vollständig umgesetzt und stellten auch früh im Projekt ein großes Augenmerk dar.

Die Muss-Anforderungen der Software stellten die Grundlagen des Projekts dar, ohne die die eigentlichen Funktionen der einzelnen Komponenten nicht funktioniert hätten. In den Soll-Zielen wurden weitere Anforderungen an das Projekt gestellt, ohne die es zwar funktioniert hätte, jedoch nicht die Funktionalitäten umfasst hätte für die es entwickelt wurde. In den Kann-Zielen kamen schließlich noch Quality-of-Life-Funktionen hinzu, durch die MED insgesamt hochwertiger und praktikabler werden würde. Da die Softwareentwicklung insgesamt gut verlief konnten hier alle Muss-, und Soll-Ziele erfüllt werden, bei den Kann-Zielen ergab sich jedoch nur noch Zeit für die Discord-Integration, nicht aber für das Auslesen und Anzeigen des Akkustands.

Für die CAD-Entwicklung wurden lediglich wenige Anforderungen erhoben, da MED einerseits ein funktionales statt ästhetisches Produkt darstellt und andererseits die begrenzt verfügbare Zeit im Makerspace nur begrenzte Gehäuse-Prototypen erlaubt. Aus diesem Grund waren schlichte aber gut passende Cases für die Sichtbaren Module, also die Klingel und den Tür-Sensor ein Muss-Ziel. Da jedoch keine Hardware frei liegen soll war auch für den im Briefkasten nicht sichtbaren Mikrocontroller 2 ein Case geplant, weshalb es sich in den Soll-Anforderungen wiederfindet. Durch einige Komplikationen im Makerspace sowie einen späten Druckauftrag konnte schließlich das Kann-Ziel einer GPIO-Abdeckung nicht mehr erfüllt werden, was jedoch die Funktionalität von MED nicht weiter beeinträchtigt.

Motivation

Man stelle sich vor…

  • … jemand klingelt, aber man bekommt es nicht mit, denn man sitzt grade im Garten, hat Kopfhörer auf oder die Klingel ist schlicht zu leise.
  • … jemand klingelt, aber es ist niemand zu Hause – man möchte der Person aber trotzdem etwas mitteilen.
  • … man wartet auf einen wichtigen Brief, hat aber nicht die Zeit, den ganzen Vormittag aus dem Fenster zu schauen und auf die Post zu warten.
  • … man fährt in den Urlaub, möchte aber trotzdem wissen, wann jemand anderes bei einem zu Hause ist – sei es um die Blumen zu gießen oder unbefugt.

All diese Probleme werden durch MED behoben:
Das System, bestehend aus drei Geräten, bietet eine eigene Klingel, einen Bildschirm für Nachrichten, einen Magnet-Schalter für die Haustür und einen IR-Sensor, der bemerkt, wenn etwas in den Briefkasten geworfen wird.
Die so gesammelten Informationen kommen an zentraler Stelle zusammen und können von dort aus auf verschiedene, beliebig an- und abwählbare, dem Benutzer angezeigt werden – etwa als Nachrichten über verschiedene Messenger-Dienste oder als Audio-Signal. Außerdem können die Informationen können zur späteren Auswertung gespeichert werden.
Zusätzlich kann der Benutzer auch in die andere Richtung kommunizieren und per LCD Nachrichten an die Person auf der anderen Seite der Haustür senden.

Das System als ganzes zielt also darauf ab, den Benutzer ein wenig mehr Peace-of-Mind zu ermöglichen und ihren Alltag etwas zu erleichtern. Darüber hinaus bietet es mit seinen Funktionen auch Unterstützung für körperlich Beeinträchtigte – jemand, der etwa sein Gehör verloren hat, wird eine normale Klingel kaum wahrnehmen können – eine Notification auf dem Smartphone jedoch schon.

Die Idee für MED entstand im Anschluss an ein Brainwriting, dessen verschiedene Ideen zu einer zusammen verwoben wurden.