Site updated at 2015-10-11 20:16:19 UTC
This commit is contained in:
parent
0cadd801b9
commit
0f05893e2c
57 changed files with 3700 additions and 559 deletions
520
blog/index.html
520
blog/index.html
|
@ -22,7 +22,7 @@
|
|||
<meta property="og:site_name" content="Home Assistant">
|
||||
<meta property="og:url" content="https://home-assistant.io/blog/">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:description" content="0.7.5: Blinkstick, SNMP, Telegram October 11, 2015 Paulus Schoutsen less than one minute reading time release-notes Comments We discovered two issues annoying enough to warrent the release of 0.7.5 …">
|
||||
<meta property="og:description" content="Report the temperature with ESP8266 to MQTT October 11, 2015 Paulus Schoutsen nine minutes reading time esp8266 how-to mqtt Comments I recently learned about the ESP8266, a $5 chip that includes …">
|
||||
<meta property="og:image" content="https://home-assistant.io/images/home-assistant-logo-2164x2164.png">
|
||||
|
||||
<link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet">
|
||||
|
@ -99,6 +99,430 @@
|
|||
|
||||
|
||||
|
||||
<article class="listing">
|
||||
<header>
|
||||
|
||||
<h1 class="beta">
|
||||
<a href="/blog/2015/10/11/measure-temperature-with-esp8266-and-report-to-mqtt/">Report the temperature with ESP8266 to MQTT</a>
|
||||
</h1>
|
||||
|
||||
|
||||
|
||||
<div class="meta clearfix">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<time datetime="2015-10-11T12:10:00-07:00" pubdate data-updated="true"><i class="icon-calendar"></i> October 11, 2015</time>
|
||||
|
||||
|
||||
|
||||
<span class="byline author vcard"><i class='icon-user'></i> Paulus Schoutsen</span>
|
||||
|
||||
<span><i class='icon-time'></i> nine minutes reading time</span>
|
||||
|
||||
|
||||
<span>
|
||||
<i class="icon-tags"></i>
|
||||
<ul class="tags unstyled">
|
||||
|
||||
|
||||
<li><a class='category' href='/blog/categories/esp8266/'>esp8266</a></li>
|
||||
|
||||
<li><a class='category' href='/blog/categories/how-to/'>how-to</a></li>
|
||||
|
||||
<li><a class='category' href='/blog/categories/mqtt/'>mqtt</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
</span>
|
||||
|
||||
|
||||
<a class='comments'
|
||||
href="/blog/2015/10/11/measure-temperature-with-esp8266-and-report-to-mqtt/#disqus_thread"
|
||||
>Comments</a>
|
||||
|
||||
</div>
|
||||
|
||||
</header>
|
||||
|
||||
|
||||
|
||||
|
||||
<p>I recently learned about the ESP8266, a $5 chip that includes WiFi and is Arduino compatible. This means
|
||||
that all your DIY projects can now be done for a fraction of the price.</p>
|
||||
|
||||
<p>For this tutorial, I’ll walk through how to get going with ESP8266, get the temperature and humidity and
|
||||
report it to MQTT where Home Asssistant can pick it up.</p>
|
||||
|
||||
<p class='img'>
|
||||
<img src='/images/blog/2015-10-esp8266-temp/ha-sensor.png' />
|
||||
Home Assistant will keep track of historical values and allow you to integrate it into automation.
|
||||
</p>
|
||||
|
||||
|
||||
<h3>Components</h3>
|
||||
|
||||
<p>I’ve been using Adafruit for my shopping:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="http://www.adafruit.com/product/2471">Adafruit HUZZAH ESP8266 Breakout</a> (<a href="https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/assembly">assembly instructions</a>)</li>
|
||||
<li><a href="http://www.adafruit.com/product/2635">Adafruit HDC1008 Temperature & Humidity Sensor Breakout Board</a> (<a href="https://learn.adafruit.com/adafruit-hdc1008-temperature-and-humidity-sensor-breakout/assembly">assembly instructions</a>)</li>
|
||||
<li><a href="/components/mqtt.html#picking-a-broker">MQTT server</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p><em>Besides this, you will need the usual hardware prototype equipment: a breadboard, some wires,
|
||||
soldering iron + wire, Serial USB cable.</em></p>
|
||||
|
||||
<h3>Connections</h3>
|
||||
|
||||
<p>On your breadboard, make the following connections from your ESP8266 to the HDC1008:</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th> ESP8266 </th>
|
||||
<th> HDC1008 </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td> GND </td>
|
||||
<td> GND</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> 3V </td>
|
||||
<td> Vin</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> 14 </td>
|
||||
<td> SCL</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> #2 </td>
|
||||
<td> SDA</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<p><em>I picked <code>#2</code> and <code>14</code> myself, you can configure them in the sketch.</em></p>
|
||||
|
||||
<h3>Preparing your IDE</h3>
|
||||
|
||||
<p>Follow <a href="https://github.com/esp8266/Arduino#installing-with-boards-manager">these instructions</a> on how
|
||||
to install and prepare the Arduino IDE for ESP8266 development.</p>
|
||||
|
||||
<p>After you’re done installing, open the Arduino IDE, in the menu click on <code>sketch</code> -> <code>include library</code> ->
|
||||
<code>manage libraries</code> and install the following libraries:</p>
|
||||
|
||||
<ul>
|
||||
<li>PubSubClient by Nick ‘O Leary</li>
|
||||
<li>Adafruit HDC1000</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3>Sketch</h3>
|
||||
|
||||
<p>If you have followed the previous steps, you’re all set.</p>
|
||||
|
||||
<ul>
|
||||
<li>Open Arduino IDE and create a new sketch (<code>File</code> -> <code>New</code>)</li>
|
||||
<li>Copy and paste the below sketch to the Arduino IDE</li>
|
||||
<li>Adjust the values line 6 - 14 to match your setup</li>
|
||||
<li>Optional: If you want to connect to an MQTT server without a username or password, adjust line 63.</li>
|
||||
<li>To have the ESP8266 accept our new sketch, we have to put it in upload mode. On the ESP8266 device
|
||||
keep the GPIO0 button pressed while pressing the reset button. The red led will glow half bright to
|
||||
indicate it is in upload mode.</li>
|
||||
<li>Press the upload button in Arduino IDE</li>
|
||||
<li>Open the serial monitor (<code>Tools</code> -> <code>Serial Monitor</code>) to see the output from your device</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>This sketch will connect to your WiFi network and MQTT broker. It will read the temperature and humidity
|
||||
from the sensor every second. It will report it to the MQTT server if the difference is > 1 since last
|
||||
reported value. Reports to the MQTT broker are sent with retain set to <code>True</code>. This means that anyone
|
||||
connecting to the MQTT topic will automatically be notified of the last reported value.</p>
|
||||
|
||||
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
|
||||
<span class='line-number'>2</span>
|
||||
<span class='line-number'>3</span>
|
||||
<span class='line-number'>4</span>
|
||||
<span class='line-number'>5</span>
|
||||
<span class='line-number'>6</span>
|
||||
<span class='line-number'>7</span>
|
||||
<span class='line-number'>8</span>
|
||||
<span class='line-number'>9</span>
|
||||
<span class='line-number'>10</span>
|
||||
<span class='line-number'>11</span>
|
||||
<span class='line-number'>12</span>
|
||||
<span class='line-number'>13</span>
|
||||
<span class='line-number'>14</span>
|
||||
<span class='line-number'>15</span>
|
||||
<span class='line-number'>16</span>
|
||||
<span class='line-number'>17</span>
|
||||
<span class='line-number'>18</span>
|
||||
<span class='line-number'>19</span>
|
||||
<span class='line-number'>20</span>
|
||||
<span class='line-number'>21</span>
|
||||
<span class='line-number'>22</span>
|
||||
<span class='line-number'>23</span>
|
||||
<span class='line-number'>24</span>
|
||||
<span class='line-number'>25</span>
|
||||
<span class='line-number'>26</span>
|
||||
<span class='line-number'>27</span>
|
||||
<span class='line-number'>28</span>
|
||||
<span class='line-number'>29</span>
|
||||
<span class='line-number'>30</span>
|
||||
<span class='line-number'>31</span>
|
||||
<span class='line-number'>32</span>
|
||||
<span class='line-number'>33</span>
|
||||
<span class='line-number'>34</span>
|
||||
<span class='line-number'>35</span>
|
||||
<span class='line-number'>36</span>
|
||||
<span class='line-number'>37</span>
|
||||
<span class='line-number'>38</span>
|
||||
<span class='line-number'>39</span>
|
||||
<span class='line-number'>40</span>
|
||||
<span class='line-number'>41</span>
|
||||
<span class='line-number'>42</span>
|
||||
<span class='line-number'>43</span>
|
||||
<span class='line-number'>44</span>
|
||||
<span class='line-number'>45</span>
|
||||
<span class='line-number'>46</span>
|
||||
<span class='line-number'>47</span>
|
||||
<span class='line-number'>48</span>
|
||||
<span class='line-number'>49</span>
|
||||
<span class='line-number'>50</span>
|
||||
<span class='line-number'>51</span>
|
||||
<span class='line-number'>52</span>
|
||||
<span class='line-number'>53</span>
|
||||
<span class='line-number'>54</span>
|
||||
<span class='line-number'>55</span>
|
||||
<span class='line-number'>56</span>
|
||||
<span class='line-number'>57</span>
|
||||
<span class='line-number'>58</span>
|
||||
<span class='line-number'>59</span>
|
||||
<span class='line-number'>60</span>
|
||||
<span class='line-number'>61</span>
|
||||
<span class='line-number'>62</span>
|
||||
<span class='line-number'>63</span>
|
||||
<span class='line-number'>64</span>
|
||||
<span class='line-number'>65</span>
|
||||
<span class='line-number'>66</span>
|
||||
<span class='line-number'>67</span>
|
||||
<span class='line-number'>68</span>
|
||||
<span class='line-number'>69</span>
|
||||
<span class='line-number'>70</span>
|
||||
<span class='line-number'>71</span>
|
||||
<span class='line-number'>72</span>
|
||||
<span class='line-number'>73</span>
|
||||
<span class='line-number'>74</span>
|
||||
<span class='line-number'>75</span>
|
||||
<span class='line-number'>76</span>
|
||||
<span class='line-number'>77</span>
|
||||
<span class='line-number'>78</span>
|
||||
<span class='line-number'>79</span>
|
||||
<span class='line-number'>80</span>
|
||||
<span class='line-number'>81</span>
|
||||
<span class='line-number'>82</span>
|
||||
<span class='line-number'>83</span>
|
||||
<span class='line-number'>84</span>
|
||||
<span class='line-number'>85</span>
|
||||
<span class='line-number'>86</span>
|
||||
<span class='line-number'>87</span>
|
||||
<span class='line-number'>88</span>
|
||||
<span class='line-number'>89</span>
|
||||
<span class='line-number'>90</span>
|
||||
<span class='line-number'>91</span>
|
||||
<span class='line-number'>92</span>
|
||||
<span class='line-number'>93</span>
|
||||
<span class='line-number'>94</span>
|
||||
<span class='line-number'>95</span>
|
||||
<span class='line-number'>96</span>
|
||||
<span class='line-number'>97</span>
|
||||
<span class='line-number'>98</span>
|
||||
<span class='line-number'>99</span>
|
||||
<span class='line-number'>100</span>
|
||||
<span class='line-number'>101</span>
|
||||
<span class='line-number'>102</span>
|
||||
<span class='line-number'>103</span>
|
||||
<span class='line-number'>104</span>
|
||||
<span class='line-number'>105</span>
|
||||
<span class='line-number'>106</span>
|
||||
<span class='line-number'>107</span>
|
||||
<span class='line-number'>108</span>
|
||||
<span class='line-number'>109</span>
|
||||
</pre></td><td class='code'><pre><code class='cpp'><span class='line'><span class="cp">#include <ESP8266WiFi.h></span>
|
||||
</span><span class='line'><span class="cp">#include <Wire.h></span>
|
||||
</span><span class='line'><span class="cp">#include <PubSubClient.h></span>
|
||||
</span><span class='line'><span class="cp">#include <Adafruit_HDC1000.h></span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'><span class="cp">#define wifi_ssid "YOUR WIFI SSID"</span>
|
||||
</span><span class='line'><span class="cp">#define wifi_password "WIFI PASSWORD"</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'><span class="cp">#define mqtt_server "YOUR_MQTT_SERVER_HOST"</span>
|
||||
</span><span class='line'><span class="cp">#define mqtt_user "your_username"</span>
|
||||
</span><span class='line'><span class="cp">#define mqtt_password "your_password"</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'><span class="cp">#define humidity_topic "sensor/humidity"</span>
|
||||
</span><span class='line'><span class="cp">#define temperature_topic "sensor/temperature"</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'><span class="n">WiFiClient</span> <span class="n">espClient</span><span class="p">;</span>
|
||||
</span><span class='line'><span class="n">PubSubClient</span> <span class="nf">client</span><span class="p">(</span><span class="n">espClient</span><span class="p">);</span>
|
||||
</span><span class='line'><span class="n">Adafruit_HDC1000</span> <span class="n">hdc</span> <span class="o">=</span> <span class="n">Adafruit_HDC1000</span><span class="p">();</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'><span class="kt">void</span> <span class="nf">setup</span><span class="p">()</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">begin</span><span class="p">(</span><span class="mi">115200</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="n">setup_wifi</span><span class="p">();</span>
|
||||
</span><span class='line'> <span class="n">client</span><span class="p">.</span><span class="n">setServer</span><span class="p">(</span><span class="n">mqtt_server</span><span class="p">,</span> <span class="mi">1883</span><span class="p">);</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'> <span class="c1">// Set SDA and SDL ports</span>
|
||||
</span><span class='line'> <span class="n">Wire</span><span class="p">.</span><span class="n">begin</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">14</span><span class="p">);</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'> <span class="c1">// Start sensor</span>
|
||||
</span><span class='line'> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">hdc</span><span class="p">.</span><span class="n">begin</span><span class="p">())</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">"Couldn't find sensor!"</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="k">while</span> <span class="p">(</span><span class="mi">1</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="p">}}</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'><span class="kt">void</span> <span class="nf">setup_wifi</span><span class="p">()</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="n">delay</span><span class="p">(</span><span class="mi">10</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="c1">// We start by connecting to a WiFi network</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">println</span><span class="p">();</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">"Connecting to "</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="n">wifi_ssid</span><span class="p">);</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'> <span class="n">WiFi</span><span class="p">.</span><span class="n">begin</span><span class="p">(</span><span class="n">wifi_ssid</span><span class="p">,</span> <span class="n">wifi_password</span><span class="p">);</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'> <span class="k">while</span> <span class="p">(</span><span class="n">WiFi</span><span class="p">.</span><span class="n">status</span><span class="p">()</span> <span class="o">!=</span> <span class="n">WL_CONNECTED</span><span class="p">)</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="n">delay</span><span class="p">(</span><span class="mi">500</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">"."</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="p">}</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">""</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">"WiFi connected"</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">"IP address: "</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="n">WiFi</span><span class="p">.</span><span class="n">localIP</span><span class="p">());</span>
|
||||
</span><span class='line'><span class="p">}</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'><span class="kt">void</span> <span class="nf">reconnect</span><span class="p">()</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="c1">// Loop until we're reconnected</span>
|
||||
</span><span class='line'> <span class="k">while</span> <span class="p">(</span><span class="o">!</span><span class="n">client</span><span class="p">.</span><span class="n">connected</span><span class="p">())</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">"Attempting MQTT connection..."</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="c1">// Attempt to connect</span>
|
||||
</span><span class='line'> <span class="c1">// If you do not want to use a username and password, change next line to</span>
|
||||
</span><span class='line'> <span class="c1">// if (client.connect("ESP8266Client")) {</span>
|
||||
</span><span class='line'> <span class="k">if</span> <span class="p">(</span><span class="n">client</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="s">"ESP8266Client"</span><span class="p">,</span> <span class="n">mqtt_user</span><span class="p">,</span> <span class="n">mqtt_password</span><span class="p">))</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">"connected"</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">"failed, rc="</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="n">client</span><span class="p">.</span><span class="n">state</span><span class="p">());</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">" try again in 5 seconds"</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="c1">// Wait 5 seconds before retrying</span>
|
||||
</span><span class='line'> <span class="n">delay</span><span class="p">(</span><span class="mi">5000</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="p">}</span>
|
||||
</span><span class='line'> <span class="p">}</span>
|
||||
</span><span class='line'><span class="p">}</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'><span class="kt">bool</span> <span class="nf">checkBound</span><span class="p">(</span><span class="kt">float</span> <span class="n">newValue</span><span class="p">,</span> <span class="kt">float</span> <span class="n">prevValue</span><span class="p">,</span> <span class="kt">float</span> <span class="n">maxDiff</span><span class="p">)</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="k">return</span> <span class="n">newValue</span> <span class="o"><</span> <span class="n">prevValue</span> <span class="o">-</span> <span class="n">maxDiff</span> <span class="o">||</span> <span class="n">newValue</span> <span class="o">></span> <span class="n">prevValue</span> <span class="o">+</span> <span class="n">maxDiff</span><span class="p">;</span>
|
||||
</span><span class='line'><span class="p">}</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'><span class="kt">long</span> <span class="n">lastMsg</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
|
||||
</span><span class='line'><span class="kt">float</span> <span class="n">temp</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">;</span>
|
||||
</span><span class='line'><span class="kt">float</span> <span class="n">hum</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">;</span>
|
||||
</span><span class='line'><span class="kt">float</span> <span class="n">diff</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">;</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'><span class="kt">void</span> <span class="nf">loop</span><span class="p">()</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">client</span><span class="p">.</span><span class="n">connected</span><span class="p">())</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="n">reconnect</span><span class="p">();</span>
|
||||
</span><span class='line'> <span class="p">}</span>
|
||||
</span><span class='line'> <span class="n">client</span><span class="p">.</span><span class="n">loop</span><span class="p">();</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'> <span class="kt">long</span> <span class="n">now</span> <span class="o">=</span> <span class="n">millis</span><span class="p">();</span>
|
||||
</span><span class='line'> <span class="k">if</span> <span class="p">(</span><span class="n">now</span> <span class="o">-</span> <span class="n">lastMsg</span> <span class="o">></span> <span class="mi">1000</span><span class="p">)</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="n">lastMsg</span> <span class="o">=</span> <span class="n">now</span><span class="p">;</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'> <span class="kt">float</span> <span class="n">newTemp</span> <span class="o">=</span> <span class="n">hdc</span><span class="p">.</span><span class="n">readTemperature</span><span class="p">();</span>
|
||||
</span><span class='line'> <span class="kt">float</span> <span class="n">newHum</span> <span class="o">=</span> <span class="n">hdc</span><span class="p">.</span><span class="n">readHumidity</span><span class="p">();</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'> <span class="k">if</span> <span class="p">(</span><span class="n">checkBound</span><span class="p">(</span><span class="n">newTemp</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span> <span class="n">diff</span><span class="p">))</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="n">temp</span> <span class="o">=</span> <span class="n">newTemp</span><span class="p">;</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">"New temperature:"</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="n">String</span><span class="p">(</span><span class="n">temp</span><span class="p">).</span><span class="n">c_str</span><span class="p">());</span>
|
||||
</span><span class='line'> <span class="n">client</span><span class="p">.</span><span class="n">publish</span><span class="p">(</span><span class="n">temperature_topic</span><span class="p">,</span> <span class="n">String</span><span class="p">(</span><span class="n">temp</span><span class="p">).</span><span class="n">c_str</span><span class="p">(),</span> <span class="nb">true</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="p">}</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'> <span class="k">if</span> <span class="p">(</span><span class="n">checkBound</span><span class="p">(</span><span class="n">newHum</span><span class="p">,</span> <span class="n">hum</span><span class="p">,</span> <span class="n">diff</span><span class="p">))</span> <span class="p">{</span>
|
||||
</span><span class='line'> <span class="n">hum</span> <span class="o">=</span> <span class="n">newHum</span><span class="p">;</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">print</span><span class="p">(</span><span class="s">"New humidity:"</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="n">Serial</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="n">String</span><span class="p">(</span><span class="n">hum</span><span class="p">).</span><span class="n">c_str</span><span class="p">());</span>
|
||||
</span><span class='line'> <span class="n">client</span><span class="p">.</span><span class="n">publish</span><span class="p">(</span><span class="n">humidity_topic</span><span class="p">,</span> <span class="n">String</span><span class="p">(</span><span class="n">hum</span><span class="p">).</span><span class="n">c_str</span><span class="p">(),</span> <span class="nb">true</span><span class="p">);</span>
|
||||
</span><span class='line'> <span class="p">}</span>
|
||||
</span><span class='line'> <span class="p">}</span>
|
||||
</span><span class='line'><span class="p">}</span>
|
||||
</span></code></pre></td></tr></table></div></figure>
|
||||
|
||||
|
||||
<h3>Configuring Home Assistant</h3>
|
||||
|
||||
<p>The last step is to integrate the sensor values into Home Assistant. This can be done by setting up
|
||||
Home Assistant to connect to the MQTT broker and subscribe to the sensor topics.</p>
|
||||
|
||||
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
|
||||
<span class='line-number'>2</span>
|
||||
<span class='line-number'>3</span>
|
||||
<span class='line-number'>4</span>
|
||||
<span class='line-number'>5</span>
|
||||
<span class='line-number'>6</span>
|
||||
<span class='line-number'>7</span>
|
||||
<span class='line-number'>8</span>
|
||||
<span class='line-number'>9</span>
|
||||
<span class='line-number'>10</span>
|
||||
<span class='line-number'>11</span>
|
||||
<span class='line-number'>12</span>
|
||||
<span class='line-number'>13</span>
|
||||
<span class='line-number'>14</span>
|
||||
<span class='line-number'>15</span>
|
||||
<span class='line-number'>16</span>
|
||||
<span class='line-number'>17</span>
|
||||
<span class='line-number'>18</span>
|
||||
</pre></td><td class='code'><pre><code class='yaml'><span class='line'><span class="l-Scalar-Plain">mqtt</span><span class="p-Indicator">:</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">broker</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">YOUR_MQTT_SERVER_HOST</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">username</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">your_username</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">password</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">your_password</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'><span class="l-Scalar-Plain">sensor</span><span class="p-Indicator">:</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">platform</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">mqtt</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="s">"Temperature"</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">state_topic</span><span class="p-Indicator">:</span> <span class="s">"sensor/temperature"</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">qos</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">0</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">unit_of_measurement</span><span class="p-Indicator">:</span> <span class="s">"ºC"</span>
|
||||
</span><span class='line'>
|
||||
</span><span class='line'><span class="l-Scalar-Plain">sensor 2</span><span class="p-Indicator">:</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">platform</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">mqtt</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="s">"Humidity"</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">state_topic</span><span class="p-Indicator">:</span> <span class="s">"sensor/humidity"</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">qos</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">0</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">unit_of_measurement</span><span class="p-Indicator">:</span> <span class="s">"%"</span>
|
||||
</span></code></pre></td></tr></table></div></figure>
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
<hr>
|
||||
|
||||
|
||||
<article class="listing">
|
||||
<header>
|
||||
|
||||
|
@ -565,6 +989,8 @@ read more button for some example recipes.</p>
|
|||
|
||||
<li><a class='category' href='/blog/categories/how-to/'>how-to</a></li>
|
||||
|
||||
<li><a class='category' href='/blog/categories/mqtt/'>mqtt</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
</span>
|
||||
|
@ -871,98 +1297,6 @@ Home Assistant support to integrate your <a href="https://www.verisure.com/">Ver
|
|||
</article>
|
||||
<hr>
|
||||
|
||||
|
||||
<article class="listing">
|
||||
<header>
|
||||
|
||||
<h1 class="beta">
|
||||
<a href="/blog/2015/08/09/mqtt-raspberry-pi-squeezebox-asuswrt-support/">MQTT, Rasperry PI, Logitech Squeezebox and ASUSWRT routers now supported</a>
|
||||
</h1>
|
||||
|
||||
|
||||
|
||||
<div class="meta clearfix">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<time datetime="2015-08-09T18:01:00-07:00" pubdate data-updated="true"><i class="icon-calendar"></i> August 9, 2015</time>
|
||||
|
||||
|
||||
|
||||
<span class="byline author vcard"><i class='icon-user'></i> Paulus Schoutsen</span>
|
||||
|
||||
<span><i class='icon-time'></i> four minutes reading time</span>
|
||||
|
||||
|
||||
<span>
|
||||
<i class="icon-tags"></i>
|
||||
<ul class="tags unstyled">
|
||||
|
||||
|
||||
<li><a class='category' href='/blog/categories/release-notes/'>release-notes</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
</span>
|
||||
|
||||
|
||||
<a class='comments'
|
||||
href="/blog/2015/08/09/mqtt-raspberry-pi-squeezebox-asuswrt-support/#disqus_thread"
|
||||
>Comments</a>
|
||||
|
||||
</div>
|
||||
|
||||
</header>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="entry-content clearfix">
|
||||
<p>It’s time for the August release and there is some serious good stuff this time. The core of Home Assistant has gone some serious clean up and a bump in test coverage thanks to <a href="https://github.com/balloob">@balloob</a>. If you’re a developer, make sure you read up on <a href="https://github.com/balloob/home-assistant/pull/251">the deprecation notices</a>. <a href="https://github.com/fabaff">@fabaff</a> did another great round of documentating all the various components.</p>
|
||||
|
||||
<p><strong>MQTT Support</strong><br>
|
||||
<img src='/images/supported_brands/mqtt.png' style='border:none; box-shadow: none; float: right;' height='50' />
|
||||
The big new addition in this release is the support for the MQTT protocol by <a href="https://github.com/fabaff">@fabaff</a> with some help from <a href="https://github.com/balloob">@balloob</a>. It will now be possible to integrate any IoT device that talks via MQTT. For the initial release we support connecting Home Assistant to a broker (no TLS yet). Components can now subscribe and publish to MQTT topics (<a href="https://github.com/balloob/home-assistant/blob/dev/config/custom_components/mqtt_example.py">see the example</a>) and also support for the automation component <a href="/components/automation.html#mqtt-based-automation">has been added</a>. For more information, see <a href="/components/mqtt.html">the MQTT component page</a>.</p>
|
||||
|
||||
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
|
||||
<span class='line-number'>2</span>
|
||||
<span class='line-number'>3</span>
|
||||
<span class='line-number'>4</span>
|
||||
<span class='line-number'>5</span>
|
||||
<span class='line-number'>6</span>
|
||||
<span class='line-number'>7</span>
|
||||
<span class='line-number'>8</span>
|
||||
<span class='line-number'>9</span>
|
||||
</pre></td><td class='code'><pre><code class='yaml'><span class='line'><span class="c1"># Example configuration.yaml entry</span>
|
||||
</span><span class='line'><span class="l-Scalar-Plain">mqtt</span><span class="p-Indicator">:</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">broker</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">IP_ADDRESS_BROKER</span>
|
||||
</span><span class='line'> <span class="c1"># All the other options are optional:</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">port</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">1883</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">keepalive</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">60</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">qos</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">0</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">username</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">your_username</span>
|
||||
</span><span class='line'> <span class="l-Scalar-Plain">password</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">your_secret_password</span>
|
||||
</span></code></pre></td></tr></table></div></figure>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a class="btn pull-right" href="/blog/2015/08/09/mqtt-raspberry-pi-squeezebox-asuswrt-support/#read-more">Read on →</a>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
<hr>
|
||||
|
||||
|
||||
<div class="pagination">
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue