npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

node-red-contrib-homie-convention

v0.1.9

Published

Node-RED nodes for MQTT communication according to the MQTT HOMIE convention

Downloads

16

Readme

node-red-contrib-homie-convention

logo

introduction

The Homie convention defines a standardized way of how IoT devices and services announce themselves and their data on the MQTT broker.

It is thereby a crucial aspect on top of the MQTT protocol for automatic discovery, configuration and usage of devices and services.

Details of the homie convention are available here https://homieiot.github.io/

This node is tested with version 4.0.0 of the Homie convention but should work with version 3.0.x too.

important: mqtt messages have to be stored as retained messages on the mqtt broker

please check here how to configure mosquitto if necessary

BETA version! Please raise an issue on github if you run into any problems. Every support counts. For questions, ideas and feature request please use the Node-RED forum

Thank you in advance.

latest update

complete changelog see end of file

  • 0.1.8 bugfixes for homie node sending undefined playload deletes topic
  • 0.1.7 bugfixes for homie node and some minor improvements
  • 0.1.3 beta: homie node New node to enable Node-RED to act like a homie device. Node-RED can advertize nodes and properties to the outside to enable other devices to be informed about values of Node-RED or send commands.
  • 0.1.2 beta: homie state node emits full msg.state object for msg.payload=deviceId or sg.payload="[any]". If msg.payload is empty the node config is used. msg.broker can be specified in a multi broker environment with duplicate device names.
  • 0.1.0 beta: several bug fixes. New homie state node.
  • 0.0.7 bug fix: message occasionally carry the wrong topic (when using msg.topic=msg.label)

concept

Announcements for devices/nodes/properties are stored on the mqtt broker as retained messages or sent "live". The homie-convention node collects the retained messages and makes it easy to select the property of interest. Additional attributes can be translated to useful messages to configure dashboard nodes. The node sends messages received on the input to the configured property. It also tries to convert data types if possible.

nodes

homie-broker-config node (BETA)

Config node to define the connection between Node-RED and the MQTT-Broker. Beside the standard MQTT-Broker the basic parameters to announce Node-RED as a homie device like rood topic, $name friendly name and device ID are specified here

you can find detailed information here

homie-device node (BETA)

homie-device node

Main node for receiving updates form devices or sending /set commands to properties. Auto detect and features to control dashboard widgets are included. For detailed information you find below. you can find detailed information here

homie-state node (early BETA)

homie-state node

Node to receive configuration data from homie devices and regular status updates you can find detailed information here

homie-node node (early BETA)

homie-state node

Node for Node-RED offering services as a homie device you can find detailed information here

homie device configuration

The nodes uses one configuration node to define the mqtt broker to be used

parameter | description ----------|------------ Name | Optionally specify a name Broker | Select the mqtt broker where your device is sending messages to.

broker configuration

First a broker has to be configured. Enter IP-Address and port number and give it an unique name.

homie broker

parameter | description ----------|------------ MQTT host | IP address of the broker MQTT port | Port number Username | username to access the broker Password | password to get access Encryption | set SSL/TLS encryption if available root topic | root topic, should not be changed Homie name | name to identify this instance of Node-RED Device name | name of this device / configuration global context | check if you like a copy of the homie configuration tree to be put into the global context store. The context store can accessed by other function nodes to make use of homie data directly using global.get("homieStore"). The root of the object is the name of the broker so multiple brokers can be used.

global context

basic configuration

basic configuration

parameter | description ----------|------------ Settable | Properties list will only show settable properties. Is selected wildcards for properties are not possible Device | Optionally select the device to address. If specified, it filters messages messages from a specific device. Wildcard [any] possible. Node | Optionally select the node to address. If specified, it filters messages messages from a specific device. Wildcard [any] possible. Property | Optionally select the property to address. If specified, the node only emmits updates from a specific property. It is necessary to specified individual name for settable properties.

item list

All items which pass the filter depending on the settings devices, nodes, properties and the settable flag are listed here. Know property configuration is listed. Problems are marked with (?) and error descriptions can be found here too.

dashboard configuration

The homie node can do the configuration of dashboard nodes according to the information provided through the auto-discover functionality. A Message will be sent as soon as all necessary data was received.

Typically dashboard items which can send values like buttons or sliders are wired as a feedback loop

dashboard flow 01

