BACnet Support

Looks good. Did you consider running HA on Docker Containers where you might have a better chance of configuring Docker connectivity to host mode?

Hi GravySeal,

I tried to install the dev version of Bepacom but it fails to install, even after a restart of HA. I can reinstall the release version without issue. Here is the dev install fail message:

Failed to install add-on
The command '/bin/bash -o pipefail -c apk add --no-cache nginx python3 py3-pip py3-setuptools py3-wheel && pip3 install --no-cache-dir --upgrade pip 'bacpypes3<=0.0.79' 'fastapi<=0.103.1' 'jinja2<=3.1.2' 'uvicorn<=0.23.2' 'websockets<=11.0.3' 'python-multipart<=0.0.6'' returned a non-zero code: 1

ā€¦ BTW, my adapter name is Wi-Fi

Hey Gravy,
I am having some trouble isntalling this. I have BACnet devices and wanted to see if they would talk through this programming. I installed the .zip file and unzipped it through SSH but I cannot seem to find the addon. Kind of a newbie with all this programming stuff. Let me know if you have any ideas. Thanks!

Hey @btingles,

Are you using Home Assistant OS or supervised?
For the installation, you should go to Settings>Add-Ons>Add-On Store.
In the top right select the settings icon and open the Repositories setting. There you can paste the link to the repository:

When you refresh the page, the repository should appear as ā€œBepacom Add-on Repositoryā€ below Official Add-Ons. There you can select to install the regular version like any other add-on.

If everything works correctly with the add-on, you can install the complementary integration. This is only after youā€™ve verified you can see all the BACnet devices you need in the web UI of the add-on. Feel free to DM me for more help!

Installed the add-on.
I see the BAKnet data I need.
I donā€™t understand what to do next so that this data appears in Home Assistant. Tell?

1 Like

I think I reproduced this with home assistant supervised in both dev and normal version.

s6-rc: info: service fix-attrs: starting
s6-rc: info: service base-addon-log-level: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service base-addon-log-level successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service init-nginx: starting
s6-rc: info: service init-interface: starting
[23:54:03] INFO: Initialising NGINX
[23:54:03] INFO: Generating BACpypes.ini
[23:54:03] INFO: Initialising NGINX - array read...
s6-rc: warning: unable to start service init-nginx: command exited 1
[BACpypes]
objectName: EcoPanel
address: 0.0.0.0/0
objectIdentifier: 420
maxApduLengthAccepted: 1476
segmentation: segmentedBoth
vendorIdentifier: 15
foreignBBMD: -
foreignTTL: 255
maxSegmentsAccepted: 64
loglevel: DEBUG
defaultPriority: 15
updateInterval: 60
s6-rc: info: service init-interface successfully started
s6-rc: info: service interface: starting
s6-rc: info: service interface successfully started
/run/s6/basedir/scripts/rc.init: warning: s6-rc failed to properly bring all the services up! Check your logs (in /run/uncaught-logs/current if you have in-container logging) for more information.
/run/s6/basedir/scripts/rc.init: fatal: stopping the container.
s6-rc: info: service interface: stopping
[23:54:03] INFO: Service BACnet Interface exited with code 256 (by signal 15)
s6-rc: info: service interface successfully stopped
s6-rc: info: service init-interface: stopping
s6-rc: info: service init-interface successfully stopped
s6-rc: info: service legacy-cont-init: stopping

Oddly nginx seems to start when I try to manually start the containerā€¦

root@ha01:/home/jayme# docker run -it ghcr.io/bepacom-raalte/amd64-bacnet-interface:1.1.3
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service base-addon-banner: starting
curl: (6) Could not resolve host: supervisor
[05:21:22] ERROR: Something went wrong contacting the API
s6-rc: info: service base-addon-banner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service base-addon-log-level: starting
s6-rc: info: service fix-attrs successfully started
curl: (6) Could not resolve host: supervisor
[05:21:22] ERROR: Something went wrong contacting the API
s6-rc: info: service base-addon-log-level successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service init-nginx: starting
s6-rc: info: service init-interface: starting
[05:21:22] INFO: Generating BACpypes.ini
[05:21:22] INFO: Initialising NGINX
s6-rc: info: service init-nginx successfully started
[BACpypes]
objectName: null
address: null/24
objectIdentifier: null
maxApduLengthAccepted: 1476
segmentation: segmentedBoth
vendorIdentifier: 15
foreignBBMD: -
readarray -t eth_adapters < <(ifconfig -a | grep -oE '^(enp|eth|eno|wl)[a-z0-9]+')

is ifconfig the right thing to use here?

