audit: nettoyage et corrections juin 2026

This commit is contained in:
root
2026-06-16 18:25:28 +02:00
parent 07377e5237
commit db478460be
8 changed files with 1862 additions and 0 deletions
+16
View File
@@ -0,0 +1,16 @@
.HA_VERSION
.cache/
.ha_run.lock
.shopping_list.json
.storage/
*.log
*.log.*
*.db
*.db-shm
*.db-wal
*.db.corrupt*
home-assistant_v2*
alexa_media*
tts/
image/
zigbee.db
+1272
View File
File diff suppressed because it is too large Load Diff
+10
View File
@@ -0,0 +1,10 @@
- platform: rest
name: gotify_notify
resource: http://192.168.42.10:7631/message
method: POST
headers:
X-Gotify-Key: "AIeuHYDyRvlAYxe"
message_param_name: message
title_param_name: title
data:
priority: 5
+65
View File
@@ -0,0 +1,65 @@
- id: '1755628384512'
name: "\U0001F319 Nuit"
entities:
light.lumieres:
state: 'off'
cover.volets:
state: closed
current_position: 0
media_player.echo_bureau:
volume_level: 0.4
is_volume_muted: false
source: Local Speaker
state: paused
media_player.echo_salon:
volume_level: 0.2
is_volume_muted: false
source: Local Speaker
state: idle
switch.home_cinema_prise:
state: 'off'
remote.bboxtv:
state: 'off'
switch.allee:
state: 'off'
switch.entree_veranda:
state: 'off'
icon: mdi:weather-night
metadata:
switch.allee:
entity_only: true
switch.entree_veranda:
entity_only: true
- id: '1755628647672'
name: Volets - Chaleur
entities:
cover.volets:
state: open
current_position: 37
icon: mdi:sun-thermometer-outline
- id: '1755628991599'
name: Cinéma
entities:
cover.volets:
state: closed
current_position: 0
switch.home_cinema_prise:
device_class: outlet
icon: mdi:toggle-switch-variant
friendly_name: Home cinema
state: 'on'
light.halogene:
state: 'off'
icon: mdi:movie
metadata:
light.halogene:
entity_only: true
- id: '1766314080516'
name: "\U0001F3E0 Départ"
entities:
light.lumieres:
state: 'off'
cover.volets:
state: open
current_position: 100
icon: mdi:home-export-outline
+124
View File
@@ -0,0 +1,124 @@
notif_gotify:
alias: "\U0001F4E2 Notification Gotify"
description:
Envoie une notification via Gotify avec cooldown anti-spam global 10min
(bypass si priorité ≥ 8)
fields:
title:
description: Titre de la notification
example: Doris
message:
description: Contenu du message
example: Le réservoir doit être vidé
priority:
description: Priorité (1-10)
example: 5
default: 5
sequence:
- condition: template
value_template:
"{{ (priority | default(5) | int) >= 8\n or (as_timestamp(now())
- as_timestamp(states('input_datetime.last_notification'))) > 600 }}\n"
- action: notify.gotify_notify
data:
title: "{{ title | default('Home Assistant') }}"
message: "{{ message }}"
data:
priority: "{{ priority | default(5) }}"
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.last_notification
data:
datetime: "{{ now() }}"
incrementer_cycle_doris:
alias: Incrémenter cycle Doris
sequence:
- action: counter.increment
data: {}
target:
entity_id: counter.cycle_doris
description: ""
reinitialiser_compteur_doris:
alias: "\U0001F9F9 Réinitialiser compteur Doris"
description: Remet le compteur à zéro après vidange du réservoir
sequence:
- action: counter.reset
target:
entity_id: counter.cycle_doris
- action: script.notif_gotify
data:
title: "\U0001F9F9 Doris"
message: Compteur remis à zéro après vidange
priority: 3
icon: mdi:refresh
mealie_semaine_precedente:
alias: Mealie - Semaine précédente
sequence:
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.mealie_semaine_ref
data:
date:
"{% set ref = states('input_datetime.mealie_semaine_ref') %} {% set
d = strptime(ref, '%Y-%m-%d') %} {{ (d.date() - timedelta(days=7)).strftime('%Y-%m-%d')
}}
"
- action: automation.trigger
target:
entity_id: automation.mealie_sync_menus_semaine
data:
skip_condition: true
mode: single
description: ""
mealie_cette_semaine:
alias: Mealie - Cette semaine
sequence:
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.mealie_semaine_ref
data:
date:
"{{ (now().date() - timedelta(days=now().weekday())).strftime('%Y-%m-%d')
}}
"
- action: automation.trigger
target:
entity_id: automation.mealie_sync_menus_semaine
data:
skip_condition: true
mode: single
description: ""
mealie_semaine_suivante:
alias: Mealie - Semaine suivante
sequence:
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.mealie_semaine_ref
data:
date:
"{% set ref = states('input_datetime.mealie_semaine_ref') %} {% set
d = strptime(ref, '%Y-%m-%d') %} {{ (d.date() + timedelta(days=7)).strftime('%Y-%m-%d')
}}
"
- action: automation.trigger
target:
entity_id: automation.mealie_sync_menus_semaine
data:
skip_condition: true
mode: single
description: ""
arreter_le_minuteur:
alias: Arrêter le minuteur
sequence:
- action: input_boolean.turn_off
target:
entity_id: input_boolean.timer_actif
- action: notify.mobile_app_tablette
data:
message: clear_notification
data:
tag: timer_alert
description: ""
+12
View File
@@ -0,0 +1,12 @@
# Use this file to store secrets like usernames and passwords.
# Learn more at https://www.home-assistant.io/docs/configuration/secrets/
some_password: welcome
#Synology Chat
syno_chat_res: https://192.168.42.12:5001/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=%22Vt6mzBxZ9cyyLEmB4KnymbTOPM37GJsarAq807u4OVFvX1YpiA4i9ZH0ejXPViN1%22
#Synology calendrier
calendar_pwd-moe: Berg@motte
# Mealie
mealie_token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb25nX3Rva2VuIjp0cnVlLCJpZCI6IjA3YWZiMjJkLWRlN2QtNDJiNC1hZWMzLTNkYTVkZjUyNDJkNSIsIm5hbWUiOiJHZXJhbGQiLCJpbnRlZ3JhdGlvbl9pZCI6ImdlbmVyaWMiLCJleHAiOjE5Mzg3MTA4Mzh9.C6TglhK9vx-db7bRicDBI1CDlFJUSlbUkCpYdAotUak"
+14
View File
@@ -0,0 +1,14 @@
- platform: rest
name: "Mealie Meal Plan"
unique_id: mealie_meal_plan
resource: "http://192.168.42.10:7670/api/groups/mealplans?orderBy=date&orderDirection=asc&perPage=20"
headers:
Authorization: "Bearer !secret mealie_token"
value_template: "{{ value_json.items | length }} repas planifiés"
json_attributes_path: "$.items"
json_attributes:
- date
- entryType
- title
- recipe
scan_interval: 3600
+349
View File
@@ -0,0 +1,349 @@
- 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 %}