New to Node-RED as well as MQTT/BACnet integration. We have an unusual use-case that we're attempting to Proof-Of-Concept, but have been hitting various speed bumps.
The ultimate goal is to have our endpoint devices (sensors, etc.) send their data to a local MQTT broker and then have that local broker send actionable output to a local BACnet appliance for further local processing before any output is ultimately sent to a cloud environment. We have the sensors and related MQTT gateway sending data TO our local MQTT broker, but we're having trouble figuring out the conversion step(s) to get the MQTT output properly converted to BACnet compatible inputs...
We've looked into all of the available BACnet-related node sets ( Library - Node-RED ), but haven't been able to get things properly configured to this point.
Do any of you have experience converting MQTT TO BACnet??? If so, would you be willing to share your related wisdom and suggestions? Thanks in advance and have a great weekend!!!
I apologize for playing detective here (and more so if I am wrong), but this by any chance isn't related to a recent post of an almost identical subject is it in our jobs category (kindly linked below)?
Its just interesting that an extremely similar requirement has come about.
Do you care to share a little more about your unusual use-case?
What does your inbound data look like?
Into what format must it be converted?
Does one incoming message produce one outbound, or is some kind of storage/aggregation required?
Yes, apparently - I was not aware that that had been posted to the jobs board here, but that is indeed a post from the business owner.
In any case, what would be most helpful (in my opinion) at least in the short-term would be if there are example flows where folks have managed to work a similar conversion from MQTT TO BACnet locally -rather than from local BACnet TO MQTT broker in the cloud - so that we can determine whether we're just missing something in the configuration or whether there is a fundamental misunderstanding of the capabilities of Node-RED to facilitate our use-case.
Would you have any suggestions to that end? Thanks!
Initially, we were just looking at the raw sensor data coming into a simple Node-RED flow to evaluate how we would need to handle it (and to determine the necessary format conversions) to feed it through the local MQTT broker to local BACnet. We hadn't yet solidified our topics structure or message content scope, since this is largely a Proof-Of-Concept effort to this point.
My understanding of the intended data flow suggests that this would be a one-way, one message in to one message out setup - though that could potentially change over time if the use-case is modified. So, no persistent storage requirement that I am aware of currently given that the flow will essentially drive a near-real time processing/reporting capability further downstream.
Yeah, as I mentioned in the original post, we've looked at this and the other available BACnet-related node sets, but haven't been able to get things flowing the way we're envisioning - so, the question is whether we're simply not configuring things properly OR is it a matter of Node-RED not being able to facilitate the use-case at all (to this point)?
That's where I'm lost currently. So, a working example of something similar would be very helpful in determining where the disconnect may be...
Well I'm quite sure you are familiar with the way MQTT works but your original post
... have our endpoint devices (sensors, etc.) send their data to a local MQTT broker and then have that local broker send actionable output to a local BACnet appliance
implies you are expecting the MQTT broker to reformat data and pass it on to the BACnet appliance.
In fact of course the reformatting would be within Node-red, Something like this.
WIthout an actual example of an incoming message and the outbound message[s] to generate from it, it's hard to create a working example. (Also I do not know BACnet).
To clarify, we know that the Broker itself cannot reformat the data - that's what Node-RED is for, as you reiterated. It's the "Reformat within Node-red" step(s) that we're having trouble figuring out.
Our local Broker is running on a Raspberry Pi (at least for PoC testing) with the latest version of Node-RED also installed there.
We're currently testing NCD's sensors and MQTT Gateway device - which has an interesting MQTT output format referenced here in the device documentation under Message Settings and Token Definitions: https://ncd.io/wifi-micro-gateway-setup-mqtt/
NOTE: Sensor_Data This token will embed the data from the sensor as needed into the Sensor Message payload. Note that sensor data is a keyed JSON object.
The goal would be to convert and feed that Sensor payload data into local BACnet to support local processing... but all of the BACnet-related node sets that are currently available are less than intuitive in terms of configuration (at least for me with no BACnet experience aside from what has been explained to me recently).
And it may be that there are other Function nodes that need to be configured along with the BACnet-specific nodes for the flow to function the way we are envisioning, but I just don't know what those might be. So, to that end, do you have any ideas? What additional information would be helpful?
It is possible that BACnet specific nodes would help but I'm fairly sure they are not absolutely required.
It's simpler than you seem to think.
You may be over complicating your researches by trying to fit your requirement into what those nodes offer.
There are already multiple ways within node-red to construct messages in various formats.
A way that you might make some progress is to choose a simple BACnet function, perhaps to turn on a light (I have no idea what it can do).
In Node-red construct from scratch the message that will trigger that function. ie no mqtt-in component to worry about.
This should get you used to manipulating data in Node-red. @marcus-j-davies' suggestion above should help.
Next write down all the sensor data messages you might receive and the rules for creating Bacnet messages.
eg bearing temp > 99 -- Increase oil pump.
node-bacnet-contrib-extended is new to me I've not used/tested it.
But it looks like it has all you need.
It is possible that BACnet specific nodes would help but I'm fairly sure they are not absolutely required.
I doubt this the case you just send any old msg to a BACnet device
So can help us to help you
Can you list the measurement the sensor reads e.g temp 0-40C and it's data type e.g. float/integer
With this we can then convert to BACnet object type
We also need the object list from the local appliance you can get this via YABE discovery tool.