Séparer les sensor du fichier configuration.yaml

Bonjour à tous,

j’ai vu qu’on pouvait mettre la déclaration des sensors dans un fichier séparé.

Actuellement voici ce que j’ai dans config.yaml :

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

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
#sensor: !include sensors.yaml

# Example configuration.yaml entry
mqtt:
  sensor:
    - name: "CE Temperature"
      device_class: temperature
      unit_of_measurement: °C
      state_topic: "energie/61"
    - name: "CE Puissance"
      device_class: power
      unit_of_measurement: W
      state_topic: "energie/3351"
    - name: "PVRouteur Puissance"
      device_class: power
      unit_of_measurement: W
      state_topic: "energie/300"  

# Kostal inverter
multiscrape:
  - resource: http://192.168.1.243/all.xml
    scan_interval: 60
    parser: lxml
    sensor:
      - unique_id: Kostal_total_wh
        name: "Produced"
        select: "yieldvalue"
        attribute: "value"
        unit_of_measurement: "Wh"
        on_error:
          value: "default"
          default: 0.0
      - unique_id: kostal_ac_power
        name: "AC Power"
        select: "measurement[type='AC_Power']"
        attribute: "value"
        unit_of_measurement: "W"
        on_error:
          value: "default"
          default: 0.0
      - unique_id: kostal_ac_voltage
        name: "AC Voltage"
        select: "measurement[type='AC_Voltage']"
        attribute: "value"
        unit_of_measurement: "V"
        on_error:
          value: "default"
          default: 0.0
      - unique_id: kostal_ac_current
        name: "AC Current"
        select: "measurement[type='AC_Current']"
        attribute: "value"
        unit_of_measurement: "A"
        on_error:
          value: "default"
          default: 0.0
      - unique_id: kostal_ac_frequency
        name: "AC Frequency"
        select: "measurement[type='AC_Frequency']"
        attribute: "value"
        unit_of_measurement: "Hz"
      - unique_id: kostal_dc_voltage
        name: "DC Voltage"
        select: "measurement[type='DC_Voltage']"
        attribute: "value"
        unit_of_measurement: "V"
        on_error:
          value: "default"
          default: 0.0
      - unique_id: kostal_dc_current
        name: "DC Current"
        select: "measurement[type='DC_Current']"
        attribute: "value"
        unit_of_measurement: "A"
        on_error:
          value: "default"
          default: 0.0
      - unique_id: kostal_link_voltage
        name: "Link Voltage"
        select: "measurement[type='LINK_Voltage']"
        attribute: "value"
        unit_of_measurement: "V"
        on_error:
          value: "default"
          default: 0.0
      - unique_id: kostal_derating
        name: "Derating"
        select: "measurement[type='Derating']"
        attribute: "value"
        unit_of_measurement: "%"

Si j’efface tout ce qui concerne #Kostal inverter pour le copier/coller dans un fichier sensors.yaml et decomment la ligne #sensor: !include sensors.yaml dans le fichier config, les valeurs ne remontent plus …

Comment faut-il s’y prendre ?

Merci pour votre aide.

Bonjour

Pour ma part j’utilise la méthode des packages.

J’ai ajouter un repertoire packages dans HA

J’ai ajouter la ligne suivante dans configuration.yaml

homeassistant:
# Load packages
  packages: !include_dir_named packages

Dans le repertoire Packages j’ai les fichiers sensor, template,etc

exemple sensor_eau_history.yaml

sensor:
# Ratio d'usage de l'eau froide sur la dernière heure
  - platform: history_stats
    name: Ratio usage eau froide
    unique_id: "eau_froide_ratio_usage"
    entity_id: binary_sensor.eau_froide_tirage_actif
    state: "on"
    type: ratio
    start: "{{ now() - timedelta(hours=1) }}"
    end: "{{ now() }}"


# Ratio d'usage de l'eau froide adoucie sur la dernière heure
  - platform: history_stats
    name: Ratio usage eau froide adoucie
    unique_id: "eau_froide_adoucie_ratio_usage"
    entity_id: binary_sensor.eau_froide_adoucie_tirage_actif
    state: "on"
    type: ratio
    start: "{{ now() - timedelta(hours=1) }}"
    end: "{{ now() }}"    
    
# Ratio d'usage de l'eau chaude sur la dernière heure
  - platform: history_stats
    name: Ratio usage eau chaude
    unique_id: "eau_chaude_ratio_usage"
    entity_id: binary_sensor.eau_chaude_tirage_actif
    state: "on"
    type: ratio
    start: "{{ now() - timedelta(hours=1) }}"
    end: "{{ now() }}"    
    

ou Template_compteur.yaml

template:
# compteur eau m³
  - sensor:

############################
# Compteur Eau froide generale  
    - name: "EF litres"
      unique_id: ef_litres
      icon: mdi:counter
