Files
mash-lab/template.yaml
T
2026-06-16 18:25:28 +02:00

350 lines
13 KiB
YAML

- sensor:
- name: "timer_ch_duration"
state: "{{ (states('input_number.timer_ch') | int * 60) | int }}"
unit_of_measurement: "seconds"
- name: "Grocy Chores Weekly"
unique_id: grocy_chores_weekly
state: >
{{ state_attr('sensor.grocy_chores', 'chores')
| selectattr('period_type', 'equalto', 'weekly')
| list | count }}
attributes:
chores: >
{{ state_attr('sensor.grocy_chores', 'chores')
| selectattr('period_type', 'equalto', 'weekly')
| list }}
- name: "Grocy Chores Monthly"
unique_id: grocy_chores_monthly
state: >
{{ state_attr('sensor.grocy_chores', 'chores')
| selectattr('period_type', 'equalto', 'monthly')
| list | count }}
attributes:
chores: >
{{ state_attr('sensor.grocy_chores', 'chores')
| selectattr('period_type', 'equalto', 'monthly')
| list }}
- name: "Grocy Chores Adaptive"
unique_id: grocy_chores_adaptive
state: >
{{ state_attr('sensor.grocy_chores', 'chores')
| selectattr('period_type', 'equalto', 'adaptive')
| list | count }}
attributes:
chores: >
{{ state_attr('sensor.grocy_chores', 'chores')
| selectattr('period_type', 'equalto', 'adaptive')
| list }}
- name: "Lumieres Allumees"
unique_id: lumieres_allumees
state: >
{{ expand('light.lumieres')
| selectattr('state', 'eq', 'on') | list | count }}
unit_of_measurement: "allumée(s)"
- name: "Volets Ouverts"
unique_id: volets_ouverts
state: >
{{ expand('cover.volets')
| selectattr('state', 'eq', 'open') | list | count }}
unit_of_measurement: "ouvert(s)"
- name: "Prises Actives"
unique_id: prises_actives
state: >
{{ expand('switch.prises')
| selectattr('state', 'eq', 'on') | list | count }}
unit_of_measurement: "active(s)"
- name: "Ouvertures Ouvertes"
unique_id: ouvertures_ouvertes
state: >
{{ expand('binary_sensor.ouvrants')
| selectattr('state', 'eq', 'on') | list | count }}
unit_of_measurement: "ouvert(s)"
- name: "Watchman Missing"
unique_id: watchman_missing
state: >
{{ state_attr("sensor.watchman_missing_entities", "entities")
| selectattr('state', 'eq', 'missing') | list | count }}
icon: mdi:alert-circle
- name: "Watchman Unavail"
unique_id: watchman_unavail
state: >
{{ state_attr("sensor.watchman_missing_entities", "entities")
| selectattr('state', 'eq', 'unavail') | list | count }}
icon: mdi:alert-circle-outline
- name: "HACS Intégrations count"
unique_id: hacs_integrations_count
state: >
{{ integration_entities('hacs') | list | count }}
icon: mdi:package-variant
- name: "Grocy - Corvées hebdo réalisées"
unique_id: grocy_weekly_done
unit_of_measurement: "corvées"
icon: mdi:check-circle
state: >
{% set chores = state_attr('sensor.grocy_chores_weekly', 'chores') %}
{% if chores %}
{% set week_start = now().replace(hour=0, minute=0, second=0, microsecond=0) - timedelta(days=now().weekday()) %}
{{ chores | selectattr('last_tracked_time', 'ne', None)
| selectattr('last_tracked_time', 'ge', week_start.isoformat())
| list | count }}
{% else %}
0
{% endif %}
- name: "Grocy - Corvées hebdo restantes"
unique_id: grocy_weekly_remaining
unit_of_measurement: "corvées"
icon: mdi:clock-alert
state: >
{% set chores = state_attr('sensor.grocy_chores_weekly', 'chores') %}
{% if chores %}
{% set dow = now().weekday() %}
{% set days_to_friday = (4 - dow) % 7 %}
{% set friday_end = (now().replace(hour=23, minute=59, second=59, microsecond=0) + timedelta(days=days_to_friday)).isoformat() %}
{{ chores | selectattr('next_estimated_execution_time', 'ne', None)
| selectattr('next_estimated_execution_time', 'le', friday_end)
| list | count }}
{% else %}
0
{% endif %}
- name: "Grocy - Corvées mensuelles réalisées"
unique_id: grocy_monthly_done
unit_of_measurement: "corvées"
icon: mdi:check-circle
state: >
{% set chores = state_attr('sensor.grocy_chores_monthly', 'chores') %}
{% if chores %}
{% set week_start = now().replace(hour=0, minute=0, second=0, microsecond=0) - timedelta(days=now().weekday()) %}
{{ chores | selectattr('last_tracked_time', 'ne', None)
| selectattr('last_tracked_time', 'ge', week_start.isoformat())
| list | count }}
{% else %}
0
{% endif %}
- name: "Grocy - Corvées mensuelles restantes"
unique_id: grocy_monthly_remaining
unit_of_measurement: "corvées"
icon: mdi:clock-alert
state: >
{% set chores = state_attr('sensor.grocy_chores_monthly', 'chores') %}
{% if chores %}
{% set dow = now().weekday() %}
{% set days_to_friday = (4 - dow) % 7 %}
{% set friday_end = (now().replace(hour=23, minute=59, second=59, microsecond=0) + timedelta(days=days_to_friday)).isoformat() %}
{{ chores | selectattr('next_estimated_execution_time', 'ne', None)
| selectattr('next_estimated_execution_time', 'le', friday_end)
| list | count }}
{% else %}
0
{% endif %}
- name: "Grocy - Corvées adaptatives réalisées"
unique_id: grocy_adaptive_done
unit_of_measurement: "corvées"
icon: mdi:check-circle
state: >
{% set chores = state_attr('sensor.grocy_chores_adaptive', 'chores') %}
{% if chores %}
{% set week_start = now().replace(hour=0, minute=0, second=0, microsecond=0) - timedelta(days=now().weekday()) %}
{{ chores | selectattr('last_tracked_time', 'ne', None)
| selectattr('last_tracked_time', 'ge', week_start.isoformat())
| list | count }}
{% else %}
0
{% endif %}
- name: "Grocy - Corvées adaptatives restantes"
unique_id: grocy_adaptive_remaining
unit_of_measurement: "corvées"
icon: mdi:clock-alert
state: >
{% set chores = state_attr('sensor.grocy_chores_adaptive', 'chores') %}
{% if chores %}
{% set dow = now().weekday() %}
{% set days_to_friday = (4 - dow) % 7 %}
{% set friday_end = (now().replace(hour=23, minute=59, second=59, microsecond=0) + timedelta(days=days_to_friday)).isoformat() %}
{{ chores | selectattr('next_estimated_execution_time', 'ne', None)
| selectattr('next_estimated_execution_time', 'le', friday_end)
| list | count }}
{% else %}
0
{% endif %}
- name: "Calendrier Mashome prochain"
unique_id: calendar_mashome_next
state: >
{% set next = state_attr('calendar.mashome', 'start_time') %}
{% if next %}
{% set diff = (as_local(as_datetime(next)) - now()).days %}
{{ diff <= 6 and diff >= 0 }}
{% else %}
false
{% endif %}
- name: "Calendrier Garbage prochain"
unique_id: calendar_garbage_next
state: >
{% set next = state_attr('calendar.garbage', 'start_time') %}
{% if next %}
{% set diff = (as_local(as_datetime(next)) - now()).days %}
{{ diff <= 6 and diff >= 0 }}
{% else %}
false
{% endif %}
- name: "Calendrier Garden prochain"
unique_id: calendar_garden_next
state: >
{% set next = state_attr('calendar.garden', 'start_time') %}
{% if next %}
{% set diff = (as_local(as_datetime(next)) - now()).days %}
{{ diff <= 6 and diff >= 0 }}
{% else %}
false
{% endif %}
- name: "Calendrier Bestioles prochain"
unique_id: calendar_bestioles_next
state: >
{% set next = state_attr('calendar.bestioles', 'start_time') %}
{% if next %}
{% set diff = (as_local(as_datetime(next)) - now()).days %}
{{ diff <= 30 and diff >= 0 }}
{% else %}
false
{% endif %}
- sensor:
- name: mojo_delai_repas
unique_id: mojo_delai_repas
state: >
{% set last = states.sensor.nutri_mojo_dernier_montant.last_changed %}
{% set diff = (now() - last).total_seconds() | int %}
{% set h = (diff // 3600) | int %}
{% set m = ((diff % 3600) // 60) | int %}
{% if h == 0 %}il y a {{ m }}min
{% elif h < 2 %}il y a {{ h }}h{{ '%02d' | format(m) }}
{% else %}il y a {{ h }}h
{% endif %}
attributes:
secondes: >
{{ (now() - states.sensor.nutri_mojo_dernier_montant.last_changed).total_seconds() | int }}
- name: mojo_delai_litiere
unique_id: mojo_delai_litiere
state: >
{% set last = states.counter.compteur_litiere.last_changed %}
{% set diff = (now() - last).total_seconds() | int %}
{% set h = (diff // 3600) | int %}
{% set m = ((diff % 3600) // 60) | int %}
{% if h == 0 %}il y a {{ m }}min
{% elif h < 2 %}il y a {{ h }}h{{ '%02d' | format(m) }}
{% else %}il y a {{ h }}h
{% endif %}
attributes:
secondes: >
{{ (now() - states.counter.compteur_litiere.last_changed).total_seconds() | int }}
- name: mojo_indice_confort
unique_id: mojo_indice_confort
unit_of_measurement: "/10"
state: >
{% set seuil = states('input_number.seuil_nettoyage_litiere') | float %}
{% set passages = states('counter.compteur_litiere') | int %}
{% set delai_repas = (now() - states.sensor.nutri_mojo_dernier_montant.last_changed).total_seconds() / 3600 %}
{% set score_litiere = [10 - ((passages / seuil) * 10) | round(0), 0] | max %}
{% set score_repas = [10 - ((delai_repas / 8) * 10) | round(0), 0] | max %}
{{ ((score_litiere * 0.5) + (score_repas * 0.5)) | round(1) }}
- name: mojo_humeur
unique_id: mojo_humeur
state: >
{% set seuil = states('input_number.seuil_nettoyage_litiere') | float %}
{% set passages = states('counter.compteur_litiere') | int %}
{% set delai_repas = (now() - states.sensor.nutri_mojo_dernier_montant.last_changed).total_seconds() / 3600 %}
{% set litiere_ok = passages < seuil * 0.5 %}
{% set litiere_sale = passages > seuil * 0.8 %}
{% set repas_recent = delai_repas < 2 %}
{% set affame = delai_repas > 6 %}
{% if affame and litiere_sale %}Affamé et en colère
{% elif affame %}Affamé
{% elif litiere_sale %}Grognon
{% elif repas_recent and litiere_ok %}Roi du monde
{% elif repas_recent %}Content
{% else %}Neutre
{% endif %}
attributes:
icone: >
{% set h = states('sensor.mojo_humeur') %}
{% if h == 'Affamé et en colère' %}😾🍽️
{% elif h == 'Affamé' %}🍽️😿
{% elif h == 'Grognon' %}😾
{% elif h == 'Roi du monde' %}👑😸
{% elif h == 'Content' %}😸
{% else %}🐱
{% endif %}
citation: >
{% set h = states('sensor.mojo_humeur') %}
{% if h == 'Affamé et en colère' %}Tu pourrais faire un effort sur les deux fronts non ?!
{% elif h == 'Affamé' %}Je vois des croquettes partout... des croquettes imaginaires...
{% elif h == 'Grognon' %}Cette litière est une insulte à ma dignité féline.
{% elif h == 'Roi du monde' %}La vie est belle. Je règne sur tout ce que je vois.
{% elif h == 'Content' %}Zzz... bien mangé, bien fait... zzz...
{% else %}J'observe. J'attends. Je suis un chat.
{% endif %}
- name: mojo_barre_faim
unique_id: mojo_barre_faim
unit_of_measurement: "%"
state: >
{% set repas_s = state_attr('sensor.mojo_delai_repas', 'secondes') | int(0) %}
{{ [[((1 - repas_s / 28800) * 100) | round, 0] | max, 100] | min }}
- name: mojo_barre_hygiene
unique_id: mojo_barre_hygiene
unit_of_measurement: "%"
state: >
{% set passages = states('counter.compteur_litiere') | int %}
{% set seuil = states('input_number.seuil_nettoyage_litiere') | float(10) %}
{{ [[((1 - passages / seuil) * 100) | round, 0] | max, 100] | min }}
- name: mojo_barre_energie
unique_id: mojo_barre_energie
unit_of_measurement: "%"
state: >
{% set h = now().hour %}
{% if h >= 6 and h <= 9 %}90
{% elif h >= 17 and h <= 20 %}85
{% elif h >= 13 and h <= 15 %}15
{% elif h >= 22 or h < 5 %}10
{% else %}55{% endif %}
- name: mojo_barre_calins
unique_id: mojo_barre_calins
unit_of_measurement: "%"
state: >
{{ ((now().minute * 7 + now().hour * 13) % 50) + 30 }}
- name: mojo_barre_capteur
unique_id: mojo_barre_capteur
unit_of_measurement: "%"
state: >
{% set b = states('sensor.litiere_etat_batterie') %}
{% if b == 'high' %}90
{% elif b == 'middle' %}50
{% elif b == 'low' %}15
{% else %}0{% endif %}