Monitor unifi Dream Machine (Pro)

Already found it by adding this:

  - platform: influxdb
    host: localhost
    queries:
     - name: UDMP temp CPU
       where: '"name" = ''<nameofyourudm>'''
       field: '"temp_CPU"'
       measurement: '"usg"'
       group_function: last
       database: unifi
       unit_of_measurement: '°C'
     - name: UDMP temp Local
       where: '"name" = ''<nameofyourudm>'''
       field: '"temp_Local"'
       measurement: '"usg"'
       group_function: last
       database: unifi
       unit_of_measurement: '°C'
     - name: UDMP temp PHY
       where: '"name" = ''<nameofyourudm>'''
       field: '"temp_PHY"'
       measurement: '"usg"'
       group_function: last
       database: unifi
       unit_of_measurement: '°C' 

I hope i can help someone with sharing this :slight_smile:

1 Like

i am so glad I found this post.

Just installed unpoller in a container within HA using Portainer, installed the HA Community Addons Influx and Grafana, and with a little bit of tinkering around, now have beautiful Grafana dashboards in HA. It works out of the box, all latest versions of everything, and latest unifi software versions.

Now to use some of the above posts to put the values into some entities.

Thank you for all your work and sharing. Happy to share configuration steps or docker compose files if anyone needs. the instructions on the various websites were not super clear, so took a few hours trying things to get working.

key points

  • add user to unifi with local only read only access
  • install influx and grafana from the addon store in HA
  • setup a influx db with user name and password for unpoller to put data
  • setup grafana datasource http://a0d7b954-influxdb:8086 for influx
  • unpoller in a docker container in HA with portainer
  • setup using a docker compose file with all ENV variables in the compose file (not best way but easy with unifi and influx user/passwords)
  • connect container to hassio network so can connect to lan
  • grafana dashboards loaded using the json file, not via the ID and grafana url.
  • enjoy
4 Likes

I’d love to have a peek at some more of the details for that! I was pretty surprised that it wasn’t already available as a community add-on (sorry if that sounds terribly entitled, it’s not intended as such).

  • add user to unifi with local only read only access

For this, I’ve noticed when setting up a local user, you have a choice of picking what Role the user will have. For example a Unifi Protect View Only user, or a Unifi Talk View Only user. So when you set this read only user up, and a role for it, did you just do it for the Unifi Network portion?

@benchr

You just need the network viewer rights for the local user.

1 Like

I don’t know if a camera is required for the protect integration but it supplies mem temp and cpu for the udm pro. You can try enabling protect on the udm and then add the integration in hacs.

For anyone else here. If you didn’t know you can use this HACS integration to monitor UDM Pro’s

Unifi Status Sensor

Unify Counter Sensor

Then you create this configuration.yaml file

