[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [mosquitto-dev] topic alias
|
> Hello and happy new year to everybody. I am using mosquitto in a home
> automation project, connecting multiple raspberry and controlling them
> from a central one using node-red.
I have a home automation running on a heterogenous network of rpi1a,
beaglebone green, rpi0w (recently) and I have an orange pi in the queue.
They all run a similar buildroot configured rootfs.
> Every raspberry produce or receive messages from/to his gpio ports with
> this mqtt topics:
> hostname/gpiox
> with minor variations.
I'd like to refer to my post on a different mailing list here:
https://lists.suckless.org/dev/1710/32430.html
I explained in that thread how to avoid gpio numbers.
Next step is a package mqttautomation of mine
(https://github.com/kurt-vd/mqttautomation), more specifically
mqttled & mqttinputevent, that takes configuration from retained
messages, and allow interaction with inputs/outputs.
if you feed the distributed system then following retained topics:
io/garagesensor/inputhw 'key:3 garage'
then the mqttinputevent program on the node with hostname 'garage'
will emit
io/garagesensor '0|1'
upon reception of key with number '3' on its assigned input event
(/dev/input/eventX).
likewise, mqttled will find a retained
io/garage/ledhw 'relay:p9.13 home'
and respond to
io/garage/set '0|1'
by writing 0 or 255 to /sys/class/leds/relay:p9.13/brightness
and sending a retained
io/garage '0|1'
There are 2 levels of indirection (or aliasing) here:
* the mapping between gpio's and leds and input event numbers
is handled via the devicetree overlay that is loaded.
btw, I load devicetree overlays now using the kernel mechanism.
I dislike very customized devicetree overlay loading using the RPI
bootloader, or even the beaglebone capemanager, it's all very
non-portable.
* The mapping between led names/input events and mqtt topics
is configured using retained messages.
This is my approach to a layered design.
This approach eliminates your need for for topic aliases.
> When i receive the messages in the central
> node-red i use them to automate various stuff. The problem is that my
> automation logic become cluttered with this topics that indicate not
> what is connected to it but which raspberry and gpio port.
> One solution to this problem could be to rename all the topics in the
> raspberrys to represent what is connected to it, but i don't really
> like that because
> a) i would lose the indication of where it is connected, which is
> really useful in case of problems, and
> b) that would mean continuously editing the many raspberry node-reds
> when i connect something new or change a port or stuff like that.
> A better solution would be to use topic forwarding, for example
> subscribing to the topic raspberry-a/gpio12 and forwarding every
> message to aquarium/moon-light. That would allow to have automation
> logic independent from the locations of the devices, but also keep that
> information for when it's needed.
> My worry is: how big is the performance penalty of having all topics
> subscribed and republished with different topics in mosquitto? keep in
> mind that the raspberry pi it's not the fastest machine around...
> Is there a better way to have this kind of topic aliasing?
If you care about execution speed, my super light C programs
perform better & boot faster than the average Node-Red thing I've seen.
I run linux+initramfs images of <16MB total.
If you want, I can add more detailed instructions. my mqtt tools
repository not yet very well documented.
I'm still developing some things around it.
Kurt