@jaymemaurice @cerveza_stalone
I canā€™t, for the love of me, use that Node in Node Red.
I can connect to my Trend device with Yabe and I get these:

So, about the Trend device have these data:

  • IP: 192.168.45.65
  • port: 47808
  • device ID: 1001
  • various Objects ID

The node Iā€™m using is node-red-contrib-bacnet, In the node ā€œSimple Readā€ what should I put in there fields?

Whatā€™s an instance?
Should I put the Trend IP in the Device os in the Client? I have just 1 BacNet device, what should I put in the other?
Thanks in advance!

Itā€™s confusing eh?
Create an instance for each instantiation of an ID you want to read - in my use I have a thermostat connected to a Delta BASā€¦ I want to read the thermostat/co2/binary state of motion sensor etcā€¦
each of these things are an ā€œinstanceā€ of something to read I guess.
The name doesnt seem to matter. Eg. LinkNet1BathroomTemp isnt anywhere in my Delta configuration. What is important is my thermostat variable for Temperature is 101.
Type is the type of bacnet variable - eg 0 is integeranalog-input, 5 binary-input etc. this lives in some standards doc - why this isnt configured as part of the ā€œinstanceā€ I couldnā€™t tell you. Why the type isnā€™t an enumerated drop downā€¦ not sureā€¦ Perhaps I donā€™t understand this well enough??
Device is the device ID you are querying I thinkā€¦ in my case my BAS is 100 and all the thermostats connect over it so it has all the variables available in its GCL.
Client is the node red serverā€™s bacnet instance you are creating here and all your simple reads will probably share the same client.

1 Like

sorry type 0 is ā€œanalog inputā€ so here in my BAS I have Master_SPT which is 100.AI101 which is instance 101 object type 0ā€¦ there is no other 100.101(type 0) but there may be other 100.101ā€™s of other type like Binary Variable or Binary Input etc.

So /you/ from your example should be able to query device id 1001 for type 0 instance ID 1 7 8 35 36 etc.

In my screenshot I can get my humidity from device 100 instance 102 type 0. In my delta the first linknet connected thermostat connected to the bas is 100, second at 200 etc. and AI 1-7 are physical GPIO on the board itself. I have an application controller that connects via rs485 and gets itā€™s own ID and has itā€™s on analog inputs and outputsā€¦ an can also have more linknet devices connected to itā€¦

And it seems the plugin defaults to type of 8 which from my research is type ā€œDeviceā€


Not very helpful but you might be able to read type 8 instance at 1001 from device 1001ā€¦ probably everyone using this plugin will be querying types 0 though 5.

This document seems to cover the types:

Not sure if you are still interested in this topicā€¦ I have a same setup from one of my client who uses daikin VRV. We added a bacnet gateway from daikin. To integrate with homeassistant(since there is no bacnet support back then), we written a script in Python using FastAPI as a gateway from bacnet to RestApi.

1 Like

Iā€™m getting somewhere: I kept getting ā€œERR_TIMEOUTā€ because I had YABE always open.
Now (with YABE) closed, I get Error: BacnetAbort - Reason:5.
I see that youā€™re talking about Instance ID (which in my case is 1001), but I canā€™t find where to put it.
This is my setup:
image

Thanks again!

Iā€™d like to take a look at your script!

I am unfortunately unable to share the complete project as it is stored in the company codebase. But if you are able to provide a couple of screenshot with the objects using BDT(bacnet discovery tool), I should be able to mock a script which acts as a gateway for bacnet and restapi

Where you have type ANALOG_INPUT put the integer 0
Edit device ā€œTrendā€ and put 1001 for itā€™s name and put the IP of the BACnet interface on the device.

It looks like bepacom add-in has been fixed for me in the dev version.
If you have bridge interfaces on your supervised home assistant to run KVM VMs, you will need the latest version or you will get the problem I encountered starting ngnix :slight_smile:

I am going to be using this add-on instead of Node Red because it automagically adds each bacnet entity and subscribes to CoV rather than polling. Looks like this might be the best thing next to native bacnet in home assistant and I am very greaful to the developers for the work they have done for the community.

1 Like

Solved, THANKS!!!
I didnā€™t have to use the device ID 1001. Iā€™ve solved it over the weekend andā€¦I really donā€™t remember what Iā€™ve changed that made it works :man_facepalming
Thanks for your tips!

Currently having issues with detecting devices (alerton vlca-1688) with Bepacom Development version, its detected the device in the logs, however has returned errors, Anything to try?

log below:

KeyError: ā€˜device:2000ā€™
ERROR: An error occurred: ā€˜IAmRequestā€™ object has no attribute ā€˜apduInvokeIDā€™
WARNING: Invalid HTTP request received."