2020-10-15T13:00:00Z
Bonjour,
Après quelques heures de galère afin de pouvoir trouver comment gérer mon stock de Pellets via HA, le résultat est plutôt satisfaisant. Je partage donc la démarche avec vous afin de vous faire gagner ce précieux temps.
Dans mon cas, le fonctionnement est le suivant :
-
J’achète du Pellets => Je rentre le nombre de sacs en stock
-
Je charge mon poêle => J’incrémente le compteur de sacs brûlés de 1
-
Je contrôle les données sur une carte de mon tableau de bord. Et bientôt sur un écran tactile dédié…
Dans ces deux cas, la date et l’heure des événements sont également enregistrés
Je sépare volontairement les compteurs de sacs achetés et de pellets brûlés afin de pouvoir analyser simplement ces données par la suite.
Par exemple, en faisant ceci, je pourrais comparer le nombre de sacs brûlés d’une années sur l’autre sur des périodes spécifiques. Et même comparer ces consommations en fonction de l’évolution de la température extérieure sur ces périodes ! Mais çà, ce sera pour plus tard.
Pré-requis :
- Avoir une installation Home Assistant fonctionnelle
- Avoir accès à ses fichiers de configuration. Avec l’Add-On File Editor par exemple
- Avoir ajouté l’Add-On InfluxDB et créé sa première base de données.
- Maitriser l’ajout de cartes sur le tableau de bord
Aller, c’est parti !
Etape 1 : Créer les entrées nécessaires :
Ajoutons les entrées nécessaires au fonctionnement :
Les Nombres :
Depuis le menu : Configuration/Entrées
de Home assistant, créer les nouvelles entrées nombre
suivantes :
-
pellet_sacs_brules
- Comptabilisera le nombre de sacs brûlés -
pellet_sacs_brules_affich
- Entrée qui sera réservée à l’affichage du nombre de sacs brûlés -
pellet_achats_valides
- Comptabilisera le nombre total de sacs achetés -
pellet_achats_valides_affichage
- Entrée qui sera réservée à l’affichage du nombre total de sacs achetés -
qty_achat_sacs_pellets
- Servira à définir le nombre de sacs à ajouter dans la base de données lors d’un achat
Note: J’ai volontairement séparé les entrées pour l’affichage et le décompte pour les raisons suivantes :
- La mise à jours des données dans InfluxDB se fait par changement de valeurs. De ce fait, chaque fois qu’une entrée change de valeur, cela ajoute cette valeur dans la base de données. Concrètement, cela peut être très gênant si pour modifier le nombre de sacs achetés nous utilisons les flèches haut/bas de l’input_number. A chaque clic de souris, la valeur de l’entrée sera ajoutée dans le compte.
- Les Sensors liés à des requête dans la base de données ne se mettent pas à jour en temps réels dans HA. Malgré l’aide de personnes bien plus expérimentées que moi, que je remercie encore, nous n’avons pas réussi à forcer la mise à jours de ces capteurs.
- Les entrées dédiées à la base de données ne sont modifiées que par l’action de boutons que nous créons ci-dessous. Elles sont donc sécurisées car ne peuvent pas être modifiées depuis le tableau de bord car elle n’y apparaissent pas.
Les Interrupteurs :
Depuis le menu : Configuration/Entrées
de Home assistant, créer les nouvelles entrées interrupteur
suivantes :
*but_ajout_pellet
- Interrupteur à actionner pour déclarer l’ajout d’un sac dans le poêle
*but_valid_achat_pellets
- Interrupteur pour valider l’ajout de nouveaux sacs dans le stock
Etape 2 :
Ajoutons les sensors utiles dans le fichier de configuration.yaml
:
- platform: influxdb
# Nom de la base de données crée lors de l'installation de influxdb
database: db_home_assistant
# Nom et Mot de passe de l'utilisateur de la base de données
username: Nom_de_l'Utilisateur
password: Mot_de_Passe_de_l'Utilisateur
queries:
- name: nbre_sacs_pellets_brules
group_function: sum
where: '"entity_id" = ''pellet_sacs_brules'''
measurement: '"Sacs"'
- name: nbre_sacs_pellets_commandes
group_function: sum
where: '"entity_id" = ''pellet_achats_valides'''
measurement: '"Sacs"'
Ici nous avons créé 2 requêtes qui vont aller lire dans la base de données InfluxDB la somme des sacs brûlés & commandés et les attribuer aux deux sensor de l’argument name
Et ajoutons un autre Sensor chargé de mesurer la différence entre les sacs achetés & brûlés.
- platform: template
sensors:
pellet_sensor_stock:
friendly_name: "Stock Pellet - Sensor"
unit_of_measurement: 'Sacs'
value_template: "{{states('input_number.pellet_achats_valides_affichage')|int - states('input_number.pellet_sacs_brules_affich')|int}}"
Etape 3 :
Ajoutons les Scripts qui gérerons les différentes actions. Pour cela il suffit de copier les lignes de codes suivantes dans le fichier scripts.yaml
du répertoire configuration de HA.
Le premier déclenché à la validation de l’achat de Pellets :
poele_validation_achat:
alias: Poele - Validation Achat
sequence:
- service: input_number.set_value
data_template:
entity_id: input_number.pellet_achats_valides
value: '{{states(''input_number.qty_achat_sacs_pellets'')|int}}'
- service: input_number.set_value
data_template:
entity_id: input_number.pellet_achats_valides
value: 0
- service: input_number.set_value
data_template:
entity_id: input_number.pellet_achats_valides_affichage
value: '{{states(''input_number.pellet_achats_valides_affichage'')|int + states(''input_number.qty_achat_sacs_pellets'')|int}}'
- service: input_boolean.turn_off
data: {}
entity_id: input_boolean.but_valid_achat_pellets
- service: input_number.set_value
data:
value: 0
entity_id: input_number.qty_achat_sacs_pellets
mode: single
Le second déclenché à l’ajout d’un sac dans le poêle :
ajout_sac_pellet:
alias: Poele - Ajout_Sac_Pellet
sequence:
- service: input_number.set_value
data:
value: 1
entity_id: input_number.pellet_sacs_brules
- service: input_number.set_value
data:
value: 0
entity_id: input_number.pellet_sacs_brules
- service: input_boolean.turn_off
data: {}
entity_id: input_boolean.but_ajout_pellet
- service: homeassistant.update_entity
data:
entity_id:
- sensor.nbre_sacs_pellets_brules
- service: input_number.increment
entity_id: input_number.pellet_sacs_brules_affich
data: {}
mode: single
Etape 4 : Automatisation permettant l’initialisation des données
Au démarrage de HA, les données sont extraites de la base de données pour initialiser les entrées réservées à l’affichage des valeurs de HA. Pour ce faire, il faut ajouter les lignes de codes ci-dessous dans le fichier automations.yaml
du répertoire configuration de HA.
Attention, l’argument id:
ne doit pas déjà être utilisé avec la même valeur dans vos automatisations
- id: '1602403059566'
alias: Automatisation au Démarrage
description: ''
trigger:
- platform: homeassistant
event: start
condition: []
action:
- service: input_number.set_value
data_template:
entity_id: input_number.pellet_sacs_brules_affich
value: '{{states(''sensor.nbre_sacs_pellets_brules'')|int}}'
- service: input_number.set_value
data_template:
entity_id: input_number.pellet_achats_valides_affichage
value: '{{states(''sensor.nbre_sacs_pellets_commandes'')|int}}'
mode: single
Etape 5 : Ajout de la carte au tableau de bord
Afin de tester que tout fonctionne bien, je vous mets ci-dessous le code de la carte que j’utilise. Si jusque là, vous n’avez pas personnalisé les noms des capteurs et entrées, il vous suffit de copier ce code, de créer une nouvelle carte manuelle dans le tableau de bord et de coller le code.
type: vertical-stack
cards:
- type: entities
entities: []
title: Gestion Pellets
- type: gauge
min: 0
max: 264
name: De Pellets en Stock
unit: Sacs
severity:
green: 198
yellow: 128
red: 66
entity: sensor.pellet_sensor_stock
- type: button
tap_action:
action: call-service
service: script.ajout_sac_pellet
entity: input_boolean.but_ajout_pellet
name: +1 Sac dans le poêle
icon_height: 35px
- type: entity
entity: input_number.pellet_sacs_brules_affich
name: Total Sacs Brûlés
- type: vertical-stack
cards:
- type: entities
entities: []
title: Achat Pellets
- type: entity
entity: input_number.pellet_achats_valides_affichage
name: Total Sacs Achetés
- type: entities
entities:
- entity: input_number.qty_achat_sacs_pellets
title: Nouvel Achat
- type: button
tap_action:
action: call-service
service: script.poele_validation_achat
entity: input_boolean.but_valid_achat_pellets
icon_height: 35px
Elle n’est pas très sexy mais fonctionnelle. N’hésitez pas à partager les votre
Conclusion
Voilà, tout est maintenant terminé. J’espère que tout se passera bien en suivant ces indications. Toutefois, si il y avait un soucis, je me ferais un plaisir de corriger cela. Pas facile pour moi d’écrire cela à postériori.
N’étant pas un expert de HA, il existe certainement un moyen d’optimiser tout cela. Je pense notamment à la mise à jour des sensors et à la possibilité d’écrire de vrais requêtes d’ajouts de données dans les bases au lieu de devoir passer les entrées à 1 puis à 0 pour écrire pour créer un événement. . Auparavant, je le faisais avec NodeRed mais cette fois j’essaie de minimiser les ressources.
Pour ceux qui ont testé leur nouvelle fonctionnalité dans tout les sens (ils se reconnaitront), pour réinitialiser les tables concernées dans influxdb, il faut
-
Utiliser une connexion ssh
-
Taper les commandes :
Influxd - Pour lancer le service
influx -host homeassistant.local -username Votre_Nom_Utilisateur -password Votre_Mot_de_Passe
-
Et une fois connecté :
- delete FROM « Votre_Measurement » WHERE « entity_id »=‹ Votre_Entrée ›. Par exemple pour les données correspondantes à mon projet,
delete FROM "Sacs" WHERE "entity_id"='pellet_sacs_brules'
pour effacer complètement les données concernant les sacs brûlés
Donc pour conclure :
- Merci aux experts de faire en sorte que cette version s’optimise.
- Merci aux graphistes de Lovelace de partager leurs plus belles cartes en rapport avec ce topic.
Enfin : - J’espère avoir assez détaillé le tout pour que les débutants, comme moi, comprennent la démarche et puisse la reproduire pour des sujets plus personnels car une fois que l’on maitrise l’échange des données à les bases de données, le monde n’a plus de limites… (Je craque là !)