mirror of
https://github.com/balkian/balkian.github.com.git
synced 2024-11-05 03:21:42 +00:00
312 lines
17 KiB
HTML
312 lines
17 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||
<title>Balkian's site - WELCOME</title>
|
||
<meta name="viewport" content="width=device-width">
|
||
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="../../font-awesome/css/all.css">
|
||
|
||
|
||
|
||
|
||
<link rel="stylesheet" media="only screen" href="../../css/main.css">
|
||
<link href='http://fonts.googleapis.com/css?family=Open+Sans:300|Comfortaa' rel='stylesheet' type='text/css'>
|
||
</head>
|
||
<body>
|
||
<div id="container" class="container">
|
||
<div id="contentwrapper">
|
||
<div id="content">
|
||
<header id="header">
|
||
<ul class="navbar" id="navbar">
|
||
<a href="../../">
|
||
<li >
|
||
<i class="fa fa-home fa-large"></i>
|
||
</li></a>
|
||
|
||
|
||
<a href="../../post/"><li class='' >Blog
|
||
</li></a>
|
||
|
||
<a href="../../tags/"><li class='' >Tags
|
||
</li></a>
|
||
|
||
<a href="../../cheatsheet/"><li class='' >Cheatsheets
|
||
</li></a>
|
||
|
||
<a href="../../project/"><li class='' >Projects
|
||
</li></a>
|
||
|
||
<a href="../../page/todo/"><li class='' >To-do
|
||
</li></a>
|
||
|
||
<a href="//jfernando.es" target="_blank"><li>
|
||
CV
|
||
</li></a>
|
||
<a href="../../search"><li>
|
||
<i class="fa fa-search"></i>
|
||
</li></a>
|
||
</ul>
|
||
</header>
|
||
|
||
|
||
<h2>Controlling Zigbee devices with MQTT</h2>
|
||
<span class="date">2019/01/06</span>
|
||
<span>
|
||
<a class="tag" href='../../tags/mqtt'><span class="label">mqtt</span></a>
|
||
|
||
<a class="tag" href='../../tags/iot'><span class="label">iot</span></a>
|
||
|
||
<a class="tag" href='../../tags/zigbee'><span class="label">zigbee</span></a>
|
||
|
||
</span>
|
||
<h3></h3>
|
||
<p>This is a short tutorial on connecting a zigbee device (an Aqara cube)
|
||
to an MQTT server, so you can control your zigbee devices from the
|
||
network.</p>
|
||
<p>If you’re anything like me, you’re probably a sucker for IoT devices.
|
||
For a long time, I’ve been using WiFi-enabled lights, and Amazon dash
|
||
buttons to control them. To keep these (cheap Chinese) internet enabled
|
||
devices away from your network and their respective cloud services,
|
||
you’ll probably want to set up a dedicated network in your router (more
|
||
on this on a future post, maybe). Another disadvantage of WiFi devices
|
||
is that they’re relatively power hungry.</p>
|
||
<p>A popular alternative is using ZigBee for communication. It is a
|
||
dedicated protocol similar to bluetooth (BLE), with lower power
|
||
requirements and bitrate.</p>
|
||
<p>Take the (super cute) aqara cube as an example. It is a small cube that
|
||
detects rotation on all of its axes, and tapping events. Here’s a
|
||
video:</p>
|
||
|
||
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
|
||
<iframe src="https://www.youtube.com/embed/5YtqG1wEnng" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe>
|
||
</div>
|
||
|
||
<p>To connect to zigbee devices you will need a zigbee enabled gateway
|
||
(a.k.a. hub), which connects to your WiFi network and your zigbee
|
||
devices. Once again, this means adding an internet-enabled device to
|
||
your home, and probably a couple of cloud services.</p>
|
||
<p>As an alternative, you can set up your own zigbee gateway, and control
|
||
it to your home automation platform of choice (e.g. home assistant). We
|
||
will cover how to set up a zigbee2mqtt gateway that is also connected to
|
||
an MQTT server, so you can use MQTT to control your devices and get
|
||
notifications.</p>
|
||
<p>What you need:</p>
|
||
<ul>
|
||
<li><a href="https://www.aliexpress.com/item/Original-Xiaomi-Mi-Aqara-Cube-Smart-Home-Controller-6-Action-Operation-Fr-Home-Device-Zigbee-Version/32892947622.html?spm=a2g0s.9042311.0.0.3da24c4dXV8sBI">Aqara
|
||
cube</a>.</li>
|
||
<li><a href="https://www.aliexpress.com/item/Wireless-Zigbee-CC2531-CC2540-Zigbee-Sniffer-Bluetooth-BLE-4-0-Dongle-Capture-Module-USB-Programmer-Downloader/32907587711.html?spm=a2g0s.9042311.0.0.3da24c4dXV8sBI">CC2531 zigbee
|
||
sniffer</a>.</li>
|
||
<li><a href="https://www.aliexpress.com/item/CFSUNBIRD-CC-DEBUGGER-Debugger-and-Programmer-for-RF-System-on-Chips-TI-ORIGINAL-Fast-hipping/32813122315.html?spm=a2g0s.9042311.0.0.3da24c4dXV8sBI">CC-debugger</a>.</li>
|
||
</ul>
|
||
<p>You will need to flash your sniffer. For that, you only need to follow
|
||
the instructions from the <a href="https://koenkk.github.io/zigbee2mqtt/">zigbee2mqtt
|
||
documentation</a>.</p>
|
||
<p>Once you’re done flashing, you’re ready to set up the zigbee2mqtt
|
||
server. For convenience, I wrote a simple docker-compose to deploy a
|
||
zigbee2mqtt server and a test mosquitto server:</p>
|
||
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
|
||
<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
|
||
<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
|
||
</span></code></pre></td>
|
||
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
|
||
<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#f92672">version</span>: <span style="color:#e6db74">'2.1'</span>
|
||
<span style="color:#f92672">services</span>:
|
||
<span style="color:#f92672">zigbee2mqtt</span>:
|
||
<span style="color:#f92672">image</span>: <span style="color:#ae81ff">koenkk/zigbee2mqtt</span>
|
||
<span style="color:#f92672">container_name</span>: <span style="color:#ae81ff">zigbee2mqtt </span>
|
||
<span style="color:#f92672">restart</span>: <span style="color:#ae81ff">always</span>
|
||
<span style="color:#f92672">volumes</span>:
|
||
- <span style="color:#ae81ff">./z2m-data/:/app/data/</span>
|
||
<span style="color:#f92672">devices</span>:
|
||
- <span style="color:#e6db74">"/dev/ttyACM0"</span>
|
||
<span style="color:#f92672">networks</span>:
|
||
- <span style="color:#ae81ff">hass</span>
|
||
<span style="color:#f92672">mqtt</span>:
|
||
<span style="color:#f92672">image</span>: <span style="color:#ae81ff">eclipse-mosquitto</span>
|
||
<span style="color:#f92672">ports</span>:
|
||
- <span style="color:#ae81ff">1883</span>:<span style="color:#ae81ff">1883</span>
|
||
- <span style="color:#ae81ff">9001</span>:<span style="color:#ae81ff">9001</span>
|
||
<span style="color:#f92672">networks</span>:
|
||
- <span style="color:#ae81ff">hass</span>
|
||
<span style="color:#f92672">volumes</span>:
|
||
- <span style="color:#ae81ff">./mosquitto.conf:/mosquitto/config/mosquitto.conf</span>
|
||
<span style="color:#f92672">networks</span>:
|
||
<span style="color:#f92672">hass</span>:
|
||
<span style="color:#f92672">driver</span>: <span style="color:#ae81ff">overlay</span>
|
||
</code></pre></td></tr></table>
|
||
</div>
|
||
</div><p>You can test your installation with:</p>
|
||
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">
|
||
<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
|
||
<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5
|
||
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6
|
||
</span></code></pre></td>
|
||
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
|
||
<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">❯ mosquitto_sub -h localhost -p <span style="color:#ae81ff">1883</span> -t <span style="color:#e6db74">'zigbee2mqtt/#'</span>
|
||
online
|
||
<span style="color:#f92672">{</span><span style="color:#e6db74">"battery"</span>:17,<span style="color:#e6db74">"voltage"</span>:2925,<span style="color:#e6db74">"linkquality"</span>:149,<span style="color:#e6db74">"action"</span>:<span style="color:#e6db74">"rotate_right"</span>,<span style="color:#e6db74">"angle"</span>:12.8<span style="color:#f92672">}</span>
|
||
<span style="color:#f92672">{</span><span style="color:#e6db74">"battery"</span>:17,<span style="color:#e6db74">"voltage"</span>:2925,<span style="color:#e6db74">"linkquality"</span>:141,<span style="color:#e6db74">"action"</span>:<span style="color:#e6db74">"slide"</span>,<span style="color:#e6db74">"side"</span>:2<span style="color:#f92672">}</span>
|
||
<span style="color:#f92672">{</span><span style="color:#e6db74">"battery"</span>:17,<span style="color:#e6db74">"voltage"</span>:2925,<span style="color:#e6db74">"linkquality"</span>:120<span style="color:#f92672">}</span>
|
||
<span style="color:#f92672">{</span><span style="color:#e6db74">"battery"</span>:17,<span style="color:#e6db74">"voltage"</span>:2925,<span style="color:#e6db74">"linkquality"</span>:141,<span style="color:#e6db74">"action"</span>:<span style="color:#e6db74">"wakeup"</span><span style="color:#f92672">}</span></code></pre></td></tr></table>
|
||
</div>
|
||
</div>
|
||
<p>zigbee2mqtt supports the following events for the aqara cube: shake,
|
||
wakeup, fall, tap, slide, flip180, flip90, rotate_left and
|
||
rotate_right. Every event has additional information, such as the sides
|
||
involved, or the degrees turned.</p>
|
||
<p>Now you are ready to set up home assistant support in zigbee2mqtt
|
||
following <a href="https://koenkk.github.io/zigbee2mqtt/integration/home_assistant.html">this
|
||
guide</a>.</p>
|
||
|
||
|
||
</div>
|
||
|
||
<div id="sidebar" class="fixed">
|
||
<div id="badge" class="flip-container" ontouchstart="this.classList.toggle('hover');">
|
||
<div class="flipper sticky expand">
|
||
<div class="front">
|
||
|
||
<img id="avatar" class="expandx" src="../../img/me.png">
|
||
</div>
|
||
<div class="back">
|
||
|
||
|
||
<div id="about">
|
||
|
||
<div class="icons vertical-center">
|
||
<span class="coolicon"><span class="fa-stack"> <i class="fas fa-square fa-stack-2x" ></i><i class="fab fa-inverse fa-stack-1x fa-linux"></i></span><span class="explanation">Linux user</span></span>
|
||
<span class="coolicon"><span class="fa-stack"> <i class="fas fa-square fa-stack-2x" ></i><i class="fab fa-inverse fa-stack-1x fa-android"></i></span><span class="explanation">Android dev and user</span></span>
|
||
<a href="http://github.com/balkian" target="_blank"><span class="coolicon"><span class="fa-stack"> <i class="fas fa-square fa-stack-2x" ></i><i class="fab fa-inverse fa-stack-1x fa-github"></i> </span><span class="explanation">Github user</span></span></a>
|
||
<a href="http://gitlab.com/balkian" target="_blank"><span class="coolicon"><span class="fa-stack"> <i class="fas fa-square fa-stack-2x" ></i><i class="fab fa-inverse fa-stack-1x fa-gitlab"></i> </span><span class="explanation">GitLab user</span></span></a>
|
||
<span class="coolicon"><span class="fa-stack"> <i class="fas fa-square fa-stack-2x" ></i><i class="fab fa-inverse fa-stack-1x fa-stack-exchange"></i> </span><span class="explanation">StackExchange fan</span></span>
|
||
<span class="coolicon"><span class="fa-stack"> <i class="fas fa-square fa-stack-2x" ></i><i class="fas fa-inverse fa-stack-1x fa-music"></i> </span><span class="explanation">Music lover</span></span>
|
||
<span class="coolicon"><span class="fa-stack"> <i class="fas fa-square fa-stack-2x" ></i><i class="fas fa-inverse fa-stack-1x fa-film"></i> </span><span class="explanation">Movie fan</span></span>
|
||
<span class="coolicon"><span class="fa-stack"> <i class="fas fa-square fa-stack-2x" ></i><i class="fas fa-inverse fa-stack-1x fa-laptop"></i> </span><span class="explanation">Always on a PC</span></span>
|
||
<span class="coolicon"><span class="fa-stack"> <i class="fas fa-square fa-stack-2x" ></i><i class="fas fa-inverse fa-stack-1x fa-moon"></i> </span><span class="explanation">Night owl</span></span>
|
||
<span class="coolicon"><span class="fa-stack"> <i class="fas fa-square fa-stack-2x" ></i><i class="fas fa-inverse fa-stack-1x fa-terminal"></i></span> <span class="explanation">CLI user</span></span>
|
||
<span class="coolicon"><span class="fa-stack"> <i class="fas fa-square fa-stack-2x" ></i><i class="fas fa-inverse fa-stack-1x fa-flag"></i></span> <span class="explanation">I love languages</span></span>
|
||
<span class="coolicon"><span class="fa-stack"> <i class="fas fa-square fa-stack-2x" ></i><i class="fas fa-inverse fa-stack-1x fa-code"></i> </span> <span class="explanation">I love programming</span></span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div class="entries">
|
||
<h2 class="title">Latest entries</h2>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<dt><a href="../../post/2019-05-01-surface-go/">Linux on the Microsoft Surface Go</a></dt>
|
||
|
||
<a class="tag" href='../../tags/linux'><span class="label">linux</span></a>
|
||
|
||
<a class="tag" href='../../tags/surface-go'><span class="label">surface go</span></a>
|
||
|
||
<a class="tag" href='../../tags/config'><span class="label">config</span></a>
|
||
|
||
|
||
|
||
|
||
<dt><a href="../../post/2019-01-06-zigbee2mqtt/">Controlling Zigbee devices with MQTT</a></dt>
|
||
|
||
<a class="tag" href='../../tags/mqtt'><span class="label">mqtt</span></a>
|
||
|
||
<a class="tag" href='../../tags/iot'><span class="label">iot</span></a>
|
||
|
||
<a class="tag" href='../../tags/zigbee'><span class="label">zigbee</span></a>
|
||
|
||
|
||
|
||
|
||
<dt><a href="../../post/2016-09-28-tqdm/">Progress bars in python</a></dt>
|
||
|
||
<a class="tag" href='../../tags/python'><span class="label">python</span></a>
|
||
|
||
|
||
|
||
|
||
<dt><a href="../../post/2015-04-10-github-dotfiles/">Sharing dotfiles</a></dt>
|
||
|
||
<a class="tag" href='../../tags/github'><span class="label">github</span></a>
|
||
|
||
<a class="tag" href='../../tags/git'><span class="label">git</span></a>
|
||
|
||
<a class="tag" href='../../tags/dotfiles'><span class="label">dotfiles</span></a>
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
<div class="clear"></div>
|
||
</div>
|
||
<footer class="pagefooter" role="contentinfo">
|
||
<div class="contact">
|
||
<p>
|
||
J. Fernando Sánchez Rada | balkian
|
||
</p>
|
||
</div>
|
||
<ul id="social">
|
||
<li><a href="http://github.com/balkian"><i class="fab fa-github"></i></a></li>
|
||
<li><a href="http://lab.gsi.upm.es/balkian"><i class="fab fa-gitlab"></i></a></li>
|
||
<li><a href="http://twitter.com/balkian"><i class="fab fa-twitter"></i></a></li>
|
||
<li><a href="http://git.sinpapel.es/balkian"><i class="fab fa-git"></i></a></li>
|
||
<li><a href="http://linkedin.com/in/jfsanchezrada"><i class="fab fa-linkedin"></i></a></li>
|
||
</ul>
|
||
<p>
|
||
<i class="fab fa-creative-commons"></i> Creative Commons A-SA-NC
|
||
</p>
|
||
</footer>
|
||
</div>
|
||
|
||
<script src="../../js/jquery-2.0.2.min.js"></script>
|
||
|
||
|
||
</body>
|
||
</html>
|