dulitz / finitude

Reads and writes messages on the ABCD bus used by Carrier Infinity and Bryant Evolution HVAC systems. Exports stats about the system to Prometheus so you can track it on your home's Grafana dashboard.
MIT License
13 stars 3 forks source link
monitoring prometheus

finitude

Finitude decodes the ABCD bus (RS-485) used by Carrier Infinity and Bryant Evolution HVAC systems. It runs two webservers: one serves HVAC /metrics in a format that can be queried by Prometheus, a time series database. Prometheus is a backend for Grafana visualizations/dashboards.

The other webserver is optional. It stores all the WRITE and ACK06 frames seen on the ABCD bus and dumps them as JSON. The functions in analysis.py can then be used to help find meaning in the frames.

Why?

An HVAC system consumes a lot of energy. You might want to know how hard it's working, how often it's running, whether it's running when your windows are open...

Carrier's apps are crappy and they no longer even have a functioning webapp. Plus it's nice to be able to monitor your equipment without relying on connectivity to Carrier's servers.

Carrier's SAM module provides significant information about the modes of the system. But it does not report the state of the system: when heating and cooling are actually operating, the current fan speed, the zones to which the dampers are directing airflow, etc.

How?

To start with, you'll need an RS-485 adapter that can attach to the wires of Carrier's ABCD bus. If you have a Raspberry Pi or some other computer near one of the Carrier devices, you can use a USB RS-485 adapter. If you don't have a nearby computer but you do have Ethernet near one of the Carrier devices, you can use an Ethernet RS-485 bridge.

You can install finitude from PyPI and then run it directly:

pip install finitude
python -m finitude finitude.yml

From Docker Hub, you can install the image dulitz/finitude for Raspbian and other version 7 ARM architectures.

Configuration

If you're running the container, set the environment variables LISTENER_NAME_0 and LISTENER_PATH_0, and possibly others like PORT (if you want it to serve /metrics on a port other than 8000) and SNIFFSERVER_PORT (if you want it to collect unknown frames for analysis).

If you're running standalone, edit finitude.yml to set those values, and pass the file's path as an argument on the command line.

Based On