Two more new features coming up to 5.3 to simplify package writing:
- [yamlcomposer] Add ARGS special variable to capture immediate arguments for includes and templates by jimtng · Pull Request #21489 · openhab/openhab-addons · GitHub
- [yamlcomposer] Add `!deep <<:` tag to extend merge keys with recursive deep merge and conflict resolution by jimtng · Pull Request #21505 · openhab/openhab-addons · GitHub
Before this, I’d have to write custom expressions to “combine” attributes from the package and the package consumer overrides, key-by-key manually. It will now be handled more gracefully with deep merge + !default tag.
Copied from the doc:
Package Composition Example
Package File (light_item.inc.yaml):
variables:
thingid: ${package_id | lower | replace("_", "-")}
items:
${package_id}:
type: Switch
# Allow consumer to override label and icon
label: !default ${package_id | label}
icon: !default light
# Automatically append consumer-defined tags and groups
tags: [Control, Light]
groups: [MainEquipment]
autoupdate: false # Without !default, package default wins (consumer override ignored)
channel: mqtt:topic:${thingid}:power
!deep <<: ${ARGS} # Deep merge customizations passed from consumer
metadata:
ga: Light
Main File (lights.yaml):
packages:
Kitchen_Light: !include
file: light_item.inc.yaml
vars:
# Customize the package
label: Main Kitchen Light
icon: kitchen
tags: [MainLight]
groups: [Kitchen]
autoupdate: true
metadata:
alexa: Light
Output
items:
Kitchen_Light:
type: Switch
label: Main Kitchen Light
icon: kitchen
tags:
- Control
- Light
- MainLight
groups:
- MainEquipment
- Kitchen
autoupdate: false
channel: mqtt:topic:kitchen-light:power
metadata:
ga: Light
alexa: Light