Mise en place de la fonction packages dans configuration.yaml

Bonjour à tous,

Mon problème

Je veux essaye d’orgnisermes ma configuration yaml sous forme de packages. Mais j’ai beau tout essayer et cela ne fonctionne pas.
Voici le début de mon fichier des configuration.yaml:

# Loads default set of integrations. Do not remove.
default_config:

homeassistant:
  name: !secret homeassistant_name
  time_zone: !secret homeassistant_time_zone
  country: FR
  unit_system: metric
  external_url: !secret homeassistant_url_externe
  internal_url: !secret homeassistant_url_interne

  customize: !include customize.yaml
  packages: !include_dir_named packages

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
sensor: !include sensors.yaml
input_select: !include input_select.yaml
input_number: !include input_number.yaml
input_datetime: !include input_datetime.yaml
input_boolean: !include input_boolean.yaml
proximity: !include proximity.yaml

J’ai bien un dossier nommé « packages », dans lequel j’ai fais un fichier yaml nommé: « test.yaml » image
Voici son contenu:

input_number:
  test_position:
    name: test - Position désirée
    min: "-1"
    max: "100"
    step: "1"
    unit_of measurement: "%"

Je ne vois pas remonter ce nouveau input number dans la partie états de l’outils de développement, même après avoir rechargé le yaml, redémarrer HA…

Je dois louper quelque chose. Merci pour votre aide.

Ma configuration


System Information

version core-2023.6.2
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.11.4
os_name Linux
os_version 6.1.21-v8
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.32.1
Stage running
Available Repositories 1354
Downloaded Repositories 25
HACS Data ok
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 10.2
update_channel stable
supervisor_version supervisor-2023.06.2
agent_version 1.5.1
docker_version 23.0.6
disk_total 457.7 GB
disk_used 104.3 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons MariaDB (2.6.1), Samba share (10.0.2), phpMyAdmin (0.8.6), Duck DNS (1.15.0), UniFi Network Application (2.6.0), Terminal & SSH (9.7.1), Mosquitto broker (6.2.1), Zigbee2MQTT (1.31.2-1), Node-RED (14.2.2), InfluxDB (4.7.0), Studio Code Server (5.6.2), Grafana (8.3.0), File editor (5.6.0), rtl_433 (0.4.0), rtl_433 MQTT Auto Discovery (0.6.0), AppDaemon (0.13.1), ESPHome (2023.5.5)
Dashboards
dashboards 3
resources 15
views 11
mode storage
Recorder
oldest_recorder_run 10 juin 2023 à 08:34
current_recorder_run 15 juin 2023 à 12:52
estimated_db_size 2818.58 MiB
database_engine mysql
database_version 10.6.12

Bonjour,
sur la doc c’est expliquer Packages - Home Assistant

Comme ta déja déclarer input_number: !include input_number.yaml
Tu peu pas déclarer dans un autre yaml, vu que input_number: est déja utiliser.

input_number:
  test_position:
    name: test - Position désirée
    min: "-1"
    max: "100"
    step: "1"
    unit_of measurement: "%"

Merci pour ton retour,

Je viens d’ajouter la ligne input_number: !include input_number.yaml en commentaire, et recharger la configuration yaml, mais cela n’a rien changé. Sauf que je n’ai plus aucun input number.

Il me semblait justement que le principe même du package était de rassemble par objet et plus par fonction.

Bonjour

Il me semble qu’il faut que tu retire input_number de ton fichier test.yaml
test.yaml doit être dans packages


test_position:
  name: test - Position désirée
  min: "-1"
  max: "100"
  step: "1"
  unit_of measurement: "%"

Merci pour ton retour.

Mais ce n’est pas mieux. De plus si je retire input_number, comment lui indiquer. Car De ce que j’ai lu, tu peux mettre des input_number, des script, … dans le même fichier.

Voici mon organisation si cela peut t’aider :
J’ai sous home assistant un dossier intégrations (équivalent packages)
puis un dossier entities avec des sous dossiers sensors,input_number,etc…

Homeassistant |----integrations|--sensor.yaml
              |                |--input_number.yaml
              |
              |----entities--|---input_numbers|--volets.yaml
                             |                |--switch_auto.yaml 
                             | 
                             |---sensors|-- system_monitor.yaml
                                        |-- datetime.yaml                             

dans configurations.yaml j’ai :


## packages
homeassistant:
# Load packages
#  packages: !include_dir_named packages
  packages: !include_dir_named integrations
  whitelist_external_dirs:
    - /config/

