mirror of
https://github.com/alexhopeoconnor/arduino-home-assistant.git
synced 2026-10-04 02:48:13 +10:00
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
This commit is contained in:
+7
-2
@@ -6,13 +6,18 @@
|
||||
* Added support for setting MQTT's keep alive ([https://github.com/dawidchyrzynski/arduino-home-assistant/issues/153](#153))
|
||||
* Added support for the `state_class` property in the `HASensor` ([#179](https://github.com/dawidchyrzynski/arduino-home-assistant/pull/179) by [@https://github.com/Starzu])
|
||||
* 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#issuecomment-1919832684)
|
||||
* Added support for the `configuration_url` parameter in the `HADevice` [#182](https://github.com/dawidchyrzynski/arduino-home-assistant/issues/182)
|
||||
* 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 `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 `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`
|
||||
|
||||
**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
|
||||
|
||||
|
||||
@@ -22,24 +22,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
|
||||
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
<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">&</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">&</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">&</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">&</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>
|
||||
|
||||
@@ -188,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>
|
||||
@@ -272,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>
|
||||
|
||||
@@ -162,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>
|
||||
|
||||
@@ -165,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>
|
||||
@@ -190,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>
|
||||
@@ -261,6 +305,12 @@
|
||||
</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>
|
||||
@@ -291,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>
|
||||
|
||||
|
||||
@@ -253,7 +253,7 @@ This feature incorporates the device’s unique ID as a prefix for the device ty
|
||||
<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, the maximum number of device types is 6.
|
||||
<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"><Ethernet.h></span><span class="cp"></span>
|
||||
<span class="cp">#include</span><span class="w"> </span><span class="cpf"><ArduinoHA.h></span><span class="cp"></span>
|
||||
@@ -261,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">// <------------ 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">// <------------ 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>
|
||||
@@ -294,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>
|
||||
@@ -330,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>
|
||||
|
||||
+22
-4
@@ -214,6 +214,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>
|
||||
@@ -230,6 +232,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>
|
||||
@@ -869,14 +873,14 @@
|
||||
</li>
|
||||
<li><a href="documents/api/device-types/ha-hvac.html#_CPPv4N6HAHVAC15TemperatureUnit14FahrenheitUnitE">HAHVAC::TemperatureUnit::FahrenheitUnit (C++ enumerator)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="documents/api/device-types/ha-hvac.html#_CPPv4N6HAHVACD0Ev">HAHVAC::~HAHVAC (C++ function)</a>
|
||||
</li>
|
||||
<li><a href="documents/api/device-types/ha-light.html#_CPPv47HALight">HALight (C++ class)</a>
|
||||
</li>
|
||||
<li><a href="documents/api/device-types/ha-light.html#_CPPv4N7HALight19_brightnessCallbackE">HALight::_brightnessCallback (C++ member)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="documents/api/device-types/ha-light.html#_CPPv4N7HALight16_brightnessScaleE">HALight::_brightnessScale (C++ member)</a>
|
||||
</li>
|
||||
<li><a href="documents/api/device-types/ha-light.html#_CPPv4N7HALight25_colorTemperatureCallbackE">HALight::_colorTemperatureCallback (C++ member)</a>
|
||||
@@ -1362,6 +1366,10 @@
|
||||
<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>
|
||||
@@ -1373,15 +1381,25 @@
|
||||
</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>
|
||||
@@ -1397,7 +1415,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>
|
||||
|
||||
Binary file not shown.
+1
-1
File diff suppressed because one or more lines are too long
@@ -118,7 +118,7 @@ Registering a new device type involves utilizing a certain amount of flash and R
|
||||
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:
|
||||
|
||||
::
|
||||
@@ -129,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);
|
||||
@@ -157,6 +157,9 @@ Supported device types
|
||||
* - Device type
|
||||
- Supported
|
||||
- Documentation
|
||||
* - Alarm control panel
|
||||
- ❌
|
||||
- --
|
||||
* - Binary sensor
|
||||
- ✅
|
||||
- :doc:`HABinarySensor </documents/api/device-types/ha-binary-sensor>`
|
||||
@@ -175,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>`
|
||||
@@ -184,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>`
|
||||
@@ -205,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
|
||||
- ❌
|
||||
- --
|
||||
|
||||
@@ -15,6 +15,7 @@ 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) {
|
||||
|
||||
@@ -44,5 +44,8 @@ void loop() {
|
||||
|
||||
analogSensor.setValue(voltage);
|
||||
lastUpdateAt = millis();
|
||||
|
||||
// you can reset the sensor as follows:
|
||||
// analogSensor.setValue(nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,5 +37,8 @@ void loop() {
|
||||
unsigned long uptimeValue = millis() / 1000;
|
||||
uptimeSensor.setValue(uptimeValue);
|
||||
lastUpdateAt = millis();
|
||||
|
||||
// you can reset the sensor as follows:
|
||||
// analogSensor.setValue(nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
+8
-2
@@ -16,6 +16,12 @@ class PubSubClientMock;
|
||||
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;
|
||||
|
||||
@@ -41,7 +47,7 @@ public:
|
||||
explicit HAMqtt(
|
||||
PubSubClientMock* pubSub,
|
||||
HADevice& device,
|
||||
const uint8_t maxDevicesTypesNb = 6
|
||||
const uint8_t maxDevicesTypesNb = HAMQTT_DEFAULT_DEVICES_LIMIT
|
||||
);
|
||||
#else
|
||||
/**
|
||||
@@ -55,7 +61,7 @@ public:
|
||||
explicit HAMqtt(
|
||||
Client& netClient,
|
||||
HADevice& device,
|
||||
const uint8_t maxDevicesTypesNb = 6
|
||||
const uint8_t maxDevicesTypesNb = HAMQTT_DEFAULT_DEVICES_LIMIT
|
||||
);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -27,17 +27,35 @@ 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, 8); // 8 - max properties nb
|
||||
_serializer->set(AHATOFSTR(HANameProperty), _name);
|
||||
_serializer->set(HASerializer::WithUniqueId);
|
||||
_serializer->set(AHATOFSTR(HADeviceClassProperty), _class);
|
||||
_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));
|
||||
|
||||
@@ -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.
|
||||
@@ -82,8 +91,12 @@ private:
|
||||
/// 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
|
||||
|
||||
@@ -4,29 +4,49 @@
|
||||
#include "../HAMqtt.h"
|
||||
#include "../utils/HASerializer.h"
|
||||
|
||||
HASensor::HASensor(const char* uniqueId) :
|
||||
HASensor::HASensor(const char* uniqueId, const uint16_t features) :
|
||||
HABaseDeviceType(AHATOFSTR(HAComponentSensor), uniqueId),
|
||||
_features(features),
|
||||
_deviceClass(nullptr),
|
||||
_stateClass(nullptr),
|
||||
_forceUpdate(false),
|
||||
_icon(nullptr),
|
||||
_unitOfMeasurement(nullptr)
|
||||
_unitOfMeasurement(nullptr),
|
||||
_expireAfter()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool HASensor::setValue(const char* value)
|
||||
{
|
||||
if (!value) {
|
||||
return publishOnDataTopic(AHATOFSTR(HAStateTopic), AHATOFSTR(HAStateNone), true);
|
||||
}
|
||||
|
||||
return publishOnDataTopic(AHATOFSTR(HAStateTopic), value, true);
|
||||
}
|
||||
|
||||
bool HASensor::setJsonAttributes(const char* json)
|
||||
{
|
||||
return publishOnDataTopic(AHATOFSTR(HAJsonAttributesTopic), json, true);
|
||||
}
|
||||
|
||||
void HASensor::setExpireAfter(uint16_t expireAfter)
|
||||
{
|
||||
if (expireAfter > 0) {
|
||||
_expireAfter.setBaseValue(expireAfter);
|
||||
} else {
|
||||
_expireAfter.reset();
|
||||
}
|
||||
}
|
||||
|
||||
void HASensor::buildSerializer()
|
||||
{
|
||||
if (_serializer || !uniqueId()) {
|
||||
return;
|
||||
}
|
||||
|
||||
_serializer = new HASerializer(this, 10); // 10 - max properties nb
|
||||
_serializer = new HASerializer(this, 12); // 12 - max properties nb
|
||||
_serializer->set(AHATOFSTR(HANameProperty), _name);
|
||||
_serializer->set(HASerializer::WithUniqueId);
|
||||
_serializer->set(AHATOFSTR(HADeviceClassProperty), _deviceClass);
|
||||
@@ -34,7 +54,6 @@ void HASensor::buildSerializer()
|
||||
_serializer->set(AHATOFSTR(HAIconProperty), _icon);
|
||||
_serializer->set(AHATOFSTR(HAUnitOfMeasurementProperty), _unitOfMeasurement);
|
||||
|
||||
// optional property
|
||||
if (_forceUpdate) {
|
||||
_serializer->set(
|
||||
AHATOFSTR(HAForceUpdateProperty),
|
||||
@@ -43,6 +62,18 @@ void HASensor::buildSerializer()
|
||||
);
|
||||
}
|
||||
|
||||
if (_expireAfter.isSet()) {
|
||||
_serializer->set(
|
||||
AHATOFSTR(HAExpireAfterProperty),
|
||||
&_expireAfter,
|
||||
HASerializer::NumberPropertyType
|
||||
);
|
||||
}
|
||||
|
||||
if (_features & JsonAttributesFeature) {
|
||||
_serializer->topic(AHATOFSTR(HAJsonAttributesTopic));
|
||||
}
|
||||
|
||||
_serializer->set(HASerializer::WithDevice);
|
||||
_serializer->set(HASerializer::WithAvailability);
|
||||
_serializer->topic(AHATOFSTR(HAStateTopic));
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define AHA_HASENSOR_H
|
||||
|
||||
#include "HABaseDeviceType.h"
|
||||
#include "../utils/HANumeric.h"
|
||||
|
||||
#ifndef EX_ARDUINOHA_SENSOR
|
||||
|
||||
@@ -17,10 +18,16 @@
|
||||
class HASensor : public HABaseDeviceType
|
||||
{
|
||||
public:
|
||||
enum Features {
|
||||
DefaultFeatures = 0,
|
||||
JsonAttributesFeature = 1
|
||||
};
|
||||
|
||||
/**
|
||||
* @param uniqueId The unique ID of the sensor. It needs to be unique in a scope of your device.
|
||||
* @param features Features that should be enabled for the sensor.
|
||||
*/
|
||||
HASensor(const char* uniqueId);
|
||||
HASensor(const char* uniqueId, const uint16_t features = DefaultFeatures);
|
||||
|
||||
/**
|
||||
* Publishes the MQTT message with the given value.
|
||||
@@ -32,6 +39,22 @@ public:
|
||||
*/
|
||||
bool setValue(const char* value);
|
||||
|
||||
/**
|
||||
* Publishes the given JSON data on the JSON attributes topic.
|
||||
* The `JsonAttributesFeature` has to be enabled prior to setting the value.
|
||||
*
|
||||
* @param json JSON attributes.
|
||||
*/
|
||||
bool setJsonAttributes(const char* json);
|
||||
|
||||
/**
|
||||
* 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 class of the device.
|
||||
* You can find list of available values here: https://www.home-assistant.io/integrations/sensor/#device-class
|
||||
@@ -81,9 +104,12 @@ protected:
|
||||
virtual void onMqttConnected() override;
|
||||
|
||||
private:
|
||||
/// Features enabled for the sensor.
|
||||
const uint16_t _features;
|
||||
|
||||
/// The device class. It can be nullptr.
|
||||
const char* _deviceClass;
|
||||
|
||||
|
||||
/// The state class for the long term stats. It can be nullptr. See: https://developers.home-assistant.io/docs/core/entity/sensor/#long-term-statistics
|
||||
const char* _stateClass;
|
||||
|
||||
@@ -95,6 +121,9 @@ private:
|
||||
|
||||
/// The unit of measurement for the sensor. It can be nullptr.
|
||||
const char* _unitOfMeasurement;
|
||||
|
||||
/// 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;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -5,9 +5,10 @@
|
||||
|
||||
HASensorNumber::HASensorNumber(
|
||||
const char* uniqueId,
|
||||
const NumberPrecision precision
|
||||
const NumberPrecision precision,
|
||||
const uint16_t features
|
||||
) :
|
||||
HASensor(uniqueId),
|
||||
HASensor(uniqueId, features),
|
||||
_precision(precision),
|
||||
_currentValue()
|
||||
{
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
#define AHA_HASENSORNUMBER_H
|
||||
|
||||
#include "HASensor.h"
|
||||
#include "../utils/HANumeric.h"
|
||||
|
||||
#ifndef EX_ARDUINOHA_SENSOR
|
||||
|
||||
@@ -27,10 +26,12 @@ public:
|
||||
/**
|
||||
* @param uniqueId The unique ID of the sensor. It needs to be unique in a scope of your device.
|
||||
* @param precision Precision of the floating point number that will be displayed in the HA panel.
|
||||
* @param features Features that should be enabled for the sensor.
|
||||
*/
|
||||
HASensorNumber(
|
||||
const char* uniqueId,
|
||||
const NumberPrecision precision = PrecisionP0
|
||||
const NumberPrecision precision = PrecisionP0,
|
||||
const uint16_t features = DefaultFeatures
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
@@ -73,6 +73,7 @@ const char HASwingModesProperty[] PROGMEM = {"swing_modes"};
|
||||
const char HAModesProperty[] PROGMEM = {"modes"};
|
||||
const char HATemperatureCommandTemplateProperty[] PROGMEM = {"temp_cmd_tpl"};
|
||||
const char HAPayloadOnProperty[] PROGMEM = {"pl_on"};
|
||||
const char HAExpireAfterProperty[] PROGMEM = {"exp_aft"};
|
||||
|
||||
// topics
|
||||
const char HAConfigTopic[] PROGMEM = {"config"};
|
||||
@@ -102,6 +103,7 @@ const char HATemperatureCommandTopic[] PROGMEM = {"temp_cmd_t"};
|
||||
const char HATemperatureStateTopic[] PROGMEM = {"temp_stat_t"};
|
||||
const char HARGBCommandTopic[] PROGMEM = {"rgb_cmd_t"};
|
||||
const char HARGBStateTopic[] PROGMEM = {"rgb_stat_t"};
|
||||
const char HAJsonAttributesTopic[] PROGMEM = {"json_attr_t"};
|
||||
|
||||
// misc
|
||||
const char HAOnline[] PROGMEM = {"online"};
|
||||
|
||||
@@ -73,6 +73,7 @@ extern const char HASwingModesProperty[];
|
||||
extern const char HAModesProperty[];
|
||||
extern const char HATemperatureCommandTemplateProperty[];
|
||||
extern const char HAPayloadOnProperty[];
|
||||
extern const char HAExpireAfterProperty[];
|
||||
|
||||
// topics
|
||||
extern const char HAConfigTopic[];
|
||||
@@ -102,6 +103,7 @@ extern const char HATemperatureCommandTopic[];
|
||||
extern const char HATemperatureStateTopic[];
|
||||
extern const char HARGBCommandTopic[];
|
||||
extern const char HARGBStateTopic[];
|
||||
extern const char HAJsonAttributesTopic[];
|
||||
|
||||
// misc
|
||||
extern const char HAOnline[];
|
||||
|
||||
@@ -140,6 +140,45 @@ AHA_TEST(BinarySensorTest, icon_setter) {
|
||||
)
|
||||
}
|
||||
|
||||
AHA_TEST(BinarySensorTest, expire_after_setter) {
|
||||
initMqttTest(testDeviceId)
|
||||
|
||||
HABinarySensor sensor(testUniqueId);
|
||||
sensor.setExpireAfter(60);
|
||||
|
||||
assertEntityConfig(
|
||||
mock,
|
||||
sensor,
|
||||
(
|
||||
"{"
|
||||
"\"uniq_id\":\"uniqueSensor\","
|
||||
"\"exp_aft\":60,"
|
||||
"\"dev\":{\"ids\":\"testDevice\"},"
|
||||
"\"stat_t\":\"testData/testDevice/uniqueSensor/stat_t\""
|
||||
"}"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
AHA_TEST(BinarySensorTest, expire_after_zero_setter) {
|
||||
initMqttTest(testDeviceId)
|
||||
|
||||
HABinarySensor sensor(testUniqueId);
|
||||
sensor.setExpireAfter(0);
|
||||
|
||||
assertEntityConfig(
|
||||
mock,
|
||||
sensor,
|
||||
(
|
||||
"{"
|
||||
"\"uniq_id\":\"uniqueSensor\","
|
||||
"\"dev\":{\"ids\":\"testDevice\"},"
|
||||
"\"stat_t\":\"testData/testDevice/uniqueSensor/stat_t\""
|
||||
"}"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
AHA_TEST(BinarySensorTest, default_state_false) {
|
||||
initMqttTest(testDeviceId)
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ static const char* testDeviceId = "testDevice";
|
||||
static const char* testUniqueId = "uniqueSensor";
|
||||
const char ConfigTopic[] PROGMEM = {"homeassistant/sensor/testDevice/uniqueSensor/config"};
|
||||
const char StateTopic[] PROGMEM = {"testData/testDevice/uniqueSensor/stat_t"};
|
||||
const char JsonAttributesTopic[] PROGMEM = {"testData/testDevice/uniqueSensor/json_attr_t"};
|
||||
|
||||
AHA_TEST(SensorTest, invalid_unique_id) {
|
||||
initMqttTest(testDeviceId)
|
||||
@@ -189,6 +190,64 @@ AHA_TEST(SensorTest, unit_of_measurement_setter) {
|
||||
)
|
||||
}
|
||||
|
||||
AHA_TEST(SensorTest, expire_after_setter) {
|
||||
initMqttTest(testDeviceId)
|
||||
|
||||
HASensor sensor(testUniqueId);
|
||||
sensor.setExpireAfter(60);
|
||||
|
||||
assertEntityConfig(
|
||||
mock,
|
||||
sensor,
|
||||
(
|
||||
"{"
|
||||
"\"uniq_id\":\"uniqueSensor\","
|
||||
"\"exp_aft\":60,"
|
||||
"\"dev\":{\"ids\":\"testDevice\"},"
|
||||
"\"stat_t\":\"testData/testDevice/uniqueSensor/stat_t\""
|
||||
"}"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
AHA_TEST(SensorTest, expire_after_zero_setter) {
|
||||
initMqttTest(testDeviceId)
|
||||
|
||||
HASensor sensor(testUniqueId);
|
||||
sensor.setExpireAfter(0);
|
||||
|
||||
assertEntityConfig(
|
||||
mock,
|
||||
sensor,
|
||||
(
|
||||
"{"
|
||||
"\"uniq_id\":\"uniqueSensor\","
|
||||
"\"dev\":{\"ids\":\"testDevice\"},"
|
||||
"\"stat_t\":\"testData/testDevice/uniqueSensor/stat_t\""
|
||||
"}"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
AHA_TEST(SensorTest, json_attributes_topic) {
|
||||
initMqttTest(testDeviceId)
|
||||
|
||||
HASensor sensor(testUniqueId, HASensor::JsonAttributesFeature);
|
||||
|
||||
assertEntityConfig(
|
||||
mock,
|
||||
sensor,
|
||||
(
|
||||
"{"
|
||||
"\"uniq_id\":\"uniqueSensor\","
|
||||
"\"json_attr_t\":\"testData/testDevice/uniqueSensor/json_attr_t\","
|
||||
"\"dev\":{\"ids\":\"testDevice\"},"
|
||||
"\"stat_t\":\"testData/testDevice/uniqueSensor/stat_t\""
|
||||
"}"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
AHA_TEST(SensorTest, publish_value) {
|
||||
initMqttTest(testDeviceId)
|
||||
|
||||
@@ -199,6 +258,26 @@ AHA_TEST(SensorTest, publish_value) {
|
||||
assertSingleMqttMessage(AHATOFSTR(StateTopic), "test123", true)
|
||||
}
|
||||
|
||||
AHA_TEST(SensorTest, publish_null_value) {
|
||||
initMqttTest(testDeviceId)
|
||||
|
||||
mock->connectDummy();
|
||||
HASensor sensor(testUniqueId);
|
||||
|
||||
assertTrue(sensor.setValue(nullptr));
|
||||
assertSingleMqttMessage(AHATOFSTR(StateTopic), "None", true)
|
||||
}
|
||||
|
||||
AHA_TEST(SensorTest, publish_json_attributes) {
|
||||
initMqttTest(testDeviceId)
|
||||
|
||||
mock->connectDummy();
|
||||
HASensor sensor(testUniqueId, HASensor::JsonAttributesFeature);
|
||||
|
||||
assertTrue(sensor.setJsonAttributes("{\"dummy\": 1}"));
|
||||
assertSingleMqttMessage(AHATOFSTR(JsonAttributesTopic), "{\"dummy\": 1}", true)
|
||||
}
|
||||
|
||||
test(SensorNumberTest, publish_value_on_connect) {
|
||||
initMqttTest(testDeviceId)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user