diff --git a/README.md b/README.md index 26b8284..e651482 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,8 @@ The goal was to create a version that allows everyone to use the NSpanel fully l 🎉 Roadmap Roadmap can be found here [Roadmap](https://github.com/Blackymas/NSPanel_HA_Blueprint/labels/roadmap) +💥 Please move pull request to DEV branch and not to main branch - thanks! + 🙋 WE ARE LOOKING FOR YOU! _**We are always looking for people who would like to support this project. We are looking for help with "programming new features, writing documentation or translating documentation to EN. If you are interested then please contact us :)**_ ## NSPanel: @@ -43,7 +45,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l ![8 Cover](https://user-images.githubusercontent.com/41958506/203654290-c6ec2f2f-7924-492c-914c-0d96dc3907e0.png) ![9 Weather](https://user-images.githubusercontent.com/41958506/203654307-24000d00-b7e1-47eb-bd64-9e97b508db52.png) -(Coversetting and Weather Forcast) +(Coversetting and Weather Forecast) ![10 Settings](https://user-images.githubusercontent.com/41958506/203654386-e4e574ad-8674-4268-84dd-1c4e40f98eb9.png) @@ -56,7 +58,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l ![Device Setting 2](https://user-images.githubusercontent.com/41958506/203724491-53ecd93d-bc7c-4c2d-850b-f106691e2639.png) -(HA Device Seeting for Example temperature correction) +(HA Device Setting for Example temperature correction) ## Blueprint: @@ -66,28 +68,28 @@ The goal was to create a version that allows everyone to use the NSpanel fully l ## Features: -- easy to use and simple configuration via Blueprint - no change in the code is necessary +- Easy to use and simple configuration via Blueprint - no change in the code is necessary - 32 buttons on 4 button pages with long press function for settings (more buttons are also possible) - Button design is automatically generated based on the selected entity - Buttons show current brightness and cover position in the button itself - Buttons label can be assigned via blueprint -- Weather + 5 days weather forcast +- Weather + 5 days weather forecast - Thermostat + Touch + Relay control for floor heating -- Light control (brightness-slider, colorwheel, TempColor-slider) - via Long Press +- Light control (brightness-slider, colorwheel, TempColor-slider) - via long Press - Cover control (open, close, position-slider) - via long press - Settings page (display brightness, display dim brightness, auto-dim, sleep mode, reboot NSPanel) - Swipe between pages - Top menu with 10 icons for specific states - Heating control (hot water) -- modern design - design easy to change via Adobe Express (free + design template) -- 2 pysical switches +- Modern design - design easy to change via Adobe Express (free + design template) +- 2 physical switches - and much more ;) # Pages ## Home -- current weather with button to Weather Forcast page +- Current weather with button to Weather Forcast page - Hardware buttons can be freely assigned - Hardware button label or without label - Blue line indicates on or off of the entity @@ -134,8 +136,8 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - Hot water button -## Weather Forcast -- 5 days Weather Forcast via swipe (Integration Accuweather - but should also go with another integration) +## Weather Forecast +- 5 days Weather Forecast via swipe (Integration Accuweather - but should also go with another integration) - Lowest and highest temperature outside - Date - Rain probability diff --git a/nspanel.HMI b/nspanel.HMI index 9e5cfc3..bf5a784 100644 Binary files a/nspanel.HMI and b/nspanel.HMI differ diff --git a/nspanel.tft b/nspanel.tft index 6a7989d..2146d3e 100644 Binary files a/nspanel.tft and b/nspanel.tft differ diff --git a/nspanel_blueprint.yaml b/nspanel_blueprint.yaml index abb001d..9665da9 100644 --- a/nspanel_blueprint.yaml +++ b/nspanel_blueprint.yaml @@ -205,10 +205,39 @@ The goal was to create a version that allows everyone to use the NSpanel fully l selector: text: {} + ##### BUTTON Page Labels ##### + button_page01_label: + name: Name **"Button Page 1"** (Optional) + description: '* *Displayed on top of **"Button Page 1"***' + default: [] + selector: + text: {} + + button_page02_label: + name: Name **"Button Page 2"** (Optional) + description: '* *Displayed on top of **"Button Page 2"***' + default: [] + selector: + text: {} + + button_page03_label: + name: Name **"Button Page 3"** (Optional) + description: '* *Displayed on top of **"Button Page 3"***' + default: [] + selector: + text: {} + + button_page04_label: + name: Name **"Button Page 4"** (Optional) + description: '* *Displayed on top of **"Button Page 4"***' + default: [] + selector: + text: {} + ##### BUTTONS ##### entity01: name: Button 01 (Optional) - description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -217,6 +246,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity01_name: name: Name "Button 01" (Optional) description: '* *Button label - 10 characters are supported*' @@ -225,7 +259,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity02: name: Button 02 (Optional) - description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -234,6 +268,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity02_name: name: Name "Button 02" (Optional) description: '* *Button label - 10 characters are supported*' @@ -242,7 +281,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity03: name: Button 03 (Optional) - description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -251,6 +290,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity03_name: name: Name "Button 03" (Optional) description: '* *Button label - 10 characters are supported*' @@ -259,7 +303,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity04: name: Button 04 (Optional) - description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -268,6 +312,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity04_name: name: Name "Button 04" (Optional) description: '* *Button label - 10 characters are supported*' @@ -276,7 +325,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity05: name: Button 05 (Optional) - description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -285,6 +334,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity05_name: name: Name "Button 05" (Optional) description: '* *Button label - 10 characters are supported*' @@ -293,7 +347,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity06: name: Button 06 (Optional) - description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -302,6 +356,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity06_name: name: Name "Button 06" (Optional) description: '* *Button label - 10 characters are supported*' @@ -310,7 +369,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity07: name: Button 07 (Optional) - description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -319,6 +378,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity07_name: name: Name "Button 07" (Optional) description: '* *Button label - 10 characters are supported*' @@ -327,7 +391,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity08: name: Button 08 (Optional) - description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -336,6 +400,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity08_name: name: Name "Button 08" (Optional) description: '* *Button label - 10 characters are supported*' @@ -344,7 +413,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity09: name: Button 09 (Optional) - description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -353,6 +422,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity09_name: name: Name "Button 09" (Optional) description: '* *Button label - 10 characters are supported*' @@ -361,7 +435,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity10: name: Button 10 (Optional) - description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -370,6 +444,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity10_name: name: Name "Button 10" (Optional) description: '* *Button label - 10 characters are supported*' @@ -378,7 +457,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity11: name: Button 11 (Optional) - description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -387,6 +466,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity11_name: name: Name "Button 11" (Optional) description: '* *Button label - 10 characters are supported*' @@ -395,7 +479,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity12: name: Button 12 (Optional) - description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -404,6 +488,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity12_name: name: Name "Button 12" (Optional) description: '* *Button label - 10 characters are supported*' @@ -412,7 +501,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity13: name: Button 13 (Optional) - description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -421,6 +510,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity13_name: name: Name "Button 13" (Optional) description: '* *Button label - 10 characters are supported*' @@ -429,7 +523,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity14: name: Button 14 (Optional) - description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -438,6 +532,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity14_name: name: Name "Button 14" (Optional) description: '* *Button label - 10 characters are supported*' @@ -446,7 +545,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity15: name: Button 15 (Optional) - description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -455,6 +554,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity15_name: name: Name "Button 15" (Optional) description: '* *Button label - 10 characters are supported*' @@ -463,7 +567,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity16: name: Button 16 (Optional) - description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -472,6 +576,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity16_name: name: Name "Button 16" (Optional) description: '* *Button label - 10 characters are supported*' @@ -480,7 +589,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity17: name: Button 17 (Optional) - description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -489,6 +598,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity17_name: name: Name "Button 17" (Optional) description: '* *Button label - 10 characters are supported*' @@ -497,7 +611,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity18: name: Button 18 (Optional) - description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -506,6 +620,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity18_name: name: Name "Button 18" (Optional) description: '* *Button label - 10 characters are supported*' @@ -514,7 +633,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity19: name: Button 19 (Optional) - description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -523,6 +642,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity19_name: name: Name "Button 19" (Optional) description: '* *Button label - 10 characters are supported*' @@ -531,7 +655,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity20: name: Button 20 (Optional) - description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -540,6 +664,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity20_name: name: Name "Button 20" (Optional) description: '* *Button label - 10 characters are supported*' @@ -548,7 +677,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity21: name: Button 21 (Optional) - description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -557,6 +686,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity21_name: name: Name "Button 21" (Optional) description: '* *Button label - 10 characters are supported*' @@ -565,7 +699,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity22: name: Button 22 (Optional) - description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -574,6 +708,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity22_name: name: Name "Button 22" (Optional) description: '* *Button label - 10 characters are supported*' @@ -582,7 +721,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity23: name: Button 23 (Optional) - description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -591,6 +730,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity23_name: name: Name "Button 23" (Optional) description: '* *Button label - 10 characters are supported*' @@ -599,7 +743,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity24: name: Button 24 (Optional) - description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -608,6 +752,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity24_name: name: Name "Button 24" (Optional) description: '* *Button label - 10 characters are supported*' @@ -616,7 +765,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity25: name: Button 25 (Optional) - description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -625,6 +774,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity25_name: name: Name "Button 25" (Optional) description: '* *Button label - 10 characters are supported*' @@ -633,7 +787,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity26: name: Button 26 (Optional) - description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -642,6 +796,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity26_name: name: Name "Button 26" (Optional) description: '* *Button label - 10 characters are supported*' @@ -650,7 +809,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity27: name: Button 27 (Optional) - description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -659,6 +818,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity27_name: name: Name "Button 27" (Optional) description: '* *Button label - 10 characters are supported*' @@ -667,7 +831,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity28: name: Button 28 (Optional) - description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -676,6 +840,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity28_name: name: Name "Button 28" (Optional) description: '* *Button label - 10 characters are supported*' @@ -684,7 +853,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity29: name: Button 29 (Optional) - description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -693,6 +862,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity29_name: name: Name "Button 29" (Optional) description: '* *Button label - 10 characters are supported*' @@ -701,7 +875,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity30: name: Button 30 (Optional) - description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -710,6 +884,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity30_name: name: Name "Button 30" (Optional) description: '* *Button label - 10 characters are supported*' @@ -718,7 +897,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity31: name: Button 31 (Optional) - description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -727,6 +906,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity31_name: name: Name "Button 31" (Optional) description: '* *Button label - 10 characters are supported*' @@ -735,7 +919,7 @@ The goal was to create a version that allows everyone to use the NSpanel fully l text: {} entity32: name: Button 32 (Optional) - description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean | automation | button | input_button | scene | person)*' default: [] selector: entity: @@ -744,6 +928,11 @@ The goal was to create a version that allows everyone to use the NSpanel fully l - switch - cover - input_boolean + - automation + - button + - input_button + - scene + - person entity32_name: name: Name "Button 32" (Optional) description: '* *Button label - 10 characters are supported*' @@ -836,6 +1025,15 @@ variables: button_switch_on: "65" button_cover_off: "66" button_cover_on: "67" + button_automation_off: "107" + button_automation_on: "108" + button_button_off: "109" + button_button_on: "110" + button_scene_off: "113" + button_scene_on: "114" + button_person_off: "111" + button_person_on: "112" + hardware_button_pic_off: "98" hardware_button_pic_on: "99" cover_pic_closed: "78" @@ -1013,6 +1211,12 @@ variables: accuweather_wind_day_4d: "sensor.{{ accuweather }}_wind_day_4d" accuweather_wind_night_4d: "sensor.{{ accuweather }}_wind_night_4d" + ##### BUTTON Page Labels ##### + button_page01_label: !input button_page01_label + button_page02_label: !input button_page02_label + button_page03_label: !input button_page03_label + button_page04_label: !input button_page04_label + ##### BUTTONS 1- 32 ##### entity01: !input "entity01" entity01_name: !input "entity01_name" @@ -1684,16 +1888,29 @@ action: {%- elif repeat.item.entity is match "input_boolean." and states[repeat.item.entity].state == 'off' -%} {{ button_switch_off }} {%- elif repeat.item.entity is match "cover." and states[repeat.item.entity].state == 'open' -%} {{ button_cover_on }} {%- elif repeat.item.entity is match "cover." and states[repeat.item.entity].state == 'closed' -%} {{ button_cover_off }} + {%- elif repeat.item.entity is match "automation." and states[repeat.item.entity].state == 'on' -%} {{ button_automation_on }} + {%- elif repeat.item.entity is match "automation." and states[repeat.item.entity].state == 'off' -%} {{ button_automation_off }} + {%- elif repeat.item.entity is match "button." -%} {{ button_button_off }} + {%- elif repeat.item.entity is match "input_button." -%} {{ button_button_off }} + {%- elif repeat.item.entity is match "scene." -%} {{ button_scene_off }} + {%- elif repeat.item.entity is match "person." and states[repeat.item.entity].state == 'home' -%} {{ button_person_on }} + {%- elif repeat.item.entity is match "person." and states[repeat.item.entity].state != 'home' -%} {{ button_person_off }} {%- endif -%} # TEXT and BRIGHTNESS Background btn_bg: >- - {%- if states[repeat.item.entity].state == 'on' or states[repeat.item.entity].state == 'open' -%} {{ button_color_1 }} + {%- if repeat.item.entity is match "button." or repeat.item.entity is match "input_button." or repeat.item.entity is match "scene." -%} {{ button_color_2 }} + {%- elif states[repeat.item.entity].state == 'on' or states[repeat.item.entity].state == 'open' -%} {{ button_color_1 }} {%- elif states[repeat.item.entity].state == 'off' or states[repeat.item.entity].state == 'closed' -%} {{ button_color_2 }} + {%- elif repeat.item.entity is match "person." and states[repeat.item.entity].state == 'home' -%} {{ button_color_1 }} + {%- elif repeat.item.entity is match "person." and states[repeat.item.entity].state != 'home' -%} {{ button_color_2 }} {%- endif -%} # TEXT Font btn_txt_font: >- - {%- if states[repeat.item.entity].state == 'on' or states[repeat.item.entity].state == 'open' -%} {{ button_color_2 }} + {%- if repeat.item.entity is match "button." or repeat.item.entity is match "input_button." or repeat.item.entity is match "scene." -%} {{ button_color_1 }} + {%- elif states[repeat.item.entity].state == 'on' or states[repeat.item.entity].state == 'open' -%} {{ button_color_2 }} {%- elif states[repeat.item.entity].state == 'off' or states[repeat.item.entity].state == 'closed' -%} {{ button_color_1 }} + {%- elif repeat.item.entity is match "person." and states[repeat.item.entity].state == 'home' -%} {{ button_color_2 }} + {%- elif repeat.item.entity is match "person." and states[repeat.item.entity].state != 'home' -%} {{ button_color_1 }} {%- endif -%} # BRIGHTNESS Font btn_bri_font: "{{ button_color_2 }}" @@ -2056,16 +2273,29 @@ action: {%- elif trigger.to_state.entity_id is match "input_boolean." and trigger.to_state.state == 'off' -%} {{ button_switch_off }} {%- elif trigger.to_state.entity_id is match "cover." and trigger.to_state.state == 'open' -%} {{ button_cover_on }} {%- elif trigger.to_state.entity_id is match "cover." and trigger.to_state.state == 'closed' -%} {{ button_cover_off }} + {%- elif trigger.to_state.entity_id is match "automation." and trigger.to_state.state == 'on' -%} {{ button_automation_on }} + {%- elif trigger.to_state.entity_id is match "automation." and trigger.to_state.state == 'off' -%} {{ button_automation_off }} + {%- elif trigger.to_state.entity_id is match "button." -%} {{ button_button_on }} + {%- elif trigger.to_state.entity_id is match "input_button." -%} {{ button_button_on }} + {%- elif trigger.to_state.entity_id is match "scene." -%} {{ button_scene_on }} + {%- elif trigger.to_state.entity_id is match "person." and trigger.to_state.state == 'home' -%} {{ button_person_on }} + {%- elif trigger.to_state.entity_id is match "person." and trigger.to_state.state != 'home' -%} {{ button_person_off }} {%- endif -%} # TEXT and BRIGHTNESS Background btn_bg: >- - {%- if trigger.to_state.state == 'on' or trigger.to_state.state == 'open' -%} {{ button_color_1 }} + {%- if trigger.to_state.entity_id is match "button." or trigger.to_state.entity_id is match "input_button." or trigger.to_state.entity_id is match "scene." -%} {{ button_color_1 }} + {%- elif trigger.to_state.state == 'on' or trigger.to_state.state == 'open' -%} {{ button_color_1 }} {%- elif trigger.to_state.state == 'off' or trigger.to_state.state == 'closed' -%} {{ button_color_2 }} + {%- elif trigger.to_state.entity_id is match "person." and trigger.to_state.state == 'home' -%} {{ button_color_1 }} + {%- elif trigger.to_state.entity_id is match "person." and trigger.to_state.state != 'home' -%} {{ button_color_2 }} {%- endif -%} # TEXT Font btn_txt_font: >- - {%- if trigger.to_state.state == 'on' or trigger.to_state.state == 'open' -%} {{ button_color_2 }} + {%- if trigger.to_state.entity_id is match "button." or trigger.to_state.entity_id is match "input_button." or trigger.to_state.entity_id is match "scene." -%} {{ button_color_2 }} + {%- elif trigger.to_state.state == 'on' or trigger.to_state.state == 'open' -%} {{ button_color_2 }} {%- elif trigger.to_state.state == 'off' or trigger.to_state.state == 'closed' -%} {{ button_color_1 }} + {%- elif trigger.to_state.entity_id is match "person." and trigger.to_state.state == 'home' -%} {{ button_color_2 }} + {%- elif trigger.to_state.entity_id is match "person." and trigger.to_state.state != 'home' -%} {{ button_color_1 }} {%- endif -%} # BRIGHTNESS Font btn_bri_font: "{{ button_color_2 }}" @@ -2174,6 +2404,51 @@ action: component: "{{ component_to_update }}bri" message: "{{ btn_bri_txt }}" + ##### release button/scene (stateless) ##### + - if: + - condition: template + value_template: '{{ trigger.to_state.entity_id is match "button." or trigger.to_state.entity_id is match "input_button." or trigger.to_state.entity_id is match "scene." }}' + then: + - delay: + milliseconds: "1000" + - variables: + btn_pic: >- + {%- if trigger.to_state.entity_id is match "button." -%} {{ button_button_off }} + {%- elif trigger.to_state.entity_id is match "input_button." -%} {{ button_button_off }} + {%- elif trigger.to_state.entity_id is match "scene." -%} {{ button_scene_off }} + {%- endif -%} + btn_bg: '{{ button_color_2 }}' + btn_txt_font: '{{ button_color_1 }}' + + ##### Button PIC ##### + - service: "{{ command_printf }}" + data: + cmd: "{{ component_to_update }}pic.pic={{ btn_pic }}" + + ##### TEXT Background ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_background_color }}" + data: + component: "{{ component_to_update }}text" + message: "{{ btn_bg }}" + + ##### TEXT Font Color ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_font_color }}" + data: + component: "{{ component_to_update }}text" + message: "{{ btn_txt_font }}" + + ##### BRIGHTNESS Background Color ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_background_color }}" + data: + component: "{{ component_to_update }}bri" + message: "{{ btn_bg }}" + ##### UPDATE LIGHTSETTING / COVERSETTING PAGE - choose: ##### LIGHTSETTINGS PAGE - LIGHT Entity ##### @@ -2417,15 +2692,25 @@ action: {%- elif states(last_click) == "releasebuttonpage04button07" -%} {{ entity31 }} {%- elif states(last_click) == "releasebuttonpage04button08" -%} {{ entity32 }} {%- endif -%} + - condition: template + value_template: '{{ entity_short is not match "person." }}' - service: >- {% if entity_short is match 'light.' %} - light.toggle + light.toggle {% elif entity_short is match 'switch.' %} - switch.toggle + switch.toggle {% elif entity_short is match 'cover.' %} - cover.toggle + cover.toggle {% elif entity_short is match 'input_boolean.' %} - input_boolean.toggle + input_boolean.toggle + {% elif entity_short is match 'automation.' %} + automation.toggle + {% elif entity_short is match 'button.' %} + button.press + {% elif entity_short is match 'input_button.' %} + input_button.press + {% elif entity_short is match 'scene.' %} + scene.turn_on {% endif %} data: entity_id: "{{ entity_short }}" @@ -3088,13 +3373,13 @@ action: data: cmd: home.weather.pic={{ weather_pic }} - ##### Page changed ##### + ##### PAGE CHANGED ##### - conditions: - condition: trigger id: current_page_changed sequence: - choose: - ## home ## + ## PAGE HOME ## - conditions: '{{ trigger.event.data.new_state.state == page_home }}' sequence: ##### NSPanel Date ##### @@ -3157,7 +3442,7 @@ action: component: home.outdoor_temp message: "{{ outdoor_temp }}°" - ##### Weather Icon Home Page + ##### Weather Icon Home Page ##### - variables: weather_pic: >- {%- if states(weather_entity) == 'sunny' -%} {{ weather_sunny }} @@ -3198,18 +3483,22 @@ action: component: home.left_bt_text message: "{{ left_button_name }}" - ##### SET Left Hardware Button PIC on Home Page #### - - variables: - # Hardware Button PIC - left_hardware_button_state: >- - {%- if states(left_button_entity) == 'off' -%} {{ hardware_button_pic_off }} - {%- elif states(left_button_entity) == 'on' -%} {{ hardware_button_pic_on }} - {%- endif -%} - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: home.left_bt_pic.pic={{ left_hardware_button_state }} + ##### SET Left Hardware Button PIC on Home Page #### + - if: + - condition: template + value_template: '{{ left_button_entity |length > 0 and states(left_button_entity).state != "unavailable" }}' + then: + - variables: + # Hardware Button PIC + left_hardware_button_state: >- + {%- if states(left_button_entity) == 'off' -%} {{ hardware_button_pic_off }} + {%- elif states(left_button_entity) == 'on' -%} {{ hardware_button_pic_on }} + {%- endif -%} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.left_bt_pic.pic={{ left_hardware_button_state }} ##### NSPanel Right Button Name ##### - if: @@ -3224,18 +3513,23 @@ action: message: "{{ right_button_name }}" ###### SET Right Hardware Button PIC on Home Page ##### - - variables: + + - if: + - condition: template + value_template: '{{ right_button_entity |length > 0 and states(right_button_entity).state != "unavailable" }}' + then: + - variables: # Hardware Button PIC - right_hardware_button_state: >- - {%- if states(right_button_entity) == 'off' -%} {{ hardware_button_pic_off }} - {%- elif states(right_button_entity) == 'on' -%} {{ hardware_button_pic_on }} - {%- endif -%} - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: home.right_bt_pic.pic={{ right_hardware_button_state }} - + right_hardware_button_state: >- + {%- if states(right_button_entity) == 'off' -%} {{ hardware_button_pic_off }} + {%- elif states(right_button_entity) == 'on' -%} {{ hardware_button_pic_on }} + {%- endif -%} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.right_bt_pic.pic={{ right_hardware_button_state }} + ###### StatusBar - Climate Symbol ###### - if: - condition: template @@ -3293,7 +3587,7 @@ action: #hvac_mode: 'heat' temperature: "{{ display_target_temperature }}" - ## weather01 ## + ## PAGE WEATHE01 ## - conditions: '{{ trigger.event.data.new_state.state == page_weather01 }}' sequence: - choose: @@ -3511,7 +3805,7 @@ action: data: cmd: "page {{ page_home }}" - ## weather02 ## + ## PAGE WEATHE02 ## - conditions: '{{ trigger.event.data.new_state.state == page_weather02 }}' sequence: - choose: @@ -3753,7 +4047,7 @@ action: data: cmd: "page {{ page_home }}" - ## weather03 ## + ## PAGE WEATHE03 ## - conditions: '{{ trigger.event.data.new_state.state == page_weather03 }}' sequence: - choose: @@ -3995,7 +4289,7 @@ action: data: cmd: "page {{ page_home }}" - ## weather04 ## + ## PAGE WEATHE04 ## - conditions: '{{ trigger.event.data.new_state.state == page_weather04 }}' sequence: - choose: @@ -4237,7 +4531,7 @@ action: data: cmd: "page {{ page_home }}" - ## weather05 ## + ## PAGE WEATHE05 ## - conditions: '{{ trigger.event.data.new_state.state == page_weather05 }}' sequence: - choose: @@ -4479,7 +4773,7 @@ action: data: cmd: "page {{ page_home }}" - ## climate ## + ## PAGE CLIMATE ## - conditions: '{{ trigger.event.data.new_state.state == page_climate }}' alias: 'climate page' sequence: @@ -4557,41 +4851,77 @@ action: component: climate.hotwater_temp message: "{{ states(hotwatertemp) |round(1) }}°" - ## settings ## + ## PAGE SETTINGS ## - conditions: '{{ trigger.event.data.new_state.state == page_settings }}' sequence: - ## boot ## + ## PAGE BOOT ## - conditions: '{{ trigger.event.data.new_state.state == page_boot }}' sequence: - ## screensaver ## + ## PAGE SCREENSAVER ## - conditions: '{{ trigger.event.data.new_state.state == page_screensaver }}' sequence: - ## lightsettings ## + ## PAGE LIGHTSETTUNGS ## - conditions: '{{ trigger.event.data.new_state.state == page_lightsettings }}' sequence: - ## coversettings ## + ## PAGE COVERSETTINGS ## - conditions: '{{ trigger.event.data.new_state.state == page_coversettings }}' sequence: - ## buttonpage01 ## + ## PAGE BUTTONPAGE01 ## - conditions: '{{ trigger.event.data.new_state.state == page_buttonpage01 }}' sequence: + ##### Button Page Label ##### + - if: + - condition: template + value_template: '{{ button_page01_label |length > 0 }}' + then: + - service: "{{ command_text_printf }}" + data: + component: "bpage01_label" + message: "{{ button_page01_label }}" - ## buttonpage02 ## - - conditions: '{{ trigger.event.data.new_state.state == page_buttonpage01 }}' + ## PAGE BUTTONPAGE02 ## + - conditions: '{{ trigger.event.data.new_state.state == page_buttonpage02 }}' sequence: + ##### Button Page Label ##### + - if: + - condition: template + value_template: '{{ button_page02_label |length > 0 }}' + then: + - service: "{{ command_text_printf }}" + data: + component: "bpage02_label" + message: "{{ button_page02_label }}" - ## buttonpage03 ## + ## PAGE BUTTONPAGE03 ## - conditions: '{{ trigger.event.data.new_state.state == page_buttonpage03 }}' sequence: + ##### Button Page Label ##### + - if: + - condition: template + value_template: '{{ button_page03_label |length > 0 }}' + then: + - service: "{{ command_text_printf }}" + data: + component: "bpage03_label" + message: "{{ button_page03_label }}" - ## buttonpage04 ## + ## PAGE BUTTONPAGE04 ## - conditions: '{{ trigger.event.data.new_state.state == page_buttonpage04 }}' sequence: + ##### Button Page Label ##### + - if: + - condition: template + value_template: '{{ button_page04_label |length > 0 }}' + then: + - service: "{{ command_text_printf }}" + data: + component: "bpage04_label" + message: "{{ button_page04_label }}" ##### Open Climate Settings #####