Internet der Dinge SS2014/IDD14P03 ZigBee HUE Android

Aus Verteilte Systeme - Wiki
Wechseln zu: Navigation, Suche

Projektbeschreibung

Zielsetzung des Projektes ist die Konzeption und die Entwicklung einer Android-App, die das ZigBee-basiertes Beleuchtungssystem von PHILIPS HUE drahtlos steuert. Die App soll folgende Features enthalten:

  • Eine konfigurationsfreie drahtlose Verbindung zum PHILIPS HUE System
  • Live Camera Preview mit einem zentrierten Overlay-Rechteck
  • Ermittelung der arithmetischen Mittelwertfarbe des Overlay-Rechtecks
  • Die Farbe auf die im System verfügbaren Lampen übertragen

Systemaufbau

Systemaufbau

Philips Hue ist ein über Apps steuerbares und drahtlos vernetztes Beleuchtungssystem.

Das System besteht aus 4 Kommponenten:

Die App

In diesem Projekt beschränke ich mich auf die Konzeption und die Entwicklung einer Android-App. Die App soll den User die Möglichkeit geben über eine graphische Schnittstelle mit den Lampen zu interagieren.

Die Bridge

Sie wird verwendet um die Lampen mittels des Zigbee LightLink Standart miteinander zu verbinden und ermöglicht die Kommunikation zwischen den Lampen und der App via Internet. Sie kann bis zu 50 Zigbee-Geräte ansteuern.

Die Bridge besitzt eine Hauptplatine, die an der Vorderseite der Bridge mit einem Flachbandkabel verbunden ist. Dieses Kabel versorgt die LEDs und den Hauptknopf mit Strom. Die Platine verfügt wiederum über die beiden Hauptkomponenten:

  ARM 32-Bit Cortex™-M3 CPU
  Bis zu 1 MB Flash-Speicher
  Mit einer Frequenz bis zu 120 MHz
  Für 2,4 GHz IEEE 802.15.4-Systeme geeignet
  Bis zu 256 KB Flash/8 KB RAM
  49 dB Nachbarkanalunterdrückung

WLAN Router

Der WLAN-Router dient als ein Wireless Access Point, das die Endgeräte auf dem Netzwerk (die Bridge und das Smartphone) mit IP-Adressen versieht. Dieser Router empfängt die Steuerungssignale der App und leitet sie an die Bridge weiter. Die Bridge wiederum “übersetzt” die Daten und schickt sie mittels Zigbee Leight Link an die LED Lampen.

Die LED Lampen

Jede Lampe verfügt insgesamt über 11 LEDs (5 Grüne, vier Rote und 2 Blaue LEDs). Die Glühbirnen sind in einem Mesh-Netzwerk miteinander verbunden, welches die Reichweite des Netzwerkes erhöht.

Philips verspricht bei den Lampen die stufenlose Durchstimmbarkeit von warm- bis kaltweißen Farbtemperaturen (2700 bis 6500 K) und eine RGB-LED-Mischung, die zusätzlich bis zu 16 Millionen Farbtöne ermöglicht.

Weiter Merkmale :

80% Energieeinsparung
mit E26- und E27-Fassung erhältlich
bis 15.000 Stunden Lebensdauer

ZigBee Light Link (ZLL)

ZigBee Light Link

2004 rufte die Zigbee Allianz das ZigBee Light Link als eine von verschiedene Zigbee Pro Applikation Profile (Home Automation, Building Automation und Smart Energy) ins Leben. ZLL bietet für die Industrie einen globalen Standard um die ZigBee-fähigen Leuchtkörper drahtlos zu kontrollieren.

Zielsetzung

Die Ziele des ZigBee Light Link können wie folgt zusammengefasst werden:

  • Das System soll über einen einfachen und intuitiven Installationsmechanismus verfügen.
  • Dem Verbraucher neue bzw. zahlreiche Beleuchtungsfunktionalität, einschließlich der Möglichkeit einer fernen Kontrolle, programmierbare Timer-Steuerung und stimmungsvolle Beleuchtung anbieten.
  • Die Hardware soll energie- und kostensparend sein.
  • Entwicklung von Framworks, die die Interoperabilität zwischen Produkten verschiedener Hersteller gewährleisten.

Architektur

ZigBee Light Link Softwareschichten, Source: JN-UG-3091

