diff --git a/Home_Assistant/blueprints/hasp_Apply_Theme.yaml b/Home_Assistant/blueprints/hasp_Apply_Theme.yaml deleted file mode 100644 index 89e2fa8..0000000 --- a/Home_Assistant/blueprints/hasp_Apply_Theme.yaml +++ /dev/null @@ -1,283 +0,0 @@ -blueprint: - name: "HASP p[x].b[y] has theme applied" - description: | - - ## Description - - A button on the HASP will have the current device theme applied. Useful in combination with manual automations which might be applying text to a given button. - - ## HASP Page and Button Reference - - The images below show each available HASP page along with the layout of available button objects. - -
- - | Page 0 | Pages 1-3 | Pages 4-5 | - |--------|-----------|-----------| - | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p4-p5_3sliders.png) | - - | Page 6 | Page 7 | Page 8 | - |--------|--------|--------| - | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) | - - | Page 9 | Page 10 | Page 11 | - |--------|---------|---------| - | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p11_1button+1slider.png) - -
- - domain: automation - input: - haspdevice: - name: "HASP Device" - description: "Select the HASP device" - selector: - device: - integration: mqtt - manufacturer: "HASwitchPlate" - model: "HASPone v1.0.0" - hasppage: - name: "HASP Page" - description: "Select the HASP page (1-11). Refer to the HASP Page and Button reference above." - default: 1 - selector: - number: - min: 1 - max: 11 - mode: slider - unit_of_measurement: page - haspbutton: - name: "HASP Button" - description: "Select the HASP button (4-15) to be themed. Refer to the HASP Page and Button reference above." - default: 4 - selector: - number: - min: 4 - max: 15 - mode: slider - unit_of_measurement: button - selected_fgcolor: - name: "Selected foreground color" - description: 'Selected foreground color in Nextion RGB565 format (see "Nextion color codes" above for reference). -1 = Current theme selected foreground color.' - default: -1 - selector: - number: - min: -1 - max: 65535 - mode: slider - selected_bgcolor: - name: "Selected background color" - description: 'Selected background color in Nextion RGB565 format (see "Nextion color codes" above for reference). -1 = Current theme selected background color.' - default: -1 - selector: - number: - min: -1 - max: 65535 - mode: slider - unselected_fgcolor: - name: "Unselected foreground color" - description: 'Unselected foreground color in Nextion RGB565 format (see "Nextion color codes" above for reference). -1 = Current theme unselected foreground color.' - default: -1 - selector: - number: - min: -1 - max: 65535 - mode: slider - unselected_bgcolor: - name: "Unselected background color" - description: 'Unselected background color in Nextion RGB565 format (see "Nextion color codes" above for reference). -1 = Current theme unselected background color.' - default: -1 - selector: - number: - min: -1 - max: 65535 - mode: slider - -mode: parallel -max_exceeded: silent - -variables: - haspdevice: !input haspdevice - haspname: >- - {%- for entity in device_entities(haspdevice) -%} - {%- if entity|regex_search("^sensor\.") -%} - {{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}} - {%- endif -%} - {%- endfor -%} - hasppage: !input hasppage - haspbutton: !input haspbutton - haspobject: '{{ "p[" ~ hasppage ~ "].b[" ~ haspbutton ~ "]" }}' - commandtopic: '{{ "hasp/" ~ haspname ~ "/command/" ~ haspobject }}' - jsoncommandtopic: '{{ "hasp/" ~ haspname ~ "/command/json" }}' - selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}' - selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}' - unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}' - unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}' - selectedfg: >- - {%- set color = namespace() -%} - {%- for entity in device_entities(haspdevice) -%} - {%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%} - {%- set color.source=entity -%} - {%- endif -%} - {%- endfor -%} - {%- set brightness = state_attr(color.source, "brightness")|int / 255 -%} - {%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%} - {%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%} - {%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%} - {{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }} - selectedbg: >- - {%- set color = namespace() -%} - {%- for entity in device_entities(haspdevice) -%} - {%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%} - {%- set color.source=entity -%} - {%- endif -%} - {%- endfor -%} - {%- set brightness = state_attr(color.source, "brightness")|int / 255 -%} - {%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%} - {%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%} - {%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%} - {{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }} - unselectedfg: >- - {%- set color = namespace() -%} - {%- for entity in device_entities(haspdevice) -%} - {%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%} - {%- set color.source=entity -%} - {%- endif -%} - {%- endfor -%} - {%- set brightness = state_attr(color.source, "brightness")|int / 255 -%} - {%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%} - {%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%} - {%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%} - {{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }} - unselectedbg: >- - {%- set color = namespace() -%} - {%- for entity in device_entities(haspdevice) -%} - {%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%} - {%- set color.source=entity -%} - {%- endif -%} - {%- endfor -%} - {%- set brightness = state_attr(color.source, "brightness")|int / 255 -%} - {%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%} - {%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%} - {%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%} - {{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }} - -trigger_variables: - haspdevice: !input haspdevice - haspname: >- - {%- for entity in device_entities(haspdevice) -%} - {%- if entity|regex_search("^sensor\.") -%} - {{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}} - {%- endif -%} - {%- endfor -%} - haspsensor: >- - {%- for entity in device_entities(haspdevice) -%} - {%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%} - {{ entity }} - {%- endif -%} - {%- endfor -%} - jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}' - selectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedforegroundcolor/rgb" }}' - selectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/selectedbackgroundcolor/rgb" }}' - unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}' - unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}' - -trigger: - - platform: homeassistant - event: start - - platform: template - value_template: "{{ is_state(haspsensor, 'ON') }}" - - platform: mqtt - topic: "{{selectedfgtopic}}" - - platform: mqtt - topic: "{{selectedbgtopic}}" - - platform: mqtt - topic: "{{unselectedfgtopic}}" - - platform: mqtt - topic: "{{unselectedbgtopic}}" - -condition: - - condition: template - value_template: "{{ is_state(haspsensor, 'ON') }}" - -action: - - choose: - ######################################################################### - # RUN ACTIONS or Home Assistant Startup or HASP Connect - # Display text and apply text style - - conditions: - - condition: template - value_template: >- - {{- - (trigger is not defined) - or - (trigger.platform is none) - or - ((trigger.platform == 'homeassistant') and (trigger.event == 'start')) - or - ((trigger.platform == 'template') and (trigger.entity_id == haspsensor) and (trigger.to_state.state == 'ON')) - -}} - sequence: - - service: mqtt.publish - data: - topic: "{{jsoncommandtopic}}" - payload: >- - [ - "{{haspobject}}.font={{font}}", - "{{haspobject}}.xcen={{xcen}}", - "{{haspobject}}.ycen={{ycen}}", - "{{haspobject}}.isbr={{isbr}}", - "{{haspobject}}.pco={{selectedfg}}", - "{{haspobject}}.bco={{selectedbg}}", - "{{haspobject}}.pco2={{unselectedfg}}", - "{{haspobject}}.bco2={{unselectedbg}}", - "{{haspobject}}.txt=\"{{text}}\"" - ] - ######################################################################### - # Catch triggers fired by incoming MQTT messages - - conditions: - - condition: template - value_template: '{{ trigger.platform == "mqtt" }}' - sequence: - - choose: - ######################################################################### - # Theme: Apply selected foreground color on change - - conditions: - - condition: template - value_template: "{{ trigger.topic == selectedfgtopic }}" - sequence: - - service: mqtt.publish - data: - topic: "{{commandtopic}}.pco" - payload: "{{trigger.payload}}" - ######################################################################### - # Theme: Apply selected background color on change - - conditions: - - condition: template - value_template: "{{ trigger.topic == selectedbgtopic }}" - sequence: - - service: mqtt.publish - data: - topic: "{{commandtopic}}.bco" - payload: "{{trigger.payload}}" - ######################################################################### - # Theme: Apply unselected foreground color on change - - conditions: - - condition: template - value_template: "{{ trigger.topic == unselectedfgtopic }}" - sequence: - - service: mqtt.publish - data: - topic: "{{commandtopic}}.pco2" - payload: "{{trigger.payload}}" - ######################################################################### - # Theme: Apply unselected background color on change - - conditions: - - condition: template - value_template: "{{ trigger.topic == unselectedbgtopic }}" - sequence: - - service: mqtt.publish - data: - topic: "{{commandtopic}}.bco2" - payload: "{{trigger.payload}}" - diff --git a/Home_Assistant/blueprints/hasp_Display_Text.yaml b/Home_Assistant/blueprints/hasp_Display_Text.yaml index fe1150a..e396dbe 100644 --- a/Home_Assistant/blueprints/hasp_Display_Text.yaml +++ b/Home_Assistant/blueprints/hasp_Display_Text.yaml @@ -59,6 +59,28 @@ blueprint: + ## Nextion color codes + +
+ + The Nextion environment utilizes RGB 565 encoding. [Use this handy convertor](https://nodtem66.github.io/nextion-hmi-color-convert/index.html) to select your colors and convert to the RGB 565 format. + + Here are some example colors: + + | Color | Code | + |--------|-------| + | White | 65535 | + | Black | 0 | + | Grey | 25388 | + | Red | 63488 | + | Green | 2016 | + | Blue | 31 | + | Yellow | 65504 | + | Orange | 64512 | + | Brown | 48192 | + +
+ domain: automation input: haspdevice: @@ -139,6 +161,42 @@ blueprint: default: false selector: boolean: + selected_fgcolor: + name: "Selected foreground color" + description: 'Selected foreground color in Nextion RGB565 format (see "Nextion color codes" above for reference). -1 = Current theme selected foreground color.' + default: -1 + selector: + number: + min: -1 + max: 65535 + mode: slider + selected_bgcolor: + name: "Selected background color" + description: 'Selected background color in Nextion RGB565 format (see "Nextion color codes" above for reference). -1 = Current theme selected background color.' + default: -1 + selector: + number: + min: -1 + max: 65535 + mode: slider + unselected_fgcolor: + name: "Unselected foreground color" + description: 'Unselected foreground color in Nextion RGB565 format (see "Nextion color codes" above for reference). -1 = Current theme unselected foreground color.' + default: -1 + selector: + number: + min: -1 + max: 65535 + mode: slider + unselected_bgcolor: + name: "Unselected background color" + description: 'Unselected background color in Nextion RGB565 format (see "Nextion color codes" above for reference). -1 = Current theme unselected background color.' + default: -1 + selector: + number: + min: -1 + max: 65535 + mode: slider mode: parallel max_exceeded: silent @@ -161,6 +219,10 @@ variables: ycen_select: !input ycen_select ycen: '{{ ycen_select.split(" - ")[0] | int }}' wrap: !input wrap + selected_fgcolor: !input selected_fgcolor + selected_bgcolor: !input selected_bgcolor + unselected_fgcolor: !input unselected_fgcolor + unselected_bgcolor: !input unselected_bgcolor haspobject: '{{ "p[" ~ hasppage ~ "].b[" ~ haspbutton ~ "]" }}' commandtopic: '{{ "hasp/" ~ haspname ~ "/command/" ~ haspobject }}' jsoncommandtopic: '{{ "hasp/" ~ haspname ~ "/command/json" }}' @@ -170,53 +232,69 @@ variables: unselectedfgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedforegroundcolor/rgb" }}' unselectedbgtopic: '{{ "hasp/" ~ haspname ~ "/light/unselectedbackgroundcolor/rgb" }}' selectedfg: >- - {%- set color = namespace() -%} - {%- for entity in device_entities(haspdevice) -%} - {%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%} - {%- set color.source=entity -%} - {%- endif -%} - {%- endfor -%} - {%- set brightness = state_attr(color.source, "brightness")|int / 255 -%} - {%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%} - {%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%} - {%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%} - {{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }} + {%- if (selected_fgcolor|int) >= 0 -%} + {{ selected_fgcolor }} + {%- else -%} + {%- set color = namespace() -%} + {%- for entity in device_entities(haspdevice) -%} + {%- if entity|regex_search("^light\..*_selected_foreground_color(?:_\d+|)$") -%} + {%- set color.source=entity -%} + {%- endif -%} + {%- endfor -%} + {%- set brightness = state_attr(color.source, "brightness")|int / 255 -%} + {%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%} + {%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%} + {%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%} + {{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }} + {%- endif -%} selectedbg: >- - {%- set color = namespace() -%} - {%- for entity in device_entities(haspdevice) -%} - {%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%} - {%- set color.source=entity -%} - {%- endif -%} - {%- endfor -%} - {%- set brightness = state_attr(color.source, "brightness")|int / 255 -%} - {%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%} - {%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%} - {%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%} - {{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }} + {%- if (selected_bgcolor|int) >= 0 -%} + {{ selected_bgcolor }} + {%- else -%} + {%- set color = namespace() -%} + {%- for entity in device_entities(haspdevice) -%} + {%- if entity|regex_search("^light\..*_selected_background_color(?:_\d+|)$") -%} + {%- set color.source=entity -%} + {%- endif -%} + {%- endfor -%} + {%- set brightness = state_attr(color.source, "brightness")|int / 255 -%} + {%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%} + {%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%} + {%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%} + {{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }} + {%- endif -%} unselectedfg: >- - {%- set color = namespace() -%} - {%- for entity in device_entities(haspdevice) -%} - {%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%} - {%- set color.source=entity -%} - {%- endif -%} - {%- endfor -%} - {%- set brightness = state_attr(color.source, "brightness")|int / 255 -%} - {%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%} - {%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%} - {%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%} - {{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }} + {%- if (unselected_fgcolor|int) >= 0 -%} + {{ unselected_fgcolor }} + {%- else -%} + {%- set color = namespace() -%} + {%- for entity in device_entities(haspdevice) -%} + {%- if entity|regex_search("^light\..*_unselected_foreground_color(?:_\d+|)$") -%} + {%- set color.source=entity -%} + {%- endif -%} + {%- endfor -%} + {%- set brightness = state_attr(color.source, "brightness")|int / 255 -%} + {%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%} + {%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%} + {%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%} + {{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }} + {%- endif -%} unselectedbg: >- - {%- set color = namespace() -%} - {%- for entity in device_entities(haspdevice) -%} - {%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%} - {%- set color.source=entity -%} - {%- endif -%} - {%- endfor -%} - {%- set brightness = state_attr(color.source, "brightness")|int / 255 -%} - {%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%} - {%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%} - {%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%} - {{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }} + {%- if (unselected_bgcolor|int) >= 0 -%} + {{ unselected_bgcolor }} + {%- else -%} + {%- set color = namespace() -%} + {%- for entity in device_entities(haspdevice) -%} + {%- if entity|regex_search("^light\..*_unselected_background_color(?:_\d+|)$") -%} + {%- set color.source=entity -%} + {%- endif -%} + {%- endfor -%} + {%- set brightness = state_attr(color.source, "brightness")|int / 255 -%} + {%- set red=(state_attr(color.source, "rgb_color")[0] * brightness)|int -%} + {%- set green=(state_attr(color.source, "rgb_color")[1] * brightness)|int -%} + {%- set blue=(state_attr(color.source, "rgb_color")[2] * brightness)|int -%} + {{ (red|bitwise_and(248)*256) + (green|bitwise_and(252)*8) + (blue|bitwise_and(248)/8)|int }} + {%- endif -%} trigger_variables: haspdevice: !input haspdevice @@ -305,7 +383,7 @@ action: - service: mqtt.publish data: topic: "{{commandtopic}}.pco" - payload: "{{trigger.payload}}" + payload: "{{selectedfg}}" ######################################################################### # Theme: Apply selected background color on change - conditions: @@ -315,7 +393,7 @@ action: - service: mqtt.publish data: topic: "{{commandtopic}}.bco" - payload: "{{trigger.payload}}" + payload: "{{selectedbg}}" ######################################################################### # Theme: Apply unselected foreground color on change - conditions: @@ -325,7 +403,7 @@ action: - service: mqtt.publish data: topic: "{{commandtopic}}.pco2" - payload: "{{trigger.payload}}" + payload: "{{unselectedfg}}" ######################################################################### # Theme: Apply unselected background color on change - conditions: @@ -335,5 +413,4 @@ action: - service: mqtt.publish data: topic: "{{commandtopic}}.bco2" - payload: "{{trigger.payload}}" - + payload: "{{unselectedbg}}"