IMPORTANT WARNING: make sure to deselect If msg arrives on input, set slider to new payload value: otherwise you can create a infinite loop flooding your devices and mqtt broker. dashboard flow 01 If this happens restart node-red with -save flag and deselect tis option before starting the flow.

predicted states

The homie convention defines a topic for sending original information to the broker and one for sending settable information to a parameter .../parameter/set

  • a sensor device sends data to the .../parameter topic i.e. a new temperature measurement
  • a controller sends data to the .../parameter/set topic to manipulate data i.e. a new dimmer value of light bulb.
  • the device confirms the new .../set value by sending the new value to .../parameter to inform the controller (and all others who are subscribed to this topic) about the new value.

The state between sending data to the ../parameter/set topic and receiving the new value on ../parameter is the predicted state. Node-RED predicts the new value but don't know if it actually arrived on the device or it was even possible to fullfil the request. Only when a new value arrive on .../parameter the predicted flag is removed. The new value is not necessarily the same as the send value. It can be limited by boundary check by the device, rejected or altered by another input in the meantime.

This mechanism makes it possible to determine if the value was send by a controller a to the device or if the values origin is the device itself and therefore so has a good chance to be the actual state of the device.

This logic is currently not (or only partially) implemented in the dashboard nodes by default. The homie-convention-node tries to implement this by using the msg.ui_control object. As the capabilities of each dashboard node differs the destination node has to be selected.

dashboard node

parameter | description ----------|------------ Node | select the type of node you like to connect to the output. Individual options will appear. Most of the options are set by using the ui_control object.

button

You can set the foreground and background color together with a tooltip text and an font awesome 4.7 icon.

dashboard button

parameter | description ----------|------------ Label | Color of the label text Background | Background color of the button Tooltip | Tooltip if user hoovers over the element. Needs reload of the dashboard to appear.

button as switch

You can set the foreground and background color together an ON and OFF color. If you like you can use colors for the state between sending a payload to your device and a value arriving on the input. This way non confirmed states can be indicated. A tooltip text and an font awesome 4.7 icon can be specified.

dashboard button as switch

parameter | description ----------|------------ Label | Color of the label text Background | Background color of the button without known state ON | color for true/on state OFF | color for false/off state predicted ON | check if you want that the button have this color when set to ON until a new state on the input arrives predicted OFF | check if you want that the button have this color when set to OFF until a new state on the input arrives Tooltip | Tooltip if user hoovers over the element. Needs reload of the dashboard to appear.

button as switch can now be used for boolean $datatype values. Send msg.payload="toggle" to switch current state

chart

The min and max values received by the homie $format attribute can be used to limit the Y-axis range. Use the msg.label feature to name the individual curves if you have selected wildcards in the basic configuration tab. dashboard button

parameter | description ----------|------------ min max | use $format parameter to set ui_control.max and ui_control.min

color picker

parameter | description ----------|------------ format | use $format to set ui_control.format to rgb or hsv

dropdown

parameter | description ----------|------------ format | use $format to fill option list

gauge, numeric, slider

dashboard gauge

parameter | description ----------|------------ min max | use $format parameter to set ui_control.max and ui_control.min

switch

dashboard switch

parameter | description ------------------|------------ ON | color for true/on state OFF | color for false/off state predicted| use predicted state after sending new message until a new value received on the input predicted ON | optional color and icon for ON predicted state predicted OFF | optional color and icon for ON predicted state Tooltip | Tooltip if user hoovers over the element. Needs reload of the dashboard to appear. ON icon| optional icon for true/on state OFF icon| optional icon for false/off state

text

dashboard text

parameter | description ----------|------------ format | use $unit for {{value}} $unit if available

text input

no ui_control parameters useful

label

dashboard label

parameter | description ----------|------------ msg.label | Select add label (i.e. for chart ui node) select which attribute should be used as a label. custom label| Enter a custom Label msg.topic | copy the label to msg.topic msg.topic | copy the label to msg.payload. Only for startup messages.

extra configuration

Additional information like timing, errors and attributes can be added to the msg object

parameter | description ----------|------------ msg.timing | Select to receive timing information. msg.error | Select to receive error information. All Errors will be sent on 2nd output msg.attributes | Select to receive attributes information.

inputs

