BACnet Support

Found solution!!! Wacnet : BACnet Explorer, Webserver and Toolkit (Free)

1 Like

For Reals!! BacNet is a must

I’d also love to see BacNet as an integration!

More info please. I would really love to see how to set this up, and got everything talking to home assistant!

+1 for Bacnet support. I have HRU system with TCP/IP gateway and BACnet as protocol.

Some good news: The dead BACnet Python library BACpypes over at SourceForge has been superseded by an activly maintained GitHub project.

Several maintainers and active development.

This makes it a lot more feasable to create an HA integration.

+1 for Bacnet. It would elevate Home Assistant to a tool for smaller public infrastructure like schools and conference centers.

+1 It’d be so much easier to monitor multiple custom points in one device . Like I want to use customizable controllers and IO, and not need a different z-wave device for every single point I want to monitor.

+1 for BACNet. Currently running a BACnet system (primarily HVAC) using ComfortClick. Would like to move it over to Home Assistant.

This could be very nice to have.

Yes PLEASE add BACnet support at least BACnet/IP. I got a ton of HVAC equipment that I would like to have access to the data on my Home Assistant that way I can display HVAC and lighting data all on my room touch display screens!! Also would love to be able to use the ZWave motion sensor to feed data back to the HVAC System to do set-point setback when rooms are not occupied. My chiller and air handlers all talk BACnet/IP natively (Its a house with commercial equipment, yes I went overboard designing it). I also got another house with split systems, energy recovery units and heatpump water heater that are all also BACnet/IP enabled that I would love to integrate everything all together into one system, Home Assistant.
This is my new project at both houses, adding Humidifiers (that are also BACnet/IP and BACnet MS/TP enabled. Dri-Steem Humidifier

1 Like

Does anyone have a workaround for this until there’s support?

Node-red has suport for BACNet.

Best regards

Georges

Does anyone have a BacNet Home Assistant NodeRed flow I could cheekily copy?

Hi I am new here…also new to Home Assistant. I’ve made a Python based BACnet rest API app with BAC0 which is a wrapper around BACpypes.

How would one go about making a home assistant BACnet gateway? Does that need to be done on Node Red? From my experience the JavaScript BACnet stacks were really hard to use…and seem under developed compared to Python, Java, or C BACnet stacks that are used quite a bit in industry.

It would be really cool to make a BACnet gateway that is auto-discovered by home assistant…what does that take?

I see there is a rest API feature for home assistant: REST API | Home Assistant Developer Docs

2 Likes

With Home Assistant, there will always be a million ways to do something. Herewith a few of the “official” ways in order of preference (most robust/desirable to least)

  1. Integrations - Home Assistant – the best most stable way
  2. https://hacs.xyz/
  3. Custom (outside HACS)

I would e happy to support test this for you if you need whichever path you choose to follow. you may decide to start testing on option 3 and then work your way up to option 1…

To add to what uiguy says:

  • Node Red is mentioned in this thread because it is available as an Add-on in Home Assistant (HA) and has BACnet support, so it could be used as a work-around for the lack of native support in HA

  • Home Assistant itself is natively Python (currently 3.10), and integrations are thus written using this. An integration created using BACpypes would thus be the way to go.

Hi there.
I have Delta BAS ← Node Red(poll) → HASS controlling the bathroom light from my thermostat’s occupancy sensor.
I have the GCL on the BAS doing the actual timer logic and just an binary variable which I periodically read which is like “BAS thinks light should be on”. This lets me set the delay timer on the keys for the thermostat.

Obviously there is a polling delay there. Native Bacnet would be nice. It would be super nice if the BAS could just read/write to a home assistant sensor which has a bacnet instance ID… eg. HASS owns the sensor state.

Alternatively having the ability to subscribe to changes on a remote bacnet instance would be cool…

Here is my ugly node red

[{"id":"c368f9ab7c5814f2","type":"function","z":"300fd127.935c9e","name":"bacnet write msg","func":"temp = msg.payload\n\nmsg.payload = {\n    // deviceIPAddress: '127.0.0.1'\n    values: [\n        {\n            // objectId: {type: 8, instance: 44301}, \n            values: [\n                {property: {id: 85, index: 4294967295 }, value: [{type: 4, value: temp}], priority: 8}\n            ]\n        }\n    ]\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":1100,"wires":[["4c7d2f950d0634a1"]]},{"id":"4c7d2f950d0634a1","type":"BACnet-Write","z":"300fd127.935c9e","name":"","objectType":"2","instance":"be63e3d0.b280c","valueTag":"4","valueValue":"","propertyId":"85","priority":"8","device":"202e679625630472","server":"977c5141.b0d14","multipleWrite":true,"x":940,"y":1100,"wires":[[]]},{"id":"0a0f20deb843587e","type":"api-render-template","z":"300fd127.935c9e","name":"Current Temp","server":"8df6c7ad.425b78","version":0,"template":" {{ state_attr(\"weather.home\", \"temperature\") }}","resultsLocation":"payload","resultsLocationType":"msg","templateLocation":"template","templateLocationType":"msg","x":400,"y":1160,"wires":[[]]},{"id":"2a4b378b34f58985","type":"looptimer","z":"300fd127.935c9e","duration":"10","units":"Second","maxloops":"10000","maxtimeout":"24","maxtimeoutunits":"Hour","name":"","x":180,"y":1120,"wires":[["0a0f20deb843587e","432521cd8a3ecf62","03de7c8a5c130430","80e6ceb90a4079e6","7973d71430d01c9d","e919402bac9fc3d8","50c47109ad7203ee","6f9d8dd7ae9b6427"],[]]},{"id":"bd7bd979109b18c9","type":"server-state-changed","z":"300fd127.935c9e","name":"","server":"8df6c7ad.425b78","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sun.sun","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"above_horizon","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":true,"ignorePrevStateUnknown":true,"ignorePrevStateUnavailable":true,"ignoreCurrentStateUnknown":true,"ignoreCurrentStateUnavailable":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":200,"y":1300,"wires":[["2a4b378b34f58985","db20195e12c8bb57"],["2a4b378b34f58985","db20195e12c8bb57"]]},{"id":"432521cd8a3ecf62","type":"api-render-template","z":"300fd127.935c9e","name":"Current Temp","server":"8df6c7ad.425b78","version":0,"template":" {{ states.sensor.prologue_sensor_2_9_t.state }}","resultsLocation":"payload","resultsLocationType":"msg","templateLocation":"template","templateLocationType":"msg","x":400,"y":1100,"wires":[["7190a78ab2acbb9b"]]},{"id":"03de7c8a5c130430","type":"api-render-template","z":"300fd127.935c9e","name":"Current Humidity","server":"8df6c7ad.425b78","version":0,"template":" {{ states.sensor.prologue_sensor_2_9_h.state }}","resultsLocation":"payload","resultsLocationType":"msg","templateLocation":"template","templateLocationType":"msg","x":410,"y":1040,"wires":[["80d0db2f31cfe040"]]},{"id":"7c0b8f997bc0ae48","type":"function","z":"300fd127.935c9e","name":"bacnet write msg","func":"temp = msg.payload\n\nmsg.payload = {\n    // deviceIPAddress: '127.0.0.1'\n    values: [\n        {\n            // objectId: {type: 8, instance: 44301}, \n            values: [\n                {property: {id: 85, index: 4294967295 }, value: [{type: 4, value: temp}], priority: 8}\n            ]\n        }\n    ]\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":1040,"wires":[["01570c0c7a402650"]]},{"id":"01570c0c7a402650","type":"BACnet-Write","z":"300fd127.935c9e","name":"","objectType":"2","instance":"11bdb6525d6b7785","valueTag":"4","valueValue":"","propertyId":"85","priority":"8","device":"202e679625630472","server":"977c5141.b0d14","multipleWrite":true,"x":940,"y":1040,"wires":[[]]},{"id":"80e6ceb90a4079e6","type":"BACnet-Read","z":"300fd127.935c9e","name":"Simple Read","objectType":"0","instance":"b8a9e1b45cc7d261","propertyId":"85","device":"202e679625630472","server":"977c5141.b0d14","multipleRead":false,"x":590,"y":1320,"wires":[["3145e0b3d23a76db"]]},{"id":"1ae953df842fddc3","type":"ha-entity","z":"300fd127.935c9e","name":"bacnet100_0_101","server":"8df6c7ad.425b78","version":2,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"bacnet100_0_101"},{"property":"device_class","value":"sensor"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"°C"},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"state":"payload.values.0.value","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"","outputPayloadType":"str","x":950,"y":1320,"wires":[[]]},{"id":"3145e0b3d23a76db","type":"function","z":"300fd127.935c9e","name":"","func":"msg.payload.values[0].value = msg.payload.values[0].value.toFixed(1);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":760,"y":1320,"wires":[["1ae953df842fddc3"]]},{"id":"f7726c8d7b59741d","type":"BACnet-Read","z":"300fd127.935c9e","name":"Simple Read","objectType":"3","instance":"d53065be96b0d751","propertyId":"85","device":"202e679625630472","server":"977c5141.b0d14","multipleRead":false,"x":930,"y":1620,"wires":[["8dd0b00935787d97"]]},{"id":"8dd0b00935787d97","type":"debug","z":"300fd127.935c9e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":1050,"y":1560,"wires":[]},{"id":"6b3ca8ff6c05a414","type":"BACnet-Read","z":"300fd127.935c9e","name":"Simple Read","objectType":"5","instance":"226ac22af2220500","propertyId":"85","device":"202e679625630472","server":"977c5141.b0d14","multipleRead":false,"x":590,"y":1500,"wires":[["d40fd07bcc19c39d"]]},{"id":"d40fd07bcc19c39d","type":"function","z":"300fd127.935c9e","name":"","func":"value=msg.payload.values[0].value\nmsg=undefined\nmsg={}\nif (value) {\n    msg.command=\"TurnOnRequest\"\n} else {\n    msg.command=\"TurnOffRequest\"\n}\nmsg.payload=value\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":760,"y":1500,"wires":[["43eeda1d5b715de7","d2afb5ffa3cd6faa"]]},{"id":"fcfd9f3cd1dd960b","type":"link out","z":"300fd127.935c9e","name":"Light","mode":"link","links":["3ddb8ccb049e6580"],"x":1435,"y":1440,"wires":[]},{"id":"db20195e12c8bb57","type":"looptimer","z":"300fd127.935c9e","duration":"1","units":"Second","maxloops":"86400","maxtimeout":"24","maxtimeoutunits":"Hour","name":"","x":400,"y":1500,"wires":[["6b3ca8ff6c05a414","3926141a81533fd9"],[]]},{"id":"7190a78ab2acbb9b","type":"rbe","z":"300fd127.935c9e","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":570,"y":1100,"wires":[["c368f9ab7c5814f2"]]},{"id":"80d0db2f31cfe040","type":"rbe","z":"300fd127.935c9e","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":570,"y":1040,"wires":[["7c0b8f997bc0ae48"]]},{"id":"7973d71430d01c9d","type":"BACnet-Read","z":"300fd127.935c9e","name":"Simple Read","objectType":"0","instance":"2bd276d43872b0a3","propertyId":"85","device":"202e679625630472","server":"977c5141.b0d14","multipleRead":false,"x":590,"y":1380,"wires":[["c3f2bbd556b2857c"]]},{"id":"c9a309e7f9d901b7","type":"ha-entity","z":"300fd127.935c9e","name":"bacnet100_0_103","server":"8df6c7ad.425b78","version":2,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"bacnet100_0_103"},{"property":"device_class","value":"sensor"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"%"},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"state":"payload.values.0.value","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"","outputPayloadType":"str","x":950,"y":1380,"wires":[[]]},{"id":"c3f2bbd556b2857c","type":"function","z":"300fd127.935c9e","name":"","func":"msg.payload.values[0].value = msg.payload.values[0].value.toFixed(1);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":760,"y":1380,"wires":[["c9a309e7f9d901b7"]]},{"id":"e919402bac9fc3d8","type":"BACnet-Read","z":"300fd127.935c9e","name":"Simple Read","objectType":"0","instance":"efe624301ee37b58","propertyId":"85","device":"202e679625630472","server":"977c5141.b0d14","multipleRead":false,"x":590,"y":1440,"wires":[["7d617cdb0eea1a87"]]},{"id":"f631c213f2e5c161","type":"ha-entity","z":"300fd127.935c9e","name":"bacnet100_0_104","server":"8df6c7ad.425b78","version":2,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"bacnet100_0_104"},{"property":"device_class","value":"sensor"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"ppm"},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"state":"payload.values.0.value","stateType":"msg","attributes":[],"resend":true,"outputLocation":"","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"","outputPayloadType":"str","x":950,"y":1440,"wires":[[]]},{"id":"7d617cdb0eea1a87","type":"function","z":"300fd127.935c9e","name":"","func":"msg.payload.values[0].value = msg.payload.values[0].value.toFixed(1);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":760,"y":1440,"wires":[["f631c213f2e5c161"]]},{"id":"43eeda1d5b715de7","type":"rbe","z":"300fd127.935c9e","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"command","topi":"topic","x":910,"y":1560,"wires":[["8dd0b00935787d97"]]},{"id":"d2afb5ffa3cd6faa","type":"rbe","z":"300fd127.935c9e","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"command","topi":"topic","x":910,"y":1500,"wires":[["ae1c348e6aaec942"]]},{"id":"dd39333e042898b7","type":"api-get-history","z":"300fd127.935c9e","name":"Humidity","server":"8df6c7ad.425b78","version":0,"startdate":"","enddate":"","entityid":"sensor.bacnet100_0_103","entityidtype":"is","useRelativeTime":true,"relativeTime":"20 min","flatten":false,"output_type":"array","output_location_type":"msg","output_location":"payload.humidity","x":580,"y":980,"wires":[["06871879cc6407d4"]]},{"id":"06871879cc6407d4","type":"function","z":"300fd127.935c9e","name":"Set Message","func":"//[[{\"entity_id\":\"sensor.bacnet100_0_103\",\"state\":\"46.4\",\"attributes\":{\"unit_of_measurement\":\"%\",\"friendly_name\":\"Master Bathroom Humidistat\",\"icon\":\"mdi:water-percent\",\"device_class\":\"sensor\"},\"last_changed\":\"2022-03-12T03:14:30.298000+00:00\",\"last_updated\":\"2022-03-12T03:14:30.298000+00:00\"},{\"entity_id\":\"sensor.bacnet100_0_103\",\"state\":\"46.2\",\"attributes\":{\"unit_of_measurement\":\"%\",\"friendly_name\":\"Master Bathroom Humidistat\",\"icon\":\"mdi:water-percent\",\"device_class\":\"sensor\"},\"last_changed\":\"2022-03-12T03:15:01.586734+00:00\",\"last_updated\":\"2022-03-12T03:15:01.586734+00:00\"},{\"entity_id\":\"sensor.bacnet100_0_103\",\"state\":\"46.1\",\"attributes\":{\"unit_of_measurement\":\"%\",\"friendly_name\":\"Master Bathroom Humidistat\",\"icon\":\"mdi:water-percent\",\"device_class\":\"sensor\"},\"last_changed\":\"2022-03-12T03:18:44.205699+00:00\",\"last_updated\":\"2022-03-12T03:18:44.205699+00:00\"},{\"entity_id\":\"sensor.bacnet100_0_103\",\"state\":\"46.0\",\"attributes\":{\"unit_of_measurement\":\"%\",\"friendly_name\":\"Master Bathroom Humidistat\",\"icon\":\"mdi:water-percent\",\"device_class\":\"sensor\"},\"last_changed\":\"2022-03-12T03:18:54.174362+00:00\",\"last_updated\":\"2022-03-12T03:18:54.174362+00:00\"}]]\npayload={}\npayload.last=msg.payload.humidity[0][0].state\n\nlet entries=msg.payload.humidity[0].length - 1 \npayload.current=msg.payload.humidity[0][entries].state\n\n\npayload.difference=payload.current-payload.last\nmsg.payload=payload\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":980,"wires":[["ce9ff812f9cf1551"]]},{"id":"50c47109ad7203ee","type":"change","z":"300fd127.935c9e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"humidity\": {}}","tot":"json"},{"t":"delete","p":"topic","pt":"msg"},{"t":"delete","p":"data","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":980,"wires":[["dd39333e042898b7"]]},{"id":"ce9ff812f9cf1551","type":"switch","z":"300fd127.935c9e","name":"","property":"payload.difference","propertyType":"msg","rules":[{"t":"gte","v":"5","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":910,"y":980,"wires":[["b630a143c9592b8c"],["aed06ae90285017e"]]},{"id":"ade3bf5e44c1fedb","type":"traffic","z":"300fd127.935c9e","name":"","property_allow":"payload","filter_allow":"go","ignore_case_allow":false,"negate_allow":false,"send_allow":false,"property_stop":"payload","filter_stop":"stop","ignore_case_stop":false,"negate_stop":false,"send_stop":false,"default_start":false,"differ":true,"x":1290,"y":1400,"wires":[["fcfd9f3cd1dd960b"]]},{"id":"b630a143c9592b8c","type":"change","z":"300fd127.935c9e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"stop","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1180,"y":980,"wires":[["ade3bf5e44c1fedb"]]},{"id":"aed06ae90285017e","type":"change","z":"300fd127.935c9e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"go","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1180,"y":1020,"wires":[["ade3bf5e44c1fedb"]]},{"id":"ae1c348e6aaec942","type":"switch","z":"300fd127.935c9e","name":"","property":"command","propertyType":"msg","rules":[{"t":"eq","v":"TurnOffRequest","vt":"str"},{"t":"eq","v":"TurnOnRequest","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":1070,"y":1500,"wires":[["ade3bf5e44c1fedb"],["fcfd9f3cd1dd960b"]]},{"id":"3d291542a8ca05f3","type":"function","z":"300fd127.935c9e","name":"bacnet write msg","func":"temp = msg.payload\n\nmsg.payload = {\n    // deviceIPAddress: '127.0.0.1'\n    values: [\n        {\n            // objectId: {type: 8, instance: 44301}, \n            values: [\n                {property: {id: 85, index: 4294967295 }, value: [{type: 4, value: temp}], priority: 8}\n            ]\n        }\n    ]\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":1220,"wires":[["5b3fca89044ba184"]]},{"id":"5b3fca89044ba184","type":"BACnet-Write","z":"300fd127.935c9e","name":"","objectType":"2","instance":"1a8324d4d9416e87","valueTag":"4","valueValue":"","propertyId":"85","priority":"8","device":"202e679625630472","server":"977c5141.b0d14","multipleWrite":true,"x":940,"y":1220,"wires":[[]]},{"id":"6f9d8dd7ae9b6427","type":"api-render-template","z":"300fd127.935c9e","name":"Current Temp","server":"8df6c7ad.425b78","version":0,"template":" {{ states.sensor.radiotherm_humidity.state }}","resultsLocation":"payload","resultsLocationType":"msg","templateLocation":"template","templateLocationType":"msg","x":400,"y":1220,"wires":[["5a25ec346aa13bc6"]]},{"id":"5a25ec346aa13bc6","type":"rbe","z":"300fd127.935c9e","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":570,"y":1220,"wires":[["3d291542a8ca05f3"]]},{"id":"3926141a81533fd9","type":"BACnet-Read","z":"300fd127.935c9e","name":"Simple Read","objectType":"5","instance":"ed9da74842b31091","propertyId":"85","device":"202e679625630472","server":"977c5141.b0d14","multipleRead":false,"x":590,"y":1680,"wires":[["8cc8868efd76ea36"]]},{"id":"8cc8868efd76ea36","type":"function","z":"300fd127.935c9e","name":"","func":"value=msg.payload.values[0].value\nmsg=undefined\nmsg={}\nif (value) {\n    msg.command=\"TurnOnRequest\"\n} else {\n    msg.command=\"TurnOffRequest\"\n}\nmsg.payload=value\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":760,"y":1680,"wires":[["c889aced5a98c138"]]},{"id":"c889aced5a98c138","type":"rbe","z":"300fd127.935c9e","name":"","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"command","topi":"topic","x":910,"y":1680,"wires":[["1144e571ab2c34b7"]]},{"id":"1144e571ab2c34b7","type":"switch","z":"300fd127.935c9e","name":"","property":"command","propertyType":"msg","rules":[{"t":"eq","v":"TurnOffRequest","vt":"str"},{"t":"eq","v":"TurnOnRequest","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":1130,"y":1680,"wires":[["c8af0489091ea3aa"],["c8af0489091ea3aa"]]},{"id":"c8af0489091ea3aa","type":"link out","z":"300fd127.935c9e","name":"Fan","mode":"link","links":["ef6ecd543d550476"],"x":1435,"y":1680,"wires":[]},{"id":"be63e3d0.b280c","type":"BACnet-Instance","name":"HASS_OAT","instanceAddress":"86"},{"id":"202e679625630472","type":"BACnet-Device","name":"100","deviceAddress":"192.168.2.105"},{"id":"977c5141.b0d14","type":"BACnet-Client","z":"300fd127.935c9e","name":"Local BACnet","adpuTimeout":"3000","port":"47808","interface":"192.168.2.45","broadcastAddress":"192.168.2.255"},{"id":"8df6c7ad.425b78","type":"server","name":"Home Assistant","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"},{"id":"11bdb6525d6b7785","type":"BACnet-Instance","name":"HASS_HUM","instanceAddress":"88"},{"id":"b8a9e1b45cc7d261","type":"BACnet-Instance","name":"LinkNet1BathroomTemp","instanceAddress":"101"},{"id":"d53065be96b0d751","type":"BACnet-Instance","name":"LinkNet1Motion","instanceAddress":"105"},{"id":"226ac22af2220500","type":"BACnet-Instance","name":"Bathroom Occupancy","instanceAddress":"41"},{"id":"2bd276d43872b0a3","type":"BACnet-Instance","name":"LinkNet1BathroomHumidity","instanceAddress":"103"},{"id":"efe624301ee37b58","type":"BACnet-Instance","name":"LinkNet1BathroomCO2","instanceAddress":"104"},{"id":"1a8324d4d9416e87","type":"BACnet-Instance","name":"HASS_LRHUM","instanceAddress":"90"},{"id":"ed9da74842b31091","type":"BACnet-Instance","name":"MB Fan Request","instanceAddress":"43"}]

Here you can see the values Node Red is writing to the BAS like HASS_OAT (outdoor air temperature as known by home assistant)

Then the GCL does stuff like turn on the mast bathroom bathroom fan request (binary variable(type 5, instance 43) when the difference between the thermostats humidity is greater than the humidity of the wifi thermostat…

So really, you can “do everything” you could imagine today but it’s ugly and I would love to see or make an actual effort at integrating bacnet to home assistant such that I could make automations from home assistant based on real events

2 Likes

see my last post - dm me for more info if needed

Thanks for posting this…my background is setting up commercial BACnet HVAC systems as field technician for a mechanical contractor (doing schools, hospitals, labs, typical ordinary bigger buildings) so the Home Environment is quite different, mostly the setup tools. For example the commercial building contractors setup tools are so “canned” where you don’t have to dive in this deep or write any line code…it maybe looks similar to node red flows but easier with no need for JavaScript code in function blocks.

Could Home Assistant ever be installed in a commercial building? Like a school IT guy would install Home Assistant and setup some sort of temperature control system dashboard for all BACnet field devices? (as well as anything else they would want, typical HA stuff)

1 Like