{"id":319,"date":"2021-06-05T12:01:05","date_gmt":"2021-06-05T10:01:05","guid":{"rendered":"https:\/\/www.iot-embedded.de\/iot-2021\/?p=319"},"modified":"2021-06-05T12:12:35","modified_gmt":"2021-06-05T10:12:35","slug":"zigbee-mit-dem-raspi","status":"publish","type":"post","link":"https:\/\/www.iot-embedded.de\/iot-2021\/smart-security\/zigbee-mit-dem-raspi\/","title":{"rendered":"ZigBee mit dem Raspi"},"content":{"rendered":"\n<p>Willkommen zur\u00fcck bei <em>Smart Security<\/em>!<\/p>\n\n\n\n<p>In diesem Blogeintrag behandeln wir das Thema ZigBee sowie dessen Integration in unsere Device-seitige (Device = Raspberry Pi) Architektur.<\/p>\n\n\n\n<p>ZigBee ist ein Funkstandard, der insbesondere in den Bereichen Smart Home und Sensornetzwerken eingesetzt wird. ZigBee ist auf einen niedrigen Energieverbrauch und niedriges Datenaufkommen ausgelegt. Im Gegensatz zu Funkstandards wie WLAN bilden ZigBee-Ger\u00e4te stets ein Mesh-Netzwerk. Dies bedeutet, dass die Knoten auch untereinander verbunden sind, f\u00e4llt also Kommunikationspfad weg, kann ein anderer Pfad verwendet werden. Somit agiert jedes Ger\u00e4t auch als &#8222;ZigBee-Repeater&#8220;.<\/p>\n\n\n\n<p>In unserem Anwendungsgebiet der Einbruchsicherheit gibt es beispielsweise Fenster- und T\u00fcrsensoren, die \u00fcber ZigBee kommunizieren. Somit k\u00f6nnen Kabelgebundene Verbindungen eingespart werden.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-15.png\" alt=\"\" class=\"wp-image-320\" width=\"581\" height=\"328\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-15.png 1024w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-15-300x169.png 300w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-15-768x434.png 768w\" sizes=\"(max-width: 581px) 100vw, 581px\" \/><figcaption>ZigBee Mesh-Netzwerk, Quelle: <a href=\"https:\/\/www.breakfix.ro\/lidl-lanseaza-o-gama-de-produse-smart-home-pe-protocol-zigbee\/\" data-type=\"URL\" data-id=\"https:\/\/www.breakfix.ro\/lidl-lanseaza-o-gama-de-produse-smart-home-pe-protocol-zigbee\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.breakfix.ro\/lidl-lanseaza-o-gama-de-produse-smart-home-pe-protocol-zigbee\/<\/a><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Hardware<\/h2>\n\n\n\n<p>Da der Raspberry Pi von Haus aus kein ZigBee mit an Bord hat, ben\u00f6tigen wir ein zus\u00e4tzliches Modul, um den Funkstandard zu unterst\u00fctzen. Die Wahl f\u00e4llt hierbei auf den Texas Instruments CC2531 USB-Dongle. Link: <a href=\"https:\/\/www.ti.com\/tool\/CC2531EMK\">CC2531EMK<\/a><a rel=\"noreferrer noopener\" href=\"https:\/\/www.ti.com\/tool\/CC2531EMK\" target=\"_blank\"> <\/a><a href=\"https:\/\/www.ti.com\/tool\/CC2531EMK\" target=\"_blank\" rel=\"noreferrer noopener\">Daughter card | TI.com<\/a><\/p>\n\n\n\n<p>Als Firmware des Sticks kommt die folgende zum Einsatz: <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/Koenkk\/Z-Stack-firmware\/blob\/master\/coordinator\/Z-Stack_Home_1.2\/bin\/default\/CC2531_DEFAULT_20201127.zip\" target=\"_blank\">Z-Stack-firmware\/CC2531_DEFAULT_20201127.zip at master \u00b7 Koenkk\/Z-Stack-firmware (github.com)<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-16.png\" alt=\"\" class=\"wp-image-321\" width=\"540\" height=\"332\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-16.png 741w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-16-300x184.png 300w\" sizes=\"(max-width: 540px) 100vw, 540px\" \/><figcaption>TI CC2531 USB Dongle, Quelle: <a href=\"https:\/\/www.ti.com\/lit\/ug\/swru221a\/swru221a.pdf?ts=1622882766666&amp;ref_url=https%253A%252F%252Fwww.ti.com%252Ftool%252FCC2531EMK\" target=\"_blank\" rel=\"noreferrer noopener\">CC2531 USB Hardware User&#8217;s Guide (Rev. A (ti.com)<\/a><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Software<\/h2>\n\n\n\n<p>Auf der Suche nach geeigneter Software, um die neu geschaffene ZigBee-Hardwareschnittstelle anzusprechen, stie\u00dfen wir auf die drei folgenden Projekte:<\/p>\n\n\n\n<ul><li>Home Assistant<\/li><li>ZigBee2MQTT<\/li><li>openHAB<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-17-1024x368.png\" alt=\"\" class=\"wp-image-322\" width=\"673\" height=\"242\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-17-1024x368.png 1024w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-17-300x108.png 300w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-17-768x276.png 768w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-17.png 1197w\" sizes=\"(max-width: 673px) 100vw, 673px\" \/><figcaption>Logos von Home Assistant, ZigBee2MQTT und openHAB<\/figcaption><\/figure>\n\n\n\n<p>Bei Home Assistant und OpenHAB handelt es sich um Smart Home Plattformen, die einen sehr gro\u00dfen Funktionsumfang im Smart Home Bereich bieten. Darunter befinden sich auch entsprechende ZigBee-Implementierungen. Alle drei der Alternativen werden bereits als Docker-Container angeboten, was sie sehr leicht in unsere Architektur einbauen lie\u00dfe. Da unsere Architektur allerdings m\u00f6glichst leichtgewichtig bleiben sollte, fiel bei uns die Wahl auf ZigBee2MQTT.<\/p>\n\n\n\n<p>Auch wenn OpenHAB und Home Assistant ausgeschieden sind, wird in K\u00fcrze ein weiterer Blogeintrag zu diesen Smart Home Plattformen folgen, sie sind bestimmt f\u00fcr einige unter uns f\u00fcr das eigene Zuhause interessant.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">ZigBee2MQTT<\/h2>\n\n\n\n<p>ZigBee2MQTT ist eine Bridge, in dem Fall f\u00fcr uns ein Protokoll-\u00dcbersetzer, der uns erlaubt, ZigBee-Ger\u00e4te \u00fcber MQTT zu steuern. Da wir in unserer Architektur bereits MQTT einsetzen, eignet sich dieses Protokoll hervorragend f\u00fcr unseren Verwendungszweck, ZigBee-Sensoren einzubinden.<\/p>\n\n\n\n<p>Um ZigBee2MQTT in unsere Architektur einzubauen, schaffen wir einen neuen Service, in dem wir einen neuen Ordner auf der device-Seite anlegen, der ein Dockerfile, sowie eine Konfigurationsdatei enth\u00e4lt. Des Weiteren definieren wir den Service in der docker-compose.yml. Der Aufbau kann hier nachvollzogen werden: <a href=\"https:\/\/github.com\/Phape\/dhbwka-wwi-iotws-architektur\/tree\/6b219090b7fb0e92e5986002ad51635fc2fb5257\/device\" target=\"_blank\" rel=\"noreferrer noopener\"> Phape\/dhbwka-wwi-iotws-architektur (github.com)<\/a><\/p>\n\n\n\n<p>Das Dockerfile enth\u00e4lt lediglich die folgenden beiden Anweisungen, um das Parent-Image auszuw\u00e4hlen und die Konfigurationsdateien in den Container zu kopieren:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM koenkk\/zigbee2mqtt\nCOPY config \/app<\/code><\/pre>\n\n\n\n<p>Wir beschr\u00e4nken uns auf eine Konfigurationsdatei, die folgenderma\u00dfen aussieht:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Home Assistant integration (MQTT discovery)\nhomeassistant: false\n\n# allow new devices to join\npermit_join: true\n\n# MQTT settings\nmqtt:\n  # MQTT base topic for zigbee2mqtt MQTT messages\n  base_topic: iot-projekt\/zigbee\n  # MQTT server URL\n  server: 'mqtt:\/\/broker.hivemq.com:1883'\n  # MQTT server authentication, uncomment if required:\n  # user: my_user\n  # password: my_password\n\n# Serial settings\nserial:\n  # Location of CC2531 USB sniffer\n  port: \/dev\/ttyACM0<\/code><\/pre>\n\n\n\n<p>Wichtig sind f\u00fcr uns insbesondere diese Konfigurationen:<\/p>\n\n\n\n<ul><li>Permit_join: festlegen, ob neue ZigBee-Ger\u00e4te hinzugef\u00fcgt werden d\u00fcrfen<\/li><li>Mqtt base_topic: das MQTT-Standardtopic, in das gepublished wird<\/li><li>Mqtt server: festlegen des MQTT-Servers. Hier k\u00f6nnen wir sp\u00e4ter unseren eigenen Server angeben<\/li><li>Serial port: hier geben wir mit &#8222;\/dev\/ttyACM0&#8220; an, dass der ZigBee-Stick in einem USB-Port des Raspi steckt<\/li><\/ul>\n\n\n\n<p>Der Service sieht in der docker-compose.yml folgenderma\u00dfen aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Service zum \u00fcbersetzen von Zigbee zu MQTT\n    zigbee2mqtt:\n        build: zigbee2mqtt\/\n        volumes:\n          - zigbee2mqtt-data:\/app\/data\n        devices:\n          - \/dev\/ttyACM0:\/dev\/ttyACM0\n        restart: always\n        network_mode: host\n        privileged: true\n        environment:\n          - TZ=Europe\/Amsterdam<\/code><\/pre>\n\n\n\n<p>Das Docker-Volume muss vorher ganz oben in der Datei definiert werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>volumes:\n    redis-data:\n    grafana-data:\n    zigbee2mqtt-data:<\/code><\/pre>\n\n\n\n<p>Auch hier ist darauf zu achten, dass dem Container Zugriff auf die USB-Ports gew\u00e4hrt ist, dies ist durch die &#8222;devices&#8220; Konfiguration realisiert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Steuern der Ger\u00e4te<\/h2>\n\n\n\n<p>Um MQTT leicht \u00fcberwachen und nutzen zu k\u00f6nnen, wird die App &#8222;MQTT Explorer&#8220; verwendet.<\/p>\n\n\n\n<p>Hier muss man ebenfalls den Broker konfigurieren und die Topics subscriben.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-18-1024x534.png\" alt=\"\" class=\"wp-image-323\" width=\"618\" height=\"322\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-18-1024x534.png 1024w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-18-300x156.png 300w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-18-768x401.png 768w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-18.png 1277w\" sizes=\"(max-width: 618px) 100vw, 618px\" \/><figcaption>MQTT Verbindung herstellen im MQTT Explorer<\/figcaption><\/figure>\n\n\n\n<p>Topics k\u00f6nnen unter &#8222;Advanced&#8220; verwaltet werden, wir haben eingestellt: iot-projekt\/#<\/p>\n\n\n\n<p>Mit der # wird festgelegt, dass alle subtopics ebenfalls abonniert werden.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2253\" height=\"1446\" src=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-19.png\" alt=\"\" class=\"wp-image-324\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-19.png 2253w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-19-300x193.png 300w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-19-1024x657.png 1024w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-19-768x493.png 768w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-19-1536x986.png 1536w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/06\/image-19-2048x1314.png 2048w\" sizes=\"(max-width: 2253px) 100vw, 2253px\" \/><figcaption>unter iot-projekt\/zigbee\/bridge\/devices werden gefundene Ger\u00e4te gelistet, die im JSON-Format angeben, welche Konfigurationen sie besitzen.<\/figcaption><\/figure>\n\n\n\n<p>Nun kann man MQTT-Befehle an das Zigbee-Ger\u00e4t senden<\/p>\n\n\n\n<ul><li>Topic: iot-projekt\/zigbee\/&lt;device-friendly-name&gt;\/set<\/li><li>Value: json-format, man kann beispielsweise bei einer Lampe die Helligkeit, Farbe und den Zustand (an\/aus) einstellen<\/li><li>\u00dcbersicht \u00fcber die MQTT-JSON-Struktur: <a href=\"https:\/\/www.zigbee2mqtt.io\/information\/mqtt_topics_and_message_structure.html\">MQTT topics and message structure | zigbee2mqtt.io<\/a><\/li><\/ul>\n\n\n\n<p>Viel Spa\u00df beim Nachmachen!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Willkommen zur\u00fcck bei Smart Security! In diesem Blogeintrag behandeln wir das Thema ZigBee sowie dessen Integration in unsere Device-seitige (Device = Raspberry Pi) Architektur. ZigBee ist ein Funkstandard, der insbesondere in den Bereichen Smart Home und Sensornetzwerken eingesetzt wird. ZigBee<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[],"_links":{"self":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts\/319"}],"collection":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/comments?post=319"}],"version-history":[{"count":4,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts\/319\/revisions"}],"predecessor-version":[{"id":329,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts\/319\/revisions\/329"}],"wp:attachment":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/media?parent=319"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/categories?post=319"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/tags?post=319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}