The payload on the input will be sent to the mqtt broker. The topic is either specified by msg.topic or by the homie node configuration. Wildcards are possible for devices and nodes. If wildcards are used multiple messages will be set. The msg.topic should be formated as device/node/property. The rood topic homie and the /set postfix will be added.

The input format of msg.payload is compatible to the supported dashboard nodes. The node tries to convert not homie compatible formats automatically. If the conversion fails a error message will be sent via the error output.

parameter | type | description ----------|------|------------ payload | number,string,buffer | the payload of the message to send to the homie device. topic | string | the homie topic to publish to. This can override the node configuration. If empty the node settings will be used. If not matching a known property topic will be ignored.

outputs

standard output

parameter | type | description ----------|------|------------ msg.payload| string, number | the standard output of a sucsessfull received message. Depending on the datatype as a string or number. msg.message| string | original message received by the mqtt client msg.value| number | Numeric value of the message. Im case of enum properties the index of the selected item.

additional output if selected

parameter | type | description ----------|------|------------ msg.topic | string| Topic of the value deviceID/nodeID/propertyID. msg.device| string | Name of the device the message came from msg.node| string | Name of the node the message came from msg.property| string | Name of the property emitting this message msg.attributes.datatype | string | value of the $datatype attribute. msg.attributes.format | string | value of the $format attribute. msg.attributes.unit | string | value of the $unit attribute. msg.timing.timeReceived | timestamp | unix timestamp when a message was received msg.timing.interval | number | time in milliseconds since the last update was received. msg.timing.msgCounter | number | number of update since last restart. msg.error.state | string | "ok", "warn", "error". msg.error.text | string | Error message. msg.label | string | Label property as defined in the node configuration. Useful for chart UI node.

example output

error

parameter | type | description ----------|------|------------ payload | object | Error message if an error accrued while receiving or converting a message.

references

  • Homie Convention - full specification of the Homie Convention
  • GitHub - the github repository of the homie-convention-node

to do / limitations

  • [X] make it 1.0 compatible it is now usable
  • [ ] make it fully 1.0 compatible further tests requited
  • [X] ~~Use the Build in MQTT client~~ basic authentication ( user /password) and SSL/TLS encryption BETA
  • [ ] able to use websocket for mqtt.
  • [ ] detect offline nodes by checking the interval of received messages
  • [X] make use of the $state attribute
  • [X] implement extensions
  • [ ] special node to make Node-RED a homie device announcing services
  • [ ] write the documentation in good english as I'm not a native speaker, sorry.
  • [ ] update documentation to new features
  • [ ] add some "real life" examples to documentation

bugfixes & feature updates

0.1.2

  • home state node emits full msg.state object for msg.payload=deviceId or sg.payload="[any]". If msg.payload is empty the node config is used. msg.broker can be specified in a multi broker environment with duplicate device names.

0.1.0

  • new feature: New state node
  • bug fixes: Several bug fixes

0.0.7

  • bug fix: message occasionally carry the wrong topic (when using msg.topic=msg.label)

0.0.6

  • button as switch can now be used for boolean $datatype values. Send msg.payload="toggle" to switch current state

0.0.5

  • bug fix: mqtt broker credentials not saved correctly
  • bug fix: duplicate entries in dropdown lists

0.0.4

  • bug fix: undefined extension items in property list

0.0.3

*First BETA release with encrypted communication enabled. Tested with mosquitto with self signed ca.crt only. Beta testers welcome.

Please check your configuration with the core mqtt node first.

It uses the same mqtt module as the core mqtt node. The design is a little bit different. The tls config node can be used. If the core mqtt node works it should work here to.

  • added basic username / password authentication
  • added SSL/TLS encryption

0.0.2

  • compatibility to Node-RED 1.0.x - not in detail but it works for now
  • "multi select" dropdown lists seams not to work oi Node-RED V1.x.x > use standard dropdown now until a working version of searchable dropdown boxes is found
  • duplicates in some dropdown lists > fixed
  • moved console logs when new messages arrive to trace to keep the log "info" log clean.
  • some typos fixed.
  • bug fix: Mixed order of mqtt messages or "incorrect" topics cause runtime to crash see issue #1
  • compatibility to Homie 3.0.x ($stats, $firmware and $implementation)
  • compatibility to Homie 4.0.0 extensions (not complete)
  • lot of bugfixes ...