Range properties
In all the previous examples you have seen, node properties were advertised one-by-one (e.g. temperature
, unit
...). But what if you have a LED strip with, say, 100 properties, one for each LED? You won't advertise these 100 LEDs one-by-one. This is what range properties are meant for.
HomieNode stripNode("strip", "strip"); bool ledHandler(const HomieRange& range, const String& value) { Homie.getLogger() << "LED " << range.index << " set to " << value << endl; // Now, let's update the actual state of the given led stripNode.setProperty("led").setRange(range).send(value); } void setup() { stripNode.advertiseRange("led", 1, 100).settable(ledHandler); // before Homie.setup() }
On the mqtt broker you will see the following message show up:
topic message -------------------------------------------------------- homie/<device id>/strip/$type strip homie/<device id>/strip/$properties led[1-100]:settable
You can then publish the value on
to topic homie/<device id>/strip/led_1/set
to turn on led number 1.
See the following example for a concrete use case: