Forum KNX francophone / English KNX forum
Mon Dashboard Home assistant - Version imprimable

+- Forum KNX francophone / English KNX forum (https://www.knx-fr.com)
+-- Forum : Français (https://www.knx-fr.com/forumdisplay.php?fid=3)
+--- Forum : Logiciels libres (linknx, knxweb, pKNyX,...) (https://www.knx-fr.com/forumdisplay.php?fid=10)
+--- Sujet : Mon Dashboard Home assistant (/showthread.php?tid=7383)

Pages : 1 2 3 4 5 6 7


RE: Mon Dashboard Home assistant - Ives - 04/06/2024

(13/05/2024, 15:00:07)Christophe0110 a écrit : Ah oui d'accord, tu es motivé toi Wink

C'était le début de la RT2012 (le chantier de la maison a commencé en 2013) qui oblige a afficher les diverses consommations et j'avais choisi ce type d'actionneur pour me donner de la souplesse ; puisqu'ils sont là, autant les utiliser !

Sans lien avec ce qui précède:
- un tuto pour simplifier en fusionnant les automatisations avec les triggers ID.
- une intégration pour nettoyer HA


RE: Mon Dashboard Home assistant - Kevlille - 04/06/2024

Hello Ives

Il me semblait que tu gérais tes automation avec le module logique ABB et/ou rednote. Tu as changé de statégie?


RE: Mon Dashboard Home assistant - Ives - 05/06/2024

Non tout ce qui est fonctionnalités est dans le module logique. C'est pérenne, non tributaire de mise à jour et fonctionne même en cas de panne du NUC ou du routeur ou de plantage de HA.

En automatisation HA j'ai surtout des notifications comme le tarif Tempo du lendemain, fin du lavage de vitre des robots, portail ouvert, manque sel adoucisseur, modes de chauffage du SPA et quelques "bricoles" comme la lecture d'un message dans Sonos en cas d'intrusion ou lors d'un appel du portier de rue et les commandes vocales pour les tâches du robot de sol.


RE: Mon Dashboard Home assistant - Christophe0110 - 05/06/2024

Tiens, en parlant de commandes vocales...
Je pensais partir sur du Alexa mais est-ce vraiment utile ?
Est-ce qu'on a pas l'air un peu bête dans son salon à parler tout seul ?
J'ai + l'impression que c'est gadget mais j'avoue que j'ai quand même envie d'essayer...
J'aimerais intégré l'IA pour faire certaine chose comme par exemple pouvoir dire : "Ferme tous les volets sauf celui des chambres des enfants".
J'ai testé avec Google et je peux demander à fermer tous les volets ou juste un seul mais pas ce genre de condition particulière...


RE: Mon Dashboard Home assistant - Ives - 08/06/2024

(05/06/2024, 08:38:24)Christophe0110 a écrit : Tiens, en parlant de commandes vocales...
Je pensais partir sur du Alexa mais est-ce vraiment utile ?
Est-ce qu'on a pas l'air un peu bête dans son salon à parler tout seul ?
J'ai + l'impression que c'est gadget mais j'avoue que j'ai quand même envie d'essayer...
J'aimerais intégré l'IA pour faire certaine chose comme par exemple pouvoir dire : "Ferme tous les volets sauf celui des chambres des enfants".
J'ai testé avec Google et je peux demander à fermer tous les volets ou juste un seul mais pas ce genre de condition particulière...

Moi, j'avais déjà l'air bête avec les commandes vocales de la voiture, alors un peu plus ou un peu moins mais pas plus que les personnes dans la rue qui parlent en "mains libres" avec le smartphone (l'étonnement du début à complètement disparu)! Tongue

Je trouve que c'est très pratique et je les utilise souvent mais dans mon installation il y a le choix des boutons, smartphones/tablettes, écran tactile et commandes vocales donc rien d'obligatoire. Mon épouse y vient doucement et "Ferme tous les volets", "Nettoie la cuisine" (pour le robot de sol), "Ajoute tel produit à la liste de course", "minuteur de x minutes" sont ses commandes préférées.

A noter que les scènes ou les scripts créés dans HA peuvent également être exécutés via Siri (avec Companion) ce qui est bien pour les commandes depuis la voiture comme "ouvre/ferme le portail/garage car, avec Siri, on a pas à toucher au téléphone ou à lancer une application.


RE: Mon Dashboard Home assistant - Christophe0110 - 30/08/2024

Citation :Concernant la navigation vers les pièces, il y a deux possibilités :
1) Sélectionner une zone  (je ne poste ici que les copies d'écran des zones, sachant chaque colonne d'une zone est également une pièce en sous-vue)
2) Sélectionner une pièce pour afficher uniquement les éléments de la pièce et éviter le scrolling en utilisation smartphone

Hello Ives,

Au risque que la question ait déjà été posée (auquel cas, je m'excuse) mais je ne comprends pas bien ton explication sur la navigation vers le détail de tes pièces...
Pour prendre un de tes exemple, si on regarde la page "PDV" (qui semble être une sous-vue vu qu'on y voit la flèche de retour), j'y vois donc plusieurs pièces (Hall, Cuisine, Salle à manger et Salon). Ensuite, juste avant, on voit un exemple de page "Zone" dans laquelle on retrouve ces mêmes pièces en image mignature.
Je comprends donc qu'on appuyant, par exemple, sur l'image du salon, tu fais une navigation vers la page "PDV" mais comment fais-tu pour que ça tombe directement sur "Salon" et qu'il ne soit pas nécessaire de scroller des détails du "Hall" jusqu'à celui du "Salon" ?
Ou alors, est-ce que je dois comprends ton explication ci-dessus comme étant :
- La page "PDV" est accessible via les "onglet" au dessus et l'utilisateur peut scroller jusqu'à la pièce voulue.
- Le bouton "Salon" (l'image) de la zone "Toutes les pièces RDC SUB & Hall" redirige vers UNE AUTRE page masquée (sous-vue) qui dé-double ainsi les mêmes options que dans la page "PDV" accessible, elle, par onglet ?

A+


RE: Mon Dashboard Home assistant - Ives - 30/08/2024

Bonjour Christophe,

Depuis cette page "Pièces De Vie" (PDV)

[Image: b82i.jpg]

Si j'appuie, par exemple, sur l'image "Salon", il s'affiche directement cette page (qui est une sous-vue) :

[Image: wxng.jpg]

Voici le code de l'image salon :
type: picture
image: http:/local/Salon3.png
tap_action:
 action: navigate
 navigation_path: /lovelace/salon


RE: Mon Dashboard Home assistant - Christophe0110 - 30/08/2024

Merci pour ta réponse Ives.

Ok mais alors, cette page contient également le détail du salon ?

[Image: qsdk.jpg]

Donc tu dois gérer 2x le détail du salon dans 2 pages séparées ?


RE: Mon Dashboard Home assistant - Ives - 30/08/2024

J'ai cette page lorsque je touche sur le texte "Toutes les pièces RDC SUD et HALL".
J'ai effectivement créé une sous-vue par pièce afin de disposer d'un accès direct depuis l'image de la pièce. Il a donc le choix pour l'utilisateur : par pièce ou pour la zone


RE: Mon Dashboard Home assistant - Christophe0110 - 31/08/2024

Ok, c'est clair dans ma tête maintenant Wink
Merci Smile


RE: Mon Dashboard Home assistant - XeNo - 03/09/2024

@Ives,

Tu utilises quoi comme entité pour avoir ces états là ?

[attachment=2703]

Je suis en train de mettre en place un calendrier et les interfaces lovelace associés pour gérer le changement des filtres des réseaux d'eau.

Cependant j'arrive bien à avoir un bouton qui me crée un event dans le calendrier, mais impossible d'aller chercher l'info dans le passé pour savoir depuis quand a eu lieu le changement. Je dois donc associé un sensor pour le modifier et avoir la date de changement, d'où ma question.
Tu gères comment toi ces valeurs ? Via un bouton knx ou directement dans HA ?


RE: Mon Dashboard Home assistant - Ives - 04/09/2024

(03/09/2024, 18:26:52)XeNo a écrit : @Ives,

Tu utilises quoi comme entité pour avoir ces états là ?

Je suis en train de mettre en place un calendrier et les interfaces lovelace associés pour gérer le changement des filtres des réseaux d'eau.

Cependant j'arrive bien à avoir un bouton qui me crée un event dans le calendrier, mais impossible d'aller chercher l'info dans le passé pour savoir depuis quand a eu lieu le changement. Je dois donc associé un sensor pour le modifier et avoir la date de changement, d'où ma question.
Tu gères comment toi ces valeurs ? Via un bouton knx ou directement dans HA ?

J'utilise une entrée (input_datetime) je rentre la valeur directement dans HA.
Pour l'historique , je touche le texte puis le pictogramme "bargraph" et j'obtiens ceci (1ère période 28/03/24 au 04/09/24) même si actuellement je ne sais pas combien j'aurai de valeurs conservées.
(Je vais d'ailleurs mettre en place une notification pour une utilisation de 4 mois)

[Image: besb.jpg]


RE: Mon Dashboard Home assistant - XeNo - 05/09/2024

Merci pour ta réponse.

Bon ca y est j'y suis arrivé après un peu de temps !

Voici donc les cards :
[attachment=2704]

J'ai donc une grosse tuile qui indique le nombre de jours depuis le dernier changement de filtre, ainsi que les m3 filtrés

Si je clique sur la tuile, j'ai un prompt de confirmation (pour éviter les fausses manip)
[attachment=2706]

Les valeurs sont remises à 0. Cela crée une entrée dans le calendrier local de HA (réalisable aussi sur un calendrier google pour ceux qui voudrait sortir les stats)
[attachment=2707]

Dans le détail de l'entrée d'agenda on a les valeurs au moment du changement du/des filtres (durée de vie, cubage)
[attachment=2708]

Les tuiles sont également dynamiques, en fonction de critères de cubage et de durée, 2 types d'alertes apparaissent :
[attachment=2705]

On ne voit pas l'animation sur les captures bien évidemment, mais en gros lorsqu'il faut changer les filtres impérativement (dernière capture), la tuile et la bulle rayonnent en rouge pour attirer l'attention. Je pourrais aussi faire une notification par la suite.


RE: Mon Dashboard Home assistant - Ives - 06/09/2024

C'est bien complet. Poster le code serait un plus !


RE: Mon Dashboard Home assistant - richardpub - 06/09/2024

Oui Super cela l’interface HA très dynamique


RE: Mon Dashboard Home assistant - XeNo - 06/09/2024

(06/09/2024, 08:16:28)Ives a écrit : C'est bien complet. Poster le code serait un plus !

Pas de soucis, demandé si gentiment  Tongue

Alors on va déjà expliquer ; ce qui a été compliqué (d'où ma question initiale sur le type de capteur utilisé) c'est de savoir quand a eu lieu la dernière action. En fait c'est pas si simple à récupérer en fonction du type d'entité. 
J'ai donc fait autrement en utilisant des entités "fantômes" qui me servent à stocker des choses et récupérer des états.

1re étape :
Creer un calendrier HA, soit local, soit Google, soit ce que vous voulez.

2ème étape :
Creer 2 entités pour chaque filtre/réseau de filtre souhaité, un input_number (pour stocker une valeur), un input_datetime (pour stocker la date)

3ème étape :
Réaliser un script qui sera actionné quand on cliquera sur la tuile, il est en 3 étapes :
1/ stocker la date du jour au moment du clic dans input_datetime
2/ stocker le cubage total au moment du clic dans input_number
3/ Creer un event agenda qui a comme nom, le type de changement de filtre (moi cuve ou ville), et en description les informations précédentes (durée de vie, cubage)
Attention, il faudra autant de scripts que de bouton lovelace souhaité (que de filtre à changer en somme)

4ème étape :
Jouer avec les formules pour trouver le calcul adapté.
En gros c'est simple :
le cubage total - le cubage stocké donne le cubage de vie du filtre
la date actuelle - la date stockée donne la durée de vie du filtre

5ème étape, designer le tout sur lovelace pour que ce soit pratique, utile et si possible "joli"
ATTENTION, il faut, pour utiliser mon code, card-mod + mushroom. J'utilise l'entité mushroom-template-card


1/Donc le calendrier local (C'est une intégration HA, donc paramètres/appareils et services/intégration)
[attachment=2709]

2/Les 2 (4 pour moi) entités fantômes (Paramètres/Automatisations et scènes/scripts)
[attachment=2710]

3/Le code du script qui sera lancé par le bouton (à multiplier fonction de vos besoins) :
[attachment=2711]
Code :
alias: Set Change Filtre Cuve
sequence:
 - action: calendar.create_event
   target:
     entity_id: calendar.filtres_eau
   data:
     summary: Changement filtres Cuve
     description: " Changés à {{ (now() - states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days }} jour(s) / {{ (states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_litre') | int) }} Litres"
     start_date: |
       {{ now().date() }}
     end_date: |
       {{ now().date() + timedelta(days=1) }}
 - action: input_button.press
   target:
     entity_id: input_button.sensor_date_filtre_eau_cuve
   data: {}
 - action: input_number.set_value
   target:
     entity_id: input_number.volume_changement_filtre_cuve_litre
   data:
     value: "{{ states('sensor.volume_cuve_litre') }}"
description: Creer une entrée agenda pour le changement du filtre eau de Cuve
icon: mdi:calendar-check-outline



4 et 5/ Et enfin, le code de la carte associée, attention c'est chargé parce qu'il y a pas mal de mise en forme conditionnelle pour les statuts d'alertes.
J'ai conditionné, pour l'instant et de manière arbitraire le cubage à 10m3, il sera certainement plus haut par la suite. Par contre j'ai également mis une condition de temps, j'estime qu'à 6 mois, le filtre doit être changé pour des raisons d'hygiène évidente.

J'ai donc 2 types d'alertes :
L'alerte mineure, en jaune, qui dit "Changement filtre à prévoir", avec un badge de type "information"
L'alerte sévère, en rouge, qui dit " Filtre à changer !", avec un badge de type "attention, avec un effet de halo rouge sur le badge et la tuile qui clignote pour attirer l'attention

Code :
         - type: custom:mushroom-template-card
           icon: mdi:air-filter
           icon_color: blue
           name: Filtre changé ?
           layout: vertical
           primary: Changer filtres eau de cuve ?
           tap_action:
             action: call-service
             confirmation:
               text: Valider le changement des filtres d'eau de cuve ?
             service: script.set_change_filtre_cuve
           secondary: >
             {% if ((states('sensor.volume_cuve_litre') | int) -
             (states('input_number.volume_changement_filtre_cuve_litre') | int)
             > 10000 ) or ((now() -
             states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
             > 180)  %}
               Vie : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_litre') | int)) / 1000) }} m³
               Filtre à changer !
             {% elif (((states('sensor.volume_cuve_litre') | int) -
             (states('input_number.volume_changement_filtre_cuve_litre') | int)
             < 10000) and ((states('sensor.volume_cuve_litre') | int) -
             (states('input_number.volume_changement_filtre_cuve_litre') | int)
             > 8000)) or (((now() -
             states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
             < 180) and ((now() -
             states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
             > 150)) %}
               Vie : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_litre') | int)) / 1000) }} m³
               Changement filtre à prévoir      
             {% else %}
               Vie : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_litre') | int)) / 1000) }} m³
             {% endif %}
           badge_icon: >
             {% if ((states('sensor.volume_cuve_litre') | int) -
             (states('input_number.volume_changement_filtre_cuve_litre') | int)
             > 10000 ) or ((now() -
             states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
             > 180)  %}
                 mdi:alert
             {% elif (((states('sensor.volume_cuve_litre') | int) -
             (states('input_number.volume_changement_filtre_cuve_litre') | int)
             < 10000) and ((states('sensor.volume_cuve_litre') | int) -
             (states('input_number.volume_changement_filtre_cuve_litre') | int)
             > 8000))

             or (((now() -
             states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
             < 180) and ((now() -
             states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
             > 150)) %}
                 mdi:information-symbol
             {% endif %}
           badge_color: >
             {% if ((states('sensor.volume_cuve_litre') | int) -
             (states('input_number.volume_changement_filtre_cuve_litre') | int)
             > 10000 ) or ((now() -
             states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
             > 180)  %}
                 red
             {% elif (((states('sensor.volume_cuve_litre') | int) -
             (states('input_number.volume_changement_filtre_cuve_litre') | int)
             < 10000) and ((states('sensor.volume_cuve_litre') | int) -
             (states('input_number.volume_changement_filtre_cuve_litre') | int)
             > 8000))

             or (((now() -
             states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
             < 180) and ((now() -
             states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
             > 150)) %}
                 amber
             {% endif %}
           multiline_secondary: true
           card_mod:
             style:
               .: >
                 {% if ((states('sensor.volume_cuve_litre') | int) -
                 (states('input_number.volume_changement_filtre_cuve_litre') |
                 int) > 10000 ) or ((now() -
                 states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
                 > 180)  %}

                 ha-card {
                   animation: ping 1s infinite;
                 }

                 @keyframes ping {
                     0% {box-shadow: 0 0 0 0 rgba(var(--rgb-red), 0.7);}
                     70% {box-shadow: 0 0 0 10px transparent;}
                     100% {box-shadow: 0 0 0 0 transparent;}
                 }

                 {% elif (((states('sensor.volume_reseau_litre') | int) -
                 (states('input_number.volume_changement_filtre_ville_litre') |
                 int) < 10000) and ((states('sensor.volume_reseau_litre') |
                 int) -
                 (states('input_number.volume_changement_filtre_ville_litre') |
                 int) > 8000)) or (((now() -
                 states('input_button.sensor_date_filtre_eau_ville')|as_datetime).days
                 < 180) and ((now() -
                 states('input_button.sensor_date_filtre_eau_ville')|as_datetime).days
                 > 150)) %}

                 {% else %}

                 ha-card {
                   padding-bottom: 15px !important;
                 }  

                 {% endif %}
               mushroom-badge-icon$: >
                 {% if ((states('sensor.volume_cuve_litre') | int) -
                 (states('input_number.volume_changement_filtre_cuve_litre') |
                 int) > 10000 ) or ((now() -
                 states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
                 > 180)  %}

                 .badge {
                   animation: ping 1s infinite;
                   --badge-icon-size: 22px;
                   --badge-size: 30px;
                 }

                 @keyframes ping {
                     0% {box-shadow: 0 0 0 0 rgba(var(--rgb-red), 0.7);}
                     50% {box-shadow: 0 0 0 10px transparent;}
                     100% {box-shadow: 0 0 0 0 transparent;}
                 }

                 {% elif (((states('sensor.volume_cuve_litre') | int) -
                 (states('input_number.volume_changement_filtre_cuve_litre') |
                 int) < 10000) and ((states('sensor.volume_cuve_litre') | int)
                 - (states('input_number.volume_changement_filtre_cuve_litre')
                 | int) > 8000)) or (((now() -
                 states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
                 < 180) and ((now() -
                 states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
                 > 150)) %}

                 .badge {
                   --badge-icon-size: 40px;
                   --badge-size: 30px;
                 }

                 {% endif %}
               mushroom-shape-icon$: |
                 .shape {
                   --icon-symbol-size: 40px;
                   --icon-size: 60px;
                 }
               mushroom-state-info$: >
                 {% if ((states('sensor.volume_cuve_litre') | int) -
                 (states('input_number.volume_changement_filtre_cuve_litre') |
                 int) > 10000 ) or ((now() -
                 states('input_button.sensor_date_filtre_eau_cuve')|as_datetime).days
                 > 180)  %}

                 .container {
                   --card-secondary-color: red;
                 }

                 {% elif (((states('sensor.volume_reseau_litre') | int) -
                 (states('input_number.volume_changement_filtre_ville_litre') |
                 int) < 10000) and ((states('sensor.volume_reseau_litre') |
                 int) -
                 (states('input_number.volume_changement_filtre_ville_litre') |
                 int) > 8000)) or (((now() -
                 states('input_button.sensor_date_filtre_eau_ville')|as_datetime).days
                 < 180) and ((now() -
                 states('input_button.sensor_date_filtre_eau_ville')|as_datetime).days
                 > 150)) %}

                 .container {
                   --card-secondary-color: orange;
                 }

                 {% endif %}

Voilà ! Amusez-vous bien  Big Grin