dans input_number.yaml j’ai :

---
# input_number allows to follow some numbers
#
# https://www.home-assistant.io/components/input_number/
#
input_number: !include_dir_merge_named ../entities/input_numbers

dans le dossier input_numbers j’ai le fichier volets.yaml qui contient :

#############
#   ENTREE  #
#############
#input_number:
volets_auto_offset_ouvre:
  icon: mdi:weather-sunset-up
  name: Offset matin
  min: -90
  max: 90
  step: 1
  mode: slider
  
volets_auto_offset_ferme:
  icon: mdi:weather-sunset-down
  name: Offset soir
  min: -90
  max: 90
  step: 1
  mode: slider

Je ne sais pas si cela peut t’aider, mais je suis pas très doué pour les explications…

Bonjour @Nico.g2

Chez moi cela fonctionne très bien.

Home assistant va toujours dans la lecture du code de Bad en haut dans les fichier .yaml

Je te laisse ma config.

Merci pour ton retour.

Mais j’ai beau mettre en commentaire ma ligne input_number: !include input_number.yaml. Il ne charge pas plus le contenu de mon package.

Bonjour,

Il semblerait qu’il y ait des erreurs dans to input_number.
min, max, step sont des nombres, ils faut enlever les " "

input_number:
  test_position:
    name: "Test - Position désirée"
    min: -1
    max: 100
    step: 1
    unit_of_measurement: "%"

Après ces corrections, ton package devrait être chargé

Cordialement,

Abel

Effectivement. @Abel a raison :blush:

Salut,
moi j’ai créé un dossier packages/ dans le dossier config/
dans ce dossier packages, j’en ai plusieurs, chacun avec son dossier, et dans chaque dossier, un fichier .yaml avec le même nom que le dossier.

Exemple :
/config/packages/tiko/tiko.yaml

Et voici comment j’inclus mes packages dans mon fichier configuration.yaml:

homeassistant:
  packages: !include_dir_merge_named packages/

2 différences vs ton code :

  • ma commande utilise include_dir_merge vs include_dir_named
  • le dossier packages/ à un slash à la fin…

bonjour @noiwid

Je viens de tester ta methode sur mon haos de test.

J’ai donc ceci :

config |--configuration.yaml
       |           
       |----packages--|---input_numbers--/--volets.yaml
                      |                 /--switch_auto.yaml 
                      |
                      |---sensors--/-- system_monitor.yaml
                      |           /-- datetime.yaml                             
                      |
                      |---etc..etc..

dans configuration.yaml jai :

## packages
homeassistant:
# Load packages
#  packages: !include_dir_named packages
#  packages: !include_dir_named integrations
  packages: !include_dir_merge_named packages/
  whitelist_external_dirs:
    - /config/

quand je verifie dans outils de devellopement j’ai cette erreur :

Configuration non valide !
 attendu un dictionnaire pour la valeur du dictionnaire @ data['packages']['name']  

pourquoi sa ne va pas ?

Merci pour les retours.

Par contre je n’avais aucune erreur qui remonter quand je testé la config. C’est bien que HA ne détecte pas mon dossier.
Voici le message que j’ai
image

car ton fichier yaml dans le dossier de chaque package doit avoir le même nom que le package :slight_smile:

/packages/input_numbers/input_numbers.yaml

disons que ce yaml est le fichier de conf « principal » de ton package. rien n’empêche qu’il include lui même d’autres fichiers yaml inclus dans le même dossier, je pense à tes switchs…

J’ai modifié mais c’est pas bon…

Configuration non valide !
 Package input_number setup failed. Component input_auto_offset_matin Integration 'input_auto_offset_matin' not found.
Package input_number setup failed. Component input_auto_offset_soir Integration 'input_auto_offset_soir' not found.
Package input_number setup failed. Component volets_auto_offset_ouvre Integration 'volets_auto_offset_ouvre' not found.
Package input_number setup failed. Component volets_auto_offset_ferme Integration 'volets_auto_offset_ferme' not found.
Package input_number setup failed. Component volets_auto_offset_ouvre_rdc Integration 'volets_auto_offset_ouvre_rdc' not found.
Package input_number setup failed. Component volets_auto_offset_ferme_rdc Integration 'volets_auto_offset_ferme_rdc' not found.
Package input_number setup failed. Component volets_auto_offset_ouvre_1er Integration 'volets_auto_offset_ouvre_1er' not found.
Package input_number setup failed. Component volets_auto_offset_ferme_1er Integration 'volets_auto_offset_ferme_1er' not found. 