#      device_class: water
      state_class: measurement
      state: >
        {{ (states('counter.compteur_ef') | float(default=0) / 1) | round(3) }}
      unit_of_measurement: "L"
      availability: "{{ states('counter.compteur_ef')|is_number and states('counter.compteur_ef')|is_number }}"  

    - name: "EF mètres cubes"
      unique_id: ef_metres_cubes
      icon: mdi:counter
#      device_class: water
      state_class: measurement
      state: >
        {{ (states('counter.compteur_ef') | float(default=0) / 1000) | round(3) }}
      unit_of_measurement: "m³"
      availability: "{{ states('counter.compteur_ef')|is_number and states('counter.compteur_ef')|is_number }}"        

1 « J'aime »

Hello, pour ma pars tout fonctionne bien
Je pense qu’il y a une erreur dans ton enoncé, tu parles de config.yaml tu confirme que tu parles bien de configuration.yaml?

Pour moi voila une parie de la configuration

automation: !include automations.yaml
group: !include groups.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
mqtt: !include mqtt.yaml
sensor: !include sensors.yaml
notify: !include notify.yaml
switch: !include switch.yaml
light: !include light.yaml
binary_sensor: !include binary_sensor.yaml
python_script:

Puis dans mqtt.yaml

#========================================================
#
#   SENSORS
#
#========================================================

sensor:
  #========================================================
  #
  #   ESP32 Piscine
  #
  #========================================================

  - name: "Temperature Nat"
    state_topic: "ESP_DHT22_N/DHT22/Temperature"
    unit_of_measurement: "°C"

  - name: "pH eau piscine"
    state_topic: "Piscine_32/pH_eau/SensorData"
    unit_of_measurement: "pH"

  - name: "Temperature eau piscine"
    state_topic: "Piscine_32/DS18B20/temperature_eau"
    unit_of_measurement: "°C"

dans switch.yaml

#========================================================
#
#   GPIO Switch
#
#========================================================
- platform: rpi_gpio
  ports:
    11: Fan Office # Vert
    9: Light Desk # Rouge

- platform: template
  switches:
    mon_interrupteur_virtuel:
      value_template: "{{ is_state('input_boolean.mon_interrupteur_virtuel', 'on') }}"
      turn_on:
        service: input_boolean.turn_on
        entity_id: input_boolean.mon_interrupteur_virtuel
      turn_off:
        service: input_boolean.turn_off
        entity_id: input_boolean.mon_interrupteur_virtuel

Etc…

Quand tu modifie tes Yaml et que tu les vérifie ici il te dit quoi ?

@ pascal : Pour ma part ce n’est pas plus clair que ce que je fais. Je vais avoir le même pb, je pense.

Pourquoi mes sensors ne remontent plus quand je fais comme indiqué plus haut ?
La syntaxe ? ou autre ?

@Monsieur : ok, je vais regarder. Oui je parle bien de configuration.yaml. Il est où ce bouton verifier; ca repond à ta question du coup ! :wink:

Merci.
Cordialement.

1 « J'aime »

Salut,
j’ai découper pour multiscrape.

dans le configuration.yaml:

group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
sensor: !include sensor.yaml
template: !include template.yaml
recorder: !include recorder.yaml
multiscrape: !include multiscrape.yaml  #ajouter c'est ligne
utility_meter: !include utility_meter.yaml
command_line: !include command_line.yaml
openhasp: !include openhasp.yaml

exemple dans le multiscrape.yaml ( dans /config ):

#########################
#      MULTISCRAPE      #
#########################
- name: carburants_carrefour_xxxxx
  resource: "https://carbu.com/france/index.php/station/carrefour-contact/xxxxxx/11xxx/12345"
  scan_interval: 3600
  sensor:
    - unique_id: carburants_xxxxxxxxxx
      select: "[itemprop='name']"
      value_template: "<img src='/local/images/carrefour.png' style='height:20px;'> {{ value }}"
      attributes:
        - name: b7_name
          select: ".col-xs-12:nth-of-type(3) h2.title"
        - name: b7_price
          select: ".col-xs-12:nth-of-type(3) h1"
          value_template: "{{ value|replace(',','.') }}"
        - name: b7_date
          select: ".col-xs-12:nth-of-type(3) p.sources"
          value_template: "{{ value.split(' ')[0] }}"
1 « J'aime »

Je te mets le code de mon multiscrape, pour que tu vois la différence.

multiscrape:
################################
##    Carburant multiscrape   ##
################################
  - name: carburants_total_sannois_Peri
    resource: "https://carbu.com/france/index.php/station/total-access/sannois/95110/5826"
    scan_interval: 3600
    sensor:
      - unique_id: carburants_total_sannois_peri_5826
        name: 'Total Sannois Gabriel Peri'
        select: "[itemtype='http://data-vocabulary.org/Organization'] h1"
        value_template: "{{ value }}"
        #value_template: "<img src='/local/images/brand/total.png' style='height:20px;'> {{ value }}"
        picture: "/local/images/carburants/acess-logo.jpg"
        attributes:
          - name: e10_name
            #select: ".col-sm-6:nth-of-type(n+2) h2"
            select: ".col-sm-6:nth-of-type(3) h2.title"
          - name: e10_price
            select: ".col-sm-6:nth-of-type(3) h1"
            value_template: "{{ value|replace(',','.')|replace(' €/L','') }}"
          - name: e10_date
            select: ".col-sm-6:nth-of-type(3) p.sources"
            value_template: "{{ value.split(' ')[0] }}"