ZigBee Light Link arbeitet in Verbindung mit dem ZigBee PRO Wireless-Netzwerk Protokoll. Die Applikation kommuniziert über eine Schnittstelle mit dem unterliegenden ZigBee PRO stack und steuert die Beleuchtung der Hardwareknoten. Das ZigBee PRO Stack wird mit einem Stub erweitert. Das Stub unterstützt die Kommunikation innerhalb des Personal Network Area (PAN). Weitere Informationen Über das ZigBee PRO stack sind in dem ZigBee PRO Stack User Guide (JN-UG-3048) zu finden.

Das ZLL Profil definiert die folgenden Konzepte:

  • ZLL Inbetriebnahme (Commissioning): das System sollte intuitiv, schnell und ohne Konfiguration starten können.
  • ZLL Sicherheit: ZLL verwendet einen Netzwerk-Level-Sicherheitsmechanismus. Um die Kommunikation innerhalb des Netzwerkes zu verschlüsseln bzw. zu entschlüsseln, wird ein Netzwerkschlüssel von allen Knoten verwendet. Der Schlüssel ist von dem Knoten, der das Netzwerk initialisiert (meistens der Controller) zufällig generiert. Die Verteilung dieses Netzwerkschlüssels auf die Knoten ,die zu dem Netzwerk hinzugefügt werden, findet mit Hilfe eines ZLL-Masterschlüssel statt. Der Masterschlüssel soll auf allen ZLL-zertifizierten Knoten vorinstalliert werden.
  • ZigBee Cluster Library (ZCL): Um Interoperabilität auf Applikationsebene zu erzielen, setzen ZigBee-Profile auf das Cluster-Konzept. Wobei Clusters Funktionsschnittstellen sind, die festlegen wie sich eine bestimmte Funktion auf den Knoten verhält beziehungsweise welche Protokollbefehle erforderlich sind,um auf diese Funktionen zugreifen zu können. ZLL Clusters sind :
ID Cluster Bedeutung
0x0000 Basic Basisfunktionen
0x0003 Identify Identifikation
0x0004 Groups Gruppen
0x0005 Scenes Szenen
0x0006 On/Off Schalten
0x0008 Level Control Stufe (Helligkeit, Intensität, etc.)
0x0300 Color Control Steuerung der Lichtfarbe

Herstellerspezifische Erweiterungen können auch verwendet werden um ZLL zu ergänzen.


Funktionalität

Ein ZigBee Light Link System ist ein drahtloses Netzwerk, das prinzipiell über zwei Arten von Knoten verfügt. Diese Knoten werden verwendet um Steuerbefehle zu senden, zu empfangen oder auszuführen:

  • Controller Knoten: hier handelt sich beispielsweise um Lichtschalter, Bewegungssensoren, Fernbedienung, Smartphones oder Tabletts
  • Beleuchtungsknoten: hier kann man zwischen Farblampen und monochromatische Lampen unterscheiden

So kann man eine oder mehrere Lampen durch einen Controller-Knoten steuern (ein- oder ausschalten). Beispielsweise kann der Benutzer eine Tischlampe im Schlafzimmer mit einer Fernbedienung ausschalten während er im Wohnzimmer auf dem Sofa liegt.

Die Funktionalität der ZLL Systeme gehen über das einfaches Ein- und Ausschalten des Lichts hinaus: es besteht auch die Möglichkeit die Farbe des Lichtes einzustellen. Dies gilt natürlich nur für Farblampen. Weiterhin erlaubt das ZigBee Leight link das Gruppieren von Lampen. Dadurch kann der Benutzer das Farbambiente eines Raumes beliebig gestalten. Es können im System mehrere Gruppen erstellt werden, wobei eine Lampe zu mehreren Gruppen gehören kann.

Mittels einer Timer-Funktion können die Lampen so programmiert werden, dass sie zu einer bestimmten Zeit ihren Zustand ändern können. Darüber hinaus bietet das ZigBee Light Link die Möglichkeit, die Steuerung der Lichter in einer ZLL-System via Internet durchzuführen. Das hat den Vorteil, dass der Benutzer diese Steuerung von jedem internetfähigen Gerät (PC, Tablet, Smartphone) ortsunabhängig und in Echtzeit tätigen kann. Der Zugriff auf das Internet erfordert von dem ZLL-System das Hinzufügen eines IP-Router als Netzwerkknote. Eine Gateway-Lösung ist in dem Application Note ZigBee Gateway (JN-AN-1194) beschrieben.

Umsetzung

REST API

