Compare commits

..
37 Commits
Author SHA1 Message Date
Dawid Chyrzyński a7039fad81 Merge pull request #251 from cscott/add-binarysensor-stateclass
Add state class support to HABinarySensor
2025-07-07 22:23:12 +02:00
Dawid Chyrzyński 77321da999 fix data type in the sensor-integer example 2025-07-07 21:43:17 +02:00
Dawid Chyrzyński 9c9d074711 Fixed a crash caused by a missing device ID 2025-07-07 21:03:27 +02:00
Dawid Chyrzyński a1f286a80d update HADevice docs 2025-07-07 20:35:59 +02:00
Dawid Chyrzyński 21fd745a7a add std::function to the HAMqtt class 2025-07-06 20:50:11 +02:00
Dawid Chyrzyński 471b9c6fb0 update comments 2025-07-06 20:40:25 +02:00
Dawid Chyrzyński f081272fcf typos 2025-07-06 17:04:11 +02:00
Dawid Chyrzyński 470ec878d6 final implementation of std::function support, implemented tests 2025-07-06 17:03:38 +02:00
Dawid Chyrzyński 586bf3fe1d update auniter config, update gitignore 2025-07-06 15:15:45 +02:00
Dawid Chyrzyński 4755081296 bump up version, update gitignore 2025-07-06 15:15:20 +02:00
Dawid Chyrzyński 1f41c47f64 Merge pull request #281 from KSDaemon/main - Add support for std::function
Add support for std::function on the ESP devices
2025-07-06 13:06:25 +02:00
Konstantin Burkalev 105d9bd078 Make callbacks backward compatible with void pointers 2025-01-19 15:11:06 +02:00
Konstantin Burkalev 67ff1c84b8 Add support for std::function on the ESP devices 2024-12-29 23:12:19 +02:00
C. Scott Ananian 51e28f2c93 Add state class support to HABinarySensor 2024-06-13 11:58:42 -04:00
Dawid Chyrzyński 1d333ab229 ArduinoHA 2.1.0 2024-02-10 00:48:58 +01:00
Dawid Chyrzynski 2a00dcd65f fix compiler warnings 2024-02-10 00:40:42 +01:00
Dawid Chyrzyński 105e96197b Add support for Arduino Due (#228)
* added support for Arduino Due

* update tests

* update changelog and docs

* fix tests
2024-02-09 22:16:54 +01:00
Dawid Chyrzyński a838dac9c0 fix tests (#227) 2024-02-09 20:31:15 +01:00
Dawid Chyrzyński 77a356bb37 HAMqtt improvements (#224)
* added setBufferSize method to the HAMqtt class

* added getState method to the HAMqtt class

* update docs

* update changelog

* changelog

* update mocks

* change data type in the PubSubClientMock

* update docs and changelog

* add more callbacks to the HAMqtt class

* improve handling of the disconnected state

* minor fixes in state handling
2024-02-09 19:27:10 +01:00
Dawid Chyrzyński 9e17dda50b Added support for object_id in all device types (#223)
* added support for the object_id property in all device types

* added tests
2024-02-07 00:03:30 +01:00
Dawid Chyrzynski 5c7acd7e39 update readme badges 2024-02-06 17:24:22 +01:00
Dawid Chyrzyński 87b7e03fe6 HASensor improvements (#222)
* added support for setting None value in the HASensor

* added support for the expire_after property in the HASensor

* update readme and docs

* added expire_after property in the HABinarySensor

* increase default device types limit to 24 on non ATMega328/168 processors

* added support for the JSON attributes in the HASensor
2024-02-06 17:01:46 +01:00
camnewnham ae059aecc1 Doc: add comment regarding position feature usage (#111)
* add comment regarding position feature usage

* add doc link
2024-02-06 13:58:27 +01:00
Dawid Chyrzyński 6cf4f11580 HASelect improvements (#221)
* added getCurrentOption method to the HASelect

* final fixes, tests

* added support for publishing None state in the HASelect

* update select.ino

* update docs
2024-02-05 20:44:29 +01:00
Dawid Chyrzyński fdc60b57c3 Added support for the configuration_url parameter in the HADevice (#220)
* added support for the configuration_url parameter in the HADevice

* update docs
2024-02-05 17:21:36 +01:00
Dawid Chyrzyński 80ae7ae592 Add support for extended unique IDs (#217)
* implement unique ID serialization as flag

* finished extended unique IDs feature

* add tests

* update docs

* add funding.yml
2024-02-05 16:20:40 +01:00
Dawid Chyrzynski ab46939903 docs 2024-02-05 16:17:33 +01:00
Dawid Chyrzynski e054e53eea update changelog 2024-01-31 09:11:32 +01:00
Dawid Chyrzynski 9ec42d667d update tests, change state_class to stat_cla 2024-01-31 09:11:25 +01:00
Mateusz Starzec b1eeec0856 Support for statistics from sensors in HA (#179)
* Fix statistics from sensors

* Test for state class setter in HASensor
2024-01-31 09:03:01 +01:00
Dawid Chyrzynski cd706969de update changelog 2024-01-31 09:00:44 +01:00
allenb2800andAllen Benter 8e3aad90c4 setKeepAlive function added issue #153 (#170)
Co-authored-by: Allen Benter <allen.benter@dpi.nsw.gov.au>
2024-01-31 08:54:12 +01:00
Dawid Chyrzynski b0bc9b4ea7 bump up version 2024-01-31 00:05:02 +01:00
Dawid Chyrzynski 8d76532e41 update changelog and tests 2024-01-31 00:04:31 +01:00
Kostiantyn Synytsia 252f0ab6b1 Bugfix/maximum number of device types (#190) (#191)
* added test for maximum device types

* fix max device types check
2024-01-30 23:59:54 +01:00
Dawid Chyrzynski b86495f492 update changelog 2024-01-30 23:31:53 +01:00
Eric Shtivelberg 884d8254bf fix: warning: class 'HANumeric' is implicitly friends with itself (#197) 2024-01-30 23:29:17 +01:00
139 changed files with 2852 additions and 358 deletions
+1
View File
@@ -0,0 +1 @@
github: dawidchyrzynski
+19 -1
View File
@@ -1,3 +1,21 @@
# General
docsrc/xml
docsrc/build
.DS_Store
# MacOS
.DS_Store
.AppleDouble
.LSOverride
# C++ objects and libs
*.slo
*.lo
*.o
*.a
*.la
*.lai
*.so
*.so.*
*.dll
*.dylib
*.out
+33 -3
View File
@@ -1,5 +1,35 @@
# Changelog
## 2.2.0
* Added support for std::function in all callbacks [#281](https://github.com/dawidchyrzynski/arduino-home-assistant/pull/281)
* Fixed a crash caused by a missing device ID [#284](https://github.com/dawidchyrzynski/arduino-home-assistant/issues/284)
## 2.1.0
**New features:**
* Added support for setting MQTT's keep alive [#153](https://github.com/dawidchyrzynski/arduino-home-assistant/issues/153) by [@allenb2800](https://github.com/allenb2800)
* Added support for the `state_class` property in the `HASensor` [#179](https://github.com/dawidchyrzynski/arduino-home-assistant/pull/179)
* Implemented extended unique ID support for all device types. This allows you to prefix each device type's unique ID with the device ID, ensuring smooth deployment of identical code on multiple devices without encountering unique ID conflicts [#212](https://github.com/dawidchyrzynski/arduino-home-assistant/issues/212)
* Added support for the `configuration_url` property in the `HADevice` [#182](https://github.com/dawidchyrzynski/arduino-home-assistant/issues/182)
* Added `getCurrentOption` method to the `HASelect` device type [#163](https://github.com/dawidchyrzynski/arduino-home-assistant/issues/163)
* Added support for publishing the `None` state in the `HASelect` device type [#146](https://github.com/dawidchyrzynski/arduino-home-assistant/issues/146)
* Added support for publishing the `None` state in the `HASensor` device type [#175](https://github.com/dawidchyrzynski/arduino-home-assistant/issues/175)
* Added support for the `expire_after` property in the `HASensor` [#171](https://github.com/dawidchyrzynski/arduino-home-assistant/issues/171)
* Added support for the `expire_after` property in the `HABinarySensor` [#159](https://github.com/dawidchyrzynski/arduino-home-assistant/issues/159)
* Added support for the JSON attributes in the `HASensor`
* Added support for the `object_id` property in all device types
* Added `setBufferSize` method to the `HAMqtt` class [#202](https://github.com/dawidchyrzynski/arduino-home-assistant/issues/202)
* Added `getState` method to the `HAMqtt` class
* Added `onDisconnected` callback method to the `HAMqtt` class
* Added `onStateChanged` callback method to the `HAMqtt` class
* Added support for Arduino Due [#137](https://github.com/dawidchyrzynski/arduino-home-assistant/issues/137)
**Fixes:**
* Fixed a bug with the maximum number of device types [#190](https://github.com/dawidchyrzynski/arduino-home-assistant/issues/190) by [@martaisty](https://github.com/martaisty)
* Fixed compiler warning: `class 'HANumeric' is implicitly friends with itself` [#197](https://github.com/dawidchyrzynski/arduino-home-assistant/pull/197) by [@shedokan](https://github.com/shedokan)
* The default limit for device types has been raised to 24 on processors other than ATMega328/ATMega168. The previous default limit of 6 led to confusion for many users.
## 2.0.0
**New features:**
@@ -24,12 +54,12 @@
* Added support for the `HAScene` device type
* Added support for the `HALight` device type
**Bugs fixes:**
**Fixes:**
* Last Will Message is now retained (#70)
* Compilation error on SAMD family (#82)
**New examples:**
* [Button](examples/button/button.ino) - adding simple buttons to the Home Assistant panel.
**New examples:**
* [Button](examples/button/button.ino) - adding simple buttons to the Home Assistant panel.
**Breaking changes:**
+14 -2
View File
@@ -1,12 +1,14 @@
# Arduino Home Assistant integration 🏠
[![](https://img.shields.io/github/v/release/dawidchyrzynski/arduino-home-assistant?label=Version)](https://github.com/dawidchyrzynski/arduino-home-assistant/releases)
[![](https://img.shields.io/badge/Browse_Documentation-40BC13)](https://dawidchyrzynski.github.io/arduino-home-assistant/)
[![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/dawidchyrzynski)
ArduinoHA allows to integrate an Arduino/ESP based device with Home Assistant using MQTT.
The library is designed to use as low resources (RAM/flash) as possible.
Initially, it was optimized to work on Arduino Uno with Ethernet Shield,
but I successfully use it on ESP8266/ESP8255 boards in my projects.
[📘 Documentation](https://dawidchyrzynski.github.io/arduino-home-assistant/)
## Features
* Two-way communication (state reporting and command execution)
@@ -22,24 +24,33 @@ but I successfully use it on ESP8266/ESP8255 boards in my projects.
| Home Assistant type | Supported |
| ------------------- | :--------: |
| Alarm control panel | ❌ |
| Binary sensor | ✅ |
| Button | ✅ |
| Camera | ✅ |
| Cover | ✅ |
| Device tracker | ✅ |
| Device trigger | ✅ |
| Event | ❌ |
| Fan | ✅ |
| Humidifier | ❌ |
| Image | ❌ |
| HVAC | ✅ |
| Lawn mower | ❌ |
| Light | ✅ |
| Lock | ✅ |
| Number | ✅ |
| Scene | ✅ |
| Select | ✅ |
| Sensor | ✅ |
| Siren | ❌ |
| Switch | ✅ |
| Update | ❌ |
| Tag scanner | ✅ |
| Text | ❌ |
| Vacuum | ❌ |
| Valve | ❌ |
| Water heater | ❌ |
## Examples
@@ -83,6 +94,7 @@ Here is the list of devices on which the library was tested:
* Arduino Nano
* Arduino Pro Mini
* Arduino Nano 33 IoT
* Arduino Due
* NodeMCU
* Controllino Mega (Pure)
* Controllino Maxi (Pure)
+4
View File
@@ -41,6 +41,10 @@ table.examples-table tbody td + td {
.searchbox .caption-text {
display: none
}
.code-block-caption {
margin-top: 30px;
font-weight: bold;
}
form {
display: flex;
flex-direction: row;
+1 -1
View File
@@ -1,6 +1,6 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '2.0.0',
VERSION: '2.1.0',
LANGUAGE: 'None',
COLLAPSE_INDEX: false,
BUILDER: 'html',
+31 -1
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -215,6 +216,12 @@
<dd><p>Returns true if the shared availability is enabled for the device. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NK8HADevice26isExtendedUniqueIdsEnabledEv">
<span id="_CPPv3NK8HADevice26isExtendedUniqueIdsEnabledEv"></span><span id="_CPPv2NK8HADevice26isExtendedUniqueIdsEnabledEv"></span><span id="HADevice::isExtendedUniqueIdsEnabledC"></span><span class="target" id="class_h_a_device_1ad7e1673506833aa7072b4b604b20ecda"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">isExtendedUniqueIdsEnabled</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK8HADevice26isExtendedUniqueIdsEnabledEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Returns true if the extended unique IDs feature is enabled for the device. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NK8HADevice20getAvailabilityTopicEv">
<span id="_CPPv3NK8HADevice20getAvailabilityTopicEv"></span><span id="_CPPv2NK8HADevice20getAvailabilityTopicEv"></span><span id="HADevice::getAvailabilityTopicC"></span><span class="target" id="class_h_a_device_1ab508af42eb1fc0573a89afa3b92645fe"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">getAvailabilityTopic</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK8HADevice20getAvailabilityTopicEv" title="Permalink to this definition"></a><br /></dt>
@@ -227,6 +234,12 @@
<dd><p>Returns online/offline state of the device. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N8HADevice23enableExtendedUniqueIdsEv">
<span id="_CPPv3N8HADevice23enableExtendedUniqueIdsEv"></span><span id="_CPPv2N8HADevice23enableExtendedUniqueIdsEv"></span><span id="HADevice::enableExtendedUniqueIds"></span><span class="target" id="class_h_a_device_1ad5634185083f02113ea68a357c16d228"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">enableExtendedUniqueIds</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N8HADevice23enableExtendedUniqueIdsEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Enables the use of extended unique IDs for all registered device types. The unique ID of each device type will be prefixed with the device’s ID once enabled. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N8HADevice11setUniqueIdEPK4byteK8uint16_t">
<span id="_CPPv3N8HADevice11setUniqueIdEPK4byteK8uint16_t"></span><span id="_CPPv2N8HADevice11setUniqueIdEPK4byteK8uint16_t"></span><span id="HADevice::setUniqueId__byteCP.uint16_tC"></span><span class="target" id="class_h_a_device_1a8d10a57aa14007643ccdecd7c1a372a5"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setUniqueId</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">byte</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">uniqueId</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">length</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N8HADevice11setUniqueIdEPK4byteK8uint16_t" title="Permalink to this definition"></a><br /></dt>
@@ -289,6 +302,17 @@
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N8HADevice19setConfigurationUrlEPKc">
<span id="_CPPv3N8HADevice19setConfigurationUrlEPKc"></span><span id="_CPPv2N8HADevice19setConfigurationUrlEPKc"></span><span id="HADevice::setConfigurationUrl__cCP"></span><span class="target" id="class_h_a_device_1a70cd536783b2b994e9d903d6daa30f44"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setConfigurationUrl</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">url</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N8HADevice19setConfigurationUrlEPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the “configuration URL” property that’s going to be used by the Home Assistant.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>url</strong> – Configuration URL to publish. </p>
</dd>
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N8HADevice15setAvailabilityEb">
<span id="_CPPv3N8HADevice15setAvailabilityEb"></span><span id="_CPPv2N8HADevice15setAvailabilityEb"></span><span id="HADevice::setAvailability__b"></span><span class="target" id="class_h_a_device_1a3eac570f51a76789f0564714166c674a"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setAvailability</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">online</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N8HADevice15setAvailabilityEb" title="Permalink to this definition"></a><br /></dt>
@@ -357,6 +381,12 @@
<dd><p>Specifies whether the device is available (online / offline). </p>
</dd></dl>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N8HADevice18_extendedUniqueIdsE">
<span id="_CPPv3N8HADevice18_extendedUniqueIdsE"></span><span id="_CPPv2N8HADevice18_extendedUniqueIdsE"></span><span id="HADevice::_extendedUniqueIds__b"></span><span class="target" id="class_h_a_device_1ad330d3098dd3741669b09c6e98fa8a2c"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">_extendedUniqueIds</span></span></span><a class="headerlink" href="#_CPPv4N8HADevice18_extendedUniqueIdsE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Specifies whether extended unique IDs feature is enabled. </p>
</dd></dl>
</div>
</dd></dl>
+142 -3
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -155,10 +156,74 @@
<span id="_CPPv36HAMqtt"></span><span id="_CPPv26HAMqtt"></span><span id="HAMqtt"></span><span class="target" id="class_h_a_mqtt"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">HAMqtt</span></span></span><a class="headerlink" href="#_CPPv46HAMqtt" title="Permalink to this definition"></a><br /></dt>
<dd><p>This class is a wrapper for the PubSub API. It’s a central point of the library where instances of all device types are stored. </p>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-types">Public Types</p>
<dl class="cpp enum">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt15ConnectionStateE">
<span id="_CPPv3N6HAMqtt15ConnectionStateE"></span><span id="_CPPv2N6HAMqtt15ConnectionStateE"></span><span class="target" id="class_h_a_mqtt_1a46bf495384c36afc3d85edbaa3d495b7"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ConnectionState</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt15ConnectionStateE" title="Permalink to this definition"></a><br /></dt>
<dd><p><em>Values:</em></p>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt15ConnectionState15StateConnectingE">
<span id="_CPPv3N6HAMqtt15ConnectionState15StateConnectingE"></span><span id="_CPPv2N6HAMqtt15ConnectionState15StateConnectingE"></span><span class="target" id="class_h_a_mqtt_1a46bf495384c36afc3d85edbaa3d495b7a26e4b442b7686873d5d46a112fae55bd"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">StateConnecting</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt15ConnectionState15StateConnectingE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt15ConnectionState22StateConnectionTimeoutE">
<span id="_CPPv3N6HAMqtt15ConnectionState22StateConnectionTimeoutE"></span><span id="_CPPv2N6HAMqtt15ConnectionState22StateConnectionTimeoutE"></span><span class="target" id="class_h_a_mqtt_1a46bf495384c36afc3d85edbaa3d495b7a0f7e0cd68753b9fd49aea3533bbd7a04"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">StateConnectionTimeout</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt15ConnectionState22StateConnectionTimeoutE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt15ConnectionState19StateConnectionLostE">
<span id="_CPPv3N6HAMqtt15ConnectionState19StateConnectionLostE"></span><span id="_CPPv2N6HAMqtt15ConnectionState19StateConnectionLostE"></span><span class="target" id="class_h_a_mqtt_1a46bf495384c36afc3d85edbaa3d495b7a2a491377061c733fb54b1cd0adcc0a0c"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">StateConnectionLost</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt15ConnectionState19StateConnectionLostE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt15ConnectionState21StateConnectionFailedE">
<span id="_CPPv3N6HAMqtt15ConnectionState21StateConnectionFailedE"></span><span id="_CPPv2N6HAMqtt15ConnectionState21StateConnectionFailedE"></span><span class="target" id="class_h_a_mqtt_1a46bf495384c36afc3d85edbaa3d495b7a84ec7511e2dca0785ca364b75c465019"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">StateConnectionFailed</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt15ConnectionState21StateConnectionFailedE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt15ConnectionState17StateDisconnectedE">
<span id="_CPPv3N6HAMqtt15ConnectionState17StateDisconnectedE"></span><span id="_CPPv2N6HAMqtt15ConnectionState17StateDisconnectedE"></span><span class="target" id="class_h_a_mqtt_1a46bf495384c36afc3d85edbaa3d495b7ab8f4310771f23cc05ecb141666c85292"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">StateDisconnected</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt15ConnectionState17StateDisconnectedE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt15ConnectionState14StateConnectedE">
<span id="_CPPv3N6HAMqtt15ConnectionState14StateConnectedE"></span><span id="_CPPv2N6HAMqtt15ConnectionState14StateConnectedE"></span><span class="target" id="class_h_a_mqtt_1a46bf495384c36afc3d85edbaa3d495b7a0c33a2492617d852c461645e04d7b641"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">StateConnected</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt15ConnectionState14StateConnectedE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt15ConnectionState16StateBadProtocolE">
<span id="_CPPv3N6HAMqtt15ConnectionState16StateBadProtocolE"></span><span id="_CPPv2N6HAMqtt15ConnectionState16StateBadProtocolE"></span><span class="target" id="class_h_a_mqtt_1a46bf495384c36afc3d85edbaa3d495b7a9b88f4b93c76c0270863b2f94d4882d7"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">StateBadProtocol</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt15ConnectionState16StateBadProtocolE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt15ConnectionState16StateBadClientIdE">
<span id="_CPPv3N6HAMqtt15ConnectionState16StateBadClientIdE"></span><span id="_CPPv2N6HAMqtt15ConnectionState16StateBadClientIdE"></span><span class="target" id="class_h_a_mqtt_1a46bf495384c36afc3d85edbaa3d495b7ab7da41970dcf4c6c946c54bd76905c33"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">StateBadClientId</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt15ConnectionState16StateBadClientIdE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt15ConnectionState16StateUnavailableE">
<span id="_CPPv3N6HAMqtt15ConnectionState16StateUnavailableE"></span><span id="_CPPv2N6HAMqtt15ConnectionState16StateUnavailableE"></span><span class="target" id="class_h_a_mqtt_1a46bf495384c36afc3d85edbaa3d495b7ac7f60402355ec36b51a8ca5d965b90b8"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">StateUnavailable</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt15ConnectionState16StateUnavailableE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt15ConnectionState19StateBadCredentialsE">
<span id="_CPPv3N6HAMqtt15ConnectionState19StateBadCredentialsE"></span><span id="_CPPv2N6HAMqtt15ConnectionState19StateBadCredentialsE"></span><span class="target" id="class_h_a_mqtt_1a46bf495384c36afc3d85edbaa3d495b7a00437050c29a348c97743889f378e4f7"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">StateBadCredentials</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt15ConnectionState19StateBadCredentialsE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt15ConnectionState17StateUnauthorizedE">
<span id="_CPPv3N6HAMqtt15ConnectionState17StateUnauthorizedE"></span><span id="_CPPv2N6HAMqtt15ConnectionState17StateUnauthorizedE"></span><span class="target" id="class_h_a_mqtt_1a46bf495384c36afc3d85edbaa3d495b7a39d4eda1c9ac8023f84e63c1023e0c54"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">StateUnauthorized</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt15ConnectionState17StateUnauthorizedE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
</dd></dl>
</div>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt6HAMqttER6ClientR8HADeviceK7uint8_t">
<span id="_CPPv3N6HAMqtt6HAMqttER6ClientR8HADeviceK7uint8_t"></span><span id="_CPPv2N6HAMqtt6HAMqttER6ClientR8HADeviceK7uint8_t"></span><span id="HAMqtt::HAMqtt__ClientR.HADeviceR.uint8_tC"></span><span class="target" id="class_h_a_mqtt_1a336b9511591544e2642451aae3c174fd"></span><span class="k"><span class="pre">explicit</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">HAMqtt</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">Client</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">netClient</span></span>, <a class="reference internal" href="ha-device.html#_CPPv48HADevice" title="HADevice"><span class="n"><span class="pre">HADevice</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">device</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">maxDevicesTypesNb</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="m"><span class="pre">6</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6HAMqtt6HAMqttER6ClientR8HADeviceK7uint8_t" title="Permalink to this definition"></a><br /></dt>
<span id="_CPPv3N6HAMqtt6HAMqttER6ClientR8HADeviceK7uint8_t"></span><span id="_CPPv2N6HAMqtt6HAMqttER6ClientR8HADeviceK7uint8_t"></span><span id="HAMqtt::HAMqtt__ClientR.HADeviceR.uint8_tC"></span><span class="target" id="class_h_a_mqtt_1a404d7041521e1f10bf250b439abc9048"></span><span class="k"><span class="pre">explicit</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">HAMqtt</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">Client</span></span><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">netClient</span></span>, <a class="reference internal" href="ha-device.html#_CPPv48HADevice" title="HADevice"><span class="n"><span class="pre">HADevice</span></span></a><span class="w"> </span><span class="p"><span class="pre">&amp;</span></span><span class="n sig-param"><span class="pre">device</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">maxDevicesTypesNb</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="m"><span class="pre">24</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6HAMqtt6HAMqttER6ClientR8HADeviceK7uint8_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Creates a new instance of the <a class="reference internal" href="#class_h_a_mqtt"><span class="std std-ref">HAMqtt</span></a> class. Please note that only one instance of the class can be initialized at the same time.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
@@ -239,6 +304,34 @@
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt14onDisconnectedEPFvvE">
<span id="_CPPv3N6HAMqtt14onDisconnectedEPFvvE"></span><span id="_CPPv2N6HAMqtt14onDisconnectedEPFvvE"></span><span class="target" id="class_h_a_mqtt_1a42dc8114d38dde6e58ead88f9b5181e3"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">onDisconnected</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">callback</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">)</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6HAMqtt14onDisconnectedEPFvvE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Registers a new callback method that will be called each time the connection to the MQTT broker is lost.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> – Callback method. </p>
</dd>
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt14onStateChangedEPFv15ConnectionStateE">
<span id="_CPPv3N6HAMqtt14onStateChangedEPFv15ConnectionStateE"></span><span id="_CPPv2N6HAMqtt14onStateChangedEPFv15ConnectionStateE"></span><span class="target" id="class_h_a_mqtt_1acbb91743a51c390e6d2a608f58c5cd3e"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">onStateChanged</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">callback</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">(</span></span><a class="reference internal" href="#_CPPv4N6HAMqtt15ConnectionStateE" title="HAMqtt::ConnectionState"><span class="n"><span class="pre">ConnectionState</span></span></a><span class="w"> </span><span class="n"><span class="pre">state</span></span><span class="p"><span class="pre">)</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6HAMqtt14onStateChangedEPFv15ConnectionStateE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Registers a new callback method that will be called each time the connection state changes.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> – Callback method. </p>
</dd>
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NK6HAMqtt8getStateEv">
<span id="_CPPv3NK6HAMqtt8getStateEv"></span><span id="_CPPv2NK6HAMqtt8getStateEv"></span><span id="HAMqtt::getStateC"></span><span class="target" id="class_h_a_mqtt_1a356b1b1ee9ed9b46abca060616cca56e"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N6HAMqtt15ConnectionStateE" title="HAMqtt::ConnectionState"><span class="n"><span class="pre">ConnectionState</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">getState</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK6HAMqtt8getStateEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Returns the current state of the MQTT connection. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt5beginEK9IPAddressK8uint16_tPKcPKc">
<span id="_CPPv3N6HAMqtt5beginEK9IPAddressK8uint16_tPKcPKc"></span><span id="_CPPv2N6HAMqtt5beginEK9IPAddressK8uint16_tPKcPKc"></span><span id="HAMqtt::begin__IPAddressC.uint16_tC.cCP.cCP"></span><span class="target" id="class_h_a_mqtt_1ae4e2ebb17afaeef26d98c69d6a9e5cbb"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">begin</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">IPAddress</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">serverIp</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">serverPort</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="m"><span class="pre">1883</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">username</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">nullptr</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">password</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="k"><span class="pre">nullptr</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6HAMqtt5beginEK9IPAddressK8uint16_tPKcPKc" title="Permalink to this definition"></a><br /></dt>
@@ -319,6 +412,28 @@
<dd><p>Returns true if connection to the MQTT broker is established. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt12setKeepAliveE8uint16_t">
<span id="_CPPv3N6HAMqtt12setKeepAliveE8uint16_t"></span><span id="_CPPv2N6HAMqtt12setKeepAliveE8uint16_t"></span><span id="HAMqtt::setKeepAlive__uint16_t"></span><span class="target" id="class_h_a_mqtt_1a014a655f288e0e02e441b5bb33d1094e"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setKeepAlive</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">keepAlive</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6HAMqtt12setKeepAliveE8uint16_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets keep alive for the MQTT connection. By default it’s 15 seconds.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>keepAlive</strong> – Number of seconds to keep connection alive. </p>
</dd>
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt13setBufferSizeE8uint16_t">
<span id="_CPPv3N6HAMqtt13setBufferSizeE8uint16_t"></span><span id="_CPPv2N6HAMqtt13setBufferSizeE8uint16_t"></span><span id="HAMqtt::setBufferSize__uint16_t"></span><span class="target" id="class_h_a_mqtt_1a90c9d43346a86471ffcc6e5e98fbba6a"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setBufferSize</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">size</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6HAMqtt13setBufferSizeE8uint16_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the buffer size for the MQTT connection. By default it’s 256 bytes.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>size</strong> – Size of the buffer. </p>
</dd>
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt13addDeviceTypeEP16HABaseDeviceType">
<span id="_CPPv3N6HAMqtt13addDeviceTypeEP16HABaseDeviceType"></span><span id="_CPPv2N6HAMqtt13addDeviceTypeEP16HABaseDeviceType"></span><span id="HAMqtt::addDeviceType__HABaseDeviceTypeP"></span><span class="target" id="class_h_a_mqtt_1a4f732ac5fd2f5cfc0e6256853adc08f9"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">addDeviceType</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="../device-types/ha-base-device-type.html#_CPPv416HABaseDeviceType" title="HABaseDeviceType"><span class="n"><span class="pre">HABaseDeviceType</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">deviceType</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6HAMqtt13addDeviceTypeEP16HABaseDeviceType" title="Permalink to this definition"></a><br /></dt>
@@ -479,6 +594,12 @@
<dd><p>This method is called each time the connection with MQTT broker is acquired. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt8setStateE15ConnectionState">
<span id="_CPPv3N6HAMqtt8setStateE15ConnectionState"></span><span id="_CPPv2N6HAMqtt8setStateE15ConnectionState"></span><span id="HAMqtt::setState__ConnectionState"></span><span class="target" id="class_h_a_mqtt_1aa2b7c63842cf47c618dd7c36d4feec85"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setState</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="#_CPPv4N6HAMqtt15ConnectionStateE" title="HAMqtt::ConnectionState"><span class="n"><span class="pre">ConnectionState</span></span></a><span class="w"> </span><span class="n sig-param"><span class="pre">state</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N6HAMqtt8setStateE15ConnectionState" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the state of the MQTT connection. </p>
</dd></dl>
</div>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-private-members">Private Members</p>
@@ -506,6 +627,18 @@
<dd><p>The callback method that will be called when the MQTT connection is acquired. </p>
</dd></dl>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt21_disconnectedCallbackE">
<span id="_CPPv3N6HAMqtt21_disconnectedCallbackE"></span><span id="_CPPv2N6HAMqtt21_disconnectedCallbackE"></span><span class="target" id="class_h_a_mqtt_1ab81e921289d90e0d30f86fdc0bc73518"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">_disconnectedCallback</span></span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">)</span></span><a class="headerlink" href="#_CPPv4N6HAMqtt21_disconnectedCallbackE" title="Permalink to this definition"></a><br /></dt>
<dd><p>The callback method that will be called when the MQTT connection is lost. </p>
</dd></dl>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt21_stateChangedCallbackE">
<span id="_CPPv3N6HAMqtt21_stateChangedCallbackE"></span><span id="_CPPv2N6HAMqtt21_stateChangedCallbackE"></span><span class="target" id="class_h_a_mqtt_1a7d3886e24ddba3f56012c27e5d8959d3"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">(</span></span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">_stateChangedCallback</span></span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">(</span></span><a class="reference internal" href="#_CPPv4N6HAMqtt15ConnectionStateE" title="HAMqtt::ConnectionState"><span class="n"><span class="pre">ConnectionState</span></span></a><span class="w"> </span><span class="n"><span class="pre">state</span></span><span class="p"><span class="pre">)</span></span><a class="headerlink" href="#_CPPv4N6HAMqtt21_stateChangedCallbackE" title="Permalink to this definition"></a><br /></dt>
<dd><p>The callback method that will be called when the MQTT connection state changes. </p>
</dd></dl>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt12_initializedE">
<span id="_CPPv3N6HAMqtt12_initializedE"></span><span id="_CPPv2N6HAMqtt12_initializedE"></span><span id="HAMqtt::_initialized__b"></span><span class="target" id="class_h_a_mqtt_1ab5342ef2fc66956a2de96f1b8ad9453b"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">_initialized</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt12_initializedE" title="Permalink to this definition"></a><br /></dt>
@@ -578,12 +711,18 @@
<dd><p>The last will retain set by <a class="reference internal" href="#class_h_a_mqtt_1a87c9c08db323a22e065bfa6762a94732"><span class="std std-ref">HAMqtt::setLastWill</span></a>. </p>
</dd></dl>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt13_currentStateE">
<span id="_CPPv3N6HAMqtt13_currentStateE"></span><span id="_CPPv2N6HAMqtt13_currentStateE"></span><span id="HAMqtt::_currentState__ConnectionState"></span><span class="target" id="class_h_a_mqtt_1a8899aa292155d8c51499142cd0ae950c"></span><a class="reference internal" href="#_CPPv4N6HAMqtt15ConnectionStateE" title="HAMqtt::ConnectionState"><span class="n"><span class="pre">ConnectionState</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">_currentState</span></span></span><a class="headerlink" href="#_CPPv4N6HAMqtt13_currentStateE" title="Permalink to this definition"></a><br /></dt>
<dd><p>The last known state of the MQTT connection. </p>
</dd></dl>
</div>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-private-static-attributes">Private Static Attributes</p>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N6HAMqtt17ReconnectIntervalE">
<span id="_CPPv3N6HAMqtt17ReconnectIntervalE"></span><span id="_CPPv2N6HAMqtt17ReconnectIntervalE"></span><span id="HAMqtt::ReconnectInterval__uint16_tC"></span><span class="target" id="class_h_a_mqtt_1a68a6a0d104024dcee5cf2534b419a035"></span><span class="k"><span class="pre">static</span></span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ReconnectInterval</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="m"><span class="pre">5000</span></span><a class="headerlink" href="#_CPPv4N6HAMqtt17ReconnectIntervalE" title="Permalink to this definition"></a><br /></dt>
<span id="_CPPv3N6HAMqtt17ReconnectIntervalE"></span><span id="_CPPv2N6HAMqtt17ReconnectIntervalE"></span><span id="HAMqtt::ReconnectInterval__uint16_tC"></span><span class="target" id="class_h_a_mqtt_1a68a6a0d104024dcee5cf2534b419a035"></span><span class="k"><span class="pre">static</span></span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ReconnectInterval</span></span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="m"><span class="pre">10000</span></span><a class="headerlink" href="#_CPPv4N6HAMqtt17ReconnectIntervalE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Interval between MQTT reconnects (milliseconds). </p>
</dd></dl>
+2 -1
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -244,6 +245,23 @@
<dd><p>Returns name of the deviced type that was assigned via setName method. It can be nullptr if there is no name assigned. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N16HABaseDeviceType11setObjectIdEPKc">
<span id="_CPPv3N16HABaseDeviceType11setObjectIdEPKc"></span><span id="_CPPv2N16HABaseDeviceType11setObjectIdEPKc"></span><span id="HABaseDeviceType::setObjectId__cCP"></span><span class="target" id="class_h_a_base_device_type_1a4c22e772ee15bf7108cba852ed2faa3b"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setObjectId</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">objectId</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N16HABaseDeviceType11setObjectIdEPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets object ID that will be used by HA to generate entity ID. Keep the ID short to save the resources.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>objectId</strong> – The object ID. </p>
</dd>
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NK16HABaseDeviceType11getObjectIdEv">
<span id="_CPPv3NK16HABaseDeviceType11getObjectIdEv"></span><span id="_CPPv2NK16HABaseDeviceType11getObjectIdEv"></span><span id="HABaseDeviceType::getObjectIdC"></span><span class="target" id="class_h_a_base_device_type_1aa7df8603a35f638fb9a7c80707347b28"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">getObjectId</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK16HABaseDeviceType11getObjectIdEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Returns the object ID that was set by setObjectId method. It can be nullptr if there is no ID assigned. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N16HABaseDeviceType15setAvailabilityEb">
<span id="_CPPv3N16HABaseDeviceType15setAvailabilityEb"></span><span id="_CPPv2N16HABaseDeviceType15setAvailabilityEb"></span><span id="HABaseDeviceType::setAvailability__b"></span><span class="target" id="class_h_a_base_device_type_1a7552355c7806c24cb839b068a2b8694e"></span><span class="k"><span class="pre">virtual</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setAvailability</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">online</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N16HABaseDeviceType15setAvailabilityEb" title="Permalink to this definition"></a><br /></dt>
@@ -371,6 +389,12 @@
<dd><p>The name that was set using setName method. It can be nullptr. </p>
</dd></dl>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N16HABaseDeviceType9_objectIdE">
<span id="_CPPv3N16HABaseDeviceType9_objectIdE"></span><span id="_CPPv2N16HABaseDeviceType9_objectIdE"></span><span id="HABaseDeviceType::_objectId__cCP"></span><span class="target" id="class_h_a_base_device_type_1af81965b24794e2cba173006ed0a29b00"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">_objectId</span></span></span><a class="headerlink" href="#_CPPv4N16HABaseDeviceType9_objectIdE" title="Permalink to this definition"></a><br /></dt>
<dd><p>The object ID that was set using setObjectId method. It can be nullptr. </p>
</dd></dl>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N16HABaseDeviceType11_serializerE">
<span id="_CPPv3N16HABaseDeviceType11_serializerE"></span><span id="_CPPv2N16HABaseDeviceType11_serializerE"></span><span id="HABaseDeviceType::_serializer__HASerializerP"></span><span class="target" id="class_h_a_base_device_type_1a2183f616ed3662b9d954ee65df896079"></span><a class="reference internal" href="../utils/ha-serializer.html#_CPPv412HASerializer" title="HASerializer"><span class="n"><span class="pre">HASerializer</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">_serializer</span></span></span><a class="headerlink" href="#_CPPv4N16HABaseDeviceType11_serializerE" title="Permalink to this definition"></a><br /></dt>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -187,6 +188,17 @@
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N14HABinarySensor14setExpireAfterE8uint16_t">
<span id="_CPPv3N14HABinarySensor14setExpireAfterE8uint16_t"></span><span id="_CPPv2N14HABinarySensor14setExpireAfterE8uint16_t"></span><span id="HABinarySensor::setExpireAfter__uint16_t"></span><span class="target" id="class_h_a_binary_sensor_1a684beba9239222e44e998f8baea41da4"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setExpireAfter</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">expireAfter</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N14HABinarySensor14setExpireAfterE8uint16_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the number of seconds after the sensor’s state expires, if it’s not updated. By default the sensors state never expires.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>expireAfter</strong> – The number of seconds. </p>
</dd>
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N14HABinarySensor15setCurrentStateEKb">
<span id="_CPPv3N14HABinarySensor15setCurrentStateEKb"></span><span id="_CPPv2N14HABinarySensor15setCurrentStateEKb"></span><span id="HABinarySensor::setCurrentState__bC"></span><span class="target" id="class_h_a_binary_sensor_1a04aa233b543a5d08559de0b772331ced"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setCurrentState</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">state</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N14HABinarySensor15setCurrentStateEKb" title="Permalink to this definition"></a><br /></dt>
@@ -271,6 +283,12 @@
<dd><p>The icon of the sensor. It can be nullptr. </p>
</dd></dl>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N14HABinarySensor12_expireAfterE">
<span id="_CPPv3N14HABinarySensor12_expireAfterE"></span><span id="_CPPv2N14HABinarySensor12_expireAfterE"></span><span id="HABinarySensor::_expireAfter__HANumeric"></span><span class="target" id="class_h_a_binary_sensor_1a644e21f52a160a702c3124070722315a"></span><a class="reference internal" href="../utils/ha-numeric.html#_CPPv49HANumeric" title="HANumeric"><span class="n"><span class="pre">HANumeric</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">_expireAfter</span></span></span><a class="headerlink" href="#_CPPv4N14HABinarySensor12_expireAfterE" title="Permalink to this definition"></a><br /></dt>
<dd><p>It defines the number of seconds after the sensor’s state expires, if it’s not updated. By default the sensors state never expires. </p>
</dd></dl>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N14HABinarySensor13_currentStateE">
<span id="_CPPv3N14HABinarySensor13_currentStateE"></span><span id="_CPPv2N14HABinarySensor13_currentStateE"></span><span id="HABinarySensor::_currentState__b"></span><span class="target" id="class_h_a_binary_sensor_1a107a5872cf1d9788fe35895278dad79e"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">_currentState</span></span></span><a class="headerlink" href="#_CPPv4N14HABinarySensor13_currentStateE" title="Permalink to this definition"></a><br /></dt>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
+2 -1
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
+2 -1
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
+2 -1
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -197,7 +198,7 @@
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>state</strong> – New state of the select. </p></li>
<li><p><strong>state</strong> – New state of the select. You can set <code class="docutils literal notranslate"><span class="pre">-1</span></code> to reset the select. </p></li>
<li><p><strong>force</strong> – Forces to update state without comparing it to previous known state. </p></li>
</ul>
</dd>
@@ -207,6 +208,12 @@
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NK8HASelect16getCurrentOptionEv">
<span id="_CPPv3NK8HASelect16getCurrentOptionEv"></span><span id="_CPPv2NK8HASelect16getCurrentOptionEv"></span><span id="HASelect::getCurrentOptionC"></span><span class="target" id="class_h_a_select_1adadff59b86c066136d88188618fbf485"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">getCurrentOption</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK8HASelect16getCurrentOptionEv" title="Permalink to this definition"></a><br /></dt>
<dd><p>Returns the selected option based on the most recent state of the select. You can utilize this method to get the string representation of the option (e.g. for printing). If no option is selected, null is returned. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N8HASelect15setCurrentStateEK6int8_t">
<span id="_CPPv3N8HASelect15setCurrentStateEK6int8_t"></span><span id="_CPPv2N8HASelect15setCurrentStateEK6int8_t"></span><span id="HASelect::setCurrentState__int8_tC"></span><span class="target" id="class_h_a_select_1a3ce2a5372c12323e5bd1a29aada88aee"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setCurrentState</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">int8_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">state</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N8HASelect15setCurrentStateEK6int8_t" title="Permalink to this definition"></a><br /></dt>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -161,13 +162,14 @@
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N14HASensorNumber14HASensorNumberEPKcK15NumberPrecision">
<span id="_CPPv3N14HASensorNumber14HASensorNumberEPKcK15NumberPrecision"></span><span id="_CPPv2N14HASensorNumber14HASensorNumberEPKcK15NumberPrecision"></span><span id="HASensorNumber::HASensorNumber__cCP.NumberPrecisionC"></span><span class="target" id="class_h_a_sensor_number_1ad25fdeb579c1459fd3f57218825b13c1"></span><span class="sig-name descname"><span class="n"><span class="pre">HASensorNumber</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">uniqueId</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">NumberPrecision</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">precision</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">PrecisionP0</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N14HASensorNumber14HASensorNumberEPKcK15NumberPrecision" title="Permalink to this definition"></a><br /></dt>
<dt class="sig sig-object cpp" id="_CPPv4N14HASensorNumber14HASensorNumberEPKcK15NumberPrecisionK8uint16_t">
<span id="_CPPv3N14HASensorNumber14HASensorNumberEPKcK15NumberPrecisionK8uint16_t"></span><span id="_CPPv2N14HASensorNumber14HASensorNumberEPKcK15NumberPrecisionK8uint16_t"></span><span id="HASensorNumber::HASensorNumber__cCP.NumberPrecisionC.uint16_tC"></span><span class="target" id="class_h_a_sensor_number_1aee8b279589d82b660fb41c223a80053e"></span><span class="sig-name descname"><span class="n"><span class="pre">HASensorNumber</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">uniqueId</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">NumberPrecision</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">precision</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">PrecisionP0</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">features</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="n"><span class="pre">DefaultFeatures</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N14HASensorNumber14HASensorNumberEPKcK15NumberPrecisionK8uint16_t" title="Permalink to this definition"></a><br /></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>uniqueId</strong> – The unique ID of the sensor. It needs to be unique in a scope of your device. </p></li>
<li><p><strong>precision</strong> – Precision of the floating point number that will be displayed in the HA panel. </p></li>
<li><p><strong>features</strong> – Features that should be enabled for the sensor. </p></li>
</ul>
</dd>
</dl>
+78 -4
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -164,13 +165,35 @@
</div>
<p>Subclassed by <a class="reference internal" href="ha-sensor-number.html#class_h_a_sensor_number"><span class="std std-ref">HASensorNumber</span></a></p>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-types">Public Types</p>
<dl class="cpp enum">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor8FeaturesE">
<span id="_CPPv3N8HASensor8FeaturesE"></span><span id="_CPPv2N8HASensor8FeaturesE"></span><span class="target" id="class_h_a_sensor_1a4ecda1d1c6f4aff1ed7e152e38cf3805"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Features</span></span></span><a class="headerlink" href="#_CPPv4N8HASensor8FeaturesE" title="Permalink to this definition"></a><br /></dt>
<dd><p><em>Values:</em></p>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor8Features15DefaultFeaturesE">
<span id="_CPPv3N8HASensor8Features15DefaultFeaturesE"></span><span id="_CPPv2N8HASensor8Features15DefaultFeaturesE"></span><span class="target" id="class_h_a_sensor_1a4ecda1d1c6f4aff1ed7e152e38cf3805acd369f5847d0304db292abba0235f58d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">DefaultFeatures</span></span></span><a class="headerlink" href="#_CPPv4N8HASensor8Features15DefaultFeaturesE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor8Features21JsonAttributesFeatureE">
<span id="_CPPv3N8HASensor8Features21JsonAttributesFeatureE"></span><span id="_CPPv2N8HASensor8Features21JsonAttributesFeatureE"></span><span class="target" id="class_h_a_sensor_1a4ecda1d1c6f4aff1ed7e152e38cf3805a6581398db98868d5a764cce46b9b46ae"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">JsonAttributesFeature</span></span></span><a class="headerlink" href="#_CPPv4N8HASensor8Features21JsonAttributesFeatureE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
</dd></dl>
</div>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor8HASensorEPKc">
<span id="_CPPv3N8HASensor8HASensorEPKc"></span><span id="_CPPv2N8HASensor8HASensorEPKc"></span><span id="HASensor::HASensor__cCP"></span><span class="target" id="class_h_a_sensor_1ae03b7288c4b75fdd65d2714c3f57ab99"></span><span class="sig-name descname"><span class="n"><span class="pre">HASensor</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">uniqueId</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N8HASensor8HASensorEPKc" title="Permalink to this definition"></a><br /></dt>
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor8HASensorEPKcK8uint16_t">
<span id="_CPPv3N8HASensor8HASensorEPKcK8uint16_t"></span><span id="_CPPv2N8HASensor8HASensorEPKcK8uint16_t"></span><span id="HASensor::HASensor__cCP.uint16_tC"></span><span class="target" id="class_h_a_sensor_1a96c8105258c10db536fdbd8e4c8004d4"></span><span class="sig-name descname"><span class="n"><span class="pre">HASensor</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">uniqueId</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">features</span></span><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><a class="reference internal" href="#_CPPv4N8HASensor8Features15DefaultFeaturesE" title="HASensor::DefaultFeatures"><span class="n"><span class="pre">DefaultFeatures</span></span></a><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N8HASensor8HASensorEPKcK8uint16_t" title="Permalink to this definition"></a><br /></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>uniqueId</strong> – The unique ID of the sensor. It needs to be unique in a scope of your device. </p>
<dd class="field-odd"><ul class="simple">
<li><p><strong>uniqueId</strong> – The unique ID of the sensor. It needs to be unique in a scope of your device. </p></li>
<li><p><strong>features</strong> – Features that should be enabled for the sensor. </p></li>
</ul>
</dd>
</dl>
</dd></dl>
@@ -189,6 +212,28 @@
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor17setJsonAttributesEPKc">
<span id="_CPPv3N8HASensor17setJsonAttributesEPKc"></span><span id="_CPPv2N8HASensor17setJsonAttributesEPKc"></span><span id="HASensor::setJsonAttributes__cCP"></span><span class="target" id="class_h_a_sensor_1a04e4a413bfae54813f42fb97b6473193"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setJsonAttributes</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">json</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N8HASensor17setJsonAttributesEPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Publishes the given JSON data on the JSON attributes topic. The <code class="docutils literal notranslate"><span class="pre">JsonAttributesFeature</span></code> has to be enabled prior to setting the value.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>json</strong> – JSON attributes. </p>
</dd>
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor14setExpireAfterE8uint16_t">
<span id="_CPPv3N8HASensor14setExpireAfterE8uint16_t"></span><span id="_CPPv2N8HASensor14setExpireAfterE8uint16_t"></span><span id="HASensor::setExpireAfter__uint16_t"></span><span class="target" id="class_h_a_sensor_1a11af92c3452c511596c63dbc00baed6e"></span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setExpireAfter</span></span></span><span class="sig-paren">(</span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">expireAfter</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N8HASensor14setExpireAfterE8uint16_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets the number of seconds after the sensor’s state expires, if it’s not updated. By default the sensors state never expires.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>expireAfter</strong> – The number of seconds. </p>
</dd>
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor14setDeviceClassEPKc">
<span id="_CPPv3N8HASensor14setDeviceClassEPKc"></span><span id="_CPPv2N8HASensor14setDeviceClassEPKc"></span><span id="HASensor::setDeviceClass__cCP"></span><span class="target" id="class_h_a_sensor_1a8e2ffcb1ae1bb7411464a34d27df8817"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setDeviceClass</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">deviceClass</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N8HASensor14setDeviceClassEPKc" title="Permalink to this definition"></a><br /></dt>
@@ -200,6 +245,17 @@
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor13setStateClassEPKc">
<span id="_CPPv3N8HASensor13setStateClassEPKc"></span><span id="_CPPv2N8HASensor13setStateClassEPKc"></span><span id="HASensor::setStateClass__cCP"></span><span class="target" id="class_h_a_sensor_1a1e246b6728645eeb0b1d190b52221780"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setStateClass</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">stateClass</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N8HASensor13setStateClassEPKc" title="Permalink to this definition"></a><br /></dt>
<dd><p>Sets class of the state for the long term stats. See: <a class="reference external" href="https://developers.home-assistant.io/docs/core/entity/sensor/#long-term-statistics">https://developers.home-assistant.io/docs/core/entity/sensor/#long-term-statistics</a></p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>stateClass</strong> – The class name. </p>
</dd>
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor14setForceUpdateEb">
<span id="_CPPv3N8HASensor14setForceUpdateEb"></span><span id="_CPPv2N8HASensor14setForceUpdateEb"></span><span id="HASensor::setForceUpdate__b"></span><span class="target" id="class_h_a_sensor_1adb8db20cf6c35033c6653ab10de319cb"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">setForceUpdate</span></span></span><span class="sig-paren">(</span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">forceUpdate</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4N8HASensor14setForceUpdateEb" title="Permalink to this definition"></a><br /></dt>
@@ -249,12 +305,24 @@
</div>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-private-members">Private Members</p>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor9_featuresE">
<span id="_CPPv3N8HASensor9_featuresE"></span><span id="_CPPv2N8HASensor9_featuresE"></span><span id="HASensor::_features__uint16_tC"></span><span class="target" id="class_h_a_sensor_1ac3e98af19f840be7cd9aec9d5854c051"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">_features</span></span></span><a class="headerlink" href="#_CPPv4N8HASensor9_featuresE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Features enabled for the sensor. </p>
</dd></dl>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor12_deviceClassE">
<span id="_CPPv3N8HASensor12_deviceClassE"></span><span id="_CPPv2N8HASensor12_deviceClassE"></span><span id="HASensor::_deviceClass__cCP"></span><span class="target" id="class_h_a_sensor_1a42ff8d2271f7728acf2fb349595862f0"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">_deviceClass</span></span></span><a class="headerlink" href="#_CPPv4N8HASensor12_deviceClassE" title="Permalink to this definition"></a><br /></dt>
<dd><p>The device class. It can be nullptr. </p>
</dd></dl>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor11_stateClassE">
<span id="_CPPv3N8HASensor11_stateClassE"></span><span id="_CPPv2N8HASensor11_stateClassE"></span><span id="HASensor::_stateClass__cCP"></span><span class="target" id="class_h_a_sensor_1ac096f47f39b39e3d91cd94355a62fa35"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">_stateClass</span></span></span><a class="headerlink" href="#_CPPv4N8HASensor11_stateClassE" title="Permalink to this definition"></a><br /></dt>
<dd><p>The state class for the long term stats. It can be nullptr. See: <a class="reference external" href="https://developers.home-assistant.io/docs/core/entity/sensor/#long-term-statistics">https://developers.home-assistant.io/docs/core/entity/sensor/#long-term-statistics</a>. </p>
</dd></dl>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor12_forceUpdateE">
<span id="_CPPv3N8HASensor12_forceUpdateE"></span><span id="_CPPv2N8HASensor12_forceUpdateE"></span><span id="HASensor::_forceUpdate__b"></span><span class="target" id="class_h_a_sensor_1a8239a2f39b6cae94871dd852f2526825"></span><span class="kt"><span class="pre">bool</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">_forceUpdate</span></span></span><a class="headerlink" href="#_CPPv4N8HASensor12_forceUpdateE" title="Permalink to this definition"></a><br /></dt>
@@ -273,6 +341,12 @@
<dd><p>The unit of measurement for the sensor. It can be nullptr. </p>
</dd></dl>
<dl class="cpp var">
<dt class="sig sig-object cpp" id="_CPPv4N8HASensor12_expireAfterE">
<span id="_CPPv3N8HASensor12_expireAfterE"></span><span id="_CPPv2N8HASensor12_expireAfterE"></span><span id="HASensor::_expireAfter__HANumeric"></span><span class="target" id="class_h_a_sensor_1a695e13ee19b2ca57a2f61f8d1021612c"></span><a class="reference internal" href="../utils/ha-numeric.html#_CPPv49HANumeric" title="HANumeric"><span class="n"><span class="pre">HANumeric</span></span></a><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">_expireAfter</span></span></span><a class="headerlink" href="#_CPPv4N8HASensor12_expireAfterE" title="Permalink to this definition"></a><br /></dt>
<dd><p>It defines the number of seconds after the sensor’s state expires, if it’s not updated. By default the sensors state never expires. </p>
</dd></dl>
</div>
</dd></dl>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
+2 -1
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
+2 -1
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
+2 -9
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2 current"><a class="reference internal" href="index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -463,14 +464,6 @@
<span id="_CPPv3N9HANumeric10_precisionE"></span><span id="_CPPv2N9HANumeric10_precisionE"></span><span id="HANumeric::_precision__uint8_t"></span><span class="target" id="class_h_a_numeric_1ab36b34e101f3de1373979f44d1ea67eb"></span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">_precision</span></span></span><a class="headerlink" href="#_CPPv4N9HANumeric10_precisionE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
</div>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-friends">Friends</p>
<dl>
<dt class="sig sig-object cpp">
<em class="property"><span class="pre">friend</span> <span class="pre">class</span></em> <span class="pre">HANumeric</span></dt>
</dl>
</div>
</dd></dl>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2 current"><a class="reference internal" href="index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -209,6 +210,12 @@
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NK17HASerializerArray7getItemEK7uint8_t">
<span id="_CPPv3NK17HASerializerArray7getItemEK7uint8_t"></span><span id="_CPPv2NK17HASerializerArray7getItemEK7uint8_t"></span><span id="HASerializerArray::getItem__uint8_tCC"></span><span class="target" id="class_h_a_serializer_array_1ad5f99f2ffc0ee2e08ada23e1487f89c4"></span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">getItem</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">index</span></span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK17HASerializerArray7getItemEK7uint8_t" title="Permalink to this definition"></a><br /></dt>
<dd><p>Returns a pointer to the item at the given index. If the element doesn’t exist, null is returned. </p>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4NK17HASerializerArray13calculateSizeEv">
<span id="_CPPv3NK17HASerializerArray13calculateSizeEv"></span><span id="_CPPv2NK17HASerializerArray13calculateSizeEv"></span><span id="HASerializerArray::calculateSizeC"></span><span class="target" id="class_h_a_serializer_array_1acd7c86423ae198910ae141002771c847"></span><span class="n"><span class="pre">uint16_t</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">calculateSize</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><span class="w"> </span><span class="k"><span class="pre">const</span></span><a class="headerlink" href="#_CPPv4NK17HASerializerArray13calculateSizeEv" title="Permalink to this definition"></a><br /></dt>
+7 -1
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2 current"><a class="reference internal" href="index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -198,6 +199,11 @@
<span id="_CPPv3N12HASerializer8FlagType16WithAvailabilityE"></span><span id="_CPPv2N12HASerializer8FlagType16WithAvailabilityE"></span><span class="target" id="class_h_a_serializer_1af48ac87d6107bdf5682c2f847fcc1c20ab6eb2bc6b231c4a431cd7124c4f3d9d8"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">WithAvailability</span></span></span><a class="headerlink" href="#_CPPv4N12HASerializer8FlagType16WithAvailabilityE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N12HASerializer8FlagType12WithUniqueIdE">
<span id="_CPPv3N12HASerializer8FlagType12WithUniqueIdE"></span><span id="_CPPv2N12HASerializer8FlagType12WithUniqueIdE"></span><span class="target" id="class_h_a_serializer_1af48ac87d6107bdf5682c2f847fcc1c20a811d30832022e782d1d5a39fd48bd851"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">WithUniqueId</span></span></span><a class="headerlink" href="#_CPPv4N12HASerializer8FlagType12WithUniqueIdE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
</dd></dl>
<dl class="cpp enum">
+2 -1
View File
@@ -101,7 +101,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -113,6 +113,7 @@
<li class="toctree-l2 current"><a class="reference internal" href="index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
+2 -1
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2 current"><a class="current reference internal" href="#">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -157,6 +158,7 @@ It should work fine as long as the <cite>Client</cite> class is available.</p>
<li><p>Arduino Nano</p></li>
<li><p>Arduino Pro Mini</p></li>
<li><p>Arduino Nano 33 IoT</p></li>
<li><p>Arduino Due</p></li>
<li><p>NodeMCU</p></li>
<li><p>Controllino Mega (Pure)</p></li>
<li><p>Controllino Maxi (Pure)</p></li>
+2 -1
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
+2 -1
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="../library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="../library/compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2 current"><a class="current reference internal" href="#">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
+2 -1
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -148,11 +149,11 @@
<section id="device-configuration">
<h1>Device configuration<a class="headerlink" href="#device-configuration" title="Permalink to this headline"></a></h1>
<p><a class="reference internal" href="../api/core/ha-device.html"><span class="doc">HADevice</span></a> represents the physical device where the library is installed.
Logically it’s a group of types like sensors, switches, lights and so on.
In the Home Assistant, it’s listed with properties that may be configured using the library’s API.</p>
<p>Each property except the unique ID is optional.
Setting optional properties increases flash and RAM usage so it’s not recommended to set them on lower-spec MCUs.</p>
<p><a class="reference internal" href="../api/core/ha-device.html"><span class="doc">HADevice</span></a> represents the physical device on which the library is used.
Essentially, it’s a group of types such as sensors, switches, lights, and more.
Within Home Assistant, it appears with properties that can be configured using the library’s API.</p>
<p>Every property, except for the unique ID, is optional.
Enabling optional properties can lead to increased flash and RAM usage, therefore it is not advisable to set them on lower-spec MCUs.</p>
<p>The supported properties are:</p>
<ul class="simple">
<li><p>unique ID*</p></li>
@@ -160,13 +161,15 @@ Setting optional properties increases flash and RAM usage so it’s not recommen
<li><p>software version</p></li>
<li><p>manufacturer</p></li>
<li><p>model</p></li>
<li><p>configuration url</p></li>
</ul>
<section id="unique-id">
<h2>Unique ID<a class="headerlink" href="#unique-id" title="Permalink to this headline"></a></h2>
<p>The ID of a device needs to be unique in a scope of a Home Assistant instance.
The safest solution is to use the MAC address of an Ethernet or Wi-Fi chip but you can also implement your own solution.</p>
<p>There are three different ways to set the ID of the device.
You can pick one depending on your needs.</p>
<p>The unique ID serves as an internal identifier for devices within Home Assistant.
With this ID, Home Assistant can monitor the device’s parameters and the entities it exposes.
The unique ID must be distinct within the scope of the Home Assistant instance.
The recommended approach is to use the MAC address of an Ethernet or Wi-Fi chip.</p>
<p>There are three distinct methods for setting the device ID, allowing you to choose the one that best suits your requirements.</p>
<section id="providing-string-const-char-to-the-hadevice-constructor">
<h3>1) Providing string (const char*) to the <a class="reference internal" href="../api/core/ha-device.html"><span class="doc">HADevice</span></a> constructor<a class="headerlink" href="#providing-string-const-char-to-the-hadevice-constructor" title="Permalink to this headline"></a></h3>
<p>Try to keep the ID simple (alphanumeric characters) and short.</p>
@@ -226,7 +229,7 @@ You can pick one depending on your needs.</p>
<section id="device-properties">
<h2>Device properties<a class="headerlink" href="#device-properties" title="Permalink to this headline"></a></h2>
<p>Each property has its corresponding setter method in the <a class="reference internal" href="../api/core/ha-device.html"><span class="doc">HADevice</span></a> class.
Please note that all these methods accept const char pointer whose <strong>content is not copied</strong>.</p>
Please note that all of these methods accept a const char pointer whose <strong>content is not copied</strong>.</p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;ArduinoHA.h&gt;</span><span class="cp"></span>
<span class="n">HADevice</span><span class="w"> </span><span class="nf">device</span><span class="p">(</span><span class="s">&quot;myUniqueId&quot;</span><span class="p">);</span><span class="w"></span>
@@ -236,6 +239,7 @@ Please note that all these methods accept const char pointer whose <strong>conte
<span class="w"> </span><span class="n">device</span><span class="p">.</span><span class="n">setSoftwareVersion</span><span class="p">(</span><span class="s">&quot;1.0.0&quot;</span><span class="p">);</span><span class="w"></span>
<span class="w"> </span><span class="n">device</span><span class="p">.</span><span class="n">setManufacturer</span><span class="p">(</span><span class="s">&quot;Developer Corp.&quot;</span><span class="p">);</span><span class="w"></span>
<span class="w"> </span><span class="n">device</span><span class="p">.</span><span class="n">setModel</span><span class="p">(</span><span class="s">&quot;ABC-123&quot;</span><span class="p">);</span><span class="w"></span>
<span class="w"> </span><span class="n">device</span><span class="p">.</span><span class="n">setConfigurationUrl</span><span class="p">(</span><span class="s">&quot;http://192.168.1.55:1234&quot;</span><span class="p">);</span><span class="w"></span>
<span class="w"> </span><span class="c1">// ...</span>
<span class="p">}</span><span class="w"></span>
+156 -28
View File
@@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Device types - ArduinoHA</title>
<title>Device types (entities) - ArduinoHA</title>
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/theme.css " type="text/css" />
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="discovery.html">Discovery</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Device types</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -127,7 +128,7 @@
<li><a href="index.html">Library</a> &raquo;</li>
<li>Device types</li>
<li>Device types (entities)</li>
</ul>
@@ -146,18 +147,113 @@
<hr>
<div class="content" role="main" v-pre>
<section id="device-types">
<h1>Device types<a class="headerlink" href="#device-types" title="Permalink to this headline"></a></h1>
<p>Device type represents a single entity in the Home Assistant panel.
It can be a sensor, lock, camera or anything that’s listed in the table below.</p>
<p>Your physical device (for example ESP-01 board) can have multiple device types assigned.
They will be displayed as child entities in the HA panel.</p>
<section id="device-types-entities">
<h1>Device types (entities)<a class="headerlink" href="#device-types-entities" title="Permalink to this headline"></a></h1>
<p>Device type represents a single entity within the Home Assistant panel, which could be a sensor, lock, camera, or any other item listed in the table below.</p>
<p>Your physical device, such as an ESP-01 board, can have multiple device types assigned to it.
These types will then appear as child entities in the Home Assistant panel.</p>
<section id="identifiers">
<h2>Identifiers<a class="headerlink" href="#identifiers" title="Permalink to this headline"></a></h2>
<p>Home Assistant utilizes three distinct identifiers, which might initially appear confusing.
Grasping the purpose of each is crucial for a clear understanding of the library’s API.</p>
<section id="entity-id">
<h3>Entity ID<a class="headerlink" href="#entity-id" title="Permalink to this headline"></a></h3>
<p>Home Assistant automatically generates an entity ID for each device type registered by your device.
This ID is primarily utilized by dashboards and automations within Home Assistant.</p>
<p>When the entity is discovered by Home Assistant for the first time, the name field is automatically employed to generate the entity ID.
Once registered, you can modify it to any desired value using the Home Assistant User Interface.</p>
<p>Home Assistant internally relies on the unique ID, so changing the entity ID or name in the Home Assistant UI does not break the integration between your device and Home Assistant.</p>
</section>
<section id="object-id">
<h3>Object ID<a class="headerlink" href="#object-id" title="Permalink to this headline"></a></h3>
<p>The object ID is an optional identifier that you can assign to the device type.
Its sole purpose is for generating the entity ID described above.</p>
<p>By default, Home Assistant generates the entity ID based on the entity’s name.
However, when the object ID is provided, Home Assistant uses it to generate the entity ID.</p>
<p>Consequently, you can use the entity’s name as a user-friendly label and the object ID as an internal identifier.</p>
</section>
<section id="unique-id">
<h3>Unique ID<a class="headerlink" href="#unique-id" title="Permalink to this headline"></a></h3>
<p>The unique ID serves as an internal identifier for the entity within the Home Assistant instance.
Once the entity with a specific unique ID is created, it cannot be altered, as this identifier is not accessible through the user interface.</p>
<p>Home Assistant utilizes this identifier internally to store the parameters of the entity in the database.
Given that the unique ID must be unique across the entire Home Assistant instance.
Multiple devices cannot expose entities with the same unique ID.</p>
<p>By default, the library uses the unique ID provided in the device type’s constructor.
However, when you reuse the same codebase on multiple devices, conflicts may arise.
To address this issue, you can enable the extended unique ID feature in the HADevice instance.
This feature incorporates the device’s unique ID as a prefix for the device type’s ID.</p>
<div class="literal-block-wrapper docutils container" id="id1">
<div class="code-block-caption"><span class="caption-text">Default behavior</span><a class="headerlink" href="#id1" title="Permalink to this code"></a></div>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;Ethernet.h&gt;</span><span class="cp"></span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;ArduinoHA.h&gt;</span><span class="cp"></span>
<span class="n">byte</span><span class="w"> </span><span class="n">mac</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mh">0x00</span><span class="p">,</span><span class="w"> </span><span class="mh">0x10</span><span class="p">,</span><span class="w"> </span><span class="mh">0xFA</span><span class="p">,</span><span class="w"> </span><span class="mh">0x6E</span><span class="p">,</span><span class="w"> </span><span class="mh">0x38</span><span class="p">,</span><span class="w"> </span><span class="mh">0x4A</span><span class="p">};</span><span class="w"></span>
<span class="n">EthernetClient</span><span class="w"> </span><span class="n">client</span><span class="p">;</span><span class="w"></span>
<span class="n">HADevice</span><span class="w"> </span><span class="nf">device</span><span class="p">(</span><span class="n">mac</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">mac</span><span class="p">));</span><span class="w"> </span><span class="c1">// the unique ID of the device will be 0010fa6e384a</span>
<span class="n">HAMqtt</span><span class="w"> </span><span class="nf">mqtt</span><span class="p">(</span><span class="n">client</span><span class="p">,</span><span class="w"> </span><span class="n">device</span><span class="p">);</span><span class="w"></span>
<span class="c1">// &quot;myValve&quot; is unique ID of the sensor. You should define your own ID.</span>
<span class="n">HASensor</span><span class="w"> </span><span class="nf">valve</span><span class="p">(</span><span class="s">&quot;myValve&quot;</span><span class="p">);</span><span class="w"></span>
<span class="kt">void</span><span class="w"> </span><span class="nf">setup</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="c1">// ...</span>
<span class="w"> </span><span class="n">valve</span><span class="p">.</span><span class="n">setIcon</span><span class="p">(</span><span class="s">&quot;mdi:home&quot;</span><span class="p">);</span><span class="w"></span>
<span class="w"> </span><span class="n">valve</span><span class="p">.</span><span class="n">setName</span><span class="p">(</span><span class="s">&quot;Water valve&quot;</span><span class="p">);</span><span class="w"></span>
<span class="w"> </span><span class="c1">// the unique ID of the valve in HA will be &quot;myValve&quot;</span>
<span class="w"> </span><span class="c1">// ...</span>
<span class="p">}</span><span class="w"></span>
<span class="kt">void</span><span class="w"> </span><span class="nf">loop</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="c1">// ...</span>
<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
</div>
<div class="literal-block-wrapper docutils container" id="id2">
<div class="code-block-caption"><span class="caption-text">Extended unique IDs</span><a class="headerlink" href="#id2" title="Permalink to this code"></a></div>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;Ethernet.h&gt;</span><span class="cp"></span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;ArduinoHA.h&gt;</span><span class="cp"></span>
<span class="n">byte</span><span class="w"> </span><span class="n">mac</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mh">0x00</span><span class="p">,</span><span class="w"> </span><span class="mh">0x10</span><span class="p">,</span><span class="w"> </span><span class="mh">0xFA</span><span class="p">,</span><span class="w"> </span><span class="mh">0x6E</span><span class="p">,</span><span class="w"> </span><span class="mh">0x38</span><span class="p">,</span><span class="w"> </span><span class="mh">0x4A</span><span class="p">};</span><span class="w"></span>
<span class="n">EthernetClient</span><span class="w"> </span><span class="n">client</span><span class="p">;</span><span class="w"></span>
<span class="n">HADevice</span><span class="w"> </span><span class="nf">device</span><span class="p">(</span><span class="n">mac</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">mac</span><span class="p">));</span><span class="w"> </span><span class="c1">// the unique ID of the device will be 0010fa6e384a</span>
<span class="n">HAMqtt</span><span class="w"> </span><span class="nf">mqtt</span><span class="p">(</span><span class="n">client</span><span class="p">,</span><span class="w"> </span><span class="n">device</span><span class="p">);</span><span class="w"></span>
<span class="c1">// &quot;myValve&quot; is unique ID of the sensor. You should define your own ID.</span>
<span class="n">HASensor</span><span class="w"> </span><span class="nf">valve</span><span class="p">(</span><span class="s">&quot;myValve&quot;</span><span class="p">);</span><span class="w"></span>
<span class="kt">void</span><span class="w"> </span><span class="nf">setup</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="c1">// ...</span>
<span class="w"> </span><span class="n">device</span><span class="p">.</span><span class="n">enableExtendedUniqueIds</span><span class="p">();</span><span class="w"> </span><span class="c1">// &lt;------------ enables extended unique IDs</span>
<span class="w"> </span><span class="n">valve</span><span class="p">.</span><span class="n">setIcon</span><span class="p">(</span><span class="s">&quot;mdi:home&quot;</span><span class="p">);</span><span class="w"></span>
<span class="w"> </span><span class="n">valve</span><span class="p">.</span><span class="n">setName</span><span class="p">(</span><span class="s">&quot;Water valve&quot;</span><span class="p">);</span><span class="w"></span>
<span class="w"> </span><span class="c1">// the unique ID of the valve in HA will be &quot;0010fa6e384a_myValve&quot;</span>
<span class="w"> </span><span class="c1">// ...</span>
<span class="p">}</span><span class="w"></span>
<span class="kt">void</span><span class="w"> </span><span class="nf">loop</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="c1">// ...</span>
<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
</div>
</section>
</section>
<section id="limitations">
<h2>Limitations<a class="headerlink" href="#limitations" title="Permalink to this headline"></a></h2>
<p>Registering a new device type requires some flash and RAM memory to be utilized.
On less powerful units like Arduino Uno, you may quickly hit the limit of resources, so keeping the device simple is recommended.
Hitting the resource limit will result in random reboots of the device.</p>
<p>By default, the maximum number of device types is 6.
<p>Registering a new device type involves utilizing a certain amount of flash and RAM memory.
On less powerful units, such as the Arduino Uno, you may rapidly reach the resource limit.
Therefore, it is advisable to keep the device simple to avoid hitting the resource limit, which could lead to random reboots of the device.</p>
<p>By default, devices utilizing ATmega328P or ATmega168 processors are limited to a maximum of 6 device types, while other platforms can support up to 24 device types.
You can increase the limit using the <a class="reference internal" href="../api/core/ha-mqtt.html"><span class="doc">HAMqtt</span></a> class constructor as follows:</p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;Ethernet.h&gt;</span><span class="cp"></span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;ArduinoHA.h&gt;</span><span class="cp"></span>
@@ -165,7 +261,7 @@ You can increase the limit using the <a class="reference internal" href="../api/
<span class="n">byte</span><span class="w"> </span><span class="n">mac</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mh">0x00</span><span class="p">,</span><span class="w"> </span><span class="mh">0x10</span><span class="p">,</span><span class="w"> </span><span class="mh">0xFA</span><span class="p">,</span><span class="w"> </span><span class="mh">0x6E</span><span class="p">,</span><span class="w"> </span><span class="mh">0x38</span><span class="p">,</span><span class="w"> </span><span class="mh">0x4A</span><span class="p">};</span><span class="w"></span>
<span class="n">EthernetClient</span><span class="w"> </span><span class="n">client</span><span class="p">;</span><span class="w"></span>
<span class="n">HADevice</span><span class="w"> </span><span class="nf">device</span><span class="p">(</span><span class="n">mac</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">mac</span><span class="p">));</span><span class="w"></span>
<span class="n">HAMqtt</span><span class="w"> </span><span class="nf">mqtt</span><span class="p">(</span><span class="n">client</span><span class="p">,</span><span class="w"> </span><span class="n">device</span><span class="p">,</span><span class="w"> </span><span class="mi">12</span><span class="p">);</span><span class="w"> </span><span class="c1">// &lt;------------ 12 is a new limit of device types</span>
<span class="n">HAMqtt</span><span class="w"> </span><span class="nf">mqtt</span><span class="p">(</span><span class="n">client</span><span class="p">,</span><span class="w"> </span><span class="n">device</span><span class="p">,</span><span class="w"> </span><span class="mi">40</span><span class="p">);</span><span class="w"> </span><span class="c1">// &lt;------------ 40 is a new limit of device types</span>
<span class="kt">void</span><span class="w"> </span><span class="nf">setup</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="n">Ethernet</span><span class="p">.</span><span class="n">begin</span><span class="p">(</span><span class="n">mac</span><span class="p">);</span><span class="w"></span>
@@ -198,30 +294,38 @@ You can increase the limit using the <a class="reference internal" href="../api/
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Binary sensor</p></td>
<tr class="row-even"><td><p>Alarm control panel</p></td>
<td><p>❌</p></td>
<td><p>–</p></td>
</tr>
<tr class="row-odd"><td><p>Binary sensor</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-binary-sensor.html"><span class="doc">HABinarySensor</span></a></p></td>
</tr>
<tr class="row-odd"><td><p>Button</p></td>
<tr class="row-even"><td><p>Button</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-button.html"><span class="doc">HAButton</span></a></p></td>
</tr>
<tr class="row-even"><td><p>Camera</p></td>
<tr class="row-odd"><td><p>Camera</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-camera.html"><span class="doc">HACamera</span></a></p></td>
</tr>
<tr class="row-odd"><td><p>Cover</p></td>
<tr class="row-even"><td><p>Cover</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-cover.html"><span class="doc">HACover</span></a></p></td>
</tr>
<tr class="row-even"><td><p>Device tracker</p></td>
<tr class="row-odd"><td><p>Device tracker</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-device-tracker.html"><span class="doc">HADeviceTracker</span></a></p></td>
</tr>
<tr class="row-odd"><td><p>Device trigger</p></td>
<tr class="row-even"><td><p>Device trigger</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-device-trigger.html"><span class="doc">HADeviceTrigger</span></a></p></td>
</tr>
<tr class="row-odd"><td><p>Event</p></td>
<td><p>❌</p></td>
<td><p>–</p></td>
</tr>
<tr class="row-even"><td><p>Fan</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-fan.html"><span class="doc">HAFan</span></a></p></td>
@@ -234,52 +338,76 @@ You can increase the limit using the <a class="reference internal" href="../api/
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-hvac.html"><span class="doc">HAHVAC</span></a></p></td>
</tr>
<tr class="row-odd"><td><p>Light</p></td>
<tr class="row-odd"><td><p>Lawn mower</p></td>
<td><p>❌</p></td>
<td><p>–</p></td>
</tr>
<tr class="row-even"><td><p>Light</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-light.html"><span class="doc">HALight</span></a></p></td>
</tr>
<tr class="row-even"><td><p>Lock</p></td>
<tr class="row-odd"><td><p>Lock</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-lock.html"><span class="doc">HALock</span></a></p></td>
</tr>
<tr class="row-odd"><td><p>Number</p></td>
<tr class="row-even"><td><p>Number</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-number.html"><span class="doc">HANumber</span></a></p></td>
</tr>
<tr class="row-even"><td><p>Scene</p></td>
<tr class="row-odd"><td><p>Scene</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-scene.html"><span class="doc">HAScene</span></a></p></td>
</tr>
<tr class="row-odd"><td><p>Select</p></td>
<tr class="row-even"><td><p>Select</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-select.html"><span class="doc">HASelect</span></a></p></td>
</tr>
<tr class="row-even"><td><div class="line-block">
<tr class="row-odd"><td><div class="line-block">
<div class="line">Sensor (text)</div>
</div>
</td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-sensor.html"><span class="doc">HASensor</span></a></p></td>
</tr>
<tr class="row-odd"><td><div class="line-block">
<tr class="row-even"><td><div class="line-block">
<div class="line">Sensor (number)</div>
</div>
</td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-sensor-number.html"><span class="doc">HASensorNumber</span></a></p></td>
</tr>
<tr class="row-odd"><td><p>Siren</p></td>
<td><p>❌</p></td>
<td><p>–</p></td>
</tr>
<tr class="row-even"><td><p>Switch</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-switch.html"><span class="doc">HASwitch</span></a></p></td>
</tr>
<tr class="row-odd"><td><p>Tag scanner</p></td>
<tr class="row-odd"><td><p>Update</p></td>
<td><p>❌</p></td>
<td><p>–</p></td>
</tr>
<tr class="row-even"><td><p>Tag scanner</p></td>
<td><p>✅</p></td>
<td><p><a class="reference internal" href="../api/device-types/ha-tag-scanner.html"><span class="doc">HATagScanner</span></a></p></td>
</tr>
<tr class="row-odd"><td><p>Text</p></td>
<td><p>❌</p></td>
<td><p>–</p></td>
</tr>
<tr class="row-even"><td><p>Vacuum</p></td>
<td><p>❌</p></td>
<td><p>–</p></td>
</tr>
<tr class="row-odd"><td><p>Valve</p></td>
<td><p>❌</p></td>
<td><p>–</p></td>
</tr>
<tr class="row-even"><td><p>Water heater</p></td>
<td><p>❌</p></td>
<td><p>–</p></td>
</tr>
</tbody>
</table>
</section>
+5 -4
View File
@@ -24,7 +24,7 @@
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="Device types" href="device-types.html" />
<link rel="next" title="Device types (entities)" href="device-types.html" />
<link rel="prev" title="Connection parameters" href="connection-params.html" />
</head>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="connection-params.html">Connection parameters</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -138,7 +139,7 @@
</li>
<li class="next">
<a href="device-types.html"
title="next chapter">Device types →</a>
title="next chapter">Device types (entities) →</a>
</li>
</ul>
@@ -198,7 +199,7 @@ The data topic’s prefix can be changed using <code class="docutils literal not
</li>
<li class="next">
<a href="device-types.html"
title="next chapter">Device types →</a>
title="next chapter">Device types (entities) →</a>
</li>
</ul><div class="footer" role="contentinfo">
&#169; Copyright 2022, Dawid Chyrzynski.
+5 -6
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -171,15 +172,13 @@ Solid understanding of foundations will allow you to utilize full potential of t
<li class="toctree-l2"><a class="reference internal" href="discovery.html#topics-prefix">Topics prefix</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="device-types.html">Device types</a><ul>
<li class="toctree-l1"><a class="reference internal" href="device-types.html">Device types (entities)</a><ul>
<li class="toctree-l2"><a class="reference internal" href="device-types.html#identifiers">Identifiers</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html#limitations">Limitations</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html#supported-device-types">Supported device types</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="mqtt-security.html">MQTT security</a><ul>
<li class="toctree-l2"><a class="reference internal" href="mqtt-security.html#ssl-connection">SSL connection</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="mqtt-security.html">MQTT security</a></li>
<li class="toctree-l1"><a class="reference internal" href="mqtt-advanced.html">MQTT advanced features</a><ul>
<li class="toctree-l2"><a class="reference internal" href="mqtt-advanced.html#callbacks">Callbacks</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-advanced.html#subscriptions">Subscriptions</a></li>
+7 -8
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -148,18 +149,16 @@
<section id="introduction">
<h1>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h1>
<p>Before implementing the business logic of your application you will need to
add a few necessary pieces of code to your project.
Basically, everything comes up to a few basic rules:</p>
<p>Prior to implementing the business logic of your application, you’ll need to incorporate several essential pieces of code into your project.
Essentially, everything boils down to a few fundamental rules:</p>
<ol class="arabic simple">
<li><p><a class="reference internal" href="../api/core/ha-device.html"><span class="doc">HADevice</span></a> and <a class="reference internal" href="../api/core/ha-mqtt.html"><span class="doc">HAMqtt</span></a> instances need to be initialized once globally or as a part of another global object.</p></li>
<li><p><a class="reference internal" href="../api/core/ha-mqtt.html"><span class="doc">HAMqtt::begin</span></a> needs to be called at the end of setup logic. It provides MQTT broker credentials that will be used for a connection.</p></li>
<li><p><a class="reference internal" href="../api/core/ha-mqtt.html"><span class="doc">HAMqtt::begin</span></a> needs to be called at the end of Arduino’s setup logic. It lets you provide the MQTT broker’s IP address and credentials.</p></li>
<li><p><a class="reference internal" href="../api/core/ha-mqtt.html"><span class="doc">HAMqtt::loop</span></a> method needs to be called periodically (it doesn’t need to be called on each tick).</p></li>
<li><p>Device types need to be initialized after <a class="reference internal" href="../api/core/ha-mqtt.html"><span class="doc">HAMqtt</span></a> class (it will be described later in the documentation).</p></li>
</ol>
<p>Here are the minimal boilerplates that you can start with.
Don’t worry if you have no idea what’s going on here.
Everything will be covered in the following chapters.</p>
<p>Here are the minimal boilerplate examples to get you started.
Don’t worry if you have no idea what’s happening here; everything will be explained in detail in the following chapters.</p>
<section id="arduino-boilerplate">
<h2>Arduino Boilerplate<a class="headerlink" href="#arduino-boilerplate" title="Permalink to this headline"></a></h2>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;Ethernet.h&gt;</span><span class="cp"></span>
+14 -1
View File
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -168,11 +169,23 @@ Please take a look at the example below.</p>
<span class="w"> </span><span class="c1">// this method will be called when connection to MQTT broker is established</span>
<span class="p">}</span><span class="w"></span>
<span class="kt">void</span><span class="w"> </span><span class="nf">onDisconnected</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="c1">// this method will be called when connection to MQTT broker is lost</span>
<span class="p">}</span><span class="w"></span>
<span class="kt">void</span><span class="w"> </span><span class="nf">onStateChanged</span><span class="p">(</span><span class="n">HAMqtt</span><span class="o">::</span><span class="n">ConnectionState</span><span class="w"> </span><span class="n">state</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="c1">// this method will be called each time the state of the MQTT connection changes</span>
<span class="p">}</span><span class="w"></span>
<span class="kt">void</span><span class="w"> </span><span class="nf">setup</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w"> </span><span class="n">Ethernet</span><span class="p">.</span><span class="n">begin</span><span class="p">(</span><span class="n">mac</span><span class="p">);</span><span class="w"></span>
<span class="w"> </span><span class="n">mqtt</span><span class="p">.</span><span class="n">onMessage</span><span class="p">(</span><span class="n">onMessage</span><span class="p">);</span><span class="w"></span>
<span class="w"> </span><span class="n">mqtt</span><span class="p">.</span><span class="n">onConnected</span><span class="p">(</span><span class="n">onConnected</span><span class="p">);</span><span class="w"></span>
<span class="w"> </span><span class="n">mqtt</span><span class="p">.</span><span class="n">onDisconnected</span><span class="p">(</span><span class="n">onDisconnected</span><span class="p">);</span><span class="w"></span>
<span class="w"> </span><span class="n">mqtt</span><span class="p">.</span><span class="n">onStateChanged</span><span class="p">(</span><span class="n">onStateChanged</span><span class="p">);</span><span class="w"></span>
<span class="w"> </span><span class="n">mqtt</span><span class="p">.</span><span class="n">setBufferSize</span><span class="p">(</span><span class="mi">512</span><span class="p">);</span><span class="w"> </span><span class="c1">// set the buffer size to 512 bytes, default is 256 bytes</span>
<span class="w"> </span><span class="n">mqtt</span><span class="p">.</span><span class="n">setKeepAlive</span><span class="p">(</span><span class="mi">60</span><span class="p">);</span><span class="w"> </span><span class="c1">// set the keep alive interval to 60 seconds, default is 15 seconds</span>
<span class="w"> </span><span class="n">mqtt</span><span class="p">.</span><span class="n">begin</span><span class="p">(</span><span class="s">&quot;192.168.1.50&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;username&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;password&quot;</span><span class="p">);</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
+11 -15
View File
@@ -25,7 +25,7 @@
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="MQTT advanced features" href="mqtt-advanced.html" />
<link rel="prev" title="Device types" href="device-types.html" />
<link rel="prev" title="Device types (entities)" href="device-types.html" />
</head>
<body>
@@ -102,7 +102,7 @@
<li class="toctree-l2"><a class="reference internal" href="availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="device-types.html">Device types (entities)</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="compiler-macros.html">Compiler macros</a></li>
@@ -114,6 +114,7 @@
<li class="toctree-l2"><a class="reference internal" href="../api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -134,7 +135,7 @@
<ul class="page-nav">
<li class="prev">
<a href="device-types.html"
title="previous chapter">← Device types</a>
title="previous chapter">← Device types (entities)</a>
</li>
<li class="next">
<a href="mqtt-advanced.html"
@@ -148,14 +149,14 @@
<section id="mqtt-security">
<h1>MQTT security<a class="headerlink" href="#mqtt-security" title="Permalink to this headline"></a></h1>
<p>The library allows you to use credentials for acquiring a TCP connection with the MQTT broker.
By default you can use the same credentials you use for login in the Home Assistant panel but you can also configure custom credentials in the Mosquitto broker.</p>
<p>The library enables you to utilize credentials to establish a TCP connection with the MQTT broker.
By default, you can employ the same credentials utilized for logging into the Home Assistant panel.
However, it’s also possible to configure custom credentials within the Mosquitto broker.</p>
<div class="admonition danger">
<p class="admonition-title">Danger</p>
<p>This solution is not 100% secure because communication between Arduino and Home Assistant is not encrypted.
Username and password can be easily discovered by analyzing your local network traffic.
However, that’s fine as long as your local network is secured against unattended access.
On more powerful devices (like ESP), you should consider using TLS/SSL connection.</p>
<p>This solution may not provide comprehensive security as the communication between Arduino and Home Assistant lacks encryption.
Consequently, username and password could be vulnerable to discovery through analysis of local network traffic.
However, this may not pose a significant risk if your local network is properly secured against unauthorized access.</p>
</div>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;Ethernet.h&gt;</span><span class="cp"></span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;ArduinoHA.h&gt;</span><span class="cp"></span>
@@ -177,11 +178,6 @@ On more powerful devices (like ESP), you should consider using TLS/SSL connectio
<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
<section id="ssl-connection">
<h2>SSL connection<a class="headerlink" href="#ssl-connection" title="Permalink to this headline"></a></h2>
<p>On ESP32/ESP8266 you can use <code class="docutils literal notranslate"><span class="pre">WiFiClientSecure</span></code> client to establish encrypted connection between your device and Home Assistant.
Please take a look at <a class="reference external" href="https://github.com/dawidchyrzynski/arduino-home-assistant/tree/main/examples/mqtt-with-ssl/mqtt-with-ssl.ino">this example</a>.</p>
</section>
</section>
@@ -190,7 +186,7 @@ Please take a look at <a class="reference external" href="https://github.com/daw
<div class="inner"><ul class="page-nav">
<li class="prev">
<a href="device-types.html"
title="previous chapter">← Device types</a>
title="previous chapter">← Device types (entities)</a>
</li>
<li class="next">
<a href="mqtt-advanced.html"
+90 -5
View File
@@ -100,7 +100,7 @@
<li class="toctree-l2"><a class="reference internal" href="documents/library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/compiler-macros.html">Compiler macros</a></li>
@@ -112,6 +112,7 @@
<li class="toctree-l2"><a class="reference internal" href="documents/api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -151,6 +152,8 @@
<li><a href="documents/api/device-types/ha-base-device-type.html#_CPPv4N16HABaseDeviceType14_componentNameE">HABaseDeviceType::_componentName (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-base-device-type.html#_CPPv4N16HABaseDeviceType5_nameE">HABaseDeviceType::_name (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-base-device-type.html#_CPPv4N16HABaseDeviceType9_objectIdE">HABaseDeviceType::_objectId (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-base-device-type.html#_CPPv4N16HABaseDeviceType11_serializerE">HABaseDeviceType::_serializer (C++ member)</a>
</li>
@@ -171,6 +174,8 @@
<li><a href="documents/api/device-types/ha-base-device-type.html#_CPPv4N16HABaseDeviceType17destroySerializerEv">HABaseDeviceType::destroySerializer (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-base-device-type.html#_CPPv4NK16HABaseDeviceType7getNameEv">HABaseDeviceType::getName (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-base-device-type.html#_CPPv4NK16HABaseDeviceType11getObjectIdEv">HABaseDeviceType::getObjectId (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-base-device-type.html#_CPPv4N16HABaseDeviceType16HABaseDeviceTypeEPK19__FlashStringHelperPKc">HABaseDeviceType::HABaseDeviceType (C++ function)</a>
</li>
@@ -203,6 +208,8 @@
<li><a href="documents/api/device-types/ha-base-device-type.html#_CPPv4N16HABaseDeviceType15setAvailabilityEb">HABaseDeviceType::setAvailability (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-base-device-type.html#_CPPv4N16HABaseDeviceType7setNameEPKc">HABaseDeviceType::setName (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-base-device-type.html#_CPPv4N16HABaseDeviceType11setObjectIdEPKc">HABaseDeviceType::setObjectId (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-base-device-type.html#_CPPv4N16HABaseDeviceType14subscribeTopicEPKcPK19__FlashStringHelper">HABaseDeviceType::subscribeTopic (C++ function)</a>
</li>
@@ -213,6 +220,8 @@
<li><a href="documents/api/device-types/ha-binary-sensor.html#_CPPv4N14HABinarySensor6_classE">HABinarySensor::_class (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-binary-sensor.html#_CPPv4N14HABinarySensor13_currentStateE">HABinarySensor::_currentState (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-binary-sensor.html#_CPPv4N14HABinarySensor12_expireAfterE">HABinarySensor::_expireAfter (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-binary-sensor.html#_CPPv4N14HABinarySensor5_iconE">HABinarySensor::_icon (C++ member)</a>
</li>
@@ -229,6 +238,8 @@
<li><a href="documents/api/device-types/ha-binary-sensor.html#_CPPv4N14HABinarySensor15setCurrentStateEKb">HABinarySensor::setCurrentState (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-binary-sensor.html#_CPPv4N14HABinarySensor14setDeviceClassEPKc">HABinarySensor::setDeviceClass (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-binary-sensor.html#_CPPv4N14HABinarySensor14setExpireAfterE8uint16_t">HABinarySensor::setExpireAfter (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-binary-sensor.html#_CPPv4N14HABinarySensor7setIconEPKc">HABinarySensor::setIcon (C++ function)</a>
</li>
@@ -375,6 +386,8 @@
<li><a href="documents/api/core/ha-device.html#_CPPv4N8HADevice18_availabilityTopicE">HADevice::_availabilityTopic (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-device.html#_CPPv4N8HADevice10_availableE">HADevice::_available (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-device.html#_CPPv4N8HADevice18_extendedUniqueIdsE">HADevice::_extendedUniqueIds (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-device.html#_CPPv4N8HADevice13_ownsUniqueIdE">HADevice::_ownsUniqueId (C++ member)</a>
</li>
@@ -383,6 +396,8 @@
<li><a href="documents/api/core/ha-device.html#_CPPv4N8HADevice19_sharedAvailabilityE">HADevice::_sharedAvailability (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-device.html#_CPPv4N8HADevice9_uniqueIdE">HADevice::_uniqueId (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-device.html#_CPPv4N8HADevice23enableExtendedUniqueIdsEv">HADevice::enableExtendedUniqueIds (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-device.html#_CPPv4N8HADevice14enableLastWillEv">HADevice::enableLastWill (C++ function)</a>
</li>
@@ -397,12 +412,16 @@
<li><a href="documents/api/core/ha-device.html#_CPPv4N8HADevice8HADeviceEPK4byteK8uint16_t">HADevice::HADevice (C++ function)</a>, <a href="documents/api/core/ha-device.html#_CPPv4N8HADevice8HADeviceEPKc">[1]</a>, <a href="documents/api/core/ha-device.html#_CPPv4N8HADevice8HADeviceEv">[2]</a>
</li>
<li><a href="documents/api/core/ha-device.html#_CPPv4NK8HADevice11isAvailableEv">HADevice::isAvailable (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-device.html#_CPPv4NK8HADevice26isExtendedUniqueIdsEnabledEv">HADevice::isExtendedUniqueIdsEnabled (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-device.html#_CPPv4NK8HADevice27isSharedAvailabilityEnabledEv">HADevice::isSharedAvailabilityEnabled (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-device.html#_CPPv4NK8HADevice19publishAvailabilityEv">HADevice::publishAvailability (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-device.html#_CPPv4N8HADevice15setAvailabilityEb">HADevice::setAvailability (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-device.html#_CPPv4N8HADevice19setConfigurationUrlEPKc">HADevice::setConfigurationUrl (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-device.html#_CPPv4N8HADevice15setManufacturerEPKc">HADevice::setManufacturer (C++ function)</a>
</li>
@@ -858,8 +877,6 @@
</li>
<li><a href="documents/api/device-types/ha-hvac.html#_CPPv4N6HAHVAC15TemperatureUnit11DefaultUnitE">HAHVAC::TemperatureUnit::DefaultUnit (C++ enumerator)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="documents/api/device-types/ha-hvac.html#_CPPv4N6HAHVAC15TemperatureUnit14FahrenheitUnitE">HAHVAC::TemperatureUnit::FahrenheitUnit (C++ enumerator)</a>
</li>
<li><a href="documents/api/device-types/ha-hvac.html#_CPPv4N6HAHVACD0Ev">HAHVAC::~HAHVAC (C++ function)</a>
@@ -884,6 +901,8 @@
</li>
<li><a href="documents/api/device-types/ha-light.html#_CPPv4N7HALight5_iconE">HALight::_icon (C++ member)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="documents/api/device-types/ha-light.html#_CPPv4N7HALight10_maxMiredsE">HALight::_maxMireds (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-light.html#_CPPv4N7HALight10_minMiredsE">HALight::_minMireds (C++ member)</a>
@@ -1057,6 +1076,8 @@
<li><a href="documents/api/core/ha-mqtt.html#_CPPv46HAMqtt">HAMqtt (C++ class)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt18_connectedCallbackE">HAMqtt::_connectedCallback (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt13_currentStateE">HAMqtt::_currentState (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt11_dataPrefixE">HAMqtt::_dataPrefix (C++ member)</a>
</li>
@@ -1065,6 +1086,8 @@
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt13_devicesTypesE">HAMqtt::_devicesTypes (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15_devicesTypesNbE">HAMqtt::_devicesTypesNb (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt21_disconnectedCallbackE">HAMqtt::_disconnectedCallback (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt16_discoveryPrefixE">HAMqtt::_discoveryPrefix (C++ member)</a>
</li>
@@ -1087,6 +1110,8 @@
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt5_mqttE">HAMqtt::_mqtt (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt9_passwordE">HAMqtt::_password (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt21_stateChangedCallbackE">HAMqtt::_stateChangedCallback (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt9_usernameE">HAMqtt::_username (C++ member)</a>
</li>
@@ -1095,6 +1120,30 @@
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt5beginEK9IPAddressK8uint16_tPKcPKc">HAMqtt::begin (C++ function)</a>, <a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt5beginEK9IPAddressPKcPKc">[1]</a>, <a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt5beginEPKcK8uint16_tPKcPKc">[2]</a>, <a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt5beginEPKcPKcPKc">[3]</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt12beginPublishEPKc8uint16_tb">HAMqtt::beginPublish (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15ConnectionStateE">HAMqtt::ConnectionState (C++ enum)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15ConnectionState16StateBadClientIdE">HAMqtt::ConnectionState::StateBadClientId (C++ enumerator)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15ConnectionState19StateBadCredentialsE">HAMqtt::ConnectionState::StateBadCredentials (C++ enumerator)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15ConnectionState16StateBadProtocolE">HAMqtt::ConnectionState::StateBadProtocol (C++ enumerator)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15ConnectionState14StateConnectedE">HAMqtt::ConnectionState::StateConnected (C++ enumerator)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15ConnectionState15StateConnectingE">HAMqtt::ConnectionState::StateConnecting (C++ enumerator)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15ConnectionState21StateConnectionFailedE">HAMqtt::ConnectionState::StateConnectionFailed (C++ enumerator)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15ConnectionState19StateConnectionLostE">HAMqtt::ConnectionState::StateConnectionLost (C++ enumerator)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15ConnectionState22StateConnectionTimeoutE">HAMqtt::ConnectionState::StateConnectionTimeout (C++ enumerator)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15ConnectionState17StateDisconnectedE">HAMqtt::ConnectionState::StateDisconnected (C++ enumerator)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15ConnectionState17StateUnauthorizedE">HAMqtt::ConnectionState::StateUnauthorized (C++ enumerator)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15ConnectionState16StateUnavailableE">HAMqtt::ConnectionState::StateUnavailable (C++ enumerator)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt15connectToServerEv">HAMqtt::connectToServer (C++ function)</a>
</li>
@@ -1107,6 +1156,8 @@
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4NK6HAMqtt9getDeviceEv">HAMqtt::getDevice (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4NK6HAMqtt18getDiscoveryPrefixEv">HAMqtt::getDiscoveryPrefix (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4NK6HAMqtt8getStateEv">HAMqtt::getState (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt6HAMqttER6ClientR8HADeviceK7uint8_t">HAMqtt::HAMqtt (C++ function)</a>
</li>
@@ -1119,20 +1170,30 @@
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt11onConnectedEPFvvE">HAMqtt::onConnected (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt16onConnectedLogicEv">HAMqtt::onConnectedLogic (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt14onDisconnectedEPFvvE">HAMqtt::onDisconnected (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt9onMessageEPFvPKcPK7uint8_t8uint16_tE">HAMqtt::onMessage (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt14onStateChangedEPFv15ConnectionStateE">HAMqtt::onStateChanged (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt14processMessageEPKcPK7uint8_t8uint16_t">HAMqtt::processMessage (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt7publishEPKcPKcb">HAMqtt::publish (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt17ReconnectIntervalE">HAMqtt::ReconnectInterval (C++ member)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt13setBufferSizeE8uint16_t">HAMqtt::setBufferSize (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt13setDataPrefixEPKc">HAMqtt::setDataPrefix (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt18setDiscoveryPrefixEPKc">HAMqtt::setDiscoveryPrefix (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt12setKeepAliveE8uint16_t">HAMqtt::setKeepAlive (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt11setLastWillEPKcPKcb">HAMqtt::setLastWill (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt8setStateE15ConnectionState">HAMqtt::setState (C++ function)</a>
</li>
<li><a href="documents/api/core/ha-mqtt.html#_CPPv4N6HAMqtt9subscribeEPKc">HAMqtt::subscribe (C++ function)</a>
</li>
@@ -1319,6 +1380,8 @@
<li><a href="documents/api/device-types/ha-select.html#_CPPv4N8HASelect15buildSerializerEv">HASelect::buildSerializer (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-select.html#_CPPv4NK8HASelect20countOptionsInStringEPKc">HASelect::countOptionsInString (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-select.html#_CPPv4NK8HASelect16getCurrentOptionEv">HASelect::getCurrentOption (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-select.html#_CPPv4NK8HASelect15getCurrentStateEv">HASelect::getCurrentState (C++ function)</a>
</li>
@@ -1349,24 +1412,42 @@
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv48HASensor">HASensor (C++ class)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor12_deviceClassE">HASensor::_deviceClass (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor12_expireAfterE">HASensor::_expireAfter (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor9_featuresE">HASensor::_features (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor12_forceUpdateE">HASensor::_forceUpdate (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor5_iconE">HASensor::_icon (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor11_stateClassE">HASensor::_stateClass (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor18_unitOfMeasurementE">HASensor::_unitOfMeasurement (C++ member)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor15buildSerializerEv">HASensor::buildSerializer (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor8HASensorEPKc">HASensor::HASensor (C++ function)</a>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor8FeaturesE">HASensor::Features (C++ enum)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor8Features15DefaultFeaturesE">HASensor::Features::DefaultFeatures (C++ enumerator)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor8Features21JsonAttributesFeatureE">HASensor::Features::JsonAttributesFeature (C++ enumerator)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor8HASensorEPKcK8uint16_t">HASensor::HASensor (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor15onMqttConnectedEv">HASensor::onMqttConnected (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor14setDeviceClassEPKc">HASensor::setDeviceClass (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor14setExpireAfterE8uint16_t">HASensor::setExpireAfter (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor14setForceUpdateEb">HASensor::setForceUpdate (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor7setIconEPKc">HASensor::setIcon (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor17setJsonAttributesEPKc">HASensor::setJsonAttributes (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor13setStateClassEPKc">HASensor::setStateClass (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor.html#_CPPv4N8HASensor20setUnitOfMeasurementEPKc">HASensor::setUnitOfMeasurement (C++ function)</a>
</li>
@@ -1380,7 +1461,7 @@
</li>
<li><a href="documents/api/device-types/ha-sensor-number.html#_CPPv4NK14HASensorNumber15getCurrentValueEv">HASensorNumber::getCurrentValue (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor-number.html#_CPPv4N14HASensorNumber14HASensorNumberEPKcK15NumberPrecision">HASensorNumber::HASensorNumber (C++ function)</a>
<li><a href="documents/api/device-types/ha-sensor-number.html#_CPPv4N14HASensorNumber14HASensorNumberEPKcK15NumberPrecisionK8uint16_t">HASensorNumber::HASensorNumber (C++ function)</a>
</li>
<li><a href="documents/api/device-types/ha-sensor-number.html#_CPPv4N14HASensorNumber15onMqttConnectedEv">HASensorNumber::onMqttConnected (C++ function)</a>
</li>
@@ -1435,6 +1516,8 @@
<li><a href="documents/api/utils/ha-serializer.html#_CPPv4N12HASerializer8FlagType16WithAvailabilityE">HASerializer::FlagType::WithAvailability (C++ enumerator)</a>
</li>
<li><a href="documents/api/utils/ha-serializer.html#_CPPv4N12HASerializer8FlagType10WithDeviceE">HASerializer::FlagType::WithDevice (C++ enumerator)</a>
</li>
<li><a href="documents/api/utils/ha-serializer.html#_CPPv4N12HASerializer8FlagType12WithUniqueIdE">HASerializer::FlagType::WithUniqueId (C++ enumerator)</a>
</li>
<li><a href="documents/api/utils/ha-serializer.html#_CPPv4NK12HASerializer5flushEv">HASerializer::flush (C++ function)</a>
</li>
@@ -1503,6 +1586,8 @@
<li><a href="documents/api/utils/ha-serializer-array.html#_CPPv4NK17HASerializerArray13calculateSizeEv">HASerializerArray::calculateSize (C++ function)</a>
</li>
<li><a href="documents/api/utils/ha-serializer-array.html#_CPPv4N17HASerializerArray5clearEv">HASerializerArray::clear (C++ function)</a>
</li>
<li><a href="documents/api/utils/ha-serializer-array.html#_CPPv4NK17HASerializerArray7getItemEK7uint8_t">HASerializerArray::getItem (C++ function)</a>
</li>
<li><a href="documents/api/utils/ha-serializer-array.html#_CPPv4NK17HASerializerArray8getItemsEv">HASerializerArray::getItems (C++ function)</a>
</li>
+6 -6
View File
@@ -101,7 +101,7 @@
<li class="toctree-l2"><a class="reference internal" href="documents/library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/compiler-macros.html">Compiler macros</a></li>
@@ -113,6 +113,7 @@
<li class="toctree-l2"><a class="reference internal" href="documents/api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
@@ -193,15 +194,13 @@ but I successfully use it on ESP8266/ESP8255 boards in my projects.</p>
<li class="toctree-l3"><a class="reference internal" href="documents/library/discovery.html#topics-prefix">Topics prefix</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/device-types.html">Device types</a><ul>
<li class="toctree-l2"><a class="reference internal" href="documents/library/device-types.html">Device types (entities)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="documents/library/device-types.html#identifiers">Identifiers</a></li>
<li class="toctree-l3"><a class="reference internal" href="documents/library/device-types.html#limitations">Limitations</a></li>
<li class="toctree-l3"><a class="reference internal" href="documents/library/device-types.html#supported-device-types">Supported device types</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/mqtt-security.html">MQTT security</a><ul>
<li class="toctree-l3"><a class="reference internal" href="documents/library/mqtt-security.html#ssl-connection">SSL connection</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/mqtt-advanced.html">MQTT advanced features</a><ul>
<li class="toctree-l3"><a class="reference internal" href="documents/library/mqtt-advanced.html#callbacks">Callbacks</a></li>
<li class="toctree-l3"><a class="reference internal" href="documents/library/mqtt-advanced.html#subscriptions">Subscriptions</a></li>
@@ -251,6 +250,7 @@ but I successfully use it on ESP8266/ESP8255 boards in my projects.</p>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
</section>
BIN
View File
Binary file not shown.
+2 -1
View File
@@ -107,7 +107,7 @@
<li class="toctree-l2"><a class="reference internal" href="documents/library/availability-reporting.html">Availability reporting</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/connection-params.html">Connection parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/discovery.html">Discovery</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/device-types.html">Device types</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/device-types.html">Device types (entities)</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/mqtt-security.html">MQTT security</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/mqtt-advanced.html">MQTT advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="documents/library/compiler-macros.html">Compiler macros</a></li>
@@ -119,6 +119,7 @@
<li class="toctree-l2"><a class="reference internal" href="documents/api/utils/index.html">Utils API</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/sponsors/dawidchyrzynski">Sponsor</a></li>
</ul>
</div>
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -5
View File
@@ -29,11 +29,8 @@ This solution forces `lxml` to be built from the sources.
## Generating the documentation
1. Open terminal in the `docsrc` directory
2. Run the Doxygen command `doxygen`
3. Open the Pipenv shell `pipenv shell`
4. Run the build `make html`
The generated documentation will be available in the `docsrc/build/html` directory.
2. Open the Pipenv shell `pipenv shell`
3. Run the build `make github`
## Github pages
+1 -1
View File
@@ -21,7 +21,7 @@ copyright = '2022, Dawid Chyrzynski'
author = 'Dawid Chyrzynski'
# The full version, including alpha/beta/rc tags
release = '2.0.0'
release = '2.1.0'
# -- General configuration ---------------------------------------------------
@@ -11,6 +11,7 @@ Here is the list of devices on which the library was tested:
- Arduino Nano
- Arduino Pro Mini
- Arduino Nano 33 IoT
- Arduino Due
- NodeMCU
- Controllino Mega (Pure)
- Controllino Maxi (Pure)
@@ -1,12 +1,12 @@
Device configuration
====================
:doc:`HADevice </documents/api/core/ha-device>` represents the physical device where the library is installed.
Logically it's a group of types like sensors, switches, lights and so on.
In the Home Assistant, it's listed with properties that may be configured using the library's API.
:doc:`HADevice </documents/api/core/ha-device>` represents the physical device on which the library is used.
Essentially, it's a group of types such as sensors, switches, lights, and more.
Within Home Assistant, it appears with properties that can be configured using the library's API.
Each property except the unique ID is optional.
Setting optional properties increases flash and RAM usage so it's not recommended to set them on lower-spec MCUs.
Every property, except for the unique ID, is optional.
Enabling optional properties can lead to increased flash and RAM usage, therefore it is not advisable to set them on lower-spec MCUs.
The supported properties are:
@@ -15,15 +15,17 @@ The supported properties are:
* software version
* manufacturer
* model
* configuration url
Unique ID
---------
The ID of a device needs to be unique in a scope of a Home Assistant instance.
The safest solution is to use the MAC address of an Ethernet or Wi-Fi chip but you can also implement your own solution.
The unique ID serves as an internal identifier for devices within Home Assistant.
With this ID, Home Assistant can monitor the device's parameters and the entities it exposes.
The unique ID must be distinct within the scope of the Home Assistant instance.
The recommended approach is to use the MAC address of an Ethernet or Wi-Fi chip.
There are three different ways to set the ID of the device.
You can pick one depending on your needs.
There are three distinct methods for setting the device ID, allowing you to choose the one that best suits your requirements.
1) Providing string (const char*) to the :doc:`HADevice </documents/api/core/ha-device>` constructor
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -88,7 +90,7 @@ Device properties
-----------------
Each property has its corresponding setter method in the :doc:`HADevice </documents/api/core/ha-device>` class.
Please note that all these methods accept const char pointer whose **content is not copied**.
Please note that all of these methods accept a const char pointer whose **content is not copied**.
::
@@ -101,6 +103,7 @@ Please note that all these methods accept const char pointer whose **content is
device.setSoftwareVersion("1.0.0");
device.setManufacturer("Developer Corp.");
device.setModel("ABC-123");
device.setConfigurationUrl("http://192.168.1.55:1234");
// ...
}
+138 -11
View File
@@ -1,21 +1,124 @@
Device types
============
Device types (entities)
=======================
Device type represents a single entity in the Home Assistant panel.
It can be a sensor, lock, camera or anything that's listed in the table below.
Device type represents a single entity within the Home Assistant panel, which could be a sensor, lock, camera, or any other item listed in the table below.
Your physical device (for example ESP-01 board) can have multiple device types assigned.
They will be displayed as child entities in the HA panel.
Your physical device, such as an ESP-01 board, can have multiple device types assigned to it.
These types will then appear as child entities in the Home Assistant panel.
Identifiers
-----------
Home Assistant utilizes three distinct identifiers, which might initially appear confusing.
Grasping the purpose of each is crucial for a clear understanding of the library's API.
Entity ID
^^^^^^^^^
Home Assistant automatically generates an entity ID for each device type registered by your device.
This ID is primarily utilized by dashboards and automations within Home Assistant.
When the entity is discovered by Home Assistant for the first time, the name field is automatically employed to generate the entity ID.
Once registered, you can modify it to any desired value using the Home Assistant User Interface.
Home Assistant internally relies on the unique ID, so changing the entity ID or name in the Home Assistant UI does not break the integration between your device and Home Assistant.
Object ID
^^^^^^^^^
The object ID is an optional identifier that you can assign to the device type.
Its sole purpose is for generating the entity ID described above.
By default, Home Assistant generates the entity ID based on the entity's name.
However, when the object ID is provided, Home Assistant uses it to generate the entity ID.
Consequently, you can use the entity's name as a user-friendly label and the object ID as an internal identifier.
Unique ID
^^^^^^^^^
The unique ID serves as an internal identifier for the entity within the Home Assistant instance.
Once the entity with a specific unique ID is created, it cannot be altered, as this identifier is not accessible through the user interface.
Home Assistant utilizes this identifier internally to store the parameters of the entity in the database.
Given that the unique ID must be unique across the entire Home Assistant instance.
Multiple devices cannot expose entities with the same unique ID.
By default, the library uses the unique ID provided in the device type's constructor.
However, when you reuse the same codebase on multiple devices, conflicts may arise.
To address this issue, you can enable the extended unique ID feature in the HADevice instance.
This feature incorporates the device's unique ID as a prefix for the device type's ID.
.. code-block:: cpp
:caption: Default behavior
#include <Ethernet.h>
#include <ArduinoHA.h>
byte mac[] = {0x00, 0x10, 0xFA, 0x6E, 0x38, 0x4A};
EthernetClient client;
HADevice device(mac, sizeof(mac)); // the unique ID of the device will be 0010fa6e384a
HAMqtt mqtt(client, device);
// "myValve" is unique ID of the sensor. You should define your own ID.
HASensor valve("myValve");
void setup() {
// ...
valve.setIcon("mdi:home");
valve.setName("Water valve");
// the unique ID of the valve in HA will be "myValve"
// ...
}
void loop() {
// ...
}
.. code-block:: cpp
:caption: Extended unique IDs
#include <Ethernet.h>
#include <ArduinoHA.h>
byte mac[] = {0x00, 0x10, 0xFA, 0x6E, 0x38, 0x4A};
EthernetClient client;
HADevice device(mac, sizeof(mac)); // the unique ID of the device will be 0010fa6e384a
HAMqtt mqtt(client, device);
// "myValve" is unique ID of the sensor. You should define your own ID.
HASensor valve("myValve");
void setup() {
// ...
device.enableExtendedUniqueIds(); // <------------ enables extended unique IDs
valve.setIcon("mdi:home");
valve.setName("Water valve");
// the unique ID of the valve in HA will be "0010fa6e384a_myValve"
// ...
}
void loop() {
// ...
}
Limitations
-----------
Registering a new device type requires some flash and RAM memory to be utilized.
On less powerful units like Arduino Uno, you may quickly hit the limit of resources, so keeping the device simple is recommended.
Hitting the resource limit will result in random reboots of the device.
Registering a new device type involves utilizing a certain amount of flash and RAM memory.
On less powerful units, such as the Arduino Uno, you may rapidly reach the resource limit.
Therefore, it is advisable to keep the device simple to avoid hitting the resource limit, which could lead to random reboots of the device.
By default, the maximum number of device types is 6.
By default, devices utilizing ATmega328P or ATmega168 processors are limited to a maximum of 6 device types, while other platforms can support up to 24 device types.
You can increase the limit using the :doc:`HAMqtt </documents/api/core/ha-mqtt>` class constructor as follows:
::
@@ -26,7 +129,7 @@ You can increase the limit using the :doc:`HAMqtt </documents/api/core/ha-mqtt>`
byte mac[] = {0x00, 0x10, 0xFA, 0x6E, 0x38, 0x4A};
EthernetClient client;
HADevice device(mac, sizeof(mac));
HAMqtt mqtt(client, device, 12); // <------------ 12 is a new limit of device types
HAMqtt mqtt(client, device, 40); // <------------ 40 is a new limit of device types
void setup() {
Ethernet.begin(mac);
@@ -54,6 +157,9 @@ Supported device types
* - Device type
- Supported
- Documentation
* - Alarm control panel
- ❌
- --
* - Binary sensor
- ✅
- :doc:`HABinarySensor </documents/api/device-types/ha-binary-sensor>`
@@ -72,6 +178,9 @@ Supported device types
* - Device trigger
- ✅
- :doc:`HADeviceTrigger </documents/api/device-types/ha-device-trigger>`
* - Event
- ❌
- --
* - Fan
- ✅
- :doc:`HAFan </documents/api/device-types/ha-fan>`
@@ -81,6 +190,9 @@ Supported device types
* - HVAC
- ✅
- :doc:`HAHVAC </documents/api/device-types/ha-hvac>`
* - Lawn mower
- ❌
- --
* - Light
- ✅
- :doc:`HALight </documents/api/device-types/ha-light>`
@@ -102,12 +214,27 @@ Supported device types
* - | Sensor (number)
- ✅
- :doc:`HASensorNumber </documents/api/device-types/ha-sensor-number>`
* - Siren
- ❌
- --
* - Switch
- ✅
- :doc:`HASwitch </documents/api/device-types/ha-switch>`
* - Update
- ❌
- --
* - Tag scanner
- ✅
- :doc:`HATagScanner </documents/api/device-types/ha-tag-scanner>`
* - Text
- ❌
- --
* - Vacuum
- ❌
- --
* - Valve
- ❌
- --
* - Water heater
- ❌
- --
@@ -1,18 +1,16 @@
Introduction
============
Before implementing the business logic of your application you will need to
add a few necessary pieces of code to your project.
Basically, everything comes up to a few basic rules:
Prior to implementing the business logic of your application, you'll need to incorporate several essential pieces of code into your project.
Essentially, everything boils down to a few fundamental rules:
1) :doc:`HADevice </documents/api/core/ha-device>` and :doc:`HAMqtt </documents/api/core/ha-mqtt>` instances need to be initialized once globally or as a part of another global object.
2) :doc:`HAMqtt::begin </documents/api/core/ha-mqtt>` needs to be called at the end of setup logic. It provides MQTT broker credentials that will be used for a connection.
2) :doc:`HAMqtt::begin </documents/api/core/ha-mqtt>` needs to be called at the end of Arduino's setup logic. It lets you provide the MQTT broker's IP address and credentials.
3) :doc:`HAMqtt::loop </documents/api/core/ha-mqtt>` method needs to be called periodically (it doesn't need to be called on each tick).
4) Device types need to be initialized after :doc:`HAMqtt </documents/api/core/ha-mqtt>` class (it will be described later in the documentation).
Here are the minimal boilerplates that you can start with.
Don't worry if you have no idea what's going on here.
Everything will be covered in the following chapters.
Here are the minimal boilerplate examples to get you started.
Don't worry if you have no idea what's happening here; everything will be explained in detail in the following chapters.
Arduino Boilerplate
-------------------
@@ -25,11 +25,23 @@ Please take a look at the example below.
// this method will be called when connection to MQTT broker is established
}
void onDisconnected() {
// this method will be called when connection to MQTT broker is lost
}
void onStateChanged(HAMqtt::ConnectionState state) {
// this method will be called each time the state of the MQTT connection changes
}
void setup() {
Ethernet.begin(mac);
mqtt.onMessage(onMessage);
mqtt.onConnected(onConnected);
mqtt.onDisconnected(onDisconnected);
mqtt.onStateChanged(onStateChanged);
mqtt.setBufferSize(512); // set the buffer size to 512 bytes, default is 256 bytes
mqtt.setKeepAlive(60); // set the keep alive interval to 60 seconds, default is 15 seconds
mqtt.begin("192.168.1.50", "username", "password");
}
@@ -1,15 +1,15 @@
MQTT security
=============
The library allows you to use credentials for acquiring a TCP connection with the MQTT broker.
By default you can use the same credentials you use for login in the Home Assistant panel but you can also configure custom credentials in the Mosquitto broker.
The library enables you to utilize credentials to establish a TCP connection with the MQTT broker.
By default, you can employ the same credentials utilized for logging into the Home Assistant panel.
However, it's also possible to configure custom credentials within the Mosquitto broker.
.. DANGER::
This solution is not 100% secure because communication between Arduino and Home Assistant is not encrypted.
Username and password can be easily discovered by analyzing your local network traffic.
However, that's fine as long as your local network is secured against unattended access.
On more powerful devices (like ESP), you should consider using TLS/SSL connection.
This solution may not provide comprehensive security as the communication between Arduino and Home Assistant lacks encryption.
Consequently, username and password could be vulnerable to discovery through analysis of local network traffic.
However, this may not pose a significant risk if your local network is properly secured against unauthorized access.
::
@@ -31,10 +31,3 @@ By default you can use the same credentials you use for login in the Home Assist
void loop() {
// ...
}
SSL connection
--------------
On ESP32/ESP8266 you can use ``WiFiClientSecure`` client to establish encrypted connection between your device and Home Assistant.
Please take a look at :example:`this example <mqtt-with-ssl/mqtt-with-ssl.ino>`.
+2 -1
View File
@@ -24,4 +24,5 @@ Features
documents/getting-started/index
documents/library/index
documents/api/index
documents/api/index
Sponsor <https://github.com/sponsors/dawidchyrzynski>
+4
View File
@@ -41,6 +41,10 @@ table.examples-table tbody td + td {
.searchbox .caption-text {
display: none
}
.code-block-caption {
margin-top: 30px;
font-weight: bold;
}
form {
display: flex;
flex-direction: row;
+4 -2
View File
@@ -12,8 +12,10 @@ HAMqtt mqtt(client, device);
// "myCover" is unique ID of the cover. You should define your own ID.
HACover cover("myCover", HACover::PositionFeature);
// Cover with the position feature:
// HACover cover("myCover", HACover::PositionFeature);
// PositionFeature is optional, however required to be in a "stopped" state other than open or closed.
// If ommitted, a CommandStop will result in HA treating the cover as either Open or Closed immediately after the command.
// See https://www.home-assistant.io/integrations/cover.mqtt/
// Added in https://github.com/dawidchyrzynski/arduino-home-assistant/pull/111
void onCoverCommand(HACover::CoverCommand cmd, HACover* sender) {
if (cmd == HACover::CommandOpen) {
+1
View File
@@ -79,6 +79,7 @@ void setup() {
device.setSoftwareVersion("1.0.0");
// assign callbacks (optional)
// alternatively you can use std::bind or lambda functions
hvac.onTargetTemperatureCommand(onTargetTemperatureCommand);
hvac.onPowerCommand(onPowerCommand);
hvac.onModeCommand(onModeCommand);
+1 -1
View File
@@ -54,7 +54,7 @@ void setup() {
device.setSoftwareVersion("1.0.0");
// handle switch state
led.onCommand(onSwitchCommand);
led.onCommand(onSwitchCommand); // alternatively you can use std::bind or lambda functions
led.setName("My LED"); // optional
mqtt.begin(BROKER_ADDR);
+15
View File
@@ -29,12 +29,24 @@ void onMqttConnected() {
mqtt.subscribe("myCustomTopic");
}
void onMqttDisconnected() {
Serial.println("Disconnected from the broker!");
}
void onMqttStateChanged(HAMqtt::ConnectionState state) {
Serial.print("MQTT state changed to: ");
Serial.println(static_cast<int8_t>(state));
}
void setup() {
Serial.begin(9600);
Ethernet.begin(mac);
// alternativelly you can use std::bind or lambda functions (only on platforms with std::function support)
mqtt.onMessage(onMqttMessage);
mqtt.onConnected(onMqttConnected);
mqtt.onDisconnected(onMqttDisconnected);
mqtt.onStateChanged(onMqttStateChanged);
// If you use custom discovery prefix you can change it as following:
// mqtt.setDiscoveryPrefix("customPrefix");
@@ -42,6 +54,9 @@ void setup() {
// If you want to change prefix only for non-discovery prefix:
// mqtt.setDataPrefix("data");
// Obtaining state of the MQTT connection:
// mqtt.getState();
mqtt.begin(BROKER_ADDR);
}
+1 -1
View File
@@ -45,7 +45,7 @@ void setup() {
device.setSoftwareVersion("1.0.0");
// handle switch state
led.onCommand(onSwitchCommand);
led.onCommand(onSwitchCommand); // alternatively you can use std::bind or lambda function
led.setName("My LED"); // optional
mqtt.begin(BROKER_ADDR);
+17 -8
View File
@@ -8,7 +8,7 @@ byte mac[] = {0x00, 0x10, 0xFA, 0x6E, 0x38, 0x4A};
EthernetClient client;
HADevice device(mac, sizeof(mac));
HAMqtt mqtt(client, device);
HASelect select("mySelect");
HASelect mySelect("mySelect");
void onSelectCommand(int8_t index, HASelect* sender)
{
@@ -31,6 +31,12 @@ void onSelectCommand(int8_t index, HASelect* sender)
}
sender->setState(index); // report the selected option back to the HA panel
// it may return null
if (sender->getCurrentOption()) {
Serial.print("Current option: ");
Serial.println(sender->getCurrentOption());
}
}
void setup() {
@@ -42,18 +48,18 @@ void setup() {
device.setSoftwareVersion("1.0.0");
// set available options
select.setOptions("Low;Medium;High"); // use semicolons as separator of options
select.onCommand(onSelectCommand);
mySelect.setOptions("Low;Medium;High"); // use semicolons as separator of options
mySelect.onCommand(onSelectCommand);
select.setIcon("mdi:home"); // optional
select.setName("My dropdown"); // optional
mySelect.setIcon("mdi:home"); // optional
mySelect.setName("My dropdown"); // optional
// Optionally you can set retain flag for the HA commands
// select.setRetain(true);
// mySelect.setRetain(true);
// Optionally you can enable optimistic mode for the HASelect.
// In this mode you won't need to report state back to the HA when commands are executed.
// select.setOptimistic(true);
// mySelect.setOptimistic(true);
mqtt.begin(BROKER_ADDR);
}
@@ -64,5 +70,8 @@ void loop() {
// You can also report the state to the HA panel at runtime as shown below.
// The integer corresponds to the option's index.
// select.setState(1);
// mySelect.setState(1);
// You can also reset the select as follows:
// mySelect.setState(-1);
}
+3
View File
@@ -44,5 +44,8 @@ void loop() {
analogSensor.setValue(voltage);
lastUpdateAt = millis();
// you can reset the sensor as follows:
// analogSensor.setValue(nullptr);
}
}
+4 -1
View File
@@ -34,8 +34,11 @@ void loop() {
mqtt.loop();
if ((millis() - lastUpdateAt) > 2000) { // update in 2s interval
unsigned long uptimeValue = millis() / 1000;
uint32_t uptimeValue = millis() / 1000;
uptimeSensor.setValue(uptimeValue);
lastUpdateAt = millis();
// you can reset the sensor as follows:
// analogSensor.setValue(nullptr);
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
name=home-assistant-integration
version=2.0.0
version=2.2.0
author=Dawid Chyrzynski <dev@chyrzynski.pl>
maintainer=Dawid Chyrzynski <dev@chyrzynski.pl>
sentence=Home Assistant MQTT integration for Arduino
+12
View File
@@ -33,5 +33,17 @@
#define ARDUINOHA_DEBUG_PRINT(x)
#endif
#if defined(__SAMD21G18A__) or defined(__SAM3X8E__)
#define ARDUINOHA_INT_OVERLOAD
#endif
#if __cplusplus >= 201103L and !defined(__AVR__)
#define ARDUINOHA_USE_STD_FUNCTION
#endif
#if defined(ARDUINOHA_USE_STD_FUNCTION)
#include <functional>
#endif
#define AHATOFSTR(x) reinterpret_cast<const __FlashStringHelper*>(x)
#define AHAFROMFSTR(x) reinterpret_cast<const char*>(x)
+11 -2
View File
@@ -6,10 +6,11 @@
#define HADEVICE_INIT \
_ownsUniqueId(false), \
_serializer(new HASerializer(nullptr, 5)), \
_serializer(new HASerializer(nullptr, 6)), \
_availabilityTopic(nullptr), \
_sharedAvailability(false), \
_available(true) // device will be available by default
_available(true), \
_extendedUniqueIds(false)
HADevice::HADevice() :
_uniqueId(nullptr),
@@ -81,6 +82,14 @@ void HADevice::setSoftwareVersion(const char* softwareVersion)
);
}
void HADevice::setConfigurationUrl(const char* url)
{
_serializer->set(
AHATOFSTR(HADeviceConfigurationUrlProperty),
url
);
}
void HADevice::setAvailability(bool online)
{
_available = online;
+32 -1
View File
@@ -22,6 +22,7 @@ public:
/**
* Constructs HADevice with the given unique ID (string).
* Keep the unique ID short to save the memory.
* The given string must be static or const and cannot live on the stack.
*
* @param uniqueId String with the null terminator.
*/
@@ -30,6 +31,7 @@ public:
/**
* Constructs HADevice using the given byte array as the unique ID.
* It works in the same way as HADevice::setUniqueId method.
* The given string is copied internally and can be freed after the constructor returns.
*
* @param uniqueId Bytes array that's going to be converted into the string.
* @param length Number of bytes in the array.
@@ -60,6 +62,12 @@ public:
inline bool isSharedAvailabilityEnabled() const
{ return _sharedAvailability; }
/**
* Returns true if the extended unique IDs feature is enabled for the device.
*/
inline bool isExtendedUniqueIdsEnabled() const
{ return _extendedUniqueIds; }
/**
* Returns availability topic generated by the HADevice::enableSharedAvailability method.
* It can be nullptr if the shared availability is not enabled.
@@ -73,9 +81,17 @@ public:
inline bool isAvailable() const
{ return _available; }
/**
* Enables the use of extended unique IDs for all registered device types.
* The unique ID of each device type will be prefixed with the device's ID once enabled.
*/
inline void enableExtendedUniqueIds()
{ _extendedUniqueIds = true; }
/**
* Sets unique ID of the device based on the given byte array.
* Each byte is converted into a hex string representation, so the final length of the unique ID will be twice as given.
* Each byte is converted to its hexadecimal string representation, so the final length of the unique ID will be twice the original number of bytes.
* The given string is copied internally and can be freed after the method returns.
*
* @param uniqueId Bytes array that's going to be converted into the string.
* @param length Number of bytes in the array.
@@ -85,6 +101,7 @@ public:
/**
* Sets the "manufacturer" property that's going to be displayed in the Home Assistant.
* The given string must be static or const and cannot live on the stack.
*
* @param manufacturer Any string. Keep it short to save the memory.
*/
@@ -92,6 +109,7 @@ public:
/**
* Sets the "model" property that's going to be displayed in the Home Assistant.
* The given string must be static or const and cannot live on the stack.
*
* @param model Any string. Keep it short to save the memory.
*/
@@ -99,6 +117,7 @@ public:
/**
* Sets the "name" property that's going to be displayed in the Home Assistant.
* The given string must be static or const and cannot live on the stack.
*
* @param name Any string. Keep it short to save the memory.
*/
@@ -106,11 +125,20 @@ public:
/**
* Sets the "software version" property that's going to be displayed in the Home Assistant.
* The given string must be static or const and cannot live on the stack.
*
* @param softwareVersion Any string. Keep it short to save the memory.
*/
void setSoftwareVersion(const char* softwareVersion);
/**
* Sets the "configuration URL" property that's going to be used by the Home Assistant.
* The given string must be static or const and cannot live on the stack.
*
* @param url Configuration URL to publish.
*/
void setConfigurationUrl(const char* url);
/**
* Sets device's availability and publishes MQTT message on the availability topic.
* If the device is not connected to an MQTT broker or the shared availability is not enabled then nothing happens.
@@ -155,6 +183,9 @@ private:
/// Specifies whether the device is available (online / offline).
bool _available;
/// Specifies whether extended unique IDs feature is enabled.
bool _extendedUniqueIds;
};
#endif
+54 -6
View File
@@ -12,6 +12,8 @@
_device(device), \
_messageCallback(nullptr), \
_connectedCallback(nullptr), \
_disconnectedCallback(nullptr), \
_stateChangedCallback(nullptr), \
_initialized(false), \
_discoveryPrefix(DefaultDiscoveryPrefix), \
_dataPrefix(DefaultDataPrefix), \
@@ -23,7 +25,8 @@
_devicesTypes(new HABaseDeviceType*[maxDevicesTypesNb]), \
_lastWillTopic(nullptr), \
_lastWillMessage(nullptr), \
_lastWillRetain(false)
_lastWillRetain(false), \
_currentState(StateDisconnected)
static const char* DefaultDiscoveryPrefix = "homeassistant";
static const char* DefaultDataPrefix = "aha";
@@ -173,7 +176,16 @@ bool HAMqtt::disconnect()
void HAMqtt::loop()
{
if (_initialized && !_mqtt->loop()) {
if (!_initialized) {
return;
}
bool result = _mqtt->loop();
if (_currentState != _mqtt->state()) {
setState(static_cast<ConnectionState>(_mqtt->state()));
}
if (!result) {
connectToServer();
}
}
@@ -183,9 +195,19 @@ bool HAMqtt::isConnected() const
return _mqtt->connected();
}
void HAMqtt::setKeepAlive(uint16_t keepAlive)
{
_mqtt->setKeepAlive(keepAlive);
}
bool HAMqtt::setBufferSize(uint16_t size)
{
return _mqtt->setBufferSize(size);
}
void HAMqtt::addDeviceType(HABaseDeviceType* deviceType)
{
if (_devicesTypesNb + 1 >= _maxDevicesTypesNb) {
if (_devicesTypesNb + 1 > _maxDevicesTypesNb) {
return;
}
@@ -274,8 +296,9 @@ void HAMqtt::connectToServer()
}
_lastConnectionAttemptAt = millis();
setState(StateConnecting);
ARDUINOHA_DEBUG_PRINT(F("AHA: connecting, client ID: "))
ARDUINOHA_DEBUG_PRINT(F("AHA: MQTT connecting, client ID: "))
ARDUINOHA_DEBUG_PRINTLN(_device.getUniqueId())
_mqtt->connect(
@@ -290,8 +313,7 @@ void HAMqtt::connectToServer()
);
if (isConnected()) {
ARDUINOHA_DEBUG_PRINTLN(F("AHA: connected"))
onConnectedLogic();
setState(StateConnected);
} else {
ARDUINOHA_DEBUG_PRINTLN(F("AHA: failed to connect"))
}
@@ -309,3 +331,29 @@ void HAMqtt::onConnectedLogic()
_devicesTypes[i]->onMqttConnected();
}
}
void HAMqtt::setState(ConnectionState state)
{
ConnectionState previousState = _currentState;
_currentState = state;
ARDUINOHA_DEBUG_PRINT(F("AHA: MQTT state changed to "))
ARDUINOHA_DEBUG_PRINT(_currentState)
ARDUINOHA_DEBUG_PRINT(F(", previous state: "))
ARDUINOHA_DEBUG_PRINTLN(previousState)
if (_currentState == StateConnected) {
ARDUINOHA_DEBUG_PRINTLN(F("AHA: MQTT connected"))
onConnectedLogic();
} else if (previousState == StateConnected && _currentState != StateConnected) {
ARDUINOHA_DEBUG_PRINTLN(F("AHA: MQTT disconnected"))
if (_disconnectedCallback) {
_disconnectedCallback();
}
}
if (_stateChangedCallback) {
_stateChangedCallback(_currentState);
}
}
+91 -11
View File
@@ -6,21 +6,35 @@
#include <IPAddress.h>
#include "ArduinoHADefines.h"
#define HAMQTT_CALLBACK(name) void (*name)()
#define HAMQTT_MESSAGE_CALLBACK(name) void (*name)(const char* topic, const uint8_t* payload, uint16_t length)
#if defined(ARDUINOHA_USE_STD_FUNCTION)
#define HAMQTT_CALLBACK(name) std::function<void()> name
#define HAMQTT_STATE_CALLBACK(name) std::function<void(ConnectionState state)> name
#define HAMQTT_MESSAGE_CALLBACK(name) std::function<void(const char* topic, const uint8_t* payload, uint16_t length)> name
#else
#define HAMQTT_CALLBACK(name) void (*name)()
#define HAMQTT_STATE_CALLBACK(name) void (*name)(ConnectionState state)
#define HAMQTT_MESSAGE_CALLBACK(name) void (*name)(const char* topic, const uint8_t* payload, uint16_t length)
#endif
#define HAMQTT_DEFAULT_PORT 1883
#ifdef ARDUINOHA_TEST
class PubSubClientMock;
class PubSubClientMock;
#else
class PubSubClient;
class PubSubClient;
#endif
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
#define HAMQTT_DEFAULT_DEVICES_LIMIT 6
#else
#define HAMQTT_DEFAULT_DEVICES_LIMIT 24
#endif
class HADevice;
class HABaseDeviceType;
#if defined(ARDUINO_API_VERSION)
using namespace arduino;
using namespace arduino;
#endif
/**
@@ -30,6 +44,20 @@ using namespace arduino;
class HAMqtt
{
public:
enum ConnectionState {
StateConnecting = -5,
StateConnectionTimeout = -4,
StateConnectionLost = -3,
StateConnectionFailed = -2,
StateDisconnected = -1,
StateConnected = 0,
StateBadProtocol = 1,
StateBadClientId = 2,
StateUnavailable = 3,
StateBadCredentials = 4,
StateUnauthorized = 5
};
/**
* Returns existing instance (singleton) of the HAMqtt class.
* It may be a null pointer if the HAMqtt object was never constructed or it was destroyed.
@@ -41,7 +69,7 @@ public:
explicit HAMqtt(
PubSubClientMock* pubSub,
HADevice& device,
const uint8_t maxDevicesTypesNb = 6
const uint8_t maxDevicesTypesNb = HAMQTT_DEFAULT_DEVICES_LIMIT
);
#else
/**
@@ -55,7 +83,7 @@ public:
explicit HAMqtt(
Client& netClient,
HADevice& device,
const uint8_t maxDevicesTypesNb = 6
const uint8_t maxDevicesTypesNb = HAMQTT_DEFAULT_DEVICES_LIMIT
);
#endif
@@ -108,7 +136,7 @@ public:
* Please note that the callback is also fired by internal MQTT messages used by the library.
* You should always verify the topic of the received message.
*
* @param callback Callback method.
* @param callback Pointer to a function or std::bind or lambda function.
*/
inline void onMessage(HAMQTT_MESSAGE_CALLBACK(callback))
{ _messageCallback = callback; }
@@ -118,11 +146,33 @@ public:
* The callback is also fired after reconnecting to the broker.
* You can use this method to register topics' subscriptions.
*
* @param callback Callback method.
* @param callback Pointer to a function or std::bind or lambda function.
*/
inline void onConnected(HAMQTT_CALLBACK(callback))
{ _connectedCallback = callback; }
/**
* Registers a new callback method that will be called each time the connection to the MQTT broker is lost.
*
* @param callback Pointer to a function or std::bind or lambda function.
*/
inline void onDisconnected(HAMQTT_CALLBACK(callback))
{ _disconnectedCallback = callback; }
/**
* Registers a new callback method that will be called each time the connection state changes.
*
* @param callback Pointer to a function or std::bind or lambda function.
*/
inline void onStateChanged(HAMQTT_STATE_CALLBACK(callback))
{ _stateChangedCallback = callback; }
/**
* Returns the current state of the MQTT connection.
*/
inline ConnectionState getState() const
{ return _currentState; }
/**
* Sets parameters of the MQTT connection using the IP address and port.
* The library will try to connect to the broker in first loop cycle.
@@ -203,6 +253,22 @@ public:
*/
bool isConnected() const;
/**
* Sets keep alive for the MQTT connection.
* By default it's 15 seconds.
*
* @param keepAlive Number of seconds to keep connection alive.
*/
void setKeepAlive(uint16_t keepAlive);
/**
* Sets the buffer size for the MQTT connection.
* By default it's 256 bytes.
*
* @param size Size of the buffer.
*/
bool setBufferSize(uint16_t size);
/**
* Adds a new device's type to the MQTT.
* Each time the connection with MQTT broker is acquired, the HAMqtt class
@@ -320,7 +386,7 @@ public:
private:
/// Interval between MQTT reconnects (milliseconds).
static const uint16_t ReconnectInterval = 5000;
static const uint16_t ReconnectInterval = 10000;
/// Living instance of the HAMqtt class. It can be nullptr.
static HAMqtt* _instance;
@@ -336,6 +402,11 @@ private:
*/
void onConnectedLogic();
/**
* Sets the state of the MQTT connection.
*/
void setState(ConnectionState state);
#ifdef ARDUINOHA_TEST
PubSubClientMock* _mqtt;
#else
@@ -352,6 +423,12 @@ private:
/// The callback method that will be called when the MQTT connection is acquired.
HAMQTT_CALLBACK(_connectedCallback);
/// The callback method that will be called when the MQTT connection is lost.
HAMQTT_CALLBACK(_disconnectedCallback);
/// The callback method that will be called when the MQTT connection state changes.
HAMQTT_STATE_CALLBACK(_stateChangedCallback);
/// Specifies whether the HAMqtt::begin method was ever called.
bool _initialized;
@@ -387,6 +464,9 @@ private:
/// The last will retain set by HAMqtt::setLastWill
bool _lastWillRetain;
/// The last known state of the MQTT connection.
ConnectionState _currentState;
};
#endif
#endif
+1
View File
@@ -11,6 +11,7 @@ HABaseDeviceType::HABaseDeviceType(
_componentName(componentName),
_uniqueId(uniqueId),
_name(nullptr),
_objectId(nullptr),
_serializer(nullptr),
_availability(AvailabilityDefault)
{
+19
View File
@@ -78,6 +78,22 @@ public:
inline const char* getName() const
{ return _name; }
/**
* Sets object ID that will be used by HA to generate entity ID.
* Keep the ID short to save the resources.
*
* @param objectId The object ID.
*/
inline void setObjectId(const char* objectId)
{ _objectId = objectId; }
/**
* Returns the object ID that was set by setObjectId method.
* It can be nullptr if there is no ID assigned.
*/
inline const char* getObjectId() const
{ return _objectId; }
/**
* Sets availability of the device type.
* Setting the initial availability enables availability reporting for this device type.
@@ -209,6 +225,9 @@ protected:
/// The name that was set using setName method. It can be nullptr.
const char* _name;
/// The object ID that was set using setObjectId method. It can be nullptr.
const char* _objectId;
/// HASerializer that belongs to this device type. It can be nullptr.
HASerializer* _serializer;
+25 -4
View File
@@ -6,7 +6,8 @@
HABinarySensor::HABinarySensor(const char* uniqueId) :
HABaseDeviceType(AHATOFSTR(HAComponentBinarySensor), uniqueId),
_class(nullptr),
_deviceClass(nullptr),
_stateClass(nullptr),
_icon(nullptr),
_currentState(false)
{
@@ -27,17 +28,37 @@ bool HABinarySensor::setState(const bool state, const bool force)
return false;
}
void HABinarySensor::setExpireAfter(uint16_t expireAfter)
{
if (expireAfter > 0) {
_expireAfter.setBaseValue(expireAfter);
} else {
_expireAfter.reset();
}
}
void HABinarySensor::buildSerializer()
{
if (_serializer || !uniqueId()) {
return;
}
_serializer = new HASerializer(this, 7); // 7 - max properties nb
_serializer = new HASerializer(this, 10); // 10 - max properties nb
_serializer->set(AHATOFSTR(HANameProperty), _name);
_serializer->set(AHATOFSTR(HAUniqueIdProperty), _uniqueId);
_serializer->set(AHATOFSTR(HADeviceClassProperty), _class);
_serializer->set(AHATOFSTR(HAObjectIdProperty), _objectId);
_serializer->set(HASerializer::WithUniqueId);
_serializer->set(AHATOFSTR(HADeviceClassProperty), _deviceClass);
_serializer->set(AHATOFSTR(HAStateClassProperty), _stateClass);
_serializer->set(AHATOFSTR(HAIconProperty), _icon);
if (_expireAfter.isSet()) {
_serializer->set(
AHATOFSTR(HAExpireAfterProperty),
&_expireAfter,
HASerializer::NumberPropertyType
);
}
_serializer->set(HASerializer::WithDevice);
_serializer->set(HASerializer::WithAvailability);
_serializer->topic(AHATOFSTR(HAStateTopic));
+28 -2
View File
@@ -2,6 +2,7 @@
#define AHA_HABINARYSENSOR_H
#include "HABaseDeviceType.h"
#include "../utils/HANumeric.h"
#ifndef EX_ARDUINOHA_BINARY_SENSOR
@@ -30,6 +31,14 @@ public:
*/
bool setState(const bool state, const bool force = false);
/**
* Sets the number of seconds after the sensor’s state expires, if it’s not updated.
* By default the sensors state never expires.
*
* @param expireAfter The number of seconds.
*/
void setExpireAfter(uint16_t expireAfter);
/**
* Sets the current state of the sensor without publishing it to Home Assistant.
* This method may be useful if you want to change the state before the connection with the MQTT broker is acquired.
@@ -52,7 +61,17 @@ public:
* @param deviceClass The class name.
*/
inline void setDeviceClass(const char* deviceClass)
{ _class = deviceClass; }
{ _deviceClass = deviceClass; }
/**
* Sets class of the state for the long term stats.
* You can find list of available values here: https://developers.home-assistant.io/docs/core/entity/sensor/#available-state-classes
* See: https://developers.home-assistant.io/docs/core/entity/sensor/#long-term-statistics
*
* @param stateClass The state class name.
*/
inline void setStateClass(const char* stateClass)
{ _stateClass = stateClass; }
/**
* Sets icon of the sensor.
@@ -77,13 +96,20 @@ private:
bool publishState(bool state);
/// The device class. It can be nullptr.
const char* _class;
const char* _deviceClass;
/// The state class. It can be nullptr.
const char* _stateClass;
/// The icon of the sensor. It can be nullptr.
const char* _icon;
/// It defines the number of seconds after the sensor’s state expires, if it’s not updated. By default the sensors state never expires.
HANumeric _expireAfter;
/// Current state of the sensor. By default it's false.
bool _currentState;
};
#endif
+3 -2
View File
@@ -20,9 +20,10 @@ void HAButton::buildSerializer()
return;
}
_serializer = new HASerializer(this, 8); // 8 - max properties nb
_serializer = new HASerializer(this, 9); // 9 - max properties nb
_serializer->set(AHATOFSTR(HANameProperty), _name);
_serializer->set(AHATOFSTR(HAUniqueIdProperty), _uniqueId);
_serializer->set(AHATOFSTR(HAObjectIdProperty), _objectId);
_serializer->set(HASerializer::WithUniqueId);
_serializer->set(AHATOFSTR(HADeviceClassProperty), _class);
_serializer->set(AHATOFSTR(HAIconProperty), _icon);
+7 -3
View File
@@ -5,7 +5,11 @@
#ifndef EX_ARDUINOHA_BUTTON
#define HABUTTON_CALLBACK(name) void (*name)(HAButton* sender)
#if defined(ARDUINOHA_USE_STD_FUNCTION)
#define HABUTTON_CALLBACK(name) std::function<void(HAButton* sender)> name
#else
#define HABUTTON_CALLBACK(name) void (*name)(HAButton* sender)
#endif
/**
* HAButton represents a button that's displayed in the Home Assistant panel and
@@ -51,10 +55,10 @@ public:
{ _retain = retain; }
/**
* Registers callback that will be called each time the press command from HA is received.
* Registers a callback that will be called each time the press command from HA is received.
* Please note that it's not possible to register multiple callbacks for the same button.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
*/
inline void onCommand(HABUTTON_CALLBACK(callback))
{ _commandCallback = callback; }
+3 -2
View File
@@ -27,9 +27,10 @@ void HACamera::buildSerializer()
return;
}
_serializer = new HASerializer(this, 7); // 7 - max properties nb
_serializer = new HASerializer(this, 8); // 8 - max properties nb
_serializer->set(AHATOFSTR(HANameProperty), _name);
_serializer->set(AHATOFSTR(HAUniqueIdProperty), _uniqueId);
_serializer->set(AHATOFSTR(HAObjectIdProperty), _objectId);
_serializer->set(HASerializer::WithUniqueId);
_serializer->set(AHATOFSTR(HAIconProperty), _icon);
_serializer->set(
AHATOFSTR(HAEncodingProperty),
+3 -2
View File
@@ -54,9 +54,10 @@ void HACover::buildSerializer()
return;
}
_serializer = new HASerializer(this, 11); // 11 - max properties nb
_serializer = new HASerializer(this, 12); // 12 - max properties nb
_serializer->set(AHATOFSTR(HANameProperty), _name);
_serializer->set(AHATOFSTR(HAUniqueIdProperty), _uniqueId);
_serializer->set(AHATOFSTR(HAObjectIdProperty), _objectId);
_serializer->set(HASerializer::WithUniqueId);
_serializer->set(AHATOFSTR(HADeviceClassProperty), _class);
_serializer->set(AHATOFSTR(HAIconProperty), _icon);
+6 -2
View File
@@ -5,7 +5,11 @@
#ifndef EX_ARDUINOHA_COVER
#define HACOVER_CALLBACK(name) void (*name)(CoverCommand cmd, HACover* sender)
#if defined(ARDUINOHA_USE_STD_FUNCTION)
#define HACOVER_CALLBACK(name) std::function<void(CoverCommand cmd, HACover* sender)> name
#else
#define HACOVER_CALLBACK(name) void (*name)(CoverCommand cmd, HACover* sender)
#endif
/**
* HACover allows to control a cover (such as blinds, a roller shutter or a garage door).
@@ -142,7 +146,7 @@ public:
* Registers callback that will be called each time the command from HA is received.
* Please note that it's not possible to register multiple callbacks for the same cover.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
*/
inline void onCommand(HACOVER_CALLBACK(callback))
{ _commandCallback = callback; }
+3 -2
View File
@@ -33,9 +33,10 @@ void HADeviceTracker::buildSerializer()
return;
}
_serializer = new HASerializer(this, 7); // 7 - max properties nb
_serializer = new HASerializer(this, 8); // 8 - max properties nb
_serializer->set(AHATOFSTR(HANameProperty), _name);
_serializer->set(AHATOFSTR(HAUniqueIdProperty), _uniqueId);
_serializer->set(AHATOFSTR(HAObjectIdProperty), _objectId);
_serializer->set(HASerializer::WithUniqueId);
_serializer->set(AHATOFSTR(HAIconProperty), _icon);
_serializer->set(
AHATOFSTR(HASourceTypeProperty),
+3 -2
View File
@@ -55,9 +55,10 @@ void HAFan::buildSerializer()
return;
}
_serializer = new HASerializer(this, 13); // 13 - max properties nb
_serializer = new HASerializer(this, 14); // 14 - max properties nb
_serializer->set(AHATOFSTR(HANameProperty), _name);
_serializer->set(AHATOFSTR(HAUniqueIdProperty), _uniqueId);
_serializer->set(AHATOFSTR(HAObjectIdProperty), _objectId);
_serializer->set(HASerializer::WithUniqueId);
_serializer->set(AHATOFSTR(HAIconProperty), _icon);
if (_retain) {
+9 -4
View File
@@ -6,8 +6,13 @@
#ifndef EX_ARDUINOHA_FAN
#define HAFAN_STATE_CALLBACK(name) void (*name)(bool state, HAFan* sender)
#define HAFAN_SPEED_CALLBACK(name) void (*name)(uint16_t speed, HAFan* sender)
#if defined(ARDUINOHA_USE_STD_FUNCTION)
#define HAFAN_STATE_CALLBACK(name) std::function<void(bool state, HAFan* sender)> name
#define HAFAN_SPEED_CALLBACK(name) std::function<void(uint16_t speed, HAFan* sender)> name
#else
#define HAFAN_STATE_CALLBACK(name) void (*name)(bool state, HAFan* sender)
#define HAFAN_SPEED_CALLBACK(name) void (*name)(uint16_t speed, HAFan* sender)
#endif
/**
* HAFan allows adding a controllable fan in the Home Assistant panel.
@@ -152,7 +157,7 @@ public:
* Registers callback that will be called each time the state command from HA is received.
* Please note that it's not possible to register multiple callbacks for the same fan.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
* @note In non-optimistic mode, the state must be reported back to HA using the HAFan::setState method.
*/
inline void onStateCommand(HAFAN_STATE_CALLBACK(callback))
@@ -162,7 +167,7 @@ public:
* Registers callback that will be called each time the speed command from HA is received.
* Please note that it's not possible to register multiple callbacks for the same fan.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
* @note In non-optimistic mode, the speed must be reported back to HA using the HAFan::setSpeed method.
*/
inline void onSpeedCommand(HAFAN_SPEED_CALLBACK(callback))
+3 -2
View File
@@ -183,9 +183,10 @@ void HAHVAC::buildSerializer()
return;
}
_serializer = new HASerializer(this, 27); // 27 - max properties nb
_serializer = new HASerializer(this, 28); // 28 - max properties nb
_serializer->set(AHATOFSTR(HANameProperty), _name);
_serializer->set(AHATOFSTR(HAUniqueIdProperty), _uniqueId);
_serializer->set(AHATOFSTR(HAObjectIdProperty), _objectId);
_serializer->set(HASerializer::WithUniqueId);
_serializer->set(AHATOFSTR(HAIconProperty), _icon);
if (_retain) {
+23 -15
View File
@@ -26,11 +26,19 @@
inline void setCurrentTargetTemperature(const type temperature) \
{ setCurrentTargetTemperature(HANumeric(temperature, _precision)); }
#define HAHVAC_CALLBACK_BOOL(name) void (*name)(bool state, HAHVAC* sender)
#define HAHVAC_CALLBACK_TARGET_TEMP(name) void (*name)(HANumeric temperature, HAHVAC* sender)
#define HAHVAC_CALLBACK_FAN_MODE(name) void (*name)(FanMode mode, HAHVAC* sender)
#define HAHVAC_CALLBACK_SWING_MODE(name) void (*name)(SwingMode mode, HAHVAC* sender)
#define HAHVAC_CALLBACK_MODE(name) void (*name)(Mode mode, HAHVAC* sender)
#if defined(ARDUINOHA_USE_STD_FUNCTION)
#define HAHVAC_CALLBACK_BOOL(name) std::function<void(bool state, HAHVAC* sender)> name
#define HAHVAC_CALLBACK_TARGET_TEMP(name) std::function<void(HANumeric temperature, HAHVAC* sender)> name
#define HAHVAC_CALLBACK_FAN_MODE(name) std::function<void(FanMode mode, HAHVAC* sender)> name
#define HAHVAC_CALLBACK_SWING_MODE(name) std::function<void(SwingMode mode, HAHVAC* sender)> name
#define HAHVAC_CALLBACK_MODE(name) std::function<void(Mode mode, HAHVAC* sender)> name
#else
#define HAHVAC_CALLBACK_BOOL(name) void (*name)(bool state, HAHVAC* sender)
#define HAHVAC_CALLBACK_TARGET_TEMP(name) void (*name)(HANumeric temperature, HAHVAC* sender)
#define HAHVAC_CALLBACK_FAN_MODE(name) void (*name)(FanMode mode, HAHVAC* sender)
#define HAHVAC_CALLBACK_SWING_MODE(name) void (*name)(SwingMode mode, HAHVAC* sender)
#define HAHVAC_CALLBACK_MODE(name) void (*name)(Mode mode, HAHVAC* sender)
#endif
class HASerializerArray;
@@ -140,7 +148,7 @@ public:
_SET_CURRENT_TEMPERATURE_OVERLOAD(uint32_t)
_SET_CURRENT_TEMPERATURE_OVERLOAD(float)
#ifdef __SAMD21G18A__
#ifdef ARDUINOHA_INT_OVERLOAD
_SET_CURRENT_TEMPERATURE_OVERLOAD(int)
#endif
@@ -218,7 +226,7 @@ public:
_SET_TARGET_TEMPERATURE_OVERLOAD(uint32_t)
_SET_TARGET_TEMPERATURE_OVERLOAD(float)
#ifdef __SAMD21G18A__
#ifdef ARDUINOHA_INT_OVERLOAD
_SET_TARGET_TEMPERATURE_OVERLOAD(int)
#endif
@@ -240,7 +248,7 @@ public:
_SET_CURRENT_CURRENT_TEMPERATURE_OVERLOAD(uint32_t)
_SET_CURRENT_CURRENT_TEMPERATURE_OVERLOAD(float)
#ifdef __SAMD21G18A__
#ifdef ARDUINOHA_INT_OVERLOAD
_SET_CURRENT_CURRENT_TEMPERATURE_OVERLOAD(int)
#endif
@@ -378,7 +386,7 @@ public:
_SET_CURRENT_TARGET_TEMPERATURE_OVERLOAD(uint32_t)
_SET_CURRENT_TARGET_TEMPERATURE_OVERLOAD(float)
#ifdef __SAMD21G18A__
#ifdef ARDUINOHA_INT_OVERLOAD
_SET_CURRENT_TARGET_TEMPERATURE_OVERLOAD(int)
#endif
@@ -443,7 +451,7 @@ public:
* Registers callback that will be called each time the aux state command from HA is received.
* Please note that it's not possible to register multiple callbacks for the same HVAC.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
* @note The aux state must be reported back to HA using the HAHVAC::setAuxState method.
*/
inline void onAuxStateCommand(HAHVAC_CALLBACK_BOOL(callback))
@@ -453,7 +461,7 @@ public:
* Registers callback that will be called each time the power command from HA is received.
* Please note that it's not possible to register multiple callbacks for the same HVAC.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
*/
inline void onPowerCommand(HAHVAC_CALLBACK_BOOL(callback))
{ _powerCallback = callback; }
@@ -462,7 +470,7 @@ public:
* Registers callback that will be called each time the fan mode command from HA is received.
* Please note that it's not possible to register multiple callbacks for the same HVAC.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
* @note The fan mode must be reported back to HA using the HAHVAC::setFanMode method.
*/
inline void onFanModeCommand(HAHVAC_CALLBACK_FAN_MODE(callback))
@@ -472,7 +480,7 @@ public:
* Registers callback that will be called each time the swing mode command from HA is received.
* Please note that it's not possible to register multiple callbacks for the same HVAC.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
* @note The swing mode must be reported back to HA using the HAHVAC::setSwingMode method.
*/
inline void onSwingModeCommand(HAHVAC_CALLBACK_SWING_MODE(callback))
@@ -482,7 +490,7 @@ public:
* Registers callback that will be called each time the HVAC mode command from HA is received.
* Please note that it's not possible to register multiple callbacks for the same HVAC.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
* @note The mode must be reported back to HA using the HAHVAC::setMode method.
*/
inline void onModeCommand(HAHVAC_CALLBACK_MODE(callback))
@@ -492,7 +500,7 @@ public:
* Registers callback that will be called each time the target temperature is set via HA panel.
* Please note that it's not possible to register multiple callbacks for the same HVAC.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
* @note The target temperature must be reported back to HA using the HAHVAC::setTargetTemperature method.
*/
inline void onTargetTemperatureCommand(HAHVAC_CALLBACK_TARGET_TEMP(callback))
+3 -2
View File
@@ -128,9 +128,10 @@ void HALight::buildSerializer()
return;
}
_serializer = new HASerializer(this, 18); // 18 - max properties nb
_serializer = new HASerializer(this, 19); // 19 - max properties nb
_serializer->set(AHATOFSTR(HANameProperty), _name);
_serializer->set(AHATOFSTR(HAUniqueIdProperty), _uniqueId);
_serializer->set(AHATOFSTR(HAObjectIdProperty), _objectId);
_serializer->set(HASerializer::WithUniqueId);
_serializer->set(AHATOFSTR(HAIconProperty), _icon);
if (_retain) {
+15 -8
View File
@@ -6,10 +6,17 @@
#ifndef EX_ARDUINOHA_LIGHT
#define HALIGHT_STATE_CALLBACK(name) void (*name)(bool state, HALight* sender)
#define HALIGHT_BRIGHTNESS_CALLBACK(name) void (*name)(uint8_t brightness, HALight* sender)
#define HALIGHT_COLOR_TEMP_CALLBACK(name) void (*name)(uint16_t temperature, HALight* sender)
#define HALIGHT_RGB_COLOR_CALLBACK(name) void (*name)(HALight::RGBColor color, HALight* sender)
#if defined(ARDUINOHA_USE_STD_FUNCTION)
#define HALIGHT_STATE_CALLBACK(name) std::function<void(bool state, HALight* sender)> name
#define HALIGHT_BRIGHTNESS_CALLBACK(name) std::function<void(uint8_t brightness, HALight* sender)> name
#define HALIGHT_COLOR_TEMP_CALLBACK(name) std::function<void(uint16_t temperature, HALight* sender)> name
#define HALIGHT_RGB_COLOR_CALLBACK(name) std::function<void(HALight::RGBColor color, HALight* sender)> name
#else
#define HALIGHT_STATE_CALLBACK(name) void (*name)(bool state, HALight* sender)
#define HALIGHT_BRIGHTNESS_CALLBACK(name) void (*name)(uint8_t brightness, HALight* sender)
#define HALIGHT_COLOR_TEMP_CALLBACK(name) void (*name)(uint16_t temperature, HALight* sender)
#define HALIGHT_RGB_COLOR_CALLBACK(name) void (*name)(HALight::RGBColor color, HALight* sender)
#endif
/**
* HALight allows adding a controllable light in the Home Assistant panel.
@@ -261,7 +268,7 @@ public:
* Registers callback that will be called each time the state command from HA is received.
* Please note that it's not possible to register multiple callbacks for the same light.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
* @note In non-optimistic mode, the state must be reported back to HA using the HALight::setState method.
*/
inline void onStateCommand(HALIGHT_STATE_CALLBACK(callback))
@@ -271,7 +278,7 @@ public:
* Registers callback that will be called each time the brightness command from HA is received.
* Please note that it's not possible to register multiple callbacks for the same light.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
* @note In non-optimistic mode, the brightness must be reported back to HA using the HALight::setBrightness method.
*/
inline void onBrightnessCommand(HALIGHT_BRIGHTNESS_CALLBACK(callback))
@@ -281,7 +288,7 @@ public:
* Registers callback that will be called each time the color temperature command from HA is received.
* Please note that it's not possible to register multiple callbacks for the same light.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
* @note In non-optimistic mode, the color temperature must be reported back to HA using the HALight::setColorTemperature method.
*/
inline void onColorTemperatureCommand(HALIGHT_COLOR_TEMP_CALLBACK(callback))
@@ -291,7 +298,7 @@ public:
* Registers callback that will be called each time the RGB color command from HA is received.
* Please note that it's not possible to register multiple callbacks for the same light.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
* @note In non-optimistic mode, the color must be reported back to HA using the HALight::setRGBColor method.
*/
inline void onRGBColorCommand(HALIGHT_RGB_COLOR_CALLBACK(callback))
+3 -2
View File
@@ -35,9 +35,10 @@ void HALock::buildSerializer()
return;
}
_serializer = new HASerializer(this, 9); // 9 - max properties nb
_serializer = new HASerializer(this, 10); // 10 - max properties nb
_serializer->set(AHATOFSTR(HANameProperty), _name);
_serializer->set(AHATOFSTR(HAUniqueIdProperty), _uniqueId);
_serializer->set(AHATOFSTR(HAObjectIdProperty), _objectId);
_serializer->set(HASerializer::WithUniqueId);
_serializer->set(AHATOFSTR(HAIconProperty), _icon);
if (_retain) {
+6 -2
View File
@@ -5,7 +5,11 @@
#ifndef EX_ARDUINOHA_LOCK
#define HALOCK_CALLBACK(name) void (*name)(LockCommand command, HALock* sender)
#if defined(ARDUINOHA_USE_STD_FUNCTION)
#define HALOCK_CALLBACK(name) std::function<void(LockCommand command, HALock* sender)> name
#else
#define HALOCK_CALLBACK(name) void (*name)(LockCommand command, HALock* sender)
#endif
/**
* HALock allows to implement a custom lock (for example: door lock)
@@ -97,7 +101,7 @@ public:
* Registers callback that will be called each time the lock/unlock/open command from the HA is received.
* Please note that it's not possible to register multiple callbacks for the same lock.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
*/
inline void onCommand(HALOCK_CALLBACK(callback))
{ _commandCallback = callback; }
+3 -3
View File
@@ -42,10 +42,10 @@ void HANumber::buildSerializer()
return;
}
_serializer = new HASerializer(this, 15); // 15 - max properties nb
_serializer = new HASerializer(this, 16); // 16 - max properties nb
_serializer->set(AHATOFSTR(HANameProperty), _name);
_serializer->set(AHATOFSTR(HAUniqueIdProperty), _uniqueId);
_serializer->set(AHATOFSTR(HAObjectIdProperty), _objectId);
_serializer->set(HASerializer::WithUniqueId);
_serializer->set(AHATOFSTR(HADeviceClassProperty), _class);
_serializer->set(AHATOFSTR(HAIconProperty), _icon);
_serializer->set(AHATOFSTR(HAUnitOfMeasurementProperty), _unitOfMeasurement);
+8 -4
View File
@@ -16,7 +16,11 @@
inline void setCurrentState(const type state) \
{ setCurrentState(HANumeric(state, _precision)); }
#define HANUMBER_CALLBACK(name) void (*name)(HANumeric number, HANumber* sender)
#if defined(ARDUINOHA_USE_STD_FUNCTION)
#define HANUMBER_CALLBACK(name) std::function<void(HANumeric number, HANumber* sender)> name
#else
#define HANUMBER_CALLBACK(name) void (*name)(HANumeric number, HANumber* sender)
#endif
/**
* HANumber adds a slider or a box in the Home Assistant panel
@@ -64,7 +68,7 @@ public:
_SET_STATE_OVERLOAD(uint32_t)
_SET_STATE_OVERLOAD(float)
#ifdef __SAMD21G18A__
#ifdef ARDUINOHA_INT_OVERLOAD
_SET_STATE_OVERLOAD(int)
#endif
@@ -86,7 +90,7 @@ public:
_SET_CURRENT_STATE_OVERLOAD(uint32_t)
_SET_CURRENT_STATE_OVERLOAD(float)
#ifdef __SAMD21G18A__
#ifdef ARDUINOHA_INT_OVERLOAD
_SET_CURRENT_STATE_OVERLOAD(int)
#endif
@@ -180,7 +184,7 @@ public:
* Registers callback that will be called each time the number is changed in the HA panel.
* Please note that it's not possible to register multiple callbacks for the same number.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
* @note In non-optimistic mode, the number must be reported back to HA using the HANumber::setState method.
*/
inline void onCommand(HANUMBER_CALLBACK(callback))
+3 -2
View File
@@ -19,9 +19,10 @@ void HAScene::buildSerializer()
return;
}
_serializer = new HASerializer(this, 7); // 7 - max properties nb
_serializer = new HASerializer(this, 8); // 8 - max properties nb
_serializer->set(AHATOFSTR(HANameProperty), _name);
_serializer->set(AHATOFSTR(HAUniqueIdProperty), _uniqueId);
_serializer->set(AHATOFSTR(HAObjectIdProperty), _objectId);
_serializer->set(HASerializer::WithUniqueId);
_serializer->set(AHATOFSTR(HAIconProperty), _icon);
// optional property
+6 -2
View File
@@ -5,7 +5,11 @@
#ifndef EX_ARDUINOHA_SCENE
#define HASCENE_CALLBACK(name) void (*name)(HAScene* sender)
#if defined(ARDUINOHA_USE_STD_FUNCTION)
#define HASCENE_CALLBACK(name) std::function<void(HAScene* sender)> name
#else
#define HASCENE_CALLBACK(name) void (*name)(HAScene* sender)
#endif
/**
* HAScene adds a new scene to the Home Assistant that triggers your callback once activated.
@@ -44,7 +48,7 @@ public:
* Registers callback that will be called when the scene is activated in the HA panel.
* Please note that it's not possible to register multiple callbacks for the same scene.
*
* @param callback
* @param callback Pointer to a function or std::bind or lambda function.
*/
inline void onCommand(HASCENE_CALLBACK(callback))
{ _commandCallback = callback; }

Some files were not shown because too many files have changed in this diff Show More