Mais c’est le même principe que Warc0zes

La seule différence, c’est que moi, j’ai seulement la ligne packages: !include_dir_named packages dans mon fichier configuration qui va chercher tous les fichiers dans le répertoire packages.

Warc0zes utilise des includes pour chaque type, ça fonctionne très bien aussi, c’est à toi de voir ce que tu prefere.

On dira que ta facon est mieux ranger, ta tout t’es *.yaml dans un dossier. Comparé a ma méthode ou c’est en vrac dans /config :upside_down_face:

1 « J'aime »

Dejà, je vois que ton fichier Pascal commence par multiscrape:

Alors que celui de WarC0zes, commence par - name:

Ça doit fonctionner, c’est certainement une erreur de syntaxe.
Comme précisé par @monsieur as-tu un message d’erreur quand tu lances la vérification (avec les outils développement) ?
Tu as bien redémarré HA après avoir fait les modifications ?

Effectivement avec le check, ça m’indiquait des erreurs. J’ai corrigé, ça à l’air de fonctionner.

Merci pour votre aide et vos exemples concrets.

1 « J'aime »

C’est normal, moi j’utilise: include dir_named qui va chercher le répertoire packages et lis les fichiers qui sont dedans.

Warc0zes utilise : include qui lis directement le fichier, dans ce cas, tu n’as pas besoin de remettre multiscape: car déjà présent dans le include.

Je ne suis pas sûr que mon explication soit très claire, warc0zes pourras peut-être mieux l’expliquer.

1 « J'aime »

oui, j’ai compris ton explication.
Merci

Salut,
j’ai tout réorganiser comme toi. Ca fait plus propre dans /config :wink:
image

Pour customize, un moyen de le déporter dans package ?

ma configue:

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

Si j’enlève ces lignes, ca ira les chercher dans package ?

  customize: !include customize.yaml
  customize_glob: !include customize_glob.yaml

faut que je modifie le fichier customize.yaml, comme telle ?

homeassistant:
  customize:
    binary_sensor.0x00158d0007d49ec1_occupancy:
      friendly_name: Capteur Litière
      templates:
        icon_color: >
          if (state == 'on') return '#ff0000';
          return '#00b300';

Salut

Je peux pas te dire, je n’ ai pas déplacé le customise (je l’utilise pas d’ailleurs).

Il faut faire un essai, mais je sais que pour scène et script, et automation sa ne fonctionne pas (chez moi).

Ok, tampis je vais chercher et tester.

EDIT:
C’est bon :wink:
image

configuration.yaml :

homeassistant:
  packages: !include_dir_named packages

le customize.yaml dans /packages :

homeassistant:
  customize:
    binary_sensor.0x00158d0007d49ec1_occupancy:
      friendly_name: Capteur Litière
      templates:
        icon_color: >
          if (state == 'on') return '#ff0000';
          return '#00b300';
    binary_sensor.0x54ef4410005a8874_occupancy:
      friendly_name: Capteur Escalier
      templates:
        icon_color: >
          if (state == 'on') return '#ff0000';
          return '#00b300';
    ...
1 « J'aime »

Salut @WarC0zes

Chez moi sa ne fonctionne pas…pourtant j’ai rien dans customize

configuration.yaml :

############################################################
##                HOME ASSISTANT: configuration           ##
############################################################


### < Configure a default setup of Home Assistant (frontend, api, etc) >
#default_config:

## packages
homeassistant:
# Load packages
  packages: !include_dir_named packages

#  whitelist_external_dirs:
  allowlist_external_dirs:
    - /config/

# include

python_script: !include_dir_merge_list python_scripts/

#api:

customize.yaml :

############################################################
##                HOME ASSISTANT: customize               ##
############################################################
#homeassistant:
#  customize:

Résultat:

C’est commenter, normal que ca bloque non ?
Puis si tu t’en sert pas , pourquoi l’avoir dans ta configue ?

J’ai essayé sans # mais c’est pareil
C’est surtout pourquoi sa pose problème dans le répertoire packages, alors que dans le répertoire avec configuration, il ne se passe rien. C’est peut-être qu’il n’est tous simplement pas lus… (vu que je n’ai pas mis de include)

Je ne sais plus trop pourquoi :joy:, mais je me suis dit ca va servir un jour :rofl:

Voila, pourquoi.
pour qu’il soit fonctionnelle dans le fichier customize.yaml, dans /config. Faut mettre c’est ligne:

homeassistant:
  customize: !include customize.yaml

laisse le dans /config, sans le déclarer et tu le basculera dans packages quand tu voudras un jours t’en servir.

1 « J'aime »