Nachrichtenumtausch zwischen Client und Server mittels REST

Representational State Transfer ist ein Programmierkonzept um entfernte Funktionsaufrufe über das Internet zu realisieren. REST definiert die Schnittstelle zwischen Clients (Die APP) und Servern (die Bridge). Die Daten auf dem Server sind Ressourcen die durch Uniform Resource Identifier (URL) adressiert sind. Die Ressourcen werden mit dem Hypertext Transfer Protocol (HTTP) über das Netzwerk übertragen. Der Client kann je nach verwendeten HTTP-Anfragemethoden und sobald er die Berechtigung dafür hat, Ressourcen abfragen, ändern oder löschen.

Das im Rahmen dieses Projekt verwendeten Philips Hue SDK unterstützt die folgende 4 HTTP-Methoden:

HTTP-Methode Beschreibung Einsatzbeispiel
GET eine Ressource abrufen hole alle im Netzwerk verfügbaren Lampen
POST Erzeugen von neuen Ressourcen ein neuer Benutzer anlegen
PUT Ressourcen ändern Lampe ein- oder ausschalten
DELETE Ressourcen löschen ein Benutzer löschen

Die für das Projekt relevanten Ressourcen:

 config
   name
   mac
   ipaddress
   whitelist/<user_id>
     name
     create date
 lights/<id>
   state
     on
     bri
     xy
     reachable
   name

Verbindung aufbauen

Die Suche nach der Bridge

Die Bridge kommuniziert mit den Lampen über das ZLL-Protokoll und mit der App (Hue und dem Web-Service) über HTTP.

Die Bridge verfügt über eine RESTful Schnittstelle ,die die Kommunikation zwischen den Lampen und der App ermöglicht. Jede Lampe bekommt eine eindeutige URL in dem lokalen Netzwerk. Auch steuerbare Parameter (Farbe, Helligkeit) werden einer URL zugewiesen, das bedeutet ,dass die Steuerung der Lampen durch einfaches Senden einen neuen Wert in dieser lokalen URL erreicht.

Nachdem die Bridge mit dem LAN-Kabel an dem WLAN-Router angeschlossen ist, bekommt sie eine IP-Adresse. Die IP-Adresse kann auf einer dieser Weisen gefunden werden:

  • In der WLAN-Router Weboberfläche einloggen und nach "Philips hue" in der DHCP-Tabelle suchen.
  • Über die Philips-Hue Webseite mit dem UPnP Service.

Um die konfigurationsfreie Kommunikation zwischen der App und der Bridge zu gewährleisten bietet das Philips Hue SDK ein UPnP Service, der automatisch nach angeschlossenen Hue-Bridges sucht und deren IP- bzw. Mac-Adresse zurückgibt. Die Bridge-IP kann nun als URL-Adresse benutzt werden um über die REST-API der Bridge zuzugreifen. Zunächst versuchen wir über folgenden HTTP-Aufruf die Bridge anzusprechen:

  URL : http://<bridge ip address>/api/IOT
  Methode : GET
  body    :

Serverantwort:

  [ 
   {
    "error" : {
      "type" : "1",
      "address : "/"
      "description" : "unauthorized user"
    }
   }
  ]

Die Bridge antworten mit einer Fehlermeldung, da noch kein User mit den Namen "IOT" angelegt wurde.

Authentifizierung

Benutzer anlegen

Frontbutton der Bridge betätigen

Jetzt wo die Verbindung zu der Bridge erfolgreich war, kann ein User angelegt werden. Nur registrierten Benutzer können das Lampensystem steuern. Die folgende Anfrage erzeugt einen neuen User "IOT" auf der Bridge.

  URL    : http://<bridge ip address>/api
  Body   : {"username":"IOT" , "devicetype":"android2.2",}
  Method : POST

Antwort vom Server:

  [
   {
    "error" : {
       "type" : 1,
       "address" : "",
       "description" : "link button not pressed" 
    }
   }
  ]

Frontbutton der Bridge betätigen

30 Sekunden nachdem man die oben genannte Serverantwort erhalten hat, muss man spätestens den Frontbutton der Bridge betätigen. Dies garantiert, dass der Benutzer nur das Lampensystem in dem Netzwerk ansteuert und keine andere Lampen.

Drückt man auf den Knopf so erhält man die folgende JSON-Bestätigung:

{ 
   "success":{
    "username":"IOT"
   }
 }

Lampen finden