mon yaml

#############
#   ENTREE  #
#############
input_number:

  input_auto_offset_matin:
    icon: mdi:weather-sunset-up
    name: Offset matin 2
    min: -90
    max: 90
    step: 1
    mode: slider
  
  input_auto_offset_soir:
    icon: mdi:weather-sunset-down
    name: Offset soir 2
    min: -90
    max: 90
    step: 1
    mode: slider  

  volets_auto_offset_ouvre:
    icon: mdi:weather-sunset-up
    name: Offset matin
    min: -90
    max: 90
    step: 1
    mode: slider
  
  volets_auto_offset_ferme:
    icon: mdi:weather-sunset-down
    name: Offset soir
    min: -90
    max: 90
    step: 1
    mode: slider

  volets_auto_offset_ouvre_rdc:
    icon: mdi:weather-sunset-up
    name: Offset matin
    min: -90
    max: 90
    step: 1
    mode: slider
  
  volets_auto_offset_ferme_rdc:
    icon: mdi:weather-sunset-down
    name: Offset soir
    min: -90
    max: 90
    step: 1
    mode: slider
  
  volets_auto_offset_ouvre_1er:
#    icon: mdi:weather-sunset-up
    name: Offset matin
    min: -90
    max: 90
    step: 1
    mode: slider
  
  volets_auto_offset_ferme_1er:
#    icon: mdi:weather-sunset-down
    name: Offset soir
    min: -90
    max: 90
    step: 1
    mode: slider  

Bonjour,

Lorsque j’ai repondu un peu plus tôt, j’avais testé le package.

fichier test.yaml avec

input_number:
  test_position:
    name: "Test - Position désirée"
    min: -1
    max: 100
    step: 1
    unit_of_measurement: "%"

et configuration.yaml avec

  packages: !include_dir_named .packages

mon dossier s’appelle .packages pour qu’il soit en premier…

J’ai ou j’essaie d’avoir un fichier yaml par integration ou par fonction.
Chaque yaml peut donc avoir une section input_number:, sensor:, template:, script:, automation: si elle est utilisée.

C’est le un peu prnicipe des packages. SI je ne veux plus d’une intégration or d’une fonction, je supprime le yaml correspondant de mon dossier .package et au prochain redémarrage tout est parti

Le document suivant (si l’anglais ne te fais par peur) https://hometechhacker.com/organizing-my-home-assistant-configuration-files/ a des examples avec les differents !include…

Cordialement

Abel

Un sujet expliquant le principe :

1 « J'aime »

voici un exemple concret d’un package que j’utilise, et qui fonctionne:

