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:
LedStrip