Die Ressource "lights" enthält Informationen über alle Lichter, die von der Bridge entdeckt worden sind. HTTP Request:

URL    : http://<bridge ip address>/api/IOT/lights
Body   : 
Method : GET

Server Response:

{
  "1":{"name": "Hue Lamp 1"},
  "2":{"name": "Hue Lamp 2"},
  "3":{"name": "Hue Lamp 3"}
}

Auch Informationen über einzelne Lampen können abgerufen werden, indem man die Lampe über ihre ID anspricht.

HTTP Request:

URL    : http://<bridge ip address>/api/IOT/lights/1
Body   : 
Method : GET

Server Response:

{
 "state": {
   "on": false,
   "bri": 0,
   "hue": 0,
   "sat": 0,
   "xy": [0,0],
   "ct": 0,
   "alert": "none",
   "effect": "none",
   "colormode": "hs",
   "reachable": false
 },
 "type": "Extended color light",
 "name": "Hue Lamp 1",
 "modelid": "LCT001",
 "swversion": "66010820",
}

Camera Preview

Android Camera Preview

Das Google Android SDK ermöglicht die Entwicklung von Java-basierten Anwendungen für die Androidplattform. Darüber hinaus sind Zugriffe auf die Hardware über APIs möglich. Die Camera API bietet zahlreiche Funktionen um die Kamera zu verwalten. Vor dem Kamerazugriff müssen die entsprechenden Rechte in dem Android-Manifest gesetzt werden :

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />

Um die Camerapreview in die App einzubauen müssen die folgende Schritte gemacht werden:

  • eine Instanz der Camera erzeugen mit Camera.open().
  • die Camerapreview muss auf einer Surfaceview gestartet werden.
  • über die Surfaceview können Overlays angezeigt werden (das Rechteck um Objekte zu fokussieren, der Capture-Button).
  • getPreviewSize() gibt die Höhe und die Breite der Camerapreview zurück. Diese Dimensionen könne verwendet werden um das Rechteck mittig zu platzieren.
  • die Funktion startPreview() aufrufen um die Preview-Bilder auf dem Bildschirm zu zeichnen.

Mittelwertfarbe des Overlay-Rechtecks

Beim Betätigen der “Capture-Taste” wird eine Funktion aufgerufen, die aus dem aktuellen Camera-Frame innerhalb des Rechtecks ein Byte-Array macht, damit es später in ein Bitmap konvertieren werden kann. Der folgende Codeabschnitt zeigt wie man alle Pixel aus dem Bitmap ausliest und eine RGB-Mittelwertfarbe ausrechnet. Get RGB COLOR.png

Da die Philips Hue Lampen nur Farben in dem CIE-Normvalenzsystem(auch XYZ-Farbraum) unterstützt, muss die RGB-Farbe in eine XYZ-Farbe umgerechnet werden, wobei sich durch mathematische Umformung diese drei Werte auf X und Y reduzieren.

Eine detaillierte Beschreibung der Umwandlung zwischen RGB und XY für die verschiedenen PHILIPS HUE Lichtarten ist in dem Application Design note - Color conversion zu finden.

Die Farbe auf die Lampen übertragen

CIE-Normvalenzsystem

Alle Punkte auf diesem Diagramm haben eindeutige XY-Koordinaten, die bei der Festlegung der Farbe der Glühlampe verwendet werden können. Wenn ein XY-Wert außerhalb des Dreiecks gewählt wird, dann ändert sich die Farbe nicht und somit bleibt die alte Lampenfarbe bestehen. Um die Farbe zu verwalten soll auf die "xy" Ressource zugegriffen werden (siehe REST API).

Der folgende Request schaltet die Lampe mit der ID 2 an und ändert ihre Farbe in rot:

  URL :  http://<bridge ip address>/api/IOT/lights/2/state
  Methode : PUT
  body    : {"on":true, "xy":[0.675,0.322]}

Server Response

[
 {
   "success": {
     "/lights/2/state/xy": [
       0.675,
       0.322
     ]
   }
 }
]

Fazit

Die Zielsetzung des im Rahmen von der Internet der Dinge Veranstaltung durchgefürten Projekts nämlich die Konzeption und die Entwicklung der Android App die das Beleuchtungssysteme von Philips Hue mit der Kamera synchronisiert wurde in vollem Umfang erreicht. Dies ermöglichte das Philips Hue SDK auf Grund der guten Dokumentation des Quellcodes und der umfangreiche Funktionalität.

Links