2021-01-17 12:10:21 +01:00

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