#prometheus-exporter #gateway #prometheus-metrics #zigbee #sensors #naive #de-conz

bin+lib deconz-exporter

A very simple (and naive) Prometheus exporter for deCONZ Phoscon zigbee gateway

1 unstable release

0.1.0 Mar 7, 2022

#1032 in Hardware support

MIT license

645KB
303 lines

🚀 deconz-exporter

A very simple (and naive) Prometheus exporter for deCONZ Phoscon zigbee gateway. Exports prometheus metrics for sensors connected to Conbee II USB gateway.

Example screenshot

📈 Exported metrics

# HELP deconz_battery Battery level of sensors
# TYPE deconz_battery gauge
deconz_battery{manufacturername, modelid, name, swversion}

# HELP deconz_humidity Humidity level
# TYPE deconz_humidity gauge
deconz_humidity{manufacturername, modelid, name, swversion, type}

# HELP deconz_pressure Pressure level
# TYPE deconz_pressure gauge
deconz_pressure{manufacturername,modelid, name, swversion, type}

# HELP deconz_temperature Temperature level
# TYPE deconz_temperature gauge
deconz_temperature{manufacturername, modelid, name, swversion, type}

🚲 Getting started

  1. Enable discovery in gateway settings

    Enable discovery

  2. Generate a new username for the exporter

    $ curl -X POST -s http://<rest api endpoint>/api -d '{"devicetype": "deconz-exporter"}' | jq
    
    [{"success":{"username":"0E87CDA111"}}]
    
  3. Start the exporter.

    $ cargo run -- --url http://<gateway rest API>:4501 --username 0E87CDA111 --port 9199
    
  4. Profit! 🥇

⚙️ How does this work?

  1. The exporter must be configured with a valid username and url to connect to deCONZ REST API.
  2. The websocket port is discovered though the REST API.
  3. The Websocket API provides streaming updates to the exporter, which gets converted to metrics.

🕵️‍♂️ Debugging tips

  1. websocat is a handy tool to see the raw websocket events emitted. Use it to debug issues, capture some sample events etc.

    $ websocat ws://nyx.jabid.in:4502
    
    {"attr":{"id":"1","lastannounced":null,"lastseen":"2022-03-04T22:42Z","manufacturername":"dresden elektronik","modelid":...
    
  2. Run $ cargo test just to be sure.

📝 Notes

  1. This exporter is only tested with a few devices I own. There is no guarantee that it would work with anything else.
  2. Feel free to send me PRs for other devices supported by Conbee II
  3. The auth flow is cumbersome and manual, would be great to automate this.
  4. Process metrics are missing, should bring them back.
  5. Auto discovery of gateways might be nice.

⚖️ License

MIT

Dependencies

~12–27MB
~428K SLoC