tiko:
  climate:
    - platform: generic_thermostat
      name: Bureau 1
      heater: switch.radiateurs_on_off
      target_sensor: sensor.bureau_1_temperature
    - platform: generic_thermostat
      name: Entrée
      heater: switch.radiateurs_on_off
      target_sensor: sensor.entree_temperature
    - platform: generic_thermostat
      name: Bureau 2
      heater: switch.radiateurs_on_off
      target_sensor: sensor.bureau_2_temperature
  shell_command:
    bureau_1_set_temp: '/usr/bin/curl -X POST https://mondomaine.com/tiko.php?hash=montoken&room_id=room1&temperature={{ state_attr("climate.bureau_1", "temperature") }}'
    entree_set_temp: '/usr/bin/curl -X POST https://mondomaine.com/tiko.php?hash=montoken&room_id=room2&temperature={{ state_attr("climate.entree", "temperature") }}'
    bureau_2_set_temp: '/usr/bin/curl -X POST https://mondomaine.com/tiko.php?hash=montoken&room_id=room3&temperature={{ state_attr("climate.bureau_2", "temperature") }}'
  automation:
    - id: sync_status_on_bureau_1
      alias: sync_status_on_bureau_1
      description: >
        on H.A startup or heater status change,
        check if heater is currently on to
        update the climate object in HA
      trigger:
        -     platform: homeassistant
          event: start
        -     platform: state
          entity_id: binary_sensor.bureau_1_chauffage
      condition:
        -     condition: state
          entity_id: binary_sensor.bureau_1_chauffage
          state: 'on'
      action:
        -     service: climate.turn_on
          target:
            entity_id: climate.bureau_1
      mode: single
    - id: sync_status_off_bureau_1
      alias: sync_status_off_bureau_1
      description: >
        on H.A startup or heater status change,
        check if heater is currently off to
        update the climate object in HA
      trigger:
        -     platform: homeassistant
          event: start
        -     platform: state
          entity_id: binary_sensor.bureau_1_chauffage
      condition:
        -     condition: state
          entity_id: binary_sensor.bureau_1_chauffage
          state: 'off'
      action:
        -     service: climate.turn_off
          target:
            entity_id: climate.bureau_1
      mode: single
    - id: sync_temp_bureau_1
      alias: sync_temp_bureau_1
      description: >
        on H.A startup or temp change, update
        the climate object in HA
      trigger:
        -     platform: homeassistant
          event: start
        -     platform: state
          entity_id: sensor.bureau_1_temperature_target
      condition: [ ]
      action:
        -     service: climate.set_temperature
          target:
            entity_id: climate.bureau_1
          data:
            temperature: "{{ states('sensor.bureau_1_temperature_target') }}"
      mode: single
    - id: set_temp_bureau_1
      alias: set_temp_bureau_1
      description: >
        on climate update, send update command
        to endpoint
      trigger:
        -     platform: state
          entity_id:
            - climate.bureau_1
          attribute: temperature
      condition:
        -     condition: and
          conditions:
            -         condition: state
              entity_id: switch.radiateurs_off
              state: 'off'
            -         condition: state
              entity_id: switch.radiateurs_hors_gel
              state: 'off'
            -         condition: state
              entity_id: switch.radiateurs_absence
              state: 'off'
      action:
        -     service: shell_command.bureau_1_set_temp
      mode: single
    - id: sync_status_on_entree
      alias: sync_status_on_entree
      description: >
        on H.A startup or heater status change,
        check if heater is currently on to
        update the climate object in HA
      trigger:
        -     platform: homeassistant
          event: start
        -     platform: state
          entity_id: binary_sensor.entree_chauffage
      condition:
        -     condition: state
          entity_id: binary_sensor.entree_chauffage
          state: 'on'
      action:
        -     service: climate.turn_on
          target:
            entity_id: climate.entree
      mode: single
    - id: sync_status_off_entree
      alias: sync_status_off_entree
      description: >
        on H.A startup or heater status change,
        check if heater is currently off to
        update the climate object in HA
      trigger:
        -     platform: homeassistant
          event: start
        -     platform: state
          entity_id: binary_sensor.entree_chauffage
      condition:
        -     condition: state
          entity_id: binary_sensor.entree_chauffage
          state: 'off'
      action:
        -     service: climate.turn_off
          target:
            entity_id: climate.entree
      mode: single
    - id: sync_temp_entree
      alias: sync_temp_entree
      description: >
        on H.A startup or temp change, update
        the climate object in HA
      trigger:
        -     platform: homeassistant
          event: start
        -     platform: state
          entity_id: sensor.entree_temperature_target
      condition: [ ]
      action:
        -     service: climate.set_temperature
          target:
            entity_id: climate.entree
          data:
            temperature: "{{ states('sensor.entree_temperature_target') }}"
      mode: single
    - id: set_temp_entree
      alias: set_temp_entree
      description: >
        on climate update, send update command
        to endpoint
      trigger:
        -     platform: state
          entity_id:
            - climate.entree
          attribute: temperature
      condition:
        -     condition: and
          conditions:
            -         condition: state
              entity_id: switch.radiateurs_off
              state: 'off'
            -         condition: state
              entity_id: switch.radiateurs_hors_gel
              state: 'off'
            -         condition: state
              entity_id: switch.radiateurs_absence
              state: 'off'
      action:
        -     service: shell_command.entree_set_temp
      mode: single
    - id: sync_status_on_bureau_2
      alias: sync_status_on_bureau_2
      description: >
        on H.A startup or heater status change,
        check if heater is currently on to
        update the climate object in HA
      trigger:
        -     platform: homeassistant
          event: start
        -     platform: state
          entity_id: binary_sensor.bureau_2_chauffage
      condition:
        -     condition: state
          entity_id: binary_sensor.bureau_2_chauffage
          state: 'on'
      action:
        -     service: climate.turn_on
          target:
            entity_id: climate.bureau_2
      mode: single
    - id: sync_status_off_bureau_2
      alias: sync_status_off_bureau_2
      description: >
        on H.A startup or heater status change,
        check if heater is currently off to
        update the climate object in HA
      trigger:
        -     platform: homeassistant
          event: start
        -     platform: state
          entity_id: binary_sensor.bureau_2_chauffage
      condition:
        -     condition: state
          entity_id: binary_sensor.bureau_2_chauffage
          state: 'off'
      action:
        -     service: climate.turn_off
          target:
            entity_id: climate.bureau_2
      mode: single
    - id: sync_temp_bureau_2
      alias: sync_temp_bureau_2
      description: >
        on H.A startup or temp change, update
        the climate object in HA
      trigger:
        -     platform: homeassistant
          event: start
        -     platform: state
          entity_id: sensor.bureau_2_temperature_target
      condition: [ ]
      action:
        -     service: climate.set_temperature
          target:
            entity_id: climate.bureau_2
          data:
            temperature: "{{ states('sensor.bureau_2_temperature_target') }}"
      mode: single
    - id: set_temp_bureau_2
      alias: set_temp_bureau_2
      description: >
        on climate update, send update command
        to endpoint
      trigger:
        -     platform: state
          entity_id:
            - climate.bureau_2
          attribute: temperature
      condition:
        -     condition: and
          conditions:
            -         condition: state
              entity_id: switch.radiateurs_off
              state: 'off'
            -         condition: state
              entity_id: switch.radiateurs_hors_gel
              state: 'off'
            -         condition: state
              entity_id: switch.radiateurs_absence
              state: 'off'
      action:
        -     service: shell_command.bureau_2_set_temp
      mode: single
  sensor:
    - platform: template
      sensors:
        bureau_1_temperature:
          friendly_name: Bureau 1 temperature
          value_template: "{{ state_attr('sensor.tiko_settings','bureau_1_cur')}}"
          unit_of_measurement: °C
          device_class: temperature
    - platform: template
      sensors:
        bureau_1_humidity:
          friendly_name: Bureau 1 humidité
          value_template: "{{ state_attr('sensor.tiko_settings','bureau_1_dry')}}"
          unit_of_measurement: '%'
          device_class: humidity
    - platform: template
      sensors:
        bureau_1_temperature_target:
          friendly_name: Bureau 1 temperature target
          value_template: "{{ state_attr('sensor.tiko_settings','bureau_1_tar')}}"
          unit_of_measurement: °C
          device_class: temperature
    - platform: template
      sensors:
        entree_temperature:
          friendly_name: Entrée temperature
          value_template: "{{ state_attr('sensor.tiko_settings','entree_cur')}}"
          unit_of_measurement: °C
          device_class: temperature
    - platform: template
      sensors:
        entree_humidity:
          friendly_name: Entrée humidité
          value_template: "{{ state_attr('sensor.tiko_settings','entree_dry')}}"
          unit_of_measurement: '%'
          device_class: humidity
    - platform: template
      sensors:
        entree_temperature_target:
          friendly_name: Entrée temperature target
          value_template: "{{ state_attr('sensor.tiko_settings','entree_tar')}}"
          unit_of_measurement: °C
          device_class: temperature
    - platform: template
      sensors:
        bureau_2_temperature:
          friendly_name: Bureau 2 temperature
          value_template: "{{ state_attr('sensor.tiko_settings','bureau_2_cur')}}"
          unit_of_measurement: °C
          device_class: temperature
    - platform: template
      sensors:
        bureau_2_humidity:
          friendly_name: Bureau 2 humidité
          value_template: "{{ state_attr('sensor.tiko_settings','bureau_2_dry')}}"
          unit_of_measurement: '%'
          device_class: humidity
    - platform: template
      sensors:
        bureau_2_temperature_target:
          friendly_name: Bureau 2 temperature target
          value_template: "{{ state_attr('sensor.tiko_settings','bureau_2_tar')}}"
          unit_of_measurement: °C
          device_class: temperature
    - platform: template
      sensors:
        tiko_consumption_vs_lastmonth:
          friendly_name: Écart conso. vs mois dernier
          value_template: "{{ (((state_attr('sensor.tiko_consumption', 'this_month_total_wh') - state_attr('sensor.tiko_consumption', 'last_month_total_same_day_wh')) / state_attr('sensor.tiko_consumption', 'last_month_total_same_day_wh')) * 100)|round(0) }}"
          unit_of_measurement: '%'
    - platform: template
      sensors:
        tiko_consumption_vs_yesterday:
          friendly_name: Écart conso. vs hier
          value_template: "{{ (((state_attr('sensor.tiko_consumption', 'today_total_wh') - state_attr('sensor.tiko_consumption', 'yesterday_total_same_time_wh')) / state_attr('sensor.tiko_consumption', 'yesterday_total_same_time_wh')) * 100)|round(0) }}"
          unit_of_measurement: '%'
  binary_sensor:
    - platform: template
      sensors:
        bureau_1_chauffage:
          friendly_name: Bureau 1 chauffage
          value_template: "{{ is_state_attr('sensor.tiko_settings','bureau_1_on', true)}}"
          device_class: heat
    - platform: template
      sensors:
        entree_chauffage:
          friendly_name: Entrée chauffage
          value_template: "{{ is_state_attr('sensor.tiko_settings','entree_on', true)}}"
          device_class: heat
    - platform: template
      sensors:
        bureau_2_chauffage:
          friendly_name: Bureau 2 chauffage
          value_template: "{{ is_state_attr('sensor.tiko_settings','bureau_2_on', true)}}"
          device_class: heat
  command_line:
    - sensor:
        name: Tiko_consumption
        json_attributes:
          - today_total_wh
          - yesterday_total_same_time_wh
          - yesterday_total_same_time_wh
          - last_month_total_wh
          - this_month_total_wh
          - last_month_total_same_day_wh
        command: "curl -s 'https://mondomaine.com/tiko.php?hash=montoken&consumption=true'"
        unit_of_measurement: W
        scan_interval: 3600
        value_template: 1
    - sensor:
        name: Tiko_settings
        json_attributes:
          - boost
          - frost
          - absence
          - disableHeating
          - bureau_1_cur
          - bureau_1_tar
          - bureau_1_dry
          - bureau_1_on
          - entree_cur
          - entree_tar
          - entree_dry
          - entree_on
          - bureau_2_cur
          - bureau_2_tar
          - bureau_2_dry
          - bureau_2_on
        command: "curl -s 'https://mondomaine.com/tiko.php?hash=montoken'"
        scan_interval: 60
        value_template: 1
    - switch:
        name: Radiateurs on/off
        command_on: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken&mode=0'"
        command_off: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken&mode=disableHeating'"
        command_state: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken'"
        value_template: '{{value_json["disableHeating"]}}'
        icon: '{% if (value_json.disableHeating) %} mdi:radiator-off {% else %} mdi:radiator-off {% endif %}'
    - switch:
        name: Radiateurs off
        command_on: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken&mode=disableHeating'"
        command_off: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken&mode=0'"
        command_state: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken'"
        value_template: '{{value_json["disableHeating"]}}'
        icon: '{% if (value_json.disableHeating) %} mdi:radiator-off {% else %} mdi:radiator-off {% endif %}'
    - switch:
        name: Radiateurs boost
        command_on: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken&mode=boost'"
        command_off: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken&mode=0'"
        command_state: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken'"
        value_template: '{{value_json["boost"]}}'
        icon: '{% if (value_json.boost) %} mdi:sun-thermometer {% else %} mdi:lightning-bolt-outline {% endif %}'
    - switch:
        name: Radiateurs absence
        command_on: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken&mode=absence'"
        command_off: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken&mode=0'"
        command_state: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken'"
        value_template: '{{value_json["absence"]}}'
        icon: '{% if (value_json.absence) %} mdi:door-closed-lock {% else %} mdi:door {% endif %}'
    - switch:
        name: Radiateurs hors gel
        command_on: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken&mode=frost'"
        command_off: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken&mode=0'"
        command_state: "curl -g 'https://mondomaine.com/tiko.php?hash=montoken'"
        value_template: '{{value_json["frost"]}}'
        icon: '{% if (value_json.frost) %} mdi:snowflake-thermometer {% else %} mdi:snowflake-thermometer {% endif %}'

@Abel dans ton cas, tu veux charger des sensor input_number, depuis un package qui s’appelle input_number si j’ai bien compris. tu devrais donc avoir dans ton package test :

input_number: (le nom du package)
  input_number:
    test_position:
      name: "Test - Position désirée"
      min: -1
      max: 100
      step: 1
      unit_of_measurement: "%"```  

le but du package est plus de permettre de regrouper tout ce qui est lié à un périphérique ou une fonction dans un même package (exemple, des scripts, sensor, automation, etc… tous liés. Comme dans mon exemple lié aux fonctionnalités de gestion des mes radiateurs).

celà me semble avoir moins d’intérêt si un package est uniquement lié à un type d’objet H.A (comme ton exemple avec un package input_number qui ne charge que des input_number), pour cet usage, les includes semblent une meilleure solution.

1 « J'aime »

:+1: Merci pour vos explications, Il me reste quelques points a éclaircir mais je progresse.

Merci pour ton retour.

Juste une petite question: Pourquoi ce Tiko au début de ton fichier?