Files
fresh-home/scripts/inovelli_led.yaml
T
2024-04-14 14:08:56 -04:00

320 lines
9.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
# Calculation References:
# https://nathanfiscus.github.io/inovelli-notification-calc/
# https://community.inovelli.com/t/home-assistant-2nd-gen-switch-rgb-working/168/62
# https://docs.google.com/spreadsheets/d/1bEpujdvBPZY9Fl61PZLUWuHanD2VAkRORFZ5D9xjLzA/edit?usp=sharing
#
# Changes:
# July 22, 2020: Incorporating changes from Kevin Schlichter.
# https://github.com/kschlichter/Home-Assistant-Inovelli-Red-Dimmer-Switch
#
# September 17, 2020: There are some massive improvements to my version of this code. Here are the highlights:
# 1. Choose - using the recently added choose: feature a separate call has been created for the Z-wave and OZW
# versions of the service call.
# 2. Variables - using 0.115s new variables: feature the variables sent each service call only have to be
# calculated once.
# 3. Supported Features - I realized that I could probably tell the difference between modules using the
# “supported_features” attribute of each switch. For example my dimmers supported features is “33”.
#
# September 18, 2020: Added "model" parameter with options of dimmer, switch, combo_light, combo_fan. This replaces
# supported_features as the combo fan/light switch also had the same supported_features value.
#
# February 24, 2021: Added support for Z-Wave JS in place of OpenZwave (ozw).
# The ozw code is remarked out for those that still need it.
#
# February 27, 2021:
# 1. Added zwave_integration at top of "variables:" section to allow users to define which integration is
# installed ("zwave", "ozw", "zwave_js"). I just don't see a simple way to auto-detect this.
# 2. Added a comment describing the "model" variable.
# 3. Replaced personal "script.debug" service call with universal "persistent_notification.create".
# Unremarking these lines could help you troubleshoot why something isn't working as expected.
# 4. Updated broken spreadsheet link with public copy stored in my Google Docs account.
# Thanks for the heads up Kevin Schlichter!
#
# March 26, 2021
# 1. Added fields to help users experimenting in the Services Developer Tool.
#
# April 3, 2021
# Incorporated @firstof9's changes:
# 1. Set execution mode to "parallel" to all this script to potentially run on more than one devices simultaneously.
# 2. Implement ZWave JS's new zwave_js.bulk_set_partial_config_parameters command.
# Source: https://gist.github.com/firstof9/b88d072a81c54b314fe7ddb901fc5c29
#
mode: parallel
variables:
# REQUIRED to be one of these options: "zwave", "ozw", "zwave_js"
# Advanced: If you'd like to have your device list filtered in the Services Developer Tool,
# then unremark out "integration: zwave_js" under the fields section, and change the integration
# name to match.
zwave_integration: "zwave_js"
# * Strongly recommended -> Use the passed model type ("dimmer", "switch", "combo_light") when present.
# * If not present, then attempt to identify the type using the "product_name" attribute (which is only
# unfortunately only available in the original zwave integration).
# * Finally, assume the model type is "dimmer".
model: |
{% if model is string %}
{{ model }}
{%- elif state_attr(entity_id, 'product_name') is string %}
{%- if 'LZW31' in state_attr(entity_id, 'product_name') %}
dimmer
{%- elif 'LZW36' in state_attr(entity_id, 'product_name') %}
combo_light
{%- else %}
switch
{%- endif %}
{%- else %}
dimmer
{%- endif %}
parameters:
dimmer: 16
combo_light: 24
combo_fan: 25
switch: 8
node_id: '{{ state_attr(entity_id,"node_id") }}'
color: |
{%- if color is not number %}
{{ color|default("Yellow")|title }}
{%- else %}
{{ color|int }}
{% endif %}
# 1-10
level: "{{ level|default(4)|int }}"
duration: '{{ duration|default("Indefinitely")|title }}'
effect: '{{ effect|default("Blink")|title }}'
colors:
"Off": 0
"Red": 1
"Orange": 21
"Yellow": 42
"Green": 85
"Cyan": 127
"Teal": 145
"Blue": 170
"Purple": 195
"Light Pink": 220
"Pink": 234
durations:
"Off": 0
"1 Second": 1
"2 Seconds": 2
"3 Seconds": 3
"4 Seconds": 4
"5 Seconds": 5
"6 Seconds": 6
"7 Seconds": 7
"8 Seconds": 8
"9 Seconds": 9
"10 Seconds": 10
"15 Seconds": 15
"20 Seconds": 20
"25 Seconds": 25
"30 Seconds": 30
"35 Seconds": 35
"40 Seconds": 40
"45 Seconds": 45
"50 Seconds": 50
"55 Seconds": 55
"60 Seconds": 60
"2 Minutes": 62
"3 Minutes": 63
"4 Minutes": 64
"10 Minutes": 70
"15 Minutes": 75
"30 Minutes": 90
"45 Minutes": 105
"1 Hour": 120
"2 Hours": 122
"Indefinitely": 255
effects_dimmer:
"Off": 0
"Solid": 1
"Chase": 2
"Fast Blink": 3
"Slow Blink": 4
"Blink": 4
"Pulse": 5
"Breath": 5
effects_switch:
"Off": 0
"Solid": 1
"Fast Blink": 2
"Slow Blink": 3
"Blink": 3
"Pulse": 4
"Breath": 4
sequence:
# Preform the Inovelli math.
- variables:
parameter: "{{ parameters[model|lower] }}"
color: "{{ colors[color|title]|int }}"
duration: "{{ durations[duration|title] }}"
effect: |
{% if model == "switch" %}
{{- effects_switch[effect|title] }}
{%- else %}
{{- effects_dimmer[effect|title] }}
{% endif %}
inovelli_math: |
{%- if effect|int > 0 %}
{{ color|int + (level|int * 256) + (duration|int * 65536) + (effect|int * 16777216) }}
{%- else %}
0
{% endif %}
# Unremark to provide an notification with troubleshooting information.
# - service: persistent_notification.create
# data:
# title: "DEBUG: script.inovelli_led"
# notification_id: "inovelli_led"
# message: |
# zwave_integration: {{ zwave_integration }}
# model: {{ model }}
# color: '{{ color|title }}'
# level: '{{ level }}'
# duration: '{{ duration|title }}'
# effect: '{{ effect|title }}'
# node_id: '{{ node_id }}'
# parameter: '{{ parameter }}'
# value: '{{ inovelli_math }}'
- choose:
# The Z-Wave JS integration requires this service call.
- conditions:
- '{{ zwave_integration == "zwave_js" }}'
sequence:
# Clear the previous effect.
- service: zwave_js.bulk_set_partial_config_parameters
target:
entity_id: "{{ entity_id }}"
data:
parameter: "{{ parameter }}"
value: 0
# Start the new effect.
- service: zwave_js.bulk_set_partial_config_parameters
target:
entity_id: "{{ entity_id }}"
data:
parameter: "{{ parameter }}"
value: "{{ inovelli_math }}"
# # The OZW integration requires this service call.
# - conditions:
# - '{{ zwave_integration == "ozw" }}'
# sequence:
# # Clear the previous effect.
# - service: ozw.set_config_parameter
# data:
# node_id: "{{ node_id }}"
# parameter: "{{ parameter }}"
# value: 0
# # Start the new effect.
# - service: ozw.set_config_parameter
# data:
# node_id: "{{ node_id }}"
# parameter: "{{ parameter }}"
# value: "{{ inovelli_math }}"
# # The Z-wave integration requires this service call.
# default:
# # Clear the previous effect.
# - service: zwave.set_config_parameter
# data:
# node_id: "{{ node_id }}"
# parameter: "{{ parameter }}"
# size: 4
# value: 0
# # Start the new effect.
# - service: zwave.set_config_parameter
# data:
# node_id: "{{ node_id }}"
# parameter: "{{ parameter }}"
# size: 4
# value: "{{ inovelli_math }}"
fields:
entity_id:
description: Light or switch which represents
example: light.red_series_dimmer
selector:
entity:
#integration: zwave_js
model:
description: 'Device type: dimmer (default), switch, combo_light'
example: dimmer
selector:
select:
options:
- dimmer
- switch
- combo_light
color:
description: 'Choose a color.'
example: purple
selector:
select:
options:
- "Off"
- Red
- Orange
- Yellow
- Green
- Cyan
- Teal
- Blue
- Purple
- Light Pink
- Pink
effect:
description: 'Choose an effect.'
example: blink
selector:
select:
options:
- "Off"
- Solid
- Chase
- Fast Blink
- Slow Blink
- Blink
- Pulse
- Breath
duration:
description: 'How long should the effect run?'
example: 10 seconds
selector:
select:
options:
- "Off"
- 1 Second
- 2 Seconds
- 3 Seconds
- 4 Seconds
- 5 Seconds
- 6 Seconds
- 7 Seconds
- 8 Seconds
- 9 Seconds
- 10 Seconds
- 15 Seconds
- 20 Seconds
- 25 Seconds
- 30 Seconds
- 35 Seconds
- 40 Seconds
- 45 Seconds
- 50 Seconds
- 55 Seconds
- 60 Seconds
- 2 Minutes
- 3 Minutes
- 4 Minutes
- 10 Minutes
- 15 Minutes
- 30 Minutes
- 45 Minutes
- 1 Hour
- 2 Hours
- Indefinitely