Raven - Blog
16. Novembre 2024

Monitorer BorgBackup dans Home Assistant

Posté le 16. Novembre 2024  •  5 minutes  • 861 mots  • Autres langues:  English

Il y a presque un an, j’ai eu un souci de surconsommation électrique chez moi et j’ai décidé, comme n’importe quel geek l’aurait fait, d’acheter une prise connectée pour trouver d’où cela provenait. De fil en aiguille, j’ai trouvé la source de mon problème (qui était mon frigo, mais tout le monde s’en fiche) et je me suis surtout mis à développer une interface web de monitoring pour cette prise… Et les deux autres achetées par la suite. Cela m’a permis de mettre les mains dans MQTT , Mosquitto , InfluxDB . C’était passionnant, mais j’ai finalement abandonné ce side-project. BorgWarehouse me prend déjà beaucoup de temps et j’ai fait le choix de m’y concentrer.

Du coup, je me suis tourné vers le logiciel libre Home Assistant et j’ai ressorti du placard ce bon vieux Raspberry Pi 3 Model B+ qui y dormait. Je ne connaissais absolument rien à la domotique mais mois après mois, j’y ai pris goût. La prise en main de Home Assistant n’est pas si simple, mais les possibilités offertes sont monstrueuses si on s’y intéresse un peu, l’éco-système est gigantesque et la communauté est immense. Autre avantage : vous contrôlez tout de chez vous, sur vos appareils et vous gardez vos données.

Une fois mes prises de courants, mes lampes et mes thermomètres connectés, j’ai commencé à créer mes premiers dashboard. Ce n’est que le début d’une grande aventure avec un premier dashboard très utile !

My home assistant dashboard

Revenons-en à nos moutons, le 01 septembre dernier , je sortais une importante release sur BorgWarehouse, la version 2.4.0 dont la principale feature était le contrôle par API REST. Vous pouvez désormais générer des tokens dans votre interface web vous permettant d’executer des actions diverses.

C’est quelques semaines après cette release que j’ai eu cette idée : Récupérer l’état de l’un de mes repository de sauvegarde BorgBackup pour l’afficher sur mon dashboard Home Assistant !

Créez votre token dans BorgWarehouse

Je ne vais pas réécrire la documentation, vous pouvez la consulter ici , si besoin.

Generate BorgWarehouse RESTful token

Création du sensor

La première étape est de dialoguer avec BorgWarehouse via son API RESTful, pour cela, on va utiliser l’intégration suivante à Home Assistant : RESTful Sensor .

Home Assistant RESTful integration

Notez bien que, vous n’avez pas d’action particulière à faire car c’est un sensor natif de Home Assistant. À partir du moment où vous ajoutez une configuration contenant un sensor avec platform: rest, l’intégration apparaîtra dans votre liste.

Éditez le fichier /homeassistant/configuration.yaml sur votre Home Assistant, à l’aide du File Editor ou via votre terminal préféré. Et, adaptez la configuration que je vous fournis à vos besoins 👇

#### BORGWAREHOUSE INTEGRATION
sensor:
    - platform: rest
      name: BorgWarehouse - NAS
      unique_id: 'borgwarehouse_nas'
      resource: https://borgwarehouse.your.domain/api/repo/id/1 # Your URL
      method: GET
      headers:
          Authorization: 'Bearer XXXX' # Your token
      json_attributes:
          - repo
      value_template: "{{ value_json['repo']['status'] }}"
      scan_interval: 600 # Refresh data time in second

    - platform: template
      sensors:
          repo_name:
              friendly_name: 'Repository name'
              unique_id: 'borgwarehouse_nas_name'
              icon_template: 'mdi:server'
              value_template: "{{ state_attr('sensor.borgwarehouse_nas', 'repo')['alias'] }}"
          repo_last_save:
              friendly_name: 'Last save'
              unique_id: 'borgwarehouse_nas_last_save'
              icon_template: 'mdi:calendar-clock'
              value_template: "{{ (state_attr('sensor.borgwarehouse_nas', 'repo')['lastSave'] | int | timestamp_custom('%Y-%m-%d %H:%M:%S')) }}"
          repo_status:
              friendly_name: 'Status'
              unique_id: 'borgwarehouse_nas_status'
              value_template: >
                  {% if state_attr('sensor.borgwarehouse_nas', 'repo')['status'] %}
                      OK
                  {% else %}
                      KO
                  {% endif %}                  
              icon_template: >
                  {% if state_attr('sensor.borgwarehouse_nas', 'repo')['status'] %}
                      mdi:check-circle
                  {% else %}
                      mdi:close-circle
                  {% endif %}                  
          repo_storage_percentage:
              friendly_name: 'Storage Usage'
              unique_id: 'borgwarehouse_nas_storage'
              icon_template: 'mdi:cloud-percent-outline'
              value_template: >
                  {% set storage_size_bytes = state_attr('sensor.borgwarehouse_nas', 'repo')['storageSize'] * 1024 * 1024 %}
                  {% set storage_used_bytes = state_attr('sensor.borgwarehouse_nas', 'repo')['storageUsed'] %}
                  {% if storage_size_bytes > 0 %}
                  {{ ((storage_used_bytes / storage_size_bytes) * 100) | round(2) }}
                  {% else %}
                  0
                  {% endif %}                  
              unit_of_measurement: '%'
#### BORGWAREHOUSE INTEGRATION

C’est un exemple de configuration fonctionelle qui correspond à mon cas d’usage, adaptez-le à votre besoin, tout est possible.

Pour prendre en compte la modification, il faut utiliser le bouton “Restart Home Assistant”, il y a peut-être une meilleure solution pour prendre en compte la modification de la config, mais je n’ai pas trouvé.

Création de la carte sur le dashboard

Maintenant que le sensor est construit, il ne reste plus qu’à s’amuser. Rien de compliqué sur cette carte, hormis que je souhaitais modifier la couleur de l’icône de statut en fonction du statut du repository. Je n’ai pas pu faire cela nativement, ou alors je n’ai pas trouvé. J’ai utilisé le plugin card-mod 3 installé via le community store de HA : HACS .

title: BorgWarehouse
type: entities
entities:
    - entity: sensor.repo_name
    - entity: sensor.repo_last_save
    - entity: sensor.repo_status
      card_mod:
          style: |
              :host {
                --paper-item-icon-color:
                {% if state_attr('sensor.borgwarehouse_nas', 'repo')['status'] %}
                  green
                {% else %}
                  red
                {% endif %}
              }              
    - entity: sensor.repo_storage_percentage

Je vous livre le fichier .yml de la carte, mais vous pouvez utiliser l’interface graphique de HA pour la modifier. J’ai prédéfini sur le sensor du configuration.yml les icônes et friendly_name des différentes entités mais il reste possible de surcharger toutes ces valeurs depuis la configuration de la carte.

BorgWarehouse card with OK status
BorgWarehouse card with KO status

Le rendu est top, et je pense intégrer un petit graph de l’évolution du stockage sous la card prochainement, ce serait très simple à faire. Les possibilités sont infinies !

Partagez-moi vos dashboard sur Mastodon , ce sera un plaisir d’admirer vos installations et d’y trouver de nouvelles idées 😊

Follow me

Subscribe to my RSS feed !