Esphome include light effects comme les package

Bonsoir à toutes et tous.

J’utilise déjà des include pour le wifi et divers sensors sur tous mes équipements esphome.

Mais je n’ai pas encore trouvé la syntaxe pour inclure des light_effects de manière communes.

En gros j’ai 7 ampoules shelly et je doit recopier pour chacunes tous les effets dans chaque ampoules c’est un peu pénible.
Savez vous si c’est possible.

RTFM et Google search et doc esphome déjà bien fouiller…

Edit:
Bien sûr quand tout est pareil j’ai l’include shelly light mais j’ai aussi d’autres ampoules ou guirlande qui ne sont pas avec les mêmes gpio par exemple.

Salut,

tu peux partager ce que tu fais déjà ?
Par exemple quand tu parles d’include pour le wifi?
Je n’ai pas à l’ajouter de mémoire, ça vient directement en utilisant les « secrets »…

Et les effets de lumière, là aussi tu peux partager ?
Car j’ai des leds qui ont des effets… je copie/colle simplement d’un a l’autre la liste des effets que je veux, ce n’est pas le genre de truc qui change souvent, non?

Désolé si je ne parles pas de la même chose que toi, c’est pour ça qu’un exemple peut aider :wink:

light:
  - platform: neopixelbus
    type: GRB
    variant: WS2812X
    pin: GPIO14
    num_leds: 72
    name: "NeoPixel Light"
    id: "neopix"   
    effects:
      - addressable_color_wipe:
      - addressable_rainbow:
      - flicker:
      - addressable_twinkle:
      - addressable_fireworks:
      - addressable_scan:
          name: Scan Effect
          move_interval: 20ms
          scan_width: 15

C’est l’idée mais les includes vont plus loin que juste les secrets.

Je te montre les prog depuis un pc plus tard dans la soirée :+1:.

L’avantage c’est que tout ce qui est commun est regroupé dans des fichiers yaml dédiés.
Genre commun a tout le monde (le wifi et qq sensor), commun a toute les gu10rgbw, commun au E27 tuyau, etc etc.

Comme ça quand tu modifies un truc pas besoin de copié/coller.

Par ce que pour certains ce n’est pas gênant, pour d’autres qui ont commencé la domotique il y a plus de 13 ans (merci feu domogik) ben on peut se retrouver avec une cinquante d’équipements sous esphome.
Entre les anciens modules shelly qui sont raccordés sur les interrupteurs, la vmc, les bandeaux led, les ampoules, des esp dans chaque pièces et dehors pour temp/hygro/luminosité/pression atmo (bme280/680/onewire/vintirik truc d’Ikea pour pm10 j’en passe et autres), les purificateur d’air, la bouilloire, de multiple prises et multiprises, un vieux Roomba, le linky, le compteur d’eau celui de gaz, les interrupteurs pour les volets, le rideau Ikea maison, un seul nspanel (par ce que madame n’est toujours pas convaincu mais demande tjs plus de trucs dessus :smiling_face_with_three_hearts:) et le distributeur de croquettes du chat ben juste c’est pas possible.

Rectification actuellement 65… J’ai du rajouter quelques ampoules récemment on dirait :rofl:.

Loin de moi l’idée de celui qui en aura le plus :innocent:. Juste que copier/coller c’est pas imaginables pour 20/25 ampoules.

Rectification ce n’est pas ‹ include › mais ‹ packages › que j’utilise :wink:

Du coup je laisse ça là pour tester mais ça semble possible comme ici:

Hello,

Quand j’avais des lumières couleur avec ESPHome j’avais le même problème (je suis passé à WLED pour les effets synchronisés) et j’avais fait ceci mais c’était toutes les mêmes, tu peux voir comment j’utilisais les variables et ajuster:

Fichier bathroom-rgbw-1.yaml

substitutions:
  name: "bathroom-rgbw-1"
  friendly_name: "Bathroom 1"
  id: "bathroom1"

<<: !include lighteffects.yaml

Fichier bathroom-rgbw-2.yaml

substitutions:
  name: "bathroom-rgbw-2"
  friendly_name: "Bathroom 2"
  id: "bathroom2"

<<: !include lighteffects.yaml

Fichier lighteffects.yaml

esphome:
  name: "${name}"
  #name_add_mac_suffix: true
  platform: ESP8266
  board: esp8285

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  fast_connect: true

  ap:
    ssid: "${friendly_name} Fallback Hotspot"
    password: !secret fallback_password

# Enable Home Assistant API
api:
  encryption:
    key: !secret api_encryption_key

ota:
  password: !secret ota_password

web_server:
  port: 80

binary_sensor:
  - platform: status
    name: "${friendly_name} Status"

sensor:
  - platform: uptime
    name: "${friendly_name} Uptime"

button:
  - platform: restart
    id: restart_button
    name: "${friendly_name} Restart"

output:
  - platform: esp8266_pwm
    id: red_output
    pin: GPIO4
  - platform: esp8266_pwm
    id: green_output
    pin: GPIO12
  - platform: esp8266_pwm
    id: blue_output
    pin: GPIO14
  - platform: esp8266_pwm
    id: warm_white_output
    pin: GPIO13
  - platform: esp8266_pwm
    id: white_output
    pin: GPIO5

