48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
import uasyncio as asyncio
|
|
|
|
|
|
class BaseNode:
|
|
def __init__(self, id, name, type):
|
|
self.id = id
|
|
self.name = name
|
|
self.type = type
|
|
self.topic = None
|
|
self.device = None
|
|
self.properties = []
|
|
|
|
def set_topic(self):
|
|
self.topic = "{}/{}".format(
|
|
self.device.dtopic,
|
|
self.id,
|
|
)
|
|
|
|
def add_property(self, p, cb=None):
|
|
p.node = self
|
|
self.properties.append(p)
|
|
|
|
if cb:
|
|
p.on_message = cb
|
|
|
|
async def publish_properties(self):
|
|
"""General properties of this node"""
|
|
publish = self.device.publish
|
|
|
|
# Publish name and type
|
|
await publish("{}/$name".format(self.topic), self.name)
|
|
await publish("{}/$type".format(self.topic), self.type)
|
|
|
|
# Publish properties registerd with the node
|
|
properties = self.properties
|
|
await publish(
|
|
"{}/$properties".format(self.topic),
|
|
",".join([p.id for p in properties]),
|
|
)
|
|
|
|
# Publish registerd properties
|
|
for p in properties:
|
|
await p.publish_properties()
|
|
|
|
|
|
# Keep for backward compatibility
|
|
HomieNode = BaseNode
|