When I tried to use it for my first real-world project, I ran into the following issue, though.
The device has 9 nodes with two properties each (9 motors with speed and direction property).
The problem is that the device tries to publish its nodes and its properties during startup but never accomplishes it since the connection is lost and the property publishing starts all over again.
I first thought it's a problem of my nodes, but I managed to reproduce the issue with the led example.
import settings
from machine import Pin
from homie.constants import FALSE, TRUE, BOOLEAN, INTEGER
from homie.device import HomieDevice
from homie.node import HomieNode
from homie.property import HomieProperty
class LED(HomieNode):
# Reversed values for the esp8266 boards onboard led
ONOFF = {FALSE: 1, TRUE: 0}
def __init__(self, id=0, name="Onboard LED", pin=0):
super().__init__(id="led%d" % id, name=name, type="LED")
self.p_power = HomieProperty(
id="power",
name="LED Power",
settable=True,
datatype=BOOLEAN,
default=FALSE,
on_message=self.on_power_msg,
)
self.add_property(self.p_power)
self.directionProperty = HomieProperty(
id="direction",
name="direction",
settable=True,
datatype=INTEGER,
default=30,
on_message=self.direction_msg,
)
self.add_property(self.directionProperty)
def on_power_msg(self, topic, payload, retained):
print("power_msg %s" % self.id)
def direction_msg(self, topic, payload, retained):
print("direction_msg %s" % self.id)
def main():
# Homie device setup
homie = HomieDevice(settings)
# Add LED node to device
homie.add_node(LED())
homie.add_node(LED(1, "LED 1"))
homie.add_node(LED(2, "LED 2"))
homie.add_node(LED(3, "LED 3"))
homie.add_node(LED(4, "LED 4"))
homie.add_node(LED(5, "LED 5"))
homie.add_node(LED(6, "LED 6"))
homie.add_node(LED(7, "LED 7"))
homie.add_node(LED(8, "LED 8"))
homie.add_node(LED(9, "LED 9"))
homie.add_node(LED(10, "LED 10"))
homie.add_node(LED(11, "LED 11"))
# run forever
homie.run_forever()
if __name__ == "__main__":
main()
CONNECTION HANDLER!
MQTT SUBSCRIBE: devices/microhomie1/$mpy
MQTT PUBLISH: devices/microhomie1/$homie --> b'4.0.0'
MQTT SUBSCRIBE: devices/microhomie1/led0/power
MQTT SUBSCRIBE: devices/microhomie1/led0/direction
MQTT SUBSCRIBE: devices/microhomie1/led1/power
MQTT SUBSCRIBE: devices/microhomie1/led1/direction
MQTT SUBSCRIBE: devices/microhomie1/led2/power
MQTT SUBSCRIBE: devices/microhomie1/led2/direction
MQTT SUBSCRIBE: devices/microhomie1/led3/power
MQTT SUBSCRIBE: devices/microhomie1/led3/direction
MQTT SUBSCRIBE: devices/microhomie1/led4/power
MQTT SUBSCRIBE: devices/microhomie1/led4/direction
MQTT SUBSCRIBE: devices/microhomie1/led5/power
MQTT SUBSCRIBE: devices/microhomie1/led5/direction
MQTT SUBSCRIBE: devices/microhomie1/led6/power
MQTT SUBSCRIBE: devices/microhomie1/led6/direction
MQTT SUBSCRIBE: devices/microhomie1/led7/power
MQTT SUBSCRIBE: devices/microhomie1/led7/direction
MQTT SUBSCRIBE: devices/microhomie1/led8/power
MQTT SUBSCRIBE: devices/microhomie1/led8/direction
MQTT SUBSCRIBE: devices/microhomie1/led9/power
MQTT SUBSCRIBE: devices/microhomie1/led9/direction
MQTT SUBSCRIBE: devices/microhomie1/led10/power
MQTT SUBSCRIBE: devices/microhomie1/led10/direction
MQTT SUBSCRIBE: devices/microhomie1/led11/power
MQTT SUBSCRIBE: devices/microhomie1/led11/direction
MQTT PUBLISH: devices/microhomie1/$name --> b'microhomie1'
MQTT SUBSCRIBE: devices/microhomie1/led0/power/set
MQTT MESSAGE: devices/microhomie1/led0/power --> false, True
MQTT UNSUBSCRIBE: devices/microhomie1/led0/power
MQTT SUBSCRIBE: devices/microhomie1/led0/direction/set
MQTT MESSAGE: devices/microhomie1/led0/direction --> 30, True
direction_msg led0
MQTT UNSUBSCRIBE: devices/microhomie1/led0/direction
MQTT SUBSCRIBE: devices/microhomie1/led1/power/set
MQTT MESSAGE: devices/microhomie1/led1/power --> false, True
MQTT UNSUBSCRIBE: devices/microhomie1/led1/power
MQTT SUBSCRIBE: devices/microhomie1/led1/direction/set
MQTT MESSAGE: devices/microhomie1/led1/direction --> 30, True
direction_msg led1
MQTT UNSUBSCRIBE: devices/microhomie1/led1/direction
MQTT SUBSCRIBE: devices/microhomie1/led2/power/set
MQTT MESSAGE: devices/microhomie1/led2/power --> false, True
MQTT UNSUBSCRIBE: devices/microhomie1/led2/power
MQTT SUBSCRIBE: devices/microhomie1/led2/direction/set
MQTT MESSAGE: devices/microhomie1/led2/direction --> 30, True
direction_msg led2
MQTT UNSUBSCRIBE: devices/microhomie1/led2/direction
MQTT SUBSCRIBE: devices/microhomie1/led3/power/set
MQTT MESSAGE: devices/microhomie1/led3/power --> false, True
MQTT UNSUBSCRIBE: devices/microhomie1/led3/power
MQTT SUBSCRIBE: devices/microhomie1/led3/direction/set
MQTT MESSAGE: devices/microhomie1/led3/direction --> 30, True
direction_msg led3
MQTT UNSUBSCRIBE: devices/microhomie1/led3/direction
MQTT SUBSCRIBE: devices/microhomie1/led4/power/set
MQTT MESSAGE: devices/microhomie1/led4/power --> false, True
MQTT UNSUBSCRIBE: devices/microhomie1/led4/power
MQTT SUBSCRIBE: devices/microhomie1/led4/direction/set
MQTT MESSAGE: devices/microhomie1/led4/direction --> 30, True
direction_msg led4
MQTT UNSUBSCRIBE: devices/microhomie1/led4/direction
MQTT SUBSCRIBE: devices/microhomie1/led5/power/set
MQTT MESSAGE: devices/microhomie1/led5/power --> false, True
MQTT UNSUBSCRIBE: devices/microhomie1/led5/power
MQTT SUBSCRIBE: devices/microhomie1/led5/direction/set
MQTT MESSAGE: devices/microhomie1/led5/direction --> 30, True
direction_msg led5
MQTT UNSUBSCRIBE: devices/microhomie1/led5/direction
MQTT SUBSCRIBE: devices/microhomie1/led6/power/set
MQTT MESSAGE: devices/microhomie1/led6/power --> false, True
MQTT UNSUBSCRIBE: devices/microhomie1/led6/power
MQTT SUBSCRIBE: devices/microhomie1/led6/direction/set
MQTT MESSAGE: devices/microhomie1/led6/direction --> 30, True
direction_msg led6
MQTT UNSUBSCRIBE: devices/microhomie1/led6/direction
MQTT SUBSCRIBE: devices/microhomie1/led7/power/set
MQTT MESSAGE: devices/microhomie1/led7/power --> false, True
MQTT UNSUBSCRIBE: devices/microhomie1/led7/power
MQTT SUBSCRIBE: devices/microhomie1/led7/direction/set
MQTT MESSAGE: devices/microhomie1/led7/direction --> 30, True
direction_msg led7
MQTT UNSUBSCRIBE: devices/microhomie1/led7/direction
MQTT SUBSCRIBE: devices/microhomie1/led8/power/set
MQTT MESSAGE: devices/microhomie1/led8/power --> false, True
MQTT UNSUBSCRIBE: devices/microhomie1/led8/power
MQTT SUBSCRIBE: devices/microhomie1/led8/direction/set
MQTT MESSAGE: devices/microhomie1/led8/direction --> 30, True
direction_msg led8
MQTT UNSUBSCRIBE: devices/microhomie1/led8/direction
MQTT SUBSCRIBE: devices/microhomie1/led9/power/set
MQTT MESSAGE: devices/microhomie1/led9/power --> false, True
MQTT UNSUBSCRIBE: devices/microhomie1/led9/power
CONNECTION HANDLER!
MQTT SUBSCRIBE: devices/microhomie1/$mpy
MQTT PUBLISH: devices/microhomie1/$homie --> b'4.0.0'
MQTT SUBSCRIBE: devices/microhomie1/led0/power
MQTT SUBSCRIBE: devices/microhomie1/led0/direction
MQTT SUBSCRIBE: devices/microhomie1/led1/power
MQTT SUBSCRIBE: devices/microhomie1/led1/direction
MQTT SUBSCRIBE: devices/microhomie1/led2/power
MQTT SUBSCRIBE: devices/microhomie1/led2/direction
MQTT SUBSCRIBE: devices/microhomie1/led3/power
MQTT SUBSCRIBE: devices/microhomie1/led3/direction
MQTT SUBSCRIBE: devices/microhomie1/led4/power
MQTT SUBSCRIBE: devices/microhomie1/led4/direction
MQTT SUBSCRIBE: devices/microhomie1/led5/power
MQTT SUBSCRIBE: devices/microhomie1/led5/direction
MQTT SUBSCRIBE: devices/microhomie1/led6/power
MQTT SUBSCRIBE: devices/microhomie1/led6/direction
MQTT SUBSCRIBE: devices/microhomie1/led7/power
MQTT SUBSCRIBE: devices/microhomie1/led7/direction
MQTT SUBSCRIBE: devices/microhomie1/led8/power
MQTT SUBSCRIBE: devices/microhomie1/led8/direction
MQTT SUBSCRIBE: devices/microhomie1/led9/power
MQTT SUBSCRIBE: devices/microhomie1/led9/direction
MQTT SUBSCRIBE: devices/microhomie1/led10/power
MQTT SUBSCRIBE: devices/microhomie1/led10/direction
MQTT SUBSCRIBE: devices/microhomie1/led11/power
MQTT SUBSCRIBE: devices/microhomie1/led11/direction
MQTT PUBLISH: devices/microhomie1/$name --> b'microhomie1'
CONNECTION HANDLER!
MQTT SUBSCRIBE: devices/microhomie1/$mpy
MQTT PUBLISH: devices/microhomie1/$homie --> b'4.0.0'
MQTT SUBSCRIBE: devices/microhomie1/led0/power
MQTT SUBSCRIBE: devices/microhomie1/led0/direction
MQTT SUBSCRIBE: devices/microhomie1/led1/power
MQTT SUBSCRIBE: devices/microhomie1/led1/direction
MQTT SUBSCRIBE: devices/microhomie1/led2/power
MQTT SUBSCRIBE: devices/microhomie1/led2/direction
MQTT SUBSCRIBE: devices/microhomie1/led3/power
MQTT SUBSCRIBE: devices/microhomie1/led3/direction
MQTT SUBSCRIBE: devices/microhomie1/led4/power
MQTT SUBSCRIBE: devices/microhomie1/led4/direction
MQTT SUBSCRIBE: devices/microhomie1/led5/power
MQTT SUBSCRIBE: devices/microhomie1/led5/direction
MQTT SUBSCRIBE: devices/microhomie1/led6/power
MQTT SUBSCRIBE: devices/microhomie1/led6/direction
MQTT SUBSCRIBE: devices/microhomie1/led7/power
MQTT SUBSCRIBE: devices/microhomie1/led7/direction
MQTT SUBSCRIBE: devices/microhomie1/led8/power
MQTT SUBSCRIBE: devices/microhomie1/led8/direction
MQTT SUBSCRIBE: devices/microhomie1/led9/power
MQTT SUBSCRIBE: devices/microhomie1/led9/direction
MQTT SUBSCRIBE: devices/microhomie1/led10/power
MQTT SUBSCRIBE: devices/microhomie1/led10/direction
MQTT SUBSCRIBE: devices/microhomie1/led11/power
MQTT SUBSCRIBE: devices/microhomie1/led11/direction
MQTT PUBLISH: devices/microhomie1/$name --> b'microhomie1'
CONNECTION HANDLER!
It then keeps looping...
I'm using version 3.0.2 and MicroPython version v1.14.