Irgendwann wird jeder mal bei dem ein oder anderen Projekt den Fall haben, dass einige Objekte im YAML-Code sich mehrfach wiederholen. Wenn man zum Beispiel mehrere LED-Stripes mit den selben Effekten in einem Projekt erstellen möchte, müsste man eigentlich alle Effekte unter jedem Light-Objekt erneut einfügen und hätte somit den exakt gleichen Code mehrfach in seiner YAML-Datei.
Dies lässt sich aber mit einem kleinen Trick umgehen. Und zwar kann man im genannten Beispiel die Effekte in eine eigene YAML-Datei auslagern und diese bei jeder Light-Komponente einfach referenzieren.
So muss nur noch eine Zeile mit dem Befehl zum laden der Effekte unter jedem Licht eingetragen werden anstatt jedes mal den vollständigen Code aller Effekte dort zu platzieren.
Dieses Vorgehen ist natürlich auch anwendbar, wenn man den selben Code in mehreren verschiedenen Projekten verwenden möchte.
Codebeispiel
Im Normalfall würde die YAML-Datei wie folgt aussehen:
1light:
2 - platform: neopixelbus
3 id: neopixel_ring
4 name: ${friendly_name} LED-Ring
5 pin: D8
6 num_leds: 60
7 variant: WS2811
8 type: GRBW
9 default_transition_length: 1s
10 effects:
11 - addressable_rainbow:
12 name: "Rainbow"
13 speed: 20
14 width: 50
15
16 - platform: neopixelbus
17 id: neopixel_ring2
18 name: ${friendly_name} LED-Ring2
19 pin: D7
20 num_leds: 30
21 variant: WS2811
22 type: GRBW
23 default_transition_length: 1s
24 effects:
25 - addressable_rainbow:
26 name: "Rainbow"
27 speed: 20
28 width: 50
29
30 - platform: neopixelbus
31 id: neopixel_ring3
32 name: ${friendly_name} LED-Ring3
33 pin: D5
34 num_leds: 20
35 variant: WS2811
36 type: GRBW
37 default_transition_length: 1s
38 effects:
39 - addressable_rainbow:
40 name: "Rainbow"
41 speed: 20
42 width: 50
