Messages : 3,389
Sujets : 39
Inscription : Mar 2013
(13/05/2024, 15:00:07)Christophe0110 a écrit : Ah oui d'accord, tu es motivé toi
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
Messages : 1,268
Sujets : 88
Inscription : Jul 2016
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?
Messages : 3,389
Sujets : 39
Inscription : Mar 2013
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.
Messages : 502
Sujets : 14
Inscription : Mar 2021
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...
Messages : 3,389
Sujets : 39
Inscription : Mar 2013
(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)!
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.
Messages : 502
Sujets : 14
Inscription : Mar 2021
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+
Messages : 3,389
Sujets : 39
Inscription : Mar 2013
Bonjour Christophe,
Depuis cette page "Pièces De Vie" (PDV)
Si j'appuie, par exemple, sur l'image "Salon", il s'affiche directement cette page (qui est une sous-vue) :
Voici le code de l'image salon :
type: picture
image: http:/local/Salon3.png
tap_action:
action: navigate
navigation_path: /lovelace/salon
Messages : 502
Sujets : 14
Inscription : Mar 2021
30/08/2024, 17:50:17
(Modification du message : 30/08/2024, 17:50:51 par Christophe0110.)
Merci pour ta réponse Ives.
Ok mais alors, cette page contient également le détail du salon ?
Donc tu dois gérer 2x le détail du salon dans 2 pages séparées ?
Messages : 3,389
Sujets : 39
Inscription : Mar 2013
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
Messages : 502
Sujets : 14
Inscription : Mar 2021
Ok, c'est clair dans ma tête maintenant
Merci
Messages : 438
Sujets : 23
Inscription : Feb 2020
03/09/2024, 18:26:52
(Modification du message : 03/09/2024, 18:29:20 par XeNo.)
@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 ?
Messages : 3,389
Sujets : 39
Inscription : Mar 2013
(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)
Messages : 438
Sujets : 23
Inscription : Feb 2020
05/09/2024, 21:03:13
(Modification du message : 05/09/2024, 21:20:21 par XeNo.)
Merci pour ta réponse.
Bon ca y est j'y suis arrivé après un peu de temps !
Voici donc les cards :
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)
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)
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)
Les tuiles sont également dynamiques, en fonction de critères de cubage et de durée, 2 types d'alertes apparaissent :
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.
Messages : 3,389
Sujets : 39
Inscription : Mar 2013
C'est bien complet. Poster le code serait un plus !
Messages : 1,128
Sujets : 28
Inscription : May 2017
Oui Super cela l’interface HA très dynamique
Messages : 438
Sujets : 23
Inscription : Feb 2020
06/09/2024, 18:33:38
(Modification du message : 06/09/2024, 18:40:30 par XeNo.)
(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
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)
2/Les 2 (4 pour moi) entités fantômes (Paramètres/Automatisations et scènes/scripts)
3/Le code du script qui sera lancé par le bouton (à multiplier fonction de vos besoins) :
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
Messages : 438
Sujets : 23
Inscription : Feb 2020
@Yves,
Tu utilises quoi comme système de capteur de niveau de sel actuellement ?
J'ai vu plusieurs systèmes (soit détection hf, soit détection de conduction), mais je me demande s'il existe d'autres systèmes.
Merci d'avance,
Messages : 3,389
Sujets : 39
Inscription : Mar 2013
12/09/2024, 07:22:48
(Modification du message : 12/09/2024, 08:17:22 par Ives.)
@Xeno
Le plus basique qui existe pour détecter le niveau bas du sel : un flotteur de ce type simplement posé sur le sel. Il suffit de régler la longueur du fil pour qu'il bascule à la hauteur désirée afin de disposer d'une petite réserve.
Et merci pour le code !
Messages : 3,389
Sujets : 39
Inscription : Mar 2013
Une solution très facile à mettre en place pour le suivi d'une tâche d'entretien (filtre ou autre) avec des notifications est l'utilisation du calendrier local HA. On peut créer autant de calendriers que d'appareils à suivre. Un exemple de l'affichage en mode liste (période de 7 jours).
Actuellement la période d'affichage des évènements est de 7 jours et n'est pas modifiable ; il faut donc utiliser les flèches < > pour naviguer dans le temps mais on peut espérer une évolution future (déjà demandée dans le GitHub)
Cette vidéo résume les fonctionnalités du calendrier local.
Messages : 438
Sujets : 23
Inscription : Feb 2020
10/11/2024, 11:46:10
(Modification du message : 10/11/2024, 12:05:19 par XeNo.)
En m'étant trompé de référence lors de ma commande de filtres à eau, je me suis aperçu d'un manquement dans ma gestion.
J'ai donc optimisé un peu la chose pour pouvoir choisir le/les filtres à changer.
Les automations présentées précédemment sont toujours d'actualité (dynamisme, couleur, animation, etc.) mais cette fois ci, on scinde les filtres, et surtout on peu choisir ce qu'on veut changer (ou pas)
Voici donc ce que ça donne à présent :
Dashboard
En cliquant dessus pour changer le/les filtre(s) (on peut ajouter autant de niveau de filtration que voulu, il faudra juste refaire toutes les conditions de tuile -ce qui est assez long je vous l'avoue !) :
Les différents types de filtres (liste construite en fonction de ce qui est disponible sur le commerce ou dans les habitudes, on peut le changer facilement)
L'entrée agenda qui est générée (qui s'adapte si on change l'un des filtres ou les 2)
Il y a un bug d'affichage dans l'entrée d'agenda, elle ne prend pas le retour à la ligne, pourtant il y est bien :
Voici les éléments à créer dans les "entrées" de HA (ici pour 2 étages de filtration, à répéter au besoin donc)
Messages : 438
Sujets : 23
Inscription : Feb 2020
10/11/2024, 12:07:45
Voici les éléments à créer dans les "entrées" de HA (ici pour 2 étages de filtration, à répéter au besoin donc)
Le script qui est lancé :
Code : alias: Set Change Filtres Cuve1-2
sequence:
- if:
- condition: and
conditions:
- condition: not
conditions:
- condition: state
entity_id: input_select.liste_type_filtre_eau_cuve_1_nouveau
state: Pas de changement de filtre
- condition: not
conditions:
- condition: state
entity_id: input_select.liste_type_filtre_eau_cuve_2_nouveau
state: Pas de changement de filtre
then:
- action: calendar.create_event
target:
entity_id: calendar.filtres_eau
data:
summary: Changement filtres cuve
description: >
Premiere filtration - Le {{
states('input_select.liste_type_filtre_eau_cuve_1_courant') }} a
duré {{ (now() -
states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days
}} jours/{{ (states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') | int)
}} Litres
Deuxième filtration - Le {{
states('input_select.liste_type_filtre_eau_cuve_2_courant') }} a
duré {{ (now() -
states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days
}} jours/{{ (states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') | int)
}} Litres
start_date: |
{{ now().date() }}
end_date: |
{{ now().date() + timedelta(days=1) }}
- action: input_select.select_option
metadata: {}
data:
option: "{{states('input_select.liste_type_filtre_eau_cuve_1_nouveau')}}"
target:
entity_id: input_select.liste_type_filtre_eau_cuve_1_courant
- action: input_button.press
target:
entity_id: input_button.sensor_date_filtre_eau_cuve_1
data: {}
- action: input_number.set_value
target:
entity_id: input_number.volume_changement_filtre_cuve_1_litre
data:
value: "{{ states('sensor.volume_cuve_litre') }}"
- action: input_select.select_option
metadata: {}
data:
option: "{{states('input_select.liste_type_filtre_eau_cuve_2_nouveau')}}"
target:
entity_id: input_select.liste_type_filtre_eau_cuve_2_courant
- action: input_button.press
target:
entity_id: input_button.sensor_date_filtre_eau_cuve_2
data: {}
- action: input_number.set_value
target:
entity_id: input_number.volume_changement_filtre_cuve_2_litre
data:
value: "{{ states('sensor.volume_cuve_litre') }}"
- if:
- condition: and
conditions:
- condition: not
conditions:
- condition: state
entity_id: input_select.liste_type_filtre_eau_cuve_1_nouveau
state: Pas de changement de filtre
- condition: state
entity_id: input_select.liste_type_filtre_eau_cuve_2_nouveau
state: Pas de changement de filtre
then:
- action: calendar.create_event
target:
entity_id: calendar.filtres_eau
data:
summary: Changement filtres cuve
description: >-
Premiere filtration - Le {{
states('input_select.liste_type_filtre_eau_cuve_1_courant') }} a
duré {{ (now() -
states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days
}} jours/{{ (states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') | int)
}} Litres
start_date: |
{{ now().date() }}
end_date: |
{{ now().date() + timedelta(days=1) }}
- action: input_select.select_option
metadata: {}
data:
option: "{{states('input_select.liste_type_filtre_eau_cuve_1_nouveau')}}"
target:
entity_id: input_select.liste_type_filtre_eau_cuve_1_courant
- action: input_button.press
target:
entity_id: input_button.sensor_date_filtre_eau_cuve_1
data: {}
- action: input_number.set_value
target:
entity_id: input_number.volume_changement_filtre_cuve_1_litre
data:
value: "{{ states('sensor.volume_cuve_litre') }}"
- if:
- condition: and
conditions:
- condition: not
conditions:
- condition: state
entity_id: input_select.liste_type_filtre_eau_cuve_2_nouveau
state: Pas de changement de filtre
- condition: state
entity_id: input_select.liste_type_filtre_eau_cuve_1_nouveau
state: Pas de changement de filtre
then:
- action: calendar.create_event
target:
entity_id: calendar.filtres_eau
data:
summary: Changement filtre cuve
description: >-
Deuxième filtration - Le {{
states('input_select.liste_type_filtre_eau_cuve_2_courant') }} a
duré {{ (now() -
states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days
}} jours/{{ (states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') | int)
}} Litres
start_date: |
{{ now().date() }}
end_date: |
{{ now().date() + timedelta(days=1) }}
- action: input_select.select_option
metadata: {}
data:
option: "{{states('input_select.liste_type_filtre_eau_cuve_2_nouveau')}}"
target:
entity_id: input_select.liste_type_filtre_eau_cuve_2_courant
- action: input_button.press
target:
entity_id: input_button.sensor_date_filtre_eau_cuve_2
data: {}
- action: input_number.set_value
target:
entity_id: input_number.volume_changement_filtre_cuve_2_litre
data:
value: "{{ states('sensor.volume_cuve_litre') }}"
description: Creer une entrée agenda pour le changement des filtre eau de Cuve 1 et 2
icon: mdi:calendar-check-outline
Le code de la tuile concernée (ici double étage de filtration toujours)
Code : - type: custom:mushroom-template-card
icon: mdi:air-filter
icon_color: blue
name: Filtre changé ?
layout: vertical
primary: Etat filtres eau de cuve
tap_action:
action: fire-dom-event
browser_mod:
service: browser_mod.popup
data:
title: Changement des filtres d'eau de cuve
content:
type: custom:vertical-stack-in-card
cards:
- type: horizontal-stack
cards:
- type: vertical-stack
cards:
- type: custom:mushroom-title-card
title: null
subtitle: >-
Choisir les types de filtres qui seront
utilisés pour le remplacement puis valider.
card_mod:
style: |
ha-card {
margin-left: 30px;
margin-right: 30px;
}
- type: custom:mushroom-select-card
entity: >-
input_select.liste_type_filtre_eau_cuve_1_nouveau
name: >-
Type de filtre qui sera installé en première
filtration ?
secondary_info: none
card_mod:
style: |
ha-card {
margin-left: 30px;
margin-right: 30px;
}
- type: custom:mushroom-select-card
entity: >-
input_select.liste_type_filtre_eau_cuve_2_nouveau
name: >-
Type de filtre qui sera installé en seconde
filtration ?
secondary_info: none
card_mod:
style: |
ha-card {
margin-left: 30px;
margin-right: 30px;
}
- type: horizontal-stack
cards:
- type: custom:gap-card
- type: custom:mushroom-template-card
icon: mdi:tooltip-check-outline
primary: Valider
fill_container: false
icon_color: green
tap_action:
action: call-service
confirmation:
text: >-
Valider le changement du/des filtre(s)
d'eau de cuve maintenant ?
service: script.set_change_filtres_cuve1_2
card_mod:
style:
.: |
ha-card {
margin-top: 30px;
margin-bottom: 30px;
}
- type: custom:gap-card
secondary: "{% if ((now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days > 180) and ((now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days > 180) %}\n Vie filtre 1 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int)) / 1000) }} m³\n Vie filtre 2 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int)) / 1000) }} m³\n Filtre à changer !\n{% elif ((now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days > 180) %}\n Vie filtre 1 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int)) / 1000) }} m³\n Vie filtre 2 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int)) / 1000) }} m³\n Filtre 1 à changer !\n{% elif ((now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days > 180) %}\n Vie filtre 1 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int)) / 1000) }} m³\n Vie filtre 2 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int)) / 1000) }} m³\n Filtre 2 à changer !\n{% elif ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int) > 10000 ) and ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int) > 10000 ) %}\n Vie filtre 1 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int)) / 1000) }} m³\n Vie filtre 2 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int)) / 1000) }} m³\n Filtre à changer !\n{% elif ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int) > 10000 ) %}\n Vie filtre 1 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int)) / 1000) }} m³\n Vie filtre 2 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int)) / 1000) }} m³\n Filtre 1 à changer !\n{% elif ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int) > 10000 ) %}\n Vie filtre 1 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int)) / 1000) }} m³\n Vie filtre 2 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int)) / 1000) }} m³\n Filtre 2 à changer !\n{% elif ((((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int) < 10000) and ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int) > 8000))) or ((((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int) < 10000) and ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int) > 8000))) %}\n Vie filtre 1 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int)) / 1000) }} m³\n Vie filtre 2 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int)) / 1000) }} m³\n Changement Filtres à prévoir\n{% elif (((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int) < 10000) and ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int) > 8000)) %}\n Vie filtre 1 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int)) / 1000) }} m³\n Vie filtre 2 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int)) / 1000) }} m³\n Changement Filtre 1 à prévoir\n{% elif (((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int) < 10000) and ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int) > 8000)) %}\t\t\t\t\n Vie filtre 1 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int)) / 1000) }} m³\nVie filtre 2 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int)) / 1000) }} m³ Changement Filtre 2 à prévoir {% else %}\n Vie filtre 1 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int)) / 1000) }} m³\nVie filtre 2 : {{ (now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days }} jour(s) / {{ '%0.2f' | format(((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int)) / 1000) }} m³ {% endif %}\n"
badge_icon: >
{% if ((now() -
states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days
> 180) and ((now() -
states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days
> 180) %}
mdi:alert
{% elif ((now() -
states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days
> 180) %}
mdi:alert
{% elif ((now() -
states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days
> 180) %}
mdi:alert
{% elif ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') |
int) > 10000 ) and ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') |
int) > 10000 ) %}
mdi:alert
{% elif ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') |
int) > 10000 ) %}
mdi:alert
{% elif ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') |
int) > 10000 ) %}
mdi:alert
{% elif ((((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') |
int) < 10000) and ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') |
int) > 8000))) or ((((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') |
int) < 10000) and ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') |
int) > 8000))) %}
mdi:information-symbol
{% elif (((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') |
int) < 10000) and ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') |
int) > 8000)) %}
mdi:information-symbol
{% elif (((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') |
int) < 10000) and ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') |
int) > 8000)) %}
mdi:information-symbol
{% endif %}
badge_color: >
{% if ((now() -
states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days
> 180) and ((now() -
states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days
> 180) %}
red
{% elif ((now() -
states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days
> 180) %}
red
{% elif ((now() -
states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days
> 180) %}
red
{% elif ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') |
int) > 10000 ) and ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') |
int) > 10000 ) %}
red
{% elif ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') |
int) > 10000 ) %}
red
{% elif ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') |
int) > 10000 ) %}
red
{% elif ((((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') |
int) < 10000) and ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') |
int) > 8000))) or ((((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') |
int) < 10000) and ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') |
int) > 8000))) %}
amber
{% elif (((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') |
int) < 10000) and ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre') |
int) > 8000)) %}
amber
{% elif (((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') |
int) < 10000) and ((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre') |
int) > 8000)) %}
amber
{% endif %}
multiline_secondary: true
card_mod:
style:
.: >
{% if ((now() -
states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days
> 180) and ((now() -
states('input_button.sensor_date_filtre_eau_cuve_2')|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 ((now() -
states('input_button.sensor_date_filtre_eau_cuve_1')|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 ((now() -
states('input_button.sensor_date_filtre_eau_cuve_2')|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_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre')
| int) > 10000 ) and ((states('sensor.volume_cuve_litre') |
int) -
(states('input_number.volume_changement_filtre_cuve_2_litre')
| int) > 10000 ) %}
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_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre')
| int) > 10000 ) %}
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_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre')
| int) > 10000 ) %}
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;}
}
{% else %}
ha-card {
padding-bottom: 15px !important;
}
{% endif %}
mushroom-badge-icon$: >
{% if ((now() -
states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days
> 180) and ((now() -
states('input_button.sensor_date_filtre_eau_cuve_2')|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 ((now() -
states('input_button.sensor_date_filtre_eau_cuve_1')|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 ((now() -
states('input_button.sensor_date_filtre_eau_cuve_2')|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_1_litre')
| int) > 10000 ) and ((states('sensor.volume_cuve_litre') |
int) -
(states('input_number.volume_changement_filtre_cuve_2_litre')
| int) > 10000 ) %}
.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_1_litre')
| int) > 10000 ) %}
.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_2_litre')
| int) > 10000 ) %}
.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_1_litre')
| int) < 10000) and ((states('sensor.volume_cuve_litre') |
int) -
(states('input_number.volume_changement_filtre_cuve_1_litre')
| int) > 8000))) or ((((states('sensor.volume_cuve_litre') |
int) -
(states('input_number.volume_changement_filtre_cuve_2_litre')
| int) < 10000) and ((states('sensor.volume_cuve_litre') |
int) -
(states('input_number.volume_changement_filtre_cuve_2_litre')
| int) > 8000))) %}
.badge {
--badge-icon-size: 40px;
--badge-size: 30px;
{% elif (((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_1_litre')
| int) < 10000) and ((states('sensor.volume_cuve_litre') |
int) -
(states('input_number.volume_changement_filtre_cuve_1_litre')
| int) > 8000)) %}
.badge {
--badge-icon-size: 40px;
--badge-size: 30px;
{% elif (((states('sensor.volume_cuve_litre') | int) -
(states('input_number.volume_changement_filtre_cuve_2_litre')
| int) < 10000) and ((states('sensor.volume_cuve_litre') |
int) -
(states('input_number.volume_changement_filtre_cuve_2_litre')
| int) > 8000)) %}
.badge {
--badge-icon-size: 40px;
--badge-size: 30px;
{% endif %}
mushroom-shape-icon$: |
.shape {
--icon-symbol-size: 40px;
--icon-size: 60px;
}
mushroom-state-info$: "{% if ((now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days > 180) and ((now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days > 180) %}\n.container {\n --card-secondary-color: red;\n}\n{% elif ((now() - states('input_button.sensor_date_filtre_eau_cuve_1')|as_datetime).days > 180) %}\n.container {\n --card-secondary-color: red;\n}\n{% elif ((now() - states('input_button.sensor_date_filtre_eau_cuve_2')|as_datetime).days > 180) %}\n.container {\n --card-secondary-color: red;\n}\n{% elif ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int) > 10000 ) and ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int) > 10000 ) %}\n.container {\n --card-secondary-color: red;\n}\n{% elif ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int) > 10000 ) %}\n.container {\n --card-secondary-color: red;\n}\n{% elif ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int) > 10000 ) %}\n.container {\n --card-secondary-color: red;\n}\n{% elif ((((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int) < 10000) and ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int) > 8000))) or ((((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int) < 10000) and ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int) > 8000))) %}\n.container {\n --card-secondary-color: orange;\n}\n{% elif (((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int) < 10000) and ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_1_litre') | int) > 8000)) %}\n.container {\n --card-secondary-color: orange;\n}\n{% elif (((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int) < 10000) and ((states('sensor.volume_cuve_litre') | int) - (states('input_number.volume_changement_filtre_cuve_2_litre') | int) > 8000)) %}\t\t\t\t\n.container {\n --card-secondary-color: orange;\n}\n{% endif %}\n"
|