light:
  - platform: rgbww
    name: "${friendly_name}"
    id: "${id}"
    restore_mode: ALWAYS_ON
    red: red_output
    green: green_output
    blue: blue_output
    warm_white: warm_white_output
    cold_white: white_output
    cold_white_color_temperature: 6000 K
    warm_white_color_temperature: 3000 K
    color_interlock: true
    effects:
      - lambda:
          name: "My Custom Effect"
          update_interval: 10s
          lambda: |-
            static int state = 0;
            auto call = id(${id}).turn_on();
            // Transition of 1000ms = 1s
            call.set_transition_length(3000);
            if (state == 0) {
              call.set_rgb(0.0, 1.0, 0.0);
            } else if (state == 1) {
              call.set_rgb(1.0, 1.0, 0.0);
            } else if (state == 2) {
              call.set_rgb(1.0, 0.0, 0.0);
            } else if (state == 3) {
              call.set_rgb(0.0, 1.0, 1.0);
            } else if (state == 4) {
              call.set_rgb(0.0, 0.0, 1.0);
            } else {
              call.set_rgb(1.0, 0.0, 1.0);
            }
            call.perform();
            state += 1;
            if (state == 6)
              state = 0;    

  - platform: partition
    name: "Partition Light ${id}"
    id: "partition${id}"
    segments:
      - single_light_id: "${id}"
    effects:
      - e131:
          universe: 1
          channels: RGBW  
      - wled:

text_sensor:
  - platform: wifi_info
    ip_address:
      name: "${friendly_name} IP Address"
      disabled_by_default: true

Ensuite tu peux inclure moins ou faire plus de variables

1 « J'aime »

C’est bien ce que je pense j’ai posté trop vite ma question, la solution semble bien dans cette syntaxe:

<<: !include

Je test ça ce soir et posterai l’exemple.

1 « J'aime »

Alors c’est bien ça :slight_smile: il faut rajouter des

<<: !include 

Donc en résumé le yaml d’une ampoule c’est juste ça :

light6-salle-manger.yaml
substitutions:
  device_name: light6-salle-manger
  friendly_name: light6-salle-manger
  name: ${device_name}

esphome:
  name: ${device_name}
  comment: ${friendly_name}
  platform: ESP8266
  board: esp01_1m

packages:
  common: !include _base_common.yaml
  shelly_gu10_rgbw: !include _base_shellygu10RGBW.yaml

Ensuite un fichier de base commun à tous mes équipements sous esphome. Il regroupe les fonctions de reboot et divers sensors.
Pour ceux qui se demande pourquoi je les nommes avec un ‹ _base › devant et bien tout simplement pour qu’ils se retrouvent tout en haut dans l’interface d’esphome car ce sont eux que je modifie le plus souvent.

_base_common.yaml
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  domain: '.secret.fr'
  power_save_mode: HIGH

  # Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
  ssid: "${name} Fallback Hotspot"
  password: !secret wifi_password
  
# Enable logging
logger:

debug:
  update_interval: 30s

# Enable Home Assistant API
# Reboot if HA is not connected for 30 minutes
api:
  reboot_timeout: 30min

# Enable Web server.
web_server:
  port: 80

mdns:
  disabled: false

ota:
#  password: !secret wifi_password

#captive_portal:

# Sync time with Home Assistant.
time:
  - platform: homeassistant
    id: homeassistant_time

binary_sensor:
  - platform: status
    name: "${name} - Status"
    device_class: connectivity

sensor:
  - platform: wifi_signal
    name: "${name} Signal"
    update_interval: 60s
    id: wifisignal
    icon: mdi:wifi
  # Uptime sensor.
  - platform: uptime
    name: "${name} Uptime"
    icon: mdi:clock-outline

# Text sensors with general information.
text_sensor:
  # Expose ESPHome version as sensor.
  - platform: version
    name: "${name} ESPHome Version"
    icon: mdi:cube-outline
  # Expose WiFi information as sensors.
  - platform: wifi_info
    ip_address:
      name: "${name} IP"
    ssid:
      name: "${name} SSID"
    bssid:
      name: "${name} BSSID"
    mac_address:
      name: "${name} - Mac Address"
  - platform: debug
    reset_reason:
      name: "${name} Reset Reason"

# Exposed button.
button:
  # Switch to restart.
  - platform: restart
    name: "${name} Restart"
  - platform: safe_mode
    name: "${name} Reboot (Safe Mode)"

A très moyen termes il sera encore scindé pour séparé la partie pur esphome des sensors divers pour HA.

La partie dédié au cas des shellyGU10rgbw là où du coup on fait l’include des effects dans la partie light merci @Cloom

_base_shellygu10RGBW.yaml

light:
  - platform: rgbw
    default_transition_length: 0s
    id: light_rgbw
    name: ${friendly_name}
    red: pwm_r
    green: pwm_g
    blue: pwm_b
    white: pwm_w
    effects: !include _base_light_effect.yaml

output:
  - platform: esp8266_pwm
    pin: GPIO13
    frequency: 1000 Hz
    id: pwm_r

  - platform: esp8266_pwm
    pin: GPIO12
    frequency: 1000 Hz
    id: pwm_g

  - platform: esp8266_pwm
    pin: GPIO14
    frequency: 1000 Hz
    id: pwm_b

  - platform: esp8266_pwm
    pin: GPIO5
    frequency: 1000 Hz
    id: pwm_w

Et on se retrouve avec un fichiers des effects que maintenant je dois adapté en fonction de simple rgb/rgbw/adressable et surtout faire grossir :rabbit:

_base_light_effect.yaml

       # Use default parameters:
      - random:
      # Customize parameters
      - random:
          name: "My Slow Random Effect"
          transition_length: 30s
          update_interval: 30s
      - random:
          name: "My Fast Random Effect"
          transition_length: 4s
          update_interval: 5s

Si vous y voyez des améliorations je suis preneur.
J’ai essayé de déplacer la partie esphome: dans le fichier shelly, mais ça ne compile plus dans ce cas ???