## Unifi Dream Machine sensors https://github.com/zvldz/unifi_status
## Add as custom respository in HACS. Add below code to configuration.yaml
## Update secrets.yaml file.
sensor:
  - platform: unifi_status
    host: !secret host_udm
    port: 443
    version: UDMP-unifiOS
    username: !secret unifi_username
    password: !secret unifi_password
    monitored_conditions:
      - www
      - wan
      - wlan
      - lan
      - alerts
      - firmware
  - platform: template
    sensors:
      unifi_status_wan_cpu:
        friendly_name: "CPU"
        unit_of_measurement: "%"
        value_template: "{{ states.sensor.unifi_status_wan.attributes['gw_system-stats']['cpu'] }}"
      unifi_status_wan_mem:
        friendly_name: "Memory"
        unit_of_measurement: "%"
        value_template: "{{ states.sensor.unifi_status_wan.attributes['gw_system-stats']['mem'] }}"
      unifi_status_wan_ip:
        friendly_name: 'WAN IP'
        value_template: '{{ states.sensor.unifi_status_wan.attributes.wan_ip }}'
      unifi_status_wan_download:
        friendly_name: 'WAN Download'
        unit_of_measurement: Kbps
        icon_template: "mdi:progress-download"
        value_template: "{{ (states.sensor.unifi_status_wan.attributes['rx_bytes-r'] / 1024) | int }}"
      unifi_status_wan_uptime:
        friendly_name: "UDM Uptime"
        value_template: >
          {%- set time = states.sensor.unifi_status_wan.attributes['gw_system-stats']['uptime'] | int %}
          {%- set minutes = ((time % 3600) // 60) %}
          {%- set minutes = '{}min'.format(minutes) if minutes > 0 else '' %}
          {%- set hours = ((time % 86400) // 3600) %}
          {%- set hours = '{}hr '.format(hours) if hours > 0 else '' %}
          {%- set days = (time // 86400) %}
          {%- set days = '{}d '.format(days) if days > 0 else '' %}
          {{ 'Less than 1 min' if time < 60 else days + hours + minutes }}
      unifi_status_firmware_version:
        friendly_name: "UDM Firmware Version"
        icon_template: "mdi:database-plus"
        value_template: "{{ states.sensor.unifi_status_wan.attributes.gw_version }}"
      unifi_status_www_xput_down:
        friendly_name: "UDM Speedtest Download"
        unit_of_measurement: Mbps
        icon_template: "mdi:progress-download"
        value_template: "{{ states.sensor.unifi_status_www.attributes.xput_down }}"
      unifi_status_www_xput_up:
        friendly_name: "UDM Speedtest Upload"
        unit_of_measurement: Mbps
        icon_template: "mdi:progress-upload"
        value_template: "{{ states.sensor.unifi_status_www.attributes.xput_up }}"
      unifi_status_www_speedtest_ping:
        friendly_name: "UDM Speedtest Ping"
        unit_of_measurement: ms
        icon_template: "mdi:progress-clock"
        value_template: "{{ states.sensor.unifi_status_www.attributes.speedtest_ping }}"
      unifi_status_www_uptime:
        friendly_name: 'Internet Uptime'
        value_template: >
          {%- set time = states.sensor.unifi_status_www.attributes.uptime | int %}
          {%- set minutes = ((time % 3600) // 60) %}
          {%- set minutes = '{}min'.format(minutes) if minutes > 0 else '' %}
          {%- set hours = ((time % 86400) // 3600) %}
          {%- set hours = '{}hr '.format(hours) if hours > 0 else '' %}
          {%- set days = (time // 86400) %}
          {%- set days = '{}d '.format(days) if days > 0 else '' %}
          {{ 'Less than 1 min' if time < 60 else days + hours + minutes }}
      unifi_status_wlan_num_user:
        friendly_name: 'Users Wifi'
        icon_template: "mdi:account-multiple"
        value_template: '{{ states.sensor.unifi_status_wlan.attributes.num_user }}'
      unifi_status_lan_num_user:
        friendly_name: 'Users Lan'
        icon_template: "mdi:account-multiple"
        value_template: '{{ states.sensor.unifi_status_lan.attributes.num_user }}'
9 Likes

You can also add the following SNMP sensors. Just make sure SNMP is enabled on your Unifi devices.

# SNMP sensors
# if you have more ap/switches you can copy paste the code.
# change name and ip and you are ready to go
#
sensor:
  - platform: snmp
    host: xxx.xxx.xxx.xxx
    name: Unifi Switch Uptime
    baseoid: 1.3.6.1.2.1.1.3.0
    value_template: >
      {%- set time = value | int // 100 %}
      {%- set minutes = ((time % 3600) // 60) %}
      {%- set minutes = '{}min'.format(minutes) if minutes > 0 else '' %}
      {%- set hours = ((time % 86400) // 3600) %}
      {%- set hours = '{}hr '.format(hours) if hours > 0 else '' %}
      {%- set days = (time // 86400) %}
      {%- set days = '{}d '.format(days) if days > 0 else '' %}
      {{ 'Less than 1 min' if time < 60 else days + hours + minutes }}
  - platform: snmp
    host: xxx.xxx.xxx.xxx
    name: Unifi Switch Firmware Version
    baseoid: 1.3.6.1.4.1.4413.1.1.1.1.1.13.0

  - platform: snmp
    host: xxx.xxx.xxx.xxx
    name: Unifi Switch Model
    baseoid: 1.3.6.1.4.1.4413.1.1.1.1.1.2.0

  - platform: snmp
    host: xxx.xxx.xxx.xxx
    name: Unifi AP Uptime
    baseoid: 1.3.6.1.2.1.1.3.0
    value_template: >
      {%- set time = value | int // 100 %}
      {%- set minutes = ((time % 3600) // 60) %}
      {%- set minutes = '{}min'.format(minutes) if minutes > 0 else '' %}
      {%- set hours = ((time % 86400) // 3600) %}
      {%- set hours = '{}hr '.format(hours) if hours > 0 else '' %}
      {%- set days = (time // 86400) %}
      {%- set days = '{}d '.format(days) if days > 0 else '' %}
      {{ 'Less than 1 min' if time < 60 else days + hours + minutes }}
  - platform: snmp
    host: xxx.xxx.xxx.xxx
    name: Unifi AP Model
    baseoid: 1.3.6.1.4.1.41112.1.6.3.3.0

  - platform: snmp
    host: xxx.xxx.xxx.xxx
    name: Unifi AP Firmware Version
    baseoid: 1.3.6.1.4.1.41112.1.6.3.6.0
3 Likes

Had to remove “entity_id: sensor.unifi_gateway_wan” but the rest worked great, thank you!

I updated the sensors template and links to a UDM Status HACS integration.

1 Like

Thanks for the help :+1:. unifi_status is working very well.
and one help, I cont find UDM pro temperature … how to get that …?
my UDMP is always overheating due to its position. I’m using an external fan to cool it. if I got a temperature, that will very help full to monitor.

@ruaandeysel This is a great substitution instead of going through the unifi-poller, which is a bit of a round-about way of doing it.
One more sensor :slight_smile:

    unifi_status_wan_upload:
      friendly_name: "WAN Upload"
      unit_of_measurement: Kbps
      icon_template: "mdi:progress-upload"
      value_template: "{{ (states.sensor.unifi_status_wan.attributes['tx_bytes-r'] / 1024) | int }}"

Got it setup and working using unifi-stats which was great, but for some reason it was causing my node-red integration to forcefully disconnect from the supervisor every few seconds… So had to turn it off.

Anyone else have this issue?

You can try the Unifi Protect integration. It shows CPU temps on UDM Pro

1 Like

Hi, I’ve added the custom component, added it to my config but the entities stay empty.
It gives me health errors in the logs, but it doesn’t show any connection issues, however all the entities remain status ‘unknown’. Any idea?

Did you set the ‘version’ string? It’s different if it’s an UDM Pro or a cloud key?

Would love to have it. Been looking for this for months now. Thanks!

yes, yes i just did a read only user on the network app.

Here is the compose file. I just use this in Portainer, and it works fine.
Recreates do updates too.
make sure you update your specific info that you have setup in influxdb

  • influxdb ip address,
  • influxdb db name,
  • username,
  • password

and your Unifi console read only user name, and the console IP Address.

create a stack, add this into the editor, click create, and away you go.

version: '2'
services:
  unifi-poller:
    restart: always
    image: ghcr.io/unpoller/unpoller:latest
    environment:
      - UP_PROMETHEUS_DISABLE=true
      - UP_INFLUXDB_DISABLE=false
      - UP_INFLUXDB_DB=UNIFIDBNANE
      - UP_INFLUXDB_USER=unifipoller
      - UP_INFLUXDB_PASS=unifipoller
      - UP_INFLUXDB_URL=http://172.30.33.6:8086
      - UP_UNIFI_DEFAULT_USER=unifipoller
      - UP_UNIFI_DEFAULT_PASS=unifipoller
      - UP_UNIFI_DEFAULT_URL=https://192.168.1.1
      - UP_UNIFI_DEFAULT_SAVE_DPI=true
      - UP_UNIFI_DEFAULT_SAVE_EVENTS=true
      - UP_UNIFI_DEFAULT_SAVE_ALARMS=true
      - UP_UNIFI_DEFAULT_SAVE_ANOMALIES=true
      - UP_UNIFI_DEFAULT_SAVE_IDS=true
      - UP_POLLER_DEBUG=false
    volumes:
      - /mnt/data/supervisor/homeassistant/unpoller:/config

and then follow the other instructions above to add your dashboards to graphana, once the data is going to influxdb. you can check int eh container logs that its working too.

2 Likes

Thanks for sharing the compose file!

I got however stuck in this “unpoller in a docker container in HA with portainer”. How did you do this?

There is an addon for portainer. I have the original one that was in the community store, that’s not there now so I think there is another respository that provides it now. Maybe in hacs

1 Like