updates
This commit is contained in:
		
							
								
								
									
										50
									
								
								README.md
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										50
									
								
								README.md
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,22 +1,40 @@
 | 
			
		||||
# Homeassistant Config
 | 
			
		||||
 | 
			
		||||
## Hacs
 | 
			
		||||
## Todo
 | 
			
		||||
 | 
			
		||||
### Integrations
 | 
			
		||||
 | 
			
		||||
- Circadian Lighting
 | 
			
		||||
- browser_mod
 | 
			
		||||
- UI Lovelace Minimalist
 | 
			
		||||
- Climate control
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Frontend
 | 
			
		||||
## Button Design
 | 
			
		||||
 | 
			
		||||
- button-card
 | 
			
		||||
- Mini Media Player
 | 
			
		||||
- Simple Weather Card
 | 
			
		||||
- Light Entity Card
 | 
			
		||||
- auto-entities
 | 
			
		||||
- card-mod
 | 
			
		||||
- Sun Card
 | 
			
		||||
- mini-graph-card
 | 
			
		||||
- My Cards Bundle (https://github.com/AnthonMS/my-cards)
 | 
			
		||||
### Functions
 | 
			
		||||
- Power on/off
 | 
			
		||||
- Brightness
 | 
			
		||||
- Scenes
 | 
			
		||||
- Individual Light Selection
 | 
			
		||||
- Adaptive & Sleep Mode
 | 
			
		||||
 | 
			
		||||
### 4 Button
 | 
			
		||||
 | 
			
		||||
#### Up
 | 
			
		||||
    - Press: Brightness Up / Power on (only when no light is selected)
 | 
			
		||||
    - Hold: Power on (when light is selected)
 | 
			
		||||
#### Down
 | 
			
		||||
    - Press: Brightness Down / Power off (only when no light is selected)
 | 
			
		||||
    - Hold: Power off (when light is selected)
 | 
			
		||||
#### Left
 | 
			
		||||
    - Press: Switch selected light
 | 
			
		||||
    - Hold: Adaptive toggle
 | 
			
		||||
#### Right
 | 
			
		||||
    - Press: Switch selected scene
 | 
			
		||||
    - Hold: Sleep toggle
 | 
			
		||||
 | 
			
		||||
### 2 Button
 | 
			
		||||
 | 
			
		||||
#### Up
 | 
			
		||||
    - Press: Power on
 | 
			
		||||
    - Hold: Scene Adaptive
 | 
			
		||||
 | 
			
		||||
#### Down
 | 
			
		||||
    - Press: Power off
 | 
			
		||||
    - Hold: Scene Night
 | 
			
		||||
							
								
								
									
										0
									
								
								configuration.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										0
									
								
								configuration.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,59 +0,0 @@
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Climate
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: custom:button-card
 | 
			
		||||
  template: custom_card_httpedo13_sun
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: "custom:button-card"
 | 
			
		||||
  template: card_weather
 | 
			
		||||
  entity: weather.dark_sky
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_weather_name: " "
 | 
			
		||||
    ulm_card_weather_primary_info:
 | 
			
		||||
      - wind_speed
 | 
			
		||||
      - precipitation_probability
 | 
			
		||||
    ulm_card_weather_backdrop:
 | 
			
		||||
      fade: true
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: 'custom:button-card'
 | 
			
		||||
  template: card_graph
 | 
			
		||||
  entity: sensor.temperature_kai_temperature
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_graph_color: "var(--google-blue)"
 | 
			
		||||
    ulm_card_graph_name: Temperature
 | 
			
		||||
    ulm_card_graph_entity: sensor.temperature_kai_temperature
 | 
			
		||||
    ulm_card_graph_color2: "var(--google-green)"
 | 
			
		||||
    ulm_card_graph_entity2: sensor.temperature_outside_darksky
 | 
			
		||||
    ulm_card_graph_type: fill
 | 
			
		||||
    ulm_card_graph_hours: 6
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - view_layout:
 | 
			
		||||
        grid-area: "card1"
 | 
			
		||||
      type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.temperature_kai_humidity
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: Humidity
 | 
			
		||||
 | 
			
		||||
    - view_layout:
 | 
			
		||||
        grid-area: "card1"
 | 
			
		||||
      type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.temperature_kai_pressure
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: Pressure
 | 
			
		||||
							
								
								
									
										56
									
								
								lovelace/climate/recommendation.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										56
									
								
								lovelace/climate/recommendation.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Recommendation
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_generic
 | 
			
		||||
  entity: sensor.climate_temp_recommendation
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.temperature_kai_temperature
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: inside
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.temperature_outside
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: outside
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.climate_temp_difference
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: difference
 | 
			
		||||
 | 
			
		||||
- type: custom:apexcharts-card
 | 
			
		||||
  graph_span: 6h
 | 
			
		||||
  header:
 | 
			
		||||
    show: false
 | 
			
		||||
  series:
 | 
			
		||||
    - entity: sensor.temperature_kai_temperature
 | 
			
		||||
      type: line
 | 
			
		||||
      name: Inside
 | 
			
		||||
      group_by:
 | 
			
		||||
        func: avg
 | 
			
		||||
        duration: 30min
 | 
			
		||||
    - entity: sensor.temperature_outside
 | 
			
		||||
      type: column
 | 
			
		||||
      name: Outside
 | 
			
		||||
      group_by:
 | 
			
		||||
        func: avg
 | 
			
		||||
        duration: 30min
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.climate_temp
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: target
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.climate_temp_min
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.climate_temp_max
 | 
			
		||||
							
								
								
									
										60
									
								
								lovelace/climate/setup.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										60
									
								
								lovelace/climate/setup.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
- type: "vertical-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_title
 | 
			
		||||
      name: Day/Night
 | 
			
		||||
    - type: custom:button-card
 | 
			
		||||
      template: custom_card_httpedo13_sun
 | 
			
		||||
    - type: "horizontal-stack"
 | 
			
		||||
      cards:
 | 
			
		||||
        - type: "custom:button-card"
 | 
			
		||||
          template:
 | 
			
		||||
            - card_input_datetime
 | 
			
		||||
          entity: input_datetime.climate_morning
 | 
			
		||||
          variables:
 | 
			
		||||
            ulm_card_input_datetime_name: Day begins at
 | 
			
		||||
        - type: "custom:button-card"
 | 
			
		||||
          template:
 | 
			
		||||
            - card_input_datetime
 | 
			
		||||
          entity: input_datetime.climate_night
 | 
			
		||||
          variables:
 | 
			
		||||
            ulm_card_input_datetime_name: Day ends at
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "vertical-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_title
 | 
			
		||||
      name: Target Temperature
 | 
			
		||||
    - type: "horizontal-stack"
 | 
			
		||||
      cards:
 | 
			
		||||
        - type: "custom:button-card"
 | 
			
		||||
          template: card_input_number
 | 
			
		||||
          entity: input_number.climate_temp_day
 | 
			
		||||
          variables:
 | 
			
		||||
            ulm_card_input_number_name: Day
 | 
			
		||||
        - type: "custom:button-card"
 | 
			
		||||
          template: card_input_number
 | 
			
		||||
          entity: input_number.climate_temp_night
 | 
			
		||||
          variables:
 | 
			
		||||
            ulm_card_input_number_name: Night
 | 
			
		||||
    - type: "horizontal-stack"
 | 
			
		||||
      cards:
 | 
			
		||||
        - type: "custom:button-card"
 | 
			
		||||
          template: card_input_number
 | 
			
		||||
          entity: input_number.climate_temp
 | 
			
		||||
          variables:
 | 
			
		||||
            ulm_card_input_number_name: Manual
 | 
			
		||||
        - type: "custom:button-card"
 | 
			
		||||
          template: card_input_number
 | 
			
		||||
          entity: input_number.climate_temp_accuracy
 | 
			
		||||
          variables:
 | 
			
		||||
            ulm_card_input_number_name: Accuracy
 | 
			
		||||
 | 
			
		||||
- type: "vertical-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_input_boolean
 | 
			
		||||
      entity: input_boolean.climate_auto
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_input_boolean_name: Automatic
 | 
			
		||||
@@ -1,39 +0,0 @@
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Energy
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: 'custom:button-card'
 | 
			
		||||
  template: card_graph
 | 
			
		||||
  entity: sensor.schreibtisch_current_consumption
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_graph_color: "var(--google-green)"
 | 
			
		||||
    ulm_card_graph_name: Desk
 | 
			
		||||
    ulm_card_graph_entity: sensor.schreibtisch_current_consumption
 | 
			
		||||
    ulm_card_graph_type: fill
 | 
			
		||||
    ulm_card_graph_hours: 12
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - view_layout:
 | 
			
		||||
        grid-area: "card1"
 | 
			
		||||
      type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.schreibtisch_today_s_consumption
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: Today
 | 
			
		||||
        ulm_card_generic_icon: "mdi:home-lightning-bolt"
 | 
			
		||||
 | 
			
		||||
    - view_layout:
 | 
			
		||||
        grid-area: "card1"
 | 
			
		||||
      type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.schreibtisch_total_consumption
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: Total
 | 
			
		||||
        ulm_card_generic_icon: "mdi:home-lightning-bolt"
 | 
			
		||||
@@ -1,52 +0,0 @@
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Lights
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - view_layout:
 | 
			
		||||
        grid-area: "card1"
 | 
			
		||||
      type: 'custom:button-card'
 | 
			
		||||
      template: card_light_slider_collapse
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_light_slider_collapse_name: Indirect
 | 
			
		||||
        ulm_card_light_enable_collapse: false
 | 
			
		||||
        ulm_card_light_name: Indirect
 | 
			
		||||
        ulm_input_select_option: light indirect
 | 
			
		||||
        ulm_input_select: input_select.minimalist_ui_switch
 | 
			
		||||
      entity: light.all_indirect
 | 
			
		||||
 | 
			
		||||
    - view_layout:
 | 
			
		||||
        grid-area: "card1"
 | 
			
		||||
      type: 'custom:button-card'
 | 
			
		||||
      template: card_light_slider_collapse
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_light_slider_collapse_name: Direct
 | 
			
		||||
        ulm_card_light_enable_collapse: false
 | 
			
		||||
        ulm_card_light_name: Direct
 | 
			
		||||
      entity: light.all_direct
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: 'custom:button-card'
 | 
			
		||||
  template: card_input_boolean
 | 
			
		||||
  entity: switch.circadian_lighting_circadian_lighting
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_input_boolean_name: Circadian Lighting
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: "custom:button-card"
 | 
			
		||||
  template: "card_light"
 | 
			
		||||
  entity: light.all_indirect
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_light_enable_color: true
 | 
			
		||||
    ulm_card_light_enable_slider: true
 | 
			
		||||
    ulm_card_light_enable_popup: true
 | 
			
		||||
    ulm_input_select_option: light indirect
 | 
			
		||||
    ulm_input_select: input_select.minimalist_ui_switch
 | 
			
		||||
							
								
								
									
										31
									
								
								lovelace/lights/adaptive.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										31
									
								
								lovelace/lights/adaptive.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Adaptive
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_input_boolean
 | 
			
		||||
      entity: switch.adaptive_lighting_default
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_input_boolean_name: Adaptive
 | 
			
		||||
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_input_boolean
 | 
			
		||||
      entity: switch.adaptive_lighting_sleep_mode_default
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_input_boolean_name: Sleep
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_input_boolean
 | 
			
		||||
      entity: switch.adaptive_lighting_adapt_brightness_default
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_input_boolean_name: Brightness
 | 
			
		||||
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_input_boolean
 | 
			
		||||
      entity: switch.adaptive_lighting_adapt_color_default
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_input_boolean_name: Color
 | 
			
		||||
							
								
								
									
										20
									
								
								lovelace/lights/lightbulbs.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								lovelace/lights/lightbulbs.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Light Bulbs
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_light_slider_collapse
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_light_slider_collapse_name: Ceiling
 | 
			
		||||
        ulm_card_light_enable_collapse: true
 | 
			
		||||
        ulm_card_light_name: Ceiling
 | 
			
		||||
      entity: light.ceiling
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_light_slider_collapse
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_light_slider_collapse_name: Bed
 | 
			
		||||
        ulm_card_light_enable_collapse: true
 | 
			
		||||
        ulm_card_light_name: Bed
 | 
			
		||||
      entity: light.bed_ceiling
 | 
			
		||||
							
								
								
									
										23
									
								
								lovelace/lights/lightgroups.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								lovelace/lights/lightgroups.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Light Groups
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_light_slider_collapse
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_light_slider_collapse_name: Indirect
 | 
			
		||||
        ulm_card_light_enable_collapse: true
 | 
			
		||||
        ulm_card_light_name: Indirect
 | 
			
		||||
        ulm_input_select_option: light indirect
 | 
			
		||||
        ulm_input_select: input_select.minimalist_ui_switch
 | 
			
		||||
      entity: light.all_indirect
 | 
			
		||||
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_light_slider_collapse
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_light_slider_collapse_name: Direct
 | 
			
		||||
        ulm_card_light_enable_collapse: true
 | 
			
		||||
        ulm_card_light_name: Direct
 | 
			
		||||
      entity: light.all_direct
 | 
			
		||||
							
								
								
									
										59
									
								
								lovelace/lights/lightmenu.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										59
									
								
								lovelace/lights/lightmenu.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Menu Control
 | 
			
		||||
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_generic
 | 
			
		||||
  entity: timer.pos_timer
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_script
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_script_title: Left Incr
 | 
			
		||||
      tap_action:
 | 
			
		||||
        action: call-service
 | 
			
		||||
        service: script.turn_on
 | 
			
		||||
        service_data:
 | 
			
		||||
          entity_id: script.pos_left_incr
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_script
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_script_title: Right Incr
 | 
			
		||||
      tap_action:
 | 
			
		||||
        action: call-service
 | 
			
		||||
        service: script.turn_on
 | 
			
		||||
        service_data:
 | 
			
		||||
          entity_id: script.pos_right_incr
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_script
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_script_title: Up
 | 
			
		||||
      tap_action:
 | 
			
		||||
        action: call-service
 | 
			
		||||
        service: script.turn_on
 | 
			
		||||
        service_data:
 | 
			
		||||
          entity_id: script.pos_up
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_script
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_script_title: Down
 | 
			
		||||
      tap_action:
 | 
			
		||||
        action: call-service
 | 
			
		||||
        service: script.turn_on
 | 
			
		||||
        service_data:
 | 
			
		||||
          entity_id: script.pos_down
 | 
			
		||||
  
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: input_number.pos_left
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: input_number.pos_right
 | 
			
		||||
							
								
								
									
										21
									
								
								lovelace/lights/lightstripes.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								lovelace/lights/lightstripes.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Light Stripes
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_light_slider_collapse
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_light_slider_collapse_name: Bed
 | 
			
		||||
        ulm_card_light_enable_collapse: true
 | 
			
		||||
        ulm_card_light_name: Bed
 | 
			
		||||
      entity: light.bed
 | 
			
		||||
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_light_slider_collapse
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_light_slider_collapse_name: Desk
 | 
			
		||||
        ulm_card_light_enable_collapse: true
 | 
			
		||||
        ulm_card_light_name: Desk
 | 
			
		||||
      entity: light.desk
 | 
			
		||||
							
								
								
									
										28
									
								
								lovelace/welcome.yaml → lovelace/lights/scenes.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										28
									
								
								lovelace/welcome.yaml → lovelace/lights/scenes.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,28 +1,22 @@
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: 'custom:button-card'
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Home Assistant
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: "custom:button-card"
 | 
			
		||||
  template: "card_welcome_scenes"
 | 
			
		||||
  triggers_update: input_boolean.welcome_collapse
 | 
			
		||||
  entity: input_boolean.welcome_collapse
 | 
			
		||||
  name: Scenes
 | 
			
		||||
 | 
			
		||||
- type: "custom:button-card"
 | 
			
		||||
  template:
 | 
			
		||||
    - card_scenes
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_welcome_scenes_collapse: input_boolean.welcome_collapse
 | 
			
		||||
    ulm_weather: "weather.dark_sky"
 | 
			
		||||
    entity_1:
 | 
			
		||||
      entity_id: scene.light_flux
 | 
			
		||||
      entity_id: scene.light_adaptive
 | 
			
		||||
      icon: "mdi:theme-light-dark"
 | 
			
		||||
      icon_color: "yellow"
 | 
			
		||||
      name: "Flux"
 | 
			
		||||
      name: "Adaptive"
 | 
			
		||||
      bg_color: "yellow"
 | 
			
		||||
    entity_2:
 | 
			
		||||
      entity_id: scene.light_blue
 | 
			
		||||
      entity_id: scene.light_bright
 | 
			
		||||
      icon: "mdi:television-play"
 | 
			
		||||
      icon_color: "blue"
 | 
			
		||||
      name: "Blue"
 | 
			
		||||
      name: "Bright"
 | 
			
		||||
      bg_color: "blue"
 | 
			
		||||
    entity_3:
 | 
			
		||||
      entity_id: "scene.light_night"
 | 
			
		||||
@@ -37,7 +31,7 @@
 | 
			
		||||
      name: "All On"
 | 
			
		||||
      bg_color: "green"
 | 
			
		||||
    entity_5:
 | 
			
		||||
      entity_id: "scene.light_alloff"
 | 
			
		||||
      entity_id: "script.light_store_off"
 | 
			
		||||
      icon: "mdi:lightbulb-group-off-outline"
 | 
			
		||||
      icon_color: "red"
 | 
			
		||||
      name: "All Off"
 | 
			
		||||
							
								
								
									
										16
									
								
								lovelace/batteries.yaml → lovelace/overview/batteries.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										16
									
								
								lovelace/batteries.yaml → lovelace/overview/batteries.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,15 +1,11 @@
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Batteries
 | 
			
		||||
#- type: 'custom:button-card'
 | 
			
		||||
#  template: card_title
 | 
			
		||||
#  name: Batteries
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - view_layout:
 | 
			
		||||
        grid-area: "card1"
 | 
			
		||||
      type: 'custom:button-card'
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_battery
 | 
			
		||||
      entity: sensor.iphone_battery_level
 | 
			
		||||
      variables:
 | 
			
		||||
@@ -18,9 +14,7 @@
 | 
			
		||||
        ulm_card_battery_battery_level_warning: 80
 | 
			
		||||
        ulm_card_battery_name: iPhone
 | 
			
		||||
 | 
			
		||||
    - view_layout:
 | 
			
		||||
        grid-area: "card1"
 | 
			
		||||
      type: 'custom:button-card'
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_battery
 | 
			
		||||
      entity: sensor.ipad_battery_level
 | 
			
		||||
      variables:
 | 
			
		||||
							
								
								
									
										68
									
								
								lovelace/overview/climate.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										68
									
								
								lovelace/overview/climate.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
#- type: 'custom:button-card'
 | 
			
		||||
#  template: card_title
 | 
			
		||||
#  name: Climate
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: custom:apexcharts-card
 | 
			
		||||
  graph_span: 6h
 | 
			
		||||
  header:
 | 
			
		||||
    show: false
 | 
			
		||||
  series:
 | 
			
		||||
    - entity: sensor.temperature_kai_temperature
 | 
			
		||||
      type: line
 | 
			
		||||
      name: Inside
 | 
			
		||||
      group_by:
 | 
			
		||||
        func: avg
 | 
			
		||||
        duration: 15min
 | 
			
		||||
    - entity: sensor.temperature_outside
 | 
			
		||||
      type: column
 | 
			
		||||
      name: Outside
 | 
			
		||||
      group_by:
 | 
			
		||||
        func: avg
 | 
			
		||||
        duration: 15min
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.temperature_kai_temperature
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: Inside
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.climate_temp_difference_inside_outside
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: Diff Outside
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.temperature_inside_feelslike
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: Inside Feelslike
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.temperature_outside_feelslike
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: Outside Feelslike
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.temperature_kai_humidity
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: Humidity
 | 
			
		||||
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.temperature_kai_pressure
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: Pressure
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: weather-forecast
 | 
			
		||||
  entity: weather.home
 | 
			
		||||
							
								
								
									
										34
									
								
								lovelace/overview/energy.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										34
									
								
								lovelace/overview/energy.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
#- type: 'custom:button-card'
 | 
			
		||||
#  template: card_title
 | 
			
		||||
#  name: Energy
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: custom:apexcharts-card
 | 
			
		||||
  graph_span: 12h
 | 
			
		||||
  header:
 | 
			
		||||
    show: false
 | 
			
		||||
  series:
 | 
			
		||||
    - entity: sensor.desk_current_consumption
 | 
			
		||||
      name: Consumption
 | 
			
		||||
      curve: smooth
 | 
			
		||||
      type: line
 | 
			
		||||
      group_by:
 | 
			
		||||
        duration: 10min
 | 
			
		||||
        func: avg
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.desk_today_s_consumption
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: Today
 | 
			
		||||
        ulm_card_generic_icon: "mdi:home-lightning-bolt"
 | 
			
		||||
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.desk_total_consumption
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: Total
 | 
			
		||||
        ulm_card_generic_icon: "mdi:home-lightning-bolt"
 | 
			
		||||
							
								
								
									
										26
									
								
								lovelace/overview/feed.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								lovelace/overview/feed.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
- type: 'custom:home-feed-card'
 | 
			
		||||
  title: Feed
 | 
			
		||||
  card_id: main_feed
 | 
			
		||||
  show_empty: false
 | 
			
		||||
  more_info_on_tap: true
 | 
			
		||||
  state_color: true
 | 
			
		||||
  compact_mode: true
 | 
			
		||||
  entities:
 | 
			
		||||
    - entity: sensor.climate_temp_recommendation
 | 
			
		||||
      name: Recommendation
 | 
			
		||||
      content_template: '{{state}}'
 | 
			
		||||
    # - entity: binary_sensor.warning_duisburg_stadt_1
 | 
			
		||||
    #   exclude_states:
 | 
			
		||||
    #     - "Safe"
 | 
			
		||||
    # - entity: binary_sensor.warning_duisburg_stadt_2
 | 
			
		||||
    #   exclude_states:
 | 
			
		||||
    #     - "Safe"
 | 
			
		||||
    # - entity: binary_sensor.warning_duisburg_stadt_3
 | 
			
		||||
    #   exclude_states:
 | 
			
		||||
    #     - "Safe"
 | 
			
		||||
    # - entity: binary_sensor.warning_duisburg_stadt_4
 | 
			
		||||
    #   exclude_states:
 | 
			
		||||
    #     - "Safe"
 | 
			
		||||
    # - entity: binary_sensor.warning_duisburg_stadt_5
 | 
			
		||||
    #   exclude_states:
 | 
			
		||||
    #     - "Safe"
 | 
			
		||||
							
								
								
									
										35
									
								
								lovelace/overview/lights.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										35
									
								
								lovelace/overview/lights.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
#- type: 'custom:button-card'
 | 
			
		||||
#  template: card_title
 | 
			
		||||
#  name: Lights
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_light_slider_collapse
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_light_slider_collapse_name: Indirect
 | 
			
		||||
        ulm_card_light_enable_collapse: true
 | 
			
		||||
        ulm_card_light_name: Indirect
 | 
			
		||||
      entity: light.all_indirect
 | 
			
		||||
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_light_slider_collapse
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_light_slider_collapse_name: Direct
 | 
			
		||||
        ulm_card_light_enable_collapse: true
 | 
			
		||||
        ulm_card_light_name: Direct
 | 
			
		||||
      entity: light.all_direct
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_input_boolean
 | 
			
		||||
      entity: switch.adaptive_lighting_default
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_input_boolean_name: Adaptive
 | 
			
		||||
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_input_boolean
 | 
			
		||||
      entity: switch.adaptive_lighting_sleep_mode_default
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_input_boolean_name: Sleep
 | 
			
		||||
							
								
								
									
										15
									
								
								lovelace/overview/multimedia.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										15
									
								
								lovelace/overview/multimedia.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
#- type: 'custom:button-card'
 | 
			
		||||
#  template: card_title
 | 
			
		||||
#  name: Multimedia
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "custom:button-card"
 | 
			
		||||
  template: card_media_player
 | 
			
		||||
  entity: media_player.denon_avr_x1100w
 | 
			
		||||
  name: Denon
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_media_player_more_info: true
 | 
			
		||||
    ulm_card_media_player_collapsible: true
 | 
			
		||||
    ulm_card_media_player_enable_volume_slider: true
 | 
			
		||||
    ulm_card_media_player_enable_controls: true
 | 
			
		||||
    ulm_card_media_player_enable_art: false
 | 
			
		||||
							
								
								
									
										16
									
								
								lovelace/nas.yaml → lovelace/overview/nas.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										16
									
								
								lovelace/nas.yaml → lovelace/overview/nas.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,15 +1,11 @@
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: NAS
 | 
			
		||||
#- type: 'custom:button-card'
 | 
			
		||||
#  template: card_title
 | 
			
		||||
#  name: NAS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - view_layout:
 | 
			
		||||
        grid-area: "card1"
 | 
			
		||||
      type: 'custom:button-card'
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_script
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_script_title: WOL
 | 
			
		||||
@@ -20,9 +16,7 @@
 | 
			
		||||
        service_data:
 | 
			
		||||
          entity_id: switch.server
 | 
			
		||||
 | 
			
		||||
    - view_layout:
 | 
			
		||||
        grid-area: "card1"
 | 
			
		||||
      type: 'custom:button-card'
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_binary_sensor
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_binary_sensor_alert: true
 | 
			
		||||
							
								
								
									
										20
									
								
								lovelace/overview/vacuum.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								lovelace/overview/vacuum.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
#- type: 'custom:button-card'
 | 
			
		||||
#  template: card_title
 | 
			
		||||
#  name: Vacuum
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: 'custom:valetudo-map-card'
 | 
			
		||||
  vacuum: valetudo_rockrobo
 | 
			
		||||
  title: 
 | 
			
		||||
  show_status: false
 | 
			
		||||
  show_battery_level: false
 | 
			
		||||
  show_start_button: false
 | 
			
		||||
  show_pause_button: false
 | 
			
		||||
  show_stop_button: false
 | 
			
		||||
  show_home_button: false
 | 
			
		||||
  show_locate_button: false
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "custom:button-card"
 | 
			
		||||
  template: "card_vacuum"
 | 
			
		||||
  entity: vacuum.valetudo_rockrobo
 | 
			
		||||
							
								
								
									
										42
									
								
								lovelace/overview/welcome.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										42
									
								
								lovelace/overview/welcome.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
#- type: 'custom:button-card'
 | 
			
		||||
#  template: card_title
 | 
			
		||||
#  name: Home Assistant
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "custom:button-card"
 | 
			
		||||
  template: "card_welcome_scenes"
 | 
			
		||||
  triggers_update: input_boolean.welcome_collapse
 | 
			
		||||
  entity: input_boolean.welcome_collapse
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_welcome_scenes_collapse: input_boolean.welcome_collapse
 | 
			
		||||
    ulm_weather: weather.home
 | 
			
		||||
    entity_1:
 | 
			
		||||
      entity_id: scene.light_adaptive
 | 
			
		||||
      icon: "mdi:theme-light-dark"
 | 
			
		||||
      icon_color: "yellow"
 | 
			
		||||
      name: "Adaptive"
 | 
			
		||||
      bg_color: "yellow"
 | 
			
		||||
    entity_2:
 | 
			
		||||
      entity_id: scene.light_bright
 | 
			
		||||
      icon: "mdi:television-play"
 | 
			
		||||
      icon_color: "blue"
 | 
			
		||||
      name: "Bright"
 | 
			
		||||
      bg_color: "blue"
 | 
			
		||||
    entity_3:
 | 
			
		||||
      entity_id: "scene.light_night"
 | 
			
		||||
      icon: "mdi:weather-night"
 | 
			
		||||
      icon_color: "purple"
 | 
			
		||||
      name: "Night"
 | 
			
		||||
      bg_color: "purple"
 | 
			
		||||
    # entity_4:
 | 
			
		||||
    #   entity_id: "script.light_store_restore"
 | 
			
		||||
    #   icon: "mdi:lightbulb-group"
 | 
			
		||||
    #   icon_color: "green"
 | 
			
		||||
    #   name: "All On"
 | 
			
		||||
    #   bg_color: "green"
 | 
			
		||||
    # entity_5:
 | 
			
		||||
    #   entity_id: "script.light_store_off"
 | 
			
		||||
    #   icon: "mdi:lightbulb-group-off-outline"
 | 
			
		||||
    #   icon_color: "red"
 | 
			
		||||
    #   name: "All Off"
 | 
			
		||||
    #   bg_color: "red"
 | 
			
		||||
							
								
								
									
										87
									
								
								lovelace/pfsense/gateways.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										87
									
								
								lovelace/pfsense/gateways.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,87 @@
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_title
 | 
			
		||||
      name: WAN
 | 
			
		||||
      label: IPv4
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.pfsense_gateway_wan_gw_delay
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: Delay
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.pfsense_gateway_wan_gw_loss
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: Loss
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Mullvad
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_title
 | 
			
		||||
      name: 1
 | 
			
		||||
      label: IPv4
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.pfsense_gateway_mullvad1gw_delay
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: Delay
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.pfsense_gateway_mullvad1gw_loss
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: Loss
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_title
 | 
			
		||||
      name: 1
 | 
			
		||||
      label: IPv6
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.pfsense_gateway_mullvad1gwv6_delay
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: Delay
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.pfsense_gateway_mullvad1gwv6_loss
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: Loss
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_title
 | 
			
		||||
      name: 2
 | 
			
		||||
      label: IPv4
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.pfsense_gateway_mullvad2gw_delay
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: Delay
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.pfsense_gateway_mullvad2gw_loss
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: Loss
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_title
 | 
			
		||||
      name: 2
 | 
			
		||||
      label: IPv6
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.pfsense_gateway_mullvad2gwv6_delay
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: Delay
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.pfsense_gateway_mullvad2gwv6_loss
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: Loss
 | 
			
		||||
							
								
								
									
										36
									
								
								lovelace/pfsense/load.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										36
									
								
								lovelace/pfsense/load.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Load Average
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.pfsense_cpu_load_average_one_minute
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: 1m
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.pfsense_cpu_load_average_five_minute
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: 5m
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic
 | 
			
		||||
      entity: sensor.pfsense_cpu_load_average_fifteen_minute
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_name: 15m
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: "horizontal-stack"
 | 
			
		||||
  cards:
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.pfsense_memory_used_percentage
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: "Memory Used %"
 | 
			
		||||
    - type: 'custom:button-card'
 | 
			
		||||
      template: card_generic_swap
 | 
			
		||||
      entity: sensor.pfsense_memory_swap_used_percentage
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_card_generic_swap_name: "Swap Used %"
 | 
			
		||||
							
								
								
									
										11
									
								
								lovelace/pfsense/notifications.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										11
									
								
								lovelace/pfsense/notifications.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Notifications
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_binary_sensor
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_binary_sensor_alert: true
 | 
			
		||||
    ulm_show_last_changed: false
 | 
			
		||||
  entity: binary_sensor.pfsense_pending_notices_present
 | 
			
		||||
							
								
								
									
										19
									
								
								lovelace/pfsense/rules.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								lovelace/pfsense/rules.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Firewall Rules
 | 
			
		||||
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_input_boolean
 | 
			
		||||
  entity: switch.pfsense_filter_rule_1602620992_disablemullvadtower
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_input_boolean_name: "LAN: Disable Mullvad PC"
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_input_boolean
 | 
			
		||||
  entity: switch.pfsense_filter_rule_1608907801_disablemullvadnetflixtower
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_input_boolean_name: "LAN: Bypass Netflix PC"
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_input_boolean
 | 
			
		||||
  entity: switch.pfsense_filter_rule_1602623476_route_ipad_netflix_to_wan
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_input_boolean_name: "LAN: Bypass Netflix iPad"
 | 
			
		||||
							
								
								
									
										92
									
								
								lovelace/pfsense/traffic.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										92
									
								
								lovelace/pfsense/traffic.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,92 @@
 | 
			
		||||
- type: 'custom:button-card'
 | 
			
		||||
  template: card_title
 | 
			
		||||
  name: Traffic
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: custom:apexcharts-card
 | 
			
		||||
  graph_span: 2h
 | 
			
		||||
  apex_config:
 | 
			
		||||
    chart:
 | 
			
		||||
      height: 250px
 | 
			
		||||
  series:
 | 
			
		||||
    - entity: sensor.pfsense_interface_wan_inbytes_kilobytes_per_second
 | 
			
		||||
      stroke_width: 2
 | 
			
		||||
      type: area
 | 
			
		||||
      transform: return x / 1024;
 | 
			
		||||
      unit: Mb/s
 | 
			
		||||
      name: WAN In
 | 
			
		||||
    - entity: sensor.pfsense_interface_wan_outbytes_kilobytes_per_second
 | 
			
		||||
      invert: true
 | 
			
		||||
      stroke_width: 2
 | 
			
		||||
      type: area
 | 
			
		||||
      transform: return x / 1024;
 | 
			
		||||
      unit: Mb/s
 | 
			
		||||
      name: WAN Out
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: custom:apexcharts-card
 | 
			
		||||
  graph_span: 2h
 | 
			
		||||
  apex_config:
 | 
			
		||||
    chart:
 | 
			
		||||
      height: 250px
 | 
			
		||||
  series:
 | 
			
		||||
    - entity:  sensor.pfsense_interface_mullvad1_inbytes_kilobytes_per_second
 | 
			
		||||
      stroke_width: 2
 | 
			
		||||
      type: area
 | 
			
		||||
      transform: return x / 1024;
 | 
			
		||||
      unit: Mb/s
 | 
			
		||||
      name: Mullvad1 In
 | 
			
		||||
    - entity: sensor.pfsense_interface_mullvad1_outbytes_kilobytes_per_second
 | 
			
		||||
      invert: true
 | 
			
		||||
      stroke_width: 2
 | 
			
		||||
      type: area
 | 
			
		||||
      transform: return x / 1024;
 | 
			
		||||
      unit: Mb/s
 | 
			
		||||
      name: Mullvad1 Out
 | 
			
		||||
    - entity:  sensor.pfsense_interface_mullvad2_inbytes_kilobytes_per_second
 | 
			
		||||
      stroke_width: 2
 | 
			
		||||
      type: area
 | 
			
		||||
      transform: return x / 1024;
 | 
			
		||||
      unit: Mb/s
 | 
			
		||||
      name: Mullvad2 In
 | 
			
		||||
    - entity: sensor.pfsense_interface_mullvad2_outbytes_kilobytes_per_second
 | 
			
		||||
      invert: true
 | 
			
		||||
      stroke_width: 2
 | 
			
		||||
      type: area
 | 
			
		||||
      transform: return x / 1024;
 | 
			
		||||
      unit: Mb/s
 | 
			
		||||
      name: Mullvad2 Out
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- type: custom:apexcharts-card
 | 
			
		||||
  graph_span: 2h
 | 
			
		||||
  apex_config:
 | 
			
		||||
    chart:
 | 
			
		||||
      height: 250px
 | 
			
		||||
  series:
 | 
			
		||||
    - entity: sensor.pfsense_interface_lan_inbytes_kilobytes_per_second
 | 
			
		||||
      stroke_width: 2
 | 
			
		||||
      type: area
 | 
			
		||||
      transform: return x / 1024;
 | 
			
		||||
      unit: Mb/s
 | 
			
		||||
      name: LAN In
 | 
			
		||||
    - entity: sensor.pfsense_interface_lan_outbytes_kilobytes_per_second
 | 
			
		||||
      invert: true
 | 
			
		||||
      stroke_width: 2
 | 
			
		||||
      type: area
 | 
			
		||||
      transform: return x / 1024;
 | 
			
		||||
      unit: Mb/s
 | 
			
		||||
      name: LAN Out
 | 
			
		||||
    - entity:  sensor.pfsense_interface_backend_inbytes_kilobytes_per_second
 | 
			
		||||
      stroke_width: 2
 | 
			
		||||
      type: area
 | 
			
		||||
      transform: return x / 1024;
 | 
			
		||||
      unit: Mb/s
 | 
			
		||||
      name: Backend In
 | 
			
		||||
    - entity: sensor.pfsense_interface_backend_outbytes_kilobytes_per_second
 | 
			
		||||
      invert: true
 | 
			
		||||
      stroke_width: 2
 | 
			
		||||
      type: area
 | 
			
		||||
      transform: return x / 1024;
 | 
			
		||||
      unit: Mb/s
 | 
			
		||||
      name: Backend In
 | 
			
		||||
@@ -1,16 +0,0 @@
 | 
			
		||||
- type: custom:state-switch
 | 
			
		||||
  view_layout:
 | 
			
		||||
    grid-area: popup
 | 
			
		||||
    show:
 | 
			
		||||
      mediaquery: "(min-width: 1100px)"
 | 
			
		||||
  entity: input_select.minimalist_ui
 | 
			
		||||
  default: default
 | 
			
		||||
  transition: slide-down
 | 
			
		||||
  transition_time: 500
 | 
			
		||||
  states:
 | 
			
		||||
    ## Lights
 | 
			
		||||
    light indirect:
 | 
			
		||||
      type: "custom:button-card"
 | 
			
		||||
      template: "popup_light_brightness"
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_popup_light_entity: lights.all_indirect
 | 
			
		||||
@@ -1,36 +0,0 @@
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: "custom:button-card"
 | 
			
		||||
  template: "card_title"
 | 
			
		||||
  name: "Card 1 Testing"
 | 
			
		||||
  label: "grid-area: card1"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- view_layout:
 | 
			
		||||
    grid-area: "card1"
 | 
			
		||||
  type: "custom:button-card"
 | 
			
		||||
  template: "card_light"
 | 
			
		||||
  entity: "light.all_indirect"
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_light_enable_color: true
 | 
			
		||||
    ulm_card_light_enable_slider: true
 | 
			
		||||
    ulm_card_light_enable_popup: true
 | 
			
		||||
    ulm_input_select_option: light 1
 | 
			
		||||
    ulm_input_select: input_select.minimalist_ui_switch
 | 
			
		||||
 | 
			
		||||
- type: custom:state-switch
 | 
			
		||||
  view_layout:
 | 
			
		||||
    grid-area: popup
 | 
			
		||||
    show:
 | 
			
		||||
      mediaquery: "(min-width: 1100px)"
 | 
			
		||||
  entity: input_select.minimalist_ui # put your input_select here
 | 
			
		||||
  default: default
 | 
			
		||||
  transition: slide-down
 | 
			
		||||
  transition_time: 500
 | 
			
		||||
  states:
 | 
			
		||||
    ## Lights
 | 
			
		||||
    light 1:
 | 
			
		||||
      type: "custom:button-card"
 | 
			
		||||
      template: "popup_light_brightness"
 | 
			
		||||
      variables:
 | 
			
		||||
        ulm_popup_light_entity: light.all_indirect
 | 
			
		||||
							
								
								
									
										21
									
								
								packages/button/button_inputs.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								packages/button/button_inputs.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
input_number:
 | 
			
		||||
  pos_left:
 | 
			
		||||
    name: Pos Left
 | 
			
		||||
    initial: 0
 | 
			
		||||
    step: 1
 | 
			
		||||
    min: 0
 | 
			
		||||
    max: 4
 | 
			
		||||
    mode: box
 | 
			
		||||
 | 
			
		||||
  pos_right:
 | 
			
		||||
    name: Pos Right
 | 
			
		||||
    initial: 0
 | 
			
		||||
    step: 1
 | 
			
		||||
    min: 0
 | 
			
		||||
    max: 9
 | 
			
		||||
    mode: box
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
timer:
 | 
			
		||||
  pos_timer:
 | 
			
		||||
    duration: "00:00:10"
 | 
			
		||||
							
								
								
									
										514
									
								
								packages/button/button_logic.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										514
									
								
								packages/button/button_logic.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,514 @@
 | 
			
		||||
script:
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  # Left
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  pos_left_incr:
 | 
			
		||||
    alias: pos_left_incr
 | 
			
		||||
    sequence:
 | 
			
		||||
    - if:
 | 
			
		||||
      - condition: numeric_state
 | 
			
		||||
        entity_id: input_number.pos_right
 | 
			
		||||
        above: '0'
 | 
			
		||||
      then:
 | 
			
		||||
      - service: input_number.set_value
 | 
			
		||||
        data:
 | 
			
		||||
          value: 0
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: input_number.pos_right
 | 
			
		||||
      else:
 | 
			
		||||
      - if:
 | 
			
		||||
        - condition: numeric_state
 | 
			
		||||
          entity_id: input_number.pos_left
 | 
			
		||||
          above: '3'
 | 
			
		||||
        then:
 | 
			
		||||
        - service: input_number.set_value
 | 
			
		||||
          data:
 | 
			
		||||
            value: 1
 | 
			
		||||
          target:
 | 
			
		||||
            entity_id: input_number.pos_left
 | 
			
		||||
        else:
 | 
			
		||||
        - service: input_number.increment
 | 
			
		||||
          target:
 | 
			
		||||
            entity_id: input_number.pos_left
 | 
			
		||||
      # Restart/Start the timer
 | 
			
		||||
      - service: timer.cancel
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: timer.pos_timer
 | 
			
		||||
      - service: timer.start
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: timer.pos_timer
 | 
			
		||||
    mode: single
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  # Right
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  pos_right_incr:
 | 
			
		||||
    alias: pos_right_incr
 | 
			
		||||
    sequence:
 | 
			
		||||
    - if:
 | 
			
		||||
      - condition: numeric_state
 | 
			
		||||
        entity_id: input_number.pos_left
 | 
			
		||||
        above: '0'
 | 
			
		||||
      then:
 | 
			
		||||
      - service: input_number.set_value
 | 
			
		||||
        data:
 | 
			
		||||
          value: 0
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: input_number.pos_left
 | 
			
		||||
      else:
 | 
			
		||||
      - if:
 | 
			
		||||
        - condition: numeric_state
 | 
			
		||||
          entity_id: input_number.pos_right
 | 
			
		||||
          above: '2'
 | 
			
		||||
        then:
 | 
			
		||||
        - service: input_number.set_value
 | 
			
		||||
          data:
 | 
			
		||||
            value: 1
 | 
			
		||||
          target:
 | 
			
		||||
            entity_id: input_number.pos_right
 | 
			
		||||
        else:
 | 
			
		||||
        - service: input_number.increment
 | 
			
		||||
          target:
 | 
			
		||||
            entity_id: input_number.pos_right
 | 
			
		||||
      # Restart/Start the timer
 | 
			
		||||
      - service: timer.cancel
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: timer.pos_timer
 | 
			
		||||
      - service: timer.start
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: timer.pos_timer
 | 
			
		||||
    mode: single
 | 
			
		||||
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  # Up
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  pos_up:
 | 
			
		||||
    alias: pos_up
 | 
			
		||||
    sequence:
 | 
			
		||||
      # 0,0
 | 
			
		||||
      - if:
 | 
			
		||||
          - condition: and
 | 
			
		||||
            conditions:
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_left
 | 
			
		||||
                state: "0.0"
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_right
 | 
			
		||||
                state: "0.0"
 | 
			
		||||
        then:
 | 
			
		||||
          - if:
 | 
			
		||||
              - condition:
 | 
			
		||||
                  - condition: state
 | 
			
		||||
                    entity_id: light.all_lights
 | 
			
		||||
                    state: "on"
 | 
			
		||||
            then:
 | 
			
		||||
              - service: script.summary_notification
 | 
			
		||||
            else:
 | 
			
		||||
              - service: scene.turn_on
 | 
			
		||||
                target:
 | 
			
		||||
                  entity_id: scene.snapshot_all
 | 
			
		||||
          #- service: light.turn_on
 | 
			
		||||
          #  target:
 | 
			
		||||
          #    entity_id: light.all_lights
 | 
			
		||||
      # 1,0 Ceiling
 | 
			
		||||
      - if:
 | 
			
		||||
          - condition:
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_left
 | 
			
		||||
                state: "1.0"
 | 
			
		||||
        then:
 | 
			
		||||
          - service: light.turn_on
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: light.ceiling
 | 
			
		||||
          - service: automation.trigger
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: automation.light_all_snapshot
 | 
			
		||||
      # 2,0 Bed
 | 
			
		||||
      - if:
 | 
			
		||||
          - condition:
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_left
 | 
			
		||||
                state: "2.0"
 | 
			
		||||
        then:
 | 
			
		||||
          - service: light.turn_on
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: light.bed_ceiling
 | 
			
		||||
          - service: automation.trigger
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: automation.light_all_snapshot
 | 
			
		||||
      # 3,0 Indirect
 | 
			
		||||
      - if:
 | 
			
		||||
          - condition:
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_left
 | 
			
		||||
                state: "3.0"
 | 
			
		||||
        then:
 | 
			
		||||
          - service: light.turn_on
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: light.all_indirect
 | 
			
		||||
          - service: automation.trigger
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: automation.light_all_snapshot
 | 
			
		||||
      # 4,0 All Lights
 | 
			
		||||
      - if:
 | 
			
		||||
          - condition:
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_left
 | 
			
		||||
                state: "4.0"
 | 
			
		||||
        then:
 | 
			
		||||
          - service: light.turn_on
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: light.all_lights
 | 
			
		||||
          - service: automation.trigger
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: automation.light_all_snapshot
 | 
			
		||||
      # 0,1 Adaptive
 | 
			
		||||
      - if:
 | 
			
		||||
          - condition:
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_right
 | 
			
		||||
                state: "1.0"
 | 
			
		||||
        then:
 | 
			
		||||
          - service: scene.turn_on
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: scene.light_adaptive
 | 
			
		||||
          - service: automation.trigger
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: automation.light_all_snapshot
 | 
			
		||||
      # 0,2 Night
 | 
			
		||||
      - if:
 | 
			
		||||
          - condition:
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_right
 | 
			
		||||
                state: "2.0"
 | 
			
		||||
        then:
 | 
			
		||||
          - service: scene.turn_on
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: scene.light_night
 | 
			
		||||
          - service: automation.trigger
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: automation.light_all_snapshot
 | 
			
		||||
      # 0,3 Bright
 | 
			
		||||
      - if:
 | 
			
		||||
          - condition:
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_right
 | 
			
		||||
                state: "3.0"
 | 
			
		||||
        then:
 | 
			
		||||
          - service: scene.turn_on
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: scene.light_bright
 | 
			
		||||
          - service: automation.trigger
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: automation.light_all_snapshot
 | 
			
		||||
    mode: single
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  # Down
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  pos_down:
 | 
			
		||||
    alias: pos_down
 | 
			
		||||
    sequence:
 | 
			
		||||
      # 0,0
 | 
			
		||||
      - if:
 | 
			
		||||
          - condition: and
 | 
			
		||||
            conditions:
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_left
 | 
			
		||||
                state: "0.0"
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_right
 | 
			
		||||
                state: "0.0"
 | 
			
		||||
        then:
 | 
			
		||||
          - if:
 | 
			
		||||
              - condition:
 | 
			
		||||
                  - condition: state
 | 
			
		||||
                    entity_id: light.all_lights
 | 
			
		||||
                    state: "off"
 | 
			
		||||
            then:
 | 
			
		||||
              - service: script.summary_notification
 | 
			
		||||
            else:
 | 
			
		||||
              - service: light.turn_off
 | 
			
		||||
                target:
 | 
			
		||||
                  entity_id: light.all_lights
 | 
			
		||||
      # 1,0 Ceiling
 | 
			
		||||
      - if:
 | 
			
		||||
          - condition:
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_left
 | 
			
		||||
                state: "1.0"
 | 
			
		||||
        then:
 | 
			
		||||
          - service: light.turn_off
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: light.ceiling
 | 
			
		||||
          - service: automation.trigger
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: automation.light_all_snapshot
 | 
			
		||||
      # 2,0 Bed
 | 
			
		||||
      - if:
 | 
			
		||||
          - condition:
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_left
 | 
			
		||||
                state: "2.0"
 | 
			
		||||
        then:
 | 
			
		||||
          - service: light.turn_off
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: light.bed_ceiling
 | 
			
		||||
          - service: automation.trigger
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: automation.light_all_snapshot
 | 
			
		||||
      # 3,0 Indirect
 | 
			
		||||
      - if:
 | 
			
		||||
          - condition:
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_left
 | 
			
		||||
                state: "3.0"
 | 
			
		||||
        then:
 | 
			
		||||
          - service: light.turn_off
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: light.all_indirect
 | 
			
		||||
          - service: automation.trigger
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: automation.light_all_snapshot
 | 
			
		||||
      # 4,0 All Lights
 | 
			
		||||
      - if:
 | 
			
		||||
          - condition:
 | 
			
		||||
              - condition: state
 | 
			
		||||
                entity_id: input_number.pos_left
 | 
			
		||||
                state: "4.0"
 | 
			
		||||
        then:
 | 
			
		||||
          - service: light.turn_off
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: light.all_lights
 | 
			
		||||
    mode: single
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  # Dimming
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  button_brightness_up:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: light.turn_on
 | 
			
		||||
        data_template:
 | 
			
		||||
          entity_id: light.direct
 | 
			
		||||
          brightness: >-
 | 
			
		||||
            {% set current = states.light.direct.attributes.brightness|default(0)|int %}
 | 
			
		||||
            {% set step = 100 %}
 | 
			
		||||
            {% set next = current + step %}
 | 
			
		||||
            {% if next > 255 %}
 | 
			
		||||
              {% set next = 255 %}
 | 
			
		||||
            {% endif %}
 | 
			
		||||
            {{ next }}
 | 
			
		||||
      - delay:
 | 
			
		||||
          milliseconds: 1
 | 
			
		||||
      - service: script.turn_on
 | 
			
		||||
        data:
 | 
			
		||||
          entity_id: script.button_brightness_up_loop
 | 
			
		||||
      
 | 
			
		||||
  button_brightness_up_loop:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: script.turn_on
 | 
			
		||||
        data:
 | 
			
		||||
          entity_id: script.button_brightness_up
 | 
			
		||||
 | 
			
		||||
  button_brightness_down:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: light.turn_on
 | 
			
		||||
        data_template:
 | 
			
		||||
          entity_id: light.direct
 | 
			
		||||
          brightness: >-
 | 
			
		||||
            {% set current = states.light.direct.attributes.brightness|default(0)|int %}
 | 
			
		||||
            {% set step = 100 %}
 | 
			
		||||
            {% set next = current - step %}
 | 
			
		||||
            {% if next < 1 %}
 | 
			
		||||
              {% set next = 1 %}
 | 
			
		||||
            {% endif %}
 | 
			
		||||
            {{ next }}
 | 
			
		||||
      - delay:
 | 
			
		||||
          milliseconds: 1
 | 
			
		||||
      - service: script.turn_on
 | 
			
		||||
        data:
 | 
			
		||||
          entity_id: script.button_brightness_down_loop
 | 
			
		||||
      
 | 
			
		||||
  button_brightness_down_loop:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: script.turn_on
 | 
			
		||||
        data:
 | 
			
		||||
          entity_id: script.button_brightness_down
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------------------------------------#
 | 
			
		||||
# Automations
 | 
			
		||||
#------------------------------------------------------------------------------------#
 | 
			
		||||
automation:
 | 
			
		||||
  # Timer
 | 
			
		||||
  - alias: pos_timer_reset
 | 
			
		||||
    mode: single
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: event
 | 
			
		||||
        event_type: timer.finished
 | 
			
		||||
        event_data:
 | 
			
		||||
          entity_id: timer.pos_timer
 | 
			
		||||
    action:
 | 
			
		||||
      - service: input_number.set_value
 | 
			
		||||
        data:
 | 
			
		||||
          value: 0
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id:
 | 
			
		||||
            - input_number.pos_left
 | 
			
		||||
            - input_number.pos_right
 | 
			
		||||
  # Pos 1,0 Ceiling
 | 
			
		||||
  - alias: pos_1_0_flash
 | 
			
		||||
    mode: single
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id:
 | 
			
		||||
          - input_number.pos_left
 | 
			
		||||
        to: "1.0"
 | 
			
		||||
    action:
 | 
			
		||||
      - service: automation.trigger
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: automation.light_all_snapshot
 | 
			
		||||
      - service: switch.turn_off
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: switch.adaptive_lighting_default
 | 
			
		||||
      - service: light.turn_on
 | 
			
		||||
        data:
 | 
			
		||||
          effect: Twitter
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: light.ceiling
 | 
			
		||||
      - delay:
 | 
			
		||||
          hours: 0
 | 
			
		||||
          minutes: 0
 | 
			
		||||
          seconds: 1
 | 
			
		||||
          milliseconds: 500
 | 
			
		||||
      - service: scene.turn_on
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: scene.snapshot_all
 | 
			
		||||
  # Pos 2,0 Ceiling Bed
 | 
			
		||||
  - alias: pos_2_0_flash
 | 
			
		||||
    mode: single
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id:
 | 
			
		||||
          - input_number.pos_left
 | 
			
		||||
        to: "2.0"
 | 
			
		||||
    action:
 | 
			
		||||
      - service: automation.trigger
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: automation.light_all_snapshot
 | 
			
		||||
      - service: switch.turn_off
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: switch.adaptive_lighting_default
 | 
			
		||||
      - service: light.turn_on
 | 
			
		||||
        data:
 | 
			
		||||
          effect: Twitter
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: light.bed_ceiling
 | 
			
		||||
      - delay:
 | 
			
		||||
          hours: 0
 | 
			
		||||
          minutes: 0
 | 
			
		||||
          seconds: 1
 | 
			
		||||
          milliseconds: 500
 | 
			
		||||
      - service: scene.turn_on
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: scene.snapshot_all
 | 
			
		||||
  # Pos 3,0 Indirect
 | 
			
		||||
  - alias: pos_3_0_flash
 | 
			
		||||
    mode: single
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id:
 | 
			
		||||
          - input_number.pos_left
 | 
			
		||||
        to: "3.0"
 | 
			
		||||
    action:
 | 
			
		||||
      - service: automation.trigger
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: automation.light_all_snapshot
 | 
			
		||||
      - service: switch.turn_off
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: switch.adaptive_lighting_default
 | 
			
		||||
      - service: light.turn_on
 | 
			
		||||
        data:
 | 
			
		||||
          effect: Twitter
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: light.all_indirect
 | 
			
		||||
      - delay:
 | 
			
		||||
          hours: 0
 | 
			
		||||
          minutes: 0
 | 
			
		||||
          seconds: 1
 | 
			
		||||
          milliseconds: 500
 | 
			
		||||
      - service: scene.turn_on
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: scene.snapshot_all
 | 
			
		||||
  # Pos 4,0 All Lights
 | 
			
		||||
  - alias: pos_4_0_flash
 | 
			
		||||
    mode: single
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id:
 | 
			
		||||
          - input_number.pos_left
 | 
			
		||||
        to: "4.0"
 | 
			
		||||
    action:
 | 
			
		||||
      - service: automation.trigger
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: automation.light_all_snapshot
 | 
			
		||||
      - service: switch.turn_off
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: switch.adaptive_lighting_default
 | 
			
		||||
      - service: light.turn_on
 | 
			
		||||
        data:
 | 
			
		||||
          effect: Twitter
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: light.all_lights
 | 
			
		||||
      - delay:
 | 
			
		||||
          hours: 0
 | 
			
		||||
          minutes: 0
 | 
			
		||||
          seconds: 1
 | 
			
		||||
          milliseconds: 500
 | 
			
		||||
      - service: scene.turn_on
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: scene.snapshot_all
 | 
			
		||||
  # Pos 0,1 Adaptive
 | 
			
		||||
  - alias: pos_0_1_flash
 | 
			
		||||
    mode: single
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id:
 | 
			
		||||
          - input_number.pos_right
 | 
			
		||||
        to: "1.0"
 | 
			
		||||
    action:
 | 
			
		||||
      - service: scene.turn_on
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: scene.light_adaptive
 | 
			
		||||
      - service: automation.trigger
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: automation.light_all_snapshot
 | 
			
		||||
  # Pos 0,2
 | 
			
		||||
  - alias: pos_0_2_flash
 | 
			
		||||
    mode: single
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id:
 | 
			
		||||
          - input_number.pos_right
 | 
			
		||||
        to: "2.0"
 | 
			
		||||
    action:
 | 
			
		||||
      - service: scene.turn_on
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: scene.light_night
 | 
			
		||||
      - service: automation.trigger
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: automation.light_all_snapshot
 | 
			
		||||
  # Pos 0,3
 | 
			
		||||
  - alias: pos_0_3_flash
 | 
			
		||||
    mode: single
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id:
 | 
			
		||||
          - input_number.pos_right
 | 
			
		||||
        to: "3.0"
 | 
			
		||||
    action:
 | 
			
		||||
      - service: scene.turn_on
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: scene.light_bright
 | 
			
		||||
      - service: automation.trigger
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: automation.light_all_snapshot
 | 
			
		||||
							
								
								
									
										104
									
								
								packages/button/button_press.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										104
									
								
								packages/button/button_press.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
automation:
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  # L/R 
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  # Button Left: Pos Left
 | 
			
		||||
  - alias: button_pos_left
 | 
			
		||||
    trigger:
 | 
			
		||||
      # Bed
 | 
			
		||||
      - platform: device
 | 
			
		||||
        domain: mqtt
 | 
			
		||||
        device_id: 4f9d195bf907da59e1461a5d2404f606
 | 
			
		||||
        type: action
 | 
			
		||||
        subtype: arrow_left_click
 | 
			
		||||
        discovery_id: 0x0c4314fffee0bb44 action_arrow_left_click
 | 
			
		||||
      # Door
 | 
			
		||||
      - platform: device
 | 
			
		||||
        domain: mqtt
 | 
			
		||||
        device_id: 5e67efdee83ccceaac84046dfc6c735e
 | 
			
		||||
        type: action
 | 
			
		||||
        subtype: arrow_left_click
 | 
			
		||||
        discovery_id: 0x0c4314fffef68790 action_arrow_left_click
 | 
			
		||||
    action:
 | 
			
		||||
      - service: script.pos_left_incr
 | 
			
		||||
    mode: single
 | 
			
		||||
 | 
			
		||||
  # Button Left: Pos Right
 | 
			
		||||
  - alias: button_pos_right
 | 
			
		||||
    trigger:
 | 
			
		||||
      # Bed
 | 
			
		||||
      - platform: device
 | 
			
		||||
        domain: mqtt
 | 
			
		||||
        device_id: 4f9d195bf907da59e1461a5d2404f606
 | 
			
		||||
        type: action
 | 
			
		||||
        subtype: arrow_right_click
 | 
			
		||||
        discovery_id: 0x0c4314fffee0bb44 action_arrow_right_click
 | 
			
		||||
      # Door
 | 
			
		||||
      - platform: device
 | 
			
		||||
        domain: mqtt
 | 
			
		||||
        device_id: 5e67efdee83ccceaac84046dfc6c735e
 | 
			
		||||
        type: action
 | 
			
		||||
        subtype: arrow_left_click
 | 
			
		||||
        discovery_id: 0x0c4314fffef68790 action_arrow_right_click
 | 
			
		||||
    action:
 | 
			
		||||
      - service: script.pos_right_incr
 | 
			
		||||
    mode: single
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  # Up/Down
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  # Up
 | 
			
		||||
  - alias: button_up
 | 
			
		||||
    trigger:
 | 
			
		||||
      # Desk
 | 
			
		||||
      - platform: device
 | 
			
		||||
        domain: mqtt
 | 
			
		||||
        device_id: 121e4230e41feb19254fa92ed5335760
 | 
			
		||||
        type: action
 | 
			
		||||
        subtype: "on"
 | 
			
		||||
        discovery_id: 0x2c1165fffebebf6d action_on
 | 
			
		||||
      # Bed
 | 
			
		||||
      - platform: device
 | 
			
		||||
        domain: mqtt
 | 
			
		||||
        device_id: 4f9d195bf907da59e1461a5d2404f606
 | 
			
		||||
        type: action
 | 
			
		||||
        subtype: "on"
 | 
			
		||||
        discovery_id: 0x0c4314fffee0bb44 action_on
 | 
			
		||||
      # Door
 | 
			
		||||
      - platform: device
 | 
			
		||||
        domain: mqtt
 | 
			
		||||
        device_id: 5e67efdee83ccceaac84046dfc6c735e
 | 
			
		||||
        type: action
 | 
			
		||||
        subtype: "on"
 | 
			
		||||
        discovery_id: 0x0c4314fffef68790 action_on
 | 
			
		||||
    action:
 | 
			
		||||
      - service: script.pos_up
 | 
			
		||||
    mode: single
 | 
			
		||||
  # Down
 | 
			
		||||
  - alias: button_down
 | 
			
		||||
    trigger:
 | 
			
		||||
      # Desk
 | 
			
		||||
      - platform: device
 | 
			
		||||
        domain: mqtt
 | 
			
		||||
        device_id: 121e4230e41feb19254fa92ed5335760
 | 
			
		||||
        type: action
 | 
			
		||||
        subtype: "off"
 | 
			
		||||
        discovery_id: 0x2c1165fffebebf6d action_off
 | 
			
		||||
      # Bed
 | 
			
		||||
      - platform: device
 | 
			
		||||
        domain: mqtt
 | 
			
		||||
        device_id: 4f9d195bf907da59e1461a5d2404f606
 | 
			
		||||
        type: action
 | 
			
		||||
        subtype: "off"
 | 
			
		||||
        discovery_id: 0x0c4314fffee0bb44 action_off
 | 
			
		||||
      # Door
 | 
			
		||||
      - platform: device
 | 
			
		||||
        domain: mqtt
 | 
			
		||||
        device_id: 5e67efdee83ccceaac84046dfc6c735e
 | 
			
		||||
        type: action
 | 
			
		||||
        subtype: "off"
 | 
			
		||||
        discovery_id: 0x0c4314fffef68790 action_off
 | 
			
		||||
    action:
 | 
			
		||||
      - service: script.pos_down
 | 
			
		||||
    mode: single
 | 
			
		||||
							
								
								
									
										123
									
								
								packages/climate/climate_automation.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										123
									
								
								packages/climate/climate_automation.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,123 @@
 | 
			
		||||
automation:
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Notification on state change
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - alias: "climate_recommendation_close"
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id: sensor.climate_temp_recommendation
 | 
			
		||||
        from: 'open the window'
 | 
			
		||||
        to: 'close the window'
 | 
			
		||||
    action:
 | 
			
		||||
      - service: notify.notify
 | 
			
		||||
        data:
 | 
			
		||||
          message: "Close the window."
 | 
			
		||||
  - alias: "climate_recommendation_open"
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id: sensor.climate_temp_recommendation
 | 
			
		||||
        from: 'close the window'
 | 
			
		||||
        to: 'open the window'
 | 
			
		||||
    action:
 | 
			
		||||
      - service: notify.notify
 | 
			
		||||
        data:
 | 
			
		||||
          message: "Open the window."
 | 
			
		||||
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Trigger alle 15min um Abfrage und Temperaturanpassung durchzuführen
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  # - alias: climate_set_auto
 | 
			
		||||
  #   initial_state: on
 | 
			
		||||
  #   trigger:
 | 
			
		||||
  #     - platform: time_pattern
 | 
			
		||||
  #       minutes: '/5'
 | 
			
		||||
  #     - platform: state
 | 
			
		||||
  #       entity_id: sensor.climate_temp
 | 
			
		||||
  #   condition:
 | 
			
		||||
  #     - condition: template
 | 
			
		||||
  #       value_template: '{{ states.climate.kai.state != "unavailable" }}'
 | 
			
		||||
  #   action:
 | 
			
		||||
  #     - service: script.turn_on
 | 
			
		||||
  #       entity_id: script.climate_set
 | 
			
		||||
  #     - delay: '00:20'
 | 
			
		||||
  #     - service: script.turn_on
 | 
			
		||||
  #       entity_id: script.climate_set
 | 
			
		||||
  #     - service: input_number.set_value
 | 
			
		||||
  #       data_template:
 | 
			
		||||
  #         entity_id: input_number.climate_temp_last
 | 
			
		||||
  #         value: '{{ states("sensor.aqara_temperature_kai_temperature")|float }}'
 | 
			
		||||
  # - alias: climate_set_manual
 | 
			
		||||
  #   initial_state: on
 | 
			
		||||
  #   trigger:
 | 
			
		||||
  #     - platform: state
 | 
			
		||||
  #       entity_id: input_number.climate_temp
 | 
			
		||||
  #   condition:
 | 
			
		||||
  #     - condition: template
 | 
			
		||||
  #       value_template: '{{ states.climate.kai.state != "unavailable" }}'
 | 
			
		||||
  #   action:
 | 
			
		||||
  #     - service: input_boolean.turn_off
 | 
			
		||||
  #       entity_id: input_boolean.climate_auto
 | 
			
		||||
  #     - service: script.turn_on
 | 
			
		||||
  #       entity_id: script.climate_set
 | 
			
		||||
  #     - delay: '00:20'
 | 
			
		||||
  #     - service: script.turn_on
 | 
			
		||||
  #       entity_id: script.climate_set
 | 
			
		||||
  # - alias: climate_set_power_off
 | 
			
		||||
  #   initial_state: on
 | 
			
		||||
  #   trigger:
 | 
			
		||||
  #     - platform: state
 | 
			
		||||
  #       entity_id: input_boolean.climate_power
 | 
			
		||||
  #       to: "off"
 | 
			
		||||
  #   action:
 | 
			
		||||
  #     - service: climate.turn_off
 | 
			
		||||
  #       entity_id: climate.kai
 | 
			
		||||
  #     - delay: '00:20'
 | 
			
		||||
  #     - service: climate.turn_off
 | 
			
		||||
  #       entity_id: climate.kai
 | 
			
		||||
  # - alias: climate_set_power_on
 | 
			
		||||
  #   initial_state: on
 | 
			
		||||
  #   trigger:
 | 
			
		||||
  #     - platform: state
 | 
			
		||||
  #       entity_id: input_boolean.climate_power
 | 
			
		||||
  #       to: "on"
 | 
			
		||||
  #   action:
 | 
			
		||||
  #     - service: climate.turn_on
 | 
			
		||||
  #       entity_id: climate.kai
 | 
			
		||||
  #     - delay: '00:20'
 | 
			
		||||
  #     - service: climate.turn_on
 | 
			
		||||
  #       entity_id: climate.kai
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Trigger alle 5min, wenn Wochentag -> aktiviere Weekday-Boolean
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - alias: climate_weekday
 | 
			
		||||
    initial_state: on
 | 
			
		||||
    trigger:
 | 
			
		||||
      platform: time_pattern
 | 
			
		||||
      minutes: '/5'
 | 
			
		||||
    condition:
 | 
			
		||||
      - condition: time
 | 
			
		||||
        weekday:
 | 
			
		||||
          - mon
 | 
			
		||||
          - tue
 | 
			
		||||
          - wed
 | 
			
		||||
          - thu
 | 
			
		||||
          - fri
 | 
			
		||||
    action:
 | 
			
		||||
      service: input_boolean.turn_on
 | 
			
		||||
      entity_id: input_boolean.climate_weekday
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Trigger alle 5min, wenn Wochenende -> deaktiviere Weekday-Boolean
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - alias: climate_weekend
 | 
			
		||||
    initial_state: on
 | 
			
		||||
    trigger:
 | 
			
		||||
      platform: time_pattern
 | 
			
		||||
      minutes: '/5'
 | 
			
		||||
    condition:
 | 
			
		||||
      - condition: time
 | 
			
		||||
        weekday:
 | 
			
		||||
          - sat
 | 
			
		||||
          - sun
 | 
			
		||||
    action:
 | 
			
		||||
      service: input_boolean.turn_off
 | 
			
		||||
      entity_id: input_boolean.climate_weekday
 | 
			
		||||
							
								
								
									
										24
									
								
								packages/climate/climate_feelslike.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										24
									
								
								packages/climate/climate_feelslike.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
sensor:
 | 
			
		||||
  - platform: temperature_feels_like
 | 
			
		||||
    name: temperature_outside_feelslike
 | 
			
		||||
    source:
 | 
			
		||||
      - weather.openweathermap
 | 
			
		||||
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      temperature_inside:
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {{ states('sensor.temperature_kai_temperature') }}
 | 
			
		||||
        friendly_name: 'Temperature'
 | 
			
		||||
        unit_of_measurement: "°C"
 | 
			
		||||
        device_class: temperature
 | 
			
		||||
      humidity_inside:
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {{ states('sensor.temperature_kai_humidity') }}
 | 
			
		||||
        friendly_name: 'Humidity'
 | 
			
		||||
 | 
			
		||||
  - platform: temperature_feels_like
 | 
			
		||||
    name: temperature_inside_feelslike
 | 
			
		||||
    source:
 | 
			
		||||
      - sensor.temperature_inside
 | 
			
		||||
      - sensor.humidity_inside
 | 
			
		||||
							
								
								
									
										73
									
								
								packages/climate/climate_inputs.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										73
									
								
								packages/climate/climate_inputs.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## Inputs
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
input_number:
 | 
			
		||||
  climate_temp:
 | 
			
		||||
    name: Target Manual
 | 
			
		||||
    #initial: 21.5
 | 
			
		||||
    min: 15
 | 
			
		||||
    max: 29
 | 
			
		||||
    step: 0.5
 | 
			
		||||
  climate_temp_day:
 | 
			
		||||
    name: Target Day
 | 
			
		||||
    #initial: 20.5
 | 
			
		||||
    min: 15
 | 
			
		||||
    max: 29
 | 
			
		||||
    step: 0.5
 | 
			
		||||
  climate_temp_night:
 | 
			
		||||
    name: Target Night
 | 
			
		||||
    #initial: 17.0
 | 
			
		||||
    min: 15
 | 
			
		||||
    max: 29
 | 
			
		||||
    step: 0.5
 | 
			
		||||
  climate_temp_accuracy:
 | 
			
		||||
    name: Accuracy
 | 
			
		||||
    #initial: 1
 | 
			
		||||
    min: 0
 | 
			
		||||
    max: 5
 | 
			
		||||
    step: 0.5
 | 
			
		||||
  climate_temp_offset:
 | 
			
		||||
    name: Offset Climate<->Temp
 | 
			
		||||
    #initial: 1
 | 
			
		||||
    min: -2
 | 
			
		||||
    max: 2
 | 
			
		||||
    step: 0.5
 | 
			
		||||
  climate_temp_last:
 | 
			
		||||
    name: Last Temp
 | 
			
		||||
    min: 0
 | 
			
		||||
    max: 29
 | 
			
		||||
    step: 0.01
 | 
			
		||||
    mode: box
 | 
			
		||||
 | 
			
		||||
input_datetime:
 | 
			
		||||
  climate_morning:
 | 
			
		||||
    name: "Day begins"
 | 
			
		||||
    has_time: true
 | 
			
		||||
    has_date: false
 | 
			
		||||
    #initial: "10:00"
 | 
			
		||||
#  climate_morning_weekend:
 | 
			
		||||
#    name: "Day begins Sat."
 | 
			
		||||
#    has_time: true
 | 
			
		||||
#    has_date: false
 | 
			
		||||
#    #initial: "15:30"
 | 
			
		||||
  climate_night:
 | 
			
		||||
    name: "Day ends"
 | 
			
		||||
    has_time: true
 | 
			
		||||
    has_date: false
 | 
			
		||||
    #initial: "23:59"
 | 
			
		||||
 | 
			
		||||
input_boolean:
 | 
			
		||||
  climate_auto:
 | 
			
		||||
    name: 'Automatic'
 | 
			
		||||
    icon: mdi:power
 | 
			
		||||
    #initial: off
 | 
			
		||||
#  climate_power:
 | 
			
		||||
#    name: 'Power'
 | 
			
		||||
#    icon: mdi:power
 | 
			
		||||
#    #initial: off
 | 
			
		||||
#  climate_weekday:
 | 
			
		||||
#    name: 'Weekday'
 | 
			
		||||
#    #initial: on
 | 
			
		||||
  climate_away:
 | 
			
		||||
    name: 'Away'
 | 
			
		||||
    #initial: off
 | 
			
		||||
							
								
								
									
										256
									
								
								packages/climate/climate_scripts.yaml.disabled
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										256
									
								
								packages/climate/climate_scripts.yaml.disabled
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,256 @@
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## Scripts: um einzelne Temperaturen zu setzen da Variable Fehler ausgibt (BUG)
 | 
			
		||||
## Ugly but working....
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
script:
 | 
			
		||||
  climate_set_15_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.turn_off
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
  climate_set_15_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "15.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_16_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "16.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_16_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "16.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_17_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "17.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_17_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "17.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_18_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "18.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_18_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "18.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_19_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "19.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_19_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "19.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_20_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "20.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_20_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "20.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_21_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "21.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_21_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "21.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_22_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "22.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_22_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "22.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_23_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "23.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_23_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "23.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_24_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "24.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_24_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "24.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_25_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "25.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_25_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "25.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_26_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "26.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_26_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "26.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_27_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "27.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_27_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "27.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_28_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "28.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_28_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "28.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_29_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "29.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_29_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "29.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_off:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.turn_off
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
  climate_set:
 | 
			
		||||
    alias: Setze Temperatur
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: script.turn_on
 | 
			
		||||
        data_template:
 | 
			
		||||
          entity_id: >
 | 
			
		||||
            {% set temp_set = ( states("sensor.climate_temp_set") | float ) %}
 | 
			
		||||
            {% if states("input_boolean.climate_power") == "off" %} script.climate_set_off
 | 
			
		||||
            {% elif temp_set == ( "00.00" | float ) %} script.climate_set_20_5
 | 
			
		||||
            {% elif temp_set <= ( "15.00" | float ) %} script.climate_set_15_0
 | 
			
		||||
            {% elif temp_set == ( "15.50" | float ) %} script.climate_set_15_5
 | 
			
		||||
            {% elif temp_set == ( "16.00" | float ) %} script.climate_set_16_0
 | 
			
		||||
            {% elif temp_set == ( "16.50" | float ) %} script.climate_set_16_5
 | 
			
		||||
            {% elif temp_set == ( "17.00" | float ) %} script.climate_set_17_0
 | 
			
		||||
            {% elif temp_set == ( "17.50" | float ) %} script.climate_set_17_5
 | 
			
		||||
            {% elif temp_set == ( "18.00" | float ) %} script.climate_set_18_0
 | 
			
		||||
            {% elif temp_set == ( "18.50" | float ) %} script.climate_set_18_5
 | 
			
		||||
            {% elif temp_set == ( "19.00" | float ) %} script.climate_set_19_0
 | 
			
		||||
            {% elif temp_set == ( "19.50" | float ) %} script.climate_set_19_5
 | 
			
		||||
            {% elif temp_set == ( "20.00" | float ) %} script.climate_set_20_0
 | 
			
		||||
            {% elif temp_set == ( "20.50" | float ) %} script.climate_set_20_5
 | 
			
		||||
            {% elif temp_set == ( "21.00" | float ) %} script.climate_set_21_0
 | 
			
		||||
            {% elif temp_set == ( "21.50" | float ) %} script.climate_set_21_5
 | 
			
		||||
            {% elif temp_set == ( "22.00" | float ) %} script.climate_set_22_0
 | 
			
		||||
            {% elif temp_set == ( "22.50" | float ) %} script.climate_set_22_5
 | 
			
		||||
            {% elif temp_set == ( "23.00" | float ) %} script.climate_set_23_0
 | 
			
		||||
            {% elif temp_set == ( "23.50" | float ) %} script.climate_set_23_5
 | 
			
		||||
            {% elif temp_set == ( "24.00" | float ) %} script.climate_set_24_0
 | 
			
		||||
            {% elif temp_set == ( "24.50" | float ) %} script.climate_set_24_5
 | 
			
		||||
            {% elif temp_set == ( "25.00" | float ) %} script.climate_set_25_0
 | 
			
		||||
            {% elif temp_set == ( "25.50" | float ) %} script.climate_set_25_5
 | 
			
		||||
            {% elif temp_set == ( "26.00" | float ) %} script.climate_set_26_0
 | 
			
		||||
            {% elif temp_set == ( "26.50" | float ) %} script.climate_set_26_5
 | 
			
		||||
            {% elif temp_set == ( "27.00" | float ) %} script.climate_set_27_0
 | 
			
		||||
            {% elif temp_set == ( "27.50" | float ) %} script.climate_set_27_5
 | 
			
		||||
            {% elif temp_set == ( "28.00" | float ) %} script.climate_set_28_0
 | 
			
		||||
            {% elif temp_set == ( "28.50" | float ) %} script.climate_set_28_5
 | 
			
		||||
            {% elif temp_set == ( "29.00" | float ) %} script.climate_set_29_0
 | 
			
		||||
            {% elif temp_set >= ( "29.50" | float ) %} script.climate_set_29_5
 | 
			
		||||
            {% else %} script.climate_set_20_5 {% endif %}
 | 
			
		||||
							
								
								
									
										215
									
								
								packages/climate/climate_sensors.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										215
									
								
								packages/climate/climate_sensors.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,215 @@
 | 
			
		||||
sensor:
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Calculation of temperature change
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      climate_temp_change:
 | 
			
		||||
        friendly_name: change in temperature
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {% set now = states("sensor.aqara_temperature_kai_temperature")|float %}
 | 
			
		||||
          {% set last = states("input_number.climate_temp_last")|float %}
 | 
			
		||||
          {% set change = (now | float - last) | float %}
 | 
			
		||||
          {% if now == ("0.0"|float) %} {% set change = ("0.0"|float) %} {% endif %}
 | 
			
		||||
          {{ change | round(2) }}
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Calculation of the target temperature
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      climate_temp:
 | 
			
		||||
        friendly_name: target temperature
 | 
			
		||||
        unit_of_measurement: '°C'
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {% set auto = states("input_boolean.climate_auto") %}
 | 
			
		||||
          {% set manual_temp = states("input_number.climate_temp") %}
 | 
			
		||||
          {% if auto == "off" %} {{ manual_temp }}
 | 
			
		||||
          {% else %}
 | 
			
		||||
            {% set time = states("sensor.time") %}
 | 
			
		||||
            {% set morning = states("input_datetime.climate_morning") %}
 | 
			
		||||
            {% set night = states("input_datetime.climate_night") %}
 | 
			
		||||
            {% set morning_temp = states("input_number.climate_temp_day")|float %}
 | 
			
		||||
            {% set night_temp = states("input_number.climate_temp_night")|float %}
 | 
			
		||||
            {% if night > morning %}
 | 
			
		||||
              {% if time > morning and time <= night %} {{ morning_temp|float }}
 | 
			
		||||
              {% else %} {{ night_temp|float }} {% endif %}
 | 
			
		||||
            {% else %}
 | 
			
		||||
              {% if time <= morning and time > night %} {{ morning_temp|float }}
 | 
			
		||||
              {% else %} {{ night_temp|float }} {% endif %}
 | 
			
		||||
            {% endif %}
 | 
			
		||||
          {% endif %}
 | 
			
		||||
  # Mit Weekday
 | 
			
		||||
  # - platform: template
 | 
			
		||||
  #   sensors:
 | 
			
		||||
  #     climate_temp:
 | 
			
		||||
  #       friendly_name: target temperature
 | 
			
		||||
  #       unit_of_measurement: '°C'
 | 
			
		||||
  #       value_template: >
 | 
			
		||||
  #         {% set auto = states("input_boolean.climate_auto") %}
 | 
			
		||||
  #         {% set manual_temp = states("input_number.climate_temp") %}
 | 
			
		||||
  #         {% if auto == "off" %} {{ manual_temp }}
 | 
			
		||||
  #         {% else %}
 | 
			
		||||
  #           {% set time = states("sensor.time") %}
 | 
			
		||||
  #           {% set morning = states("sensor.climate_morning") %}
 | 
			
		||||
  #           {% set weekday = states("input_boolean.climate_weekday") %}
 | 
			
		||||
  #           {% if weekday == "on" %} {% set morning = states("input_datetime.climate_morning") %}
 | 
			
		||||
  #           {% else %} {% set morning = states("input_datetime.climate_morning_weekend") %} {% endif %}
 | 
			
		||||
  #           {% set night = states("input_datetime.climate_night") %}
 | 
			
		||||
  #           {% set morning_temp = states("input_number.climate_temp_morning")|float %}
 | 
			
		||||
  #           {% set night_temp = states("input_number.climate_temp_night")|float %}
 | 
			
		||||
  #           {% if night > morning %}
 | 
			
		||||
  #             {% if time > morning and time <= night %} {{ morning_temp|float }}
 | 
			
		||||
  #             {% else %} {{ night_temp|float }} {% endif %}
 | 
			
		||||
  #           {% else %}
 | 
			
		||||
  #             {% if time <= morning and time > night %} {{ morning_temp|float }}
 | 
			
		||||
  #             {% else %} {{ night_temp|float }} {% endif %}
 | 
			
		||||
  #           {% endif %}
 | 
			
		||||
  #         {% endif %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## target min and max temperature
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      climate_temp_min:
 | 
			
		||||
        friendly_name: target min
 | 
			
		||||
        unit_of_measurement: '°C'
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {% set target = states("sensor.climate_temp")|float %}
 | 
			
		||||
          {% set accuracy = states("input_number.climate_temp_accuracy")|float %}
 | 
			
		||||
          {{ target-accuracy|float }}
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      climate_temp_max:
 | 
			
		||||
        friendly_name: target max
 | 
			
		||||
        unit_of_measurement: '°C'
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {% set target = states("sensor.climate_temp")|float %}
 | 
			
		||||
          {% set accuracy = states("input_number.climate_temp_accuracy")|float %}
 | 
			
		||||
          {{ target+accuracy|float }}
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Recommendation
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      climate_temp_recommendation:
 | 
			
		||||
        friendly_name: temperature recommendation
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {% set min = states("sensor.climate_temp_min")|float %}
 | 
			
		||||
          {% set max = states("sensor.climate_temp_max")|float %}
 | 
			
		||||
          {% set target = states("sensor.climate_temp")|float %}
 | 
			
		||||
          {% set temp_inside = states("sensor.temperature_kai_temperature")|float %}
 | 
			
		||||
          {% set temp_outside = states("sensor.temperature_outside")|float %}
 | 
			
		||||
          {% set inside_max = temp_inside + states("input_number.climate_temp_accuracy")|float %}
 | 
			
		||||
          {% set accuracy = states("input_number.climate_temp_accuracy") |float %}
 | 
			
		||||
          {% if temp_inside >= target and temp_inside >= (temp_outside - accuracy) %}
 | 
			
		||||
            {{ "open the window" }} 
 | 
			
		||||
          {% else %} 
 | 
			
		||||
            {{ "close the window" }}
 | 
			
		||||
          {% endif %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## difference to target
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      climate_temp_difference:
 | 
			
		||||
        friendly_name: difference to target
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {% if states("sensor.temperature_kai_temperature") == "unknown" %}
 | 
			
		||||
            {{ 0 | float }}
 | 
			
		||||
          {% else %}
 | 
			
		||||
            {{ (states("sensor.temperature_kai_temperature") | float - (states.sensor.climate_temp.state | float) ) | round(2) }}
 | 
			
		||||
          {% endif %}
 | 
			
		||||
        unit_of_measurement: '°C'
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      climate_temp_difference_inside_outside:
 | 
			
		||||
        friendly_name: difference inside to outside
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {% if states("sensor.temperature_kai_temperature") == "unknown" %}
 | 
			
		||||
            {{ 0 | float }}
 | 
			
		||||
          {% else %}
 | 
			
		||||
            {{ (states("sensor.temperature_outside")|float - states("sensor.temperature_kai_temperature")|float) | round(2) }}
 | 
			
		||||
          {% endif %}
 | 
			
		||||
        unit_of_measurement: '°C'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Schrittgröße, mit der die Heizung verstellt werden soll, abhängig vom Unterschied zur realen
 | 
			
		||||
  ## Temperatur
 | 
			
		||||
  ## Variable Schrittgröße, bei positiv (zu warm) größer, bei negativ (zu kalt) geringer
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  # - platform: template
 | 
			
		||||
  #   sensors:
 | 
			
		||||
  #     climate_temp_steps:
 | 
			
		||||
  #       friendly_name: increment
 | 
			
		||||
  #       value_template: >
 | 
			
		||||
  #         {% set difference = (states("sensor.climate_temp_difference" ) | float) %}
 | 
			
		||||
  #         {% set zero = ("0.0" | float ) %}
 | 
			
		||||
  #         {% if difference > zero %}
 | 
			
		||||
  #           {% if difference >= ("2.00"|float) %} {% set steps = ( "3.00" | float ) %}
 | 
			
		||||
  #           {% elif difference >= ("1.50"|float) %} {% set steps = ( "1.50" | float ) %}
 | 
			
		||||
  #           {% elif difference >= ("1.00"|float) %} {% set steps = ( "1.00" | float ) %}
 | 
			
		||||
  #           {% elif difference >= ("0.50"|float) %} {% set steps = ( "0.50" | float ) %}
 | 
			
		||||
  #           {% elif difference >= ("0.00"|float) %} {% set steps = ( "0.00" | float ) %}
 | 
			
		||||
  #           {% endif %}
 | 
			
		||||
  #         {% else %}
 | 
			
		||||
  #           {% if difference <= ("-2.00"|float) %} {% set steps = ( "3.00" | float ) %}
 | 
			
		||||
  #           {% elif difference <= ("-1.50"|float) %} {% set steps = ( "1.50" | float ) %}
 | 
			
		||||
  #           {% elif difference <= ("-1.00"|float) %} {% set steps = ( "0.50" | float ) %}
 | 
			
		||||
  #           {% elif difference <= ("-0.50"|float) %} {% set steps = ( "0.50" | float ) %}
 | 
			
		||||
  #           {% elif difference <= ("-0.00"|float) %} {% set steps = ( "0.00" | float ) %}
 | 
			
		||||
  #           {% endif %}
 | 
			
		||||
  #         {% endif %}
 | 
			
		||||
  #         {{ steps }}
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Berechnung der Temperatur, auf die die Heizung gestellt werden soll, um Zieltemperatur zu
 | 
			
		||||
  ## erreichen. Berücksichtigung für Genauigkeit, variable Temperaturanpassung und Temperatur-
 | 
			
		||||
  ## anpassung aufgrund von Offset. Berechnung ob Anpassung Positiv oder Negativ
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  # - platform: template
 | 
			
		||||
  #   sensors:
 | 
			
		||||
  #     climate_temp_set:
 | 
			
		||||
  #       friendly_name: '-> climate'
 | 
			
		||||
  #       value_template: >
 | 
			
		||||
  #         {% set difference = (states("sensor.climate_temp_difference" ) | float) %}
 | 
			
		||||
  #         {% set change = (states("sensor.climate_temp_change" ) | float) %}
 | 
			
		||||
  #         {% set goal = (states("sensor.climate_temp" ) | float) %}
 | 
			
		||||
  #         {% set temp = (states("sensor.aqara_temperature_kai_temperature") | float ) %}
 | 
			
		||||
  #         {% set climate = (state_attr("climate.kai", "temperature") | float ) %}
 | 
			
		||||
  #         {% if climate < ("15.0" | float ) %} {% set climate = ("15.0" | float) %} {% endif %}
 | 
			
		||||
  #         {% set max = states("sensor.climate_temp") | float %}
 | 
			
		||||
  #         {% set min = states("sensor.climate_temp") | float - (states.input_number.climate_temp_accuracy.state | float) %}
 | 
			
		||||
  #         {% set zero = ("0.0" | float ) %}
 | 
			
		||||
  #         {% set difference_max = ("1.5" | float ) %}
 | 
			
		||||
  #         {% set difference_min = ("-2.0" | float ) %}
 | 
			
		||||
  #         {% set change_max = ("1.0" | float ) %}
 | 
			
		||||
  #         {% set offset = (states("input_number.climate_temp_offset") | float ) %}
 | 
			
		||||
  #         {% set climate_goal = (goal | float + ("2.0" | float) | float - offset) | float %}
 | 
			
		||||
  #         {% set steps = (states("sensor.climate_temp_steps") | float) %}
 | 
			
		||||
  #         {% if difference == zero %} {% set result = climate %}
 | 
			
		||||
  #         {% elif (difference > difference_max) %} {% set result = ("15.0"|float) %}
 | 
			
		||||
  #         {% elif (difference < difference_min) %} {% set result = goal - offset %}
 | 
			
		||||
  #         {% elif difference > zero %}
 | 
			
		||||
  #           {% if (climate_goal <= climate) or (change >= change_max) %} {% set result = goal - offset %}
 | 
			
		||||
  #           {% elif temp > max %} {% set result = (climate | float - steps) | float %}
 | 
			
		||||
  #           {% else %} {% set result = climate %} {% endif %}
 | 
			
		||||
  #         {% elif difference < zero %}
 | 
			
		||||
  #           {% if temp < min %} 
 | 
			
		||||
  #             {% set result = (climate | float + steps) | float %}
 | 
			
		||||
  #           {% else %} 
 | 
			
		||||
  #             {% if change >= change_max %}
 | 
			
		||||
  #               {% set result = goal - offset %}
 | 
			
		||||
  #             {% else %}
 | 
			
		||||
  #               {% set result = climate %} 
 | 
			
		||||
  #             {% endif %}
 | 
			
		||||
  #           {% endif %}
 | 
			
		||||
  #         {% endif %}
 | 
			
		||||
  #         {% if result < ("15.0"|float) %} {{ ("15.0"|float) }}
 | 
			
		||||
  #         {% elif result > ("29.5"|float) %} {{ ("29.5"|float) }}
 | 
			
		||||
  #         {% else %} {{ result }}
 | 
			
		||||
  #         {% endif %}
 | 
			
		||||
  #       unit_of_measurement: '°C'
 | 
			
		||||
							
								
								
									
										581
									
								
								packages/climate/eq3.yaml.disabled
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										581
									
								
								packages/climate/eq3.yaml.disabled
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -5,583 +5,4 @@ climate:
 | 
			
		||||
  - platform: eq3btsmart
 | 
			
		||||
    devices:
 | 
			
		||||
      kai:
 | 
			
		||||
        mac: '00:1A:22:0E:FB:32'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## Scripts: um einzelne Temperaturen zu setzen da Variable Fehler ausgibt (BUG)
 | 
			
		||||
## Ugly but working....
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
script:
 | 
			
		||||
  climate_set_15_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.turn_off
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
  climate_set_15_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "15.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_16_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "16.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_16_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "16.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_17_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "17.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_17_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "17.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_18_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "18.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_18_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "18.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_19_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "19.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_19_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "19.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_20_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "20.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_20_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "20.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_21_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "21.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_21_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "21.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_22_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "22.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_22_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "22.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_23_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "23.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_23_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "23.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_24_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "24.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_24_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "24.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_25_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "25.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_25_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "25.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_26_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "26.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_26_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "26.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_27_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "27.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_27_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "27.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_28_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "28.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_28_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "28.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_29_0:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "29.00"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_29_5:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.set_temperature
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
        data:
 | 
			
		||||
          temperature: "29.50"
 | 
			
		||||
          hvac_mode: "heat"
 | 
			
		||||
  climate_set_off:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: climate.turn_off
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
  climate_set:
 | 
			
		||||
    alias: Setze Temperatur
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: script.turn_on
 | 
			
		||||
        data_template:
 | 
			
		||||
          entity_id: >
 | 
			
		||||
            {% set temp_set = ( states("sensor.climate_temp_set") | float ) %}
 | 
			
		||||
            {% if states("input_boolean.climate_power") == "off" %} script.climate_set_off
 | 
			
		||||
            {% elif temp_set == ( "00.00" | float ) %} script.climate_set_20_5
 | 
			
		||||
            {% elif temp_set <= ( "15.00" | float ) %} script.climate_set_15_0
 | 
			
		||||
            {% elif temp_set == ( "15.50" | float ) %} script.climate_set_15_5
 | 
			
		||||
            {% elif temp_set == ( "16.00" | float ) %} script.climate_set_16_0
 | 
			
		||||
            {% elif temp_set == ( "16.50" | float ) %} script.climate_set_16_5
 | 
			
		||||
            {% elif temp_set == ( "17.00" | float ) %} script.climate_set_17_0
 | 
			
		||||
            {% elif temp_set == ( "17.50" | float ) %} script.climate_set_17_5
 | 
			
		||||
            {% elif temp_set == ( "18.00" | float ) %} script.climate_set_18_0
 | 
			
		||||
            {% elif temp_set == ( "18.50" | float ) %} script.climate_set_18_5
 | 
			
		||||
            {% elif temp_set == ( "19.00" | float ) %} script.climate_set_19_0
 | 
			
		||||
            {% elif temp_set == ( "19.50" | float ) %} script.climate_set_19_5
 | 
			
		||||
            {% elif temp_set == ( "20.00" | float ) %} script.climate_set_20_0
 | 
			
		||||
            {% elif temp_set == ( "20.50" | float ) %} script.climate_set_20_5
 | 
			
		||||
            {% elif temp_set == ( "21.00" | float ) %} script.climate_set_21_0
 | 
			
		||||
            {% elif temp_set == ( "21.50" | float ) %} script.climate_set_21_5
 | 
			
		||||
            {% elif temp_set == ( "22.00" | float ) %} script.climate_set_22_0
 | 
			
		||||
            {% elif temp_set == ( "22.50" | float ) %} script.climate_set_22_5
 | 
			
		||||
            {% elif temp_set == ( "23.00" | float ) %} script.climate_set_23_0
 | 
			
		||||
            {% elif temp_set == ( "23.50" | float ) %} script.climate_set_23_5
 | 
			
		||||
            {% elif temp_set == ( "24.00" | float ) %} script.climate_set_24_0
 | 
			
		||||
            {% elif temp_set == ( "24.50" | float ) %} script.climate_set_24_5
 | 
			
		||||
            {% elif temp_set == ( "25.00" | float ) %} script.climate_set_25_0
 | 
			
		||||
            {% elif temp_set == ( "25.50" | float ) %} script.climate_set_25_5
 | 
			
		||||
            {% elif temp_set == ( "26.00" | float ) %} script.climate_set_26_0
 | 
			
		||||
            {% elif temp_set == ( "26.50" | float ) %} script.climate_set_26_5
 | 
			
		||||
            {% elif temp_set == ( "27.00" | float ) %} script.climate_set_27_0
 | 
			
		||||
            {% elif temp_set == ( "27.50" | float ) %} script.climate_set_27_5
 | 
			
		||||
            {% elif temp_set == ( "28.00" | float ) %} script.climate_set_28_0
 | 
			
		||||
            {% elif temp_set == ( "28.50" | float ) %} script.climate_set_28_5
 | 
			
		||||
            {% elif temp_set == ( "29.00" | float ) %} script.climate_set_29_0
 | 
			
		||||
            {% elif temp_set >= ( "29.50" | float ) %} script.climate_set_29_5
 | 
			
		||||
            {% else %} script.climate_set_20_5 {% endif %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## Inputs
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
input_number:
 | 
			
		||||
  climate_temp:
 | 
			
		||||
    name: Ziel Manuell
 | 
			
		||||
    #initial: 21.5
 | 
			
		||||
    min: 15
 | 
			
		||||
    max: 29
 | 
			
		||||
    step: 0.5
 | 
			
		||||
  climate_temp_morning:
 | 
			
		||||
    name: Ziel Morgen
 | 
			
		||||
    #initial: 20.5
 | 
			
		||||
    min: 15
 | 
			
		||||
    max: 29
 | 
			
		||||
    step: 0.5
 | 
			
		||||
  climate_temp_night:
 | 
			
		||||
    name: Ziel Nacht
 | 
			
		||||
    #initial: 17.0
 | 
			
		||||
    min: 15
 | 
			
		||||
    max: 29
 | 
			
		||||
    step: 0.5
 | 
			
		||||
  climate_temp_accuracy:
 | 
			
		||||
    name: Genauigkeit
 | 
			
		||||
    #initial: 1
 | 
			
		||||
    min: 0
 | 
			
		||||
    max: 5
 | 
			
		||||
    step: 0.5
 | 
			
		||||
  climate_temp_offset:
 | 
			
		||||
    name: Offset Heizung->Temp
 | 
			
		||||
    #initial: 1
 | 
			
		||||
    min: -2
 | 
			
		||||
    max: 2
 | 
			
		||||
    step: 0.5
 | 
			
		||||
  climate_temp_last:
 | 
			
		||||
    name: Letzte Temp
 | 
			
		||||
    min: 0
 | 
			
		||||
    max: 29
 | 
			
		||||
    step: 0.01
 | 
			
		||||
    mode: box
 | 
			
		||||
 | 
			
		||||
input_datetime:
 | 
			
		||||
  climate_morning:
 | 
			
		||||
    name: "Morgen"
 | 
			
		||||
    has_time: true
 | 
			
		||||
    has_date: false
 | 
			
		||||
    #initial: "10:00"
 | 
			
		||||
  climate_morning_weekend:
 | 
			
		||||
    name: "Morgen Sa"
 | 
			
		||||
    has_time: true
 | 
			
		||||
    has_date: false
 | 
			
		||||
    #initial: "15:30"
 | 
			
		||||
  climate_night:
 | 
			
		||||
    name: "Nacht"
 | 
			
		||||
    has_time: true
 | 
			
		||||
    has_date: false
 | 
			
		||||
    #initial: "23:59"
 | 
			
		||||
 | 
			
		||||
input_boolean:
 | 
			
		||||
  climate_auto:
 | 
			
		||||
    name: 'Automatisch'
 | 
			
		||||
    icon: mdi:power
 | 
			
		||||
    #initial: off
 | 
			
		||||
  climate_power:
 | 
			
		||||
    name: 'Power'
 | 
			
		||||
    icon: mdi:power
 | 
			
		||||
    #initial: off
 | 
			
		||||
  climate_weekday:
 | 
			
		||||
    name: 'Wochentag'
 | 
			
		||||
    #initial: on
 | 
			
		||||
  climate_away:
 | 
			
		||||
    name: 'Away'
 | 
			
		||||
    #initial: off
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## Sensoren
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
sensor:
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Berechnung der Temperaturveränderung
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      climate_temp_change:
 | 
			
		||||
        friendly_name: Veränderung
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {% set now = states("sensor.aqara_temperature_kai_temperature")|float %}
 | 
			
		||||
          {% set last = states("input_number.climate_temp_last")|float %}
 | 
			
		||||
          {% set change = (now | float - last) | float %}
 | 
			
		||||
          {% if now == ("0.0"|float) %} {% set change = ("0.0"|float) %} {% endif %}
 | 
			
		||||
          {{ change | round(2) }}
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Berechnung der aktuellen Zieltemperatur bzgl Morgen/Nacht, Automatik/Manuell
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      climate_temp:
 | 
			
		||||
        friendly_name: akt. Ziel
 | 
			
		||||
        unit_of_measurement: '°C'
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {% set auto = states("input_boolean.climate_auto") %}
 | 
			
		||||
          {% set manual_temp = states("input_number.climate_temp") %}
 | 
			
		||||
          {% if auto == "off" %} {{ manual_temp }}
 | 
			
		||||
          {% else %}
 | 
			
		||||
            {% set time = states("sensor.time") %}
 | 
			
		||||
            {% set morning = states("sensor.climate_morning") %}
 | 
			
		||||
            {% set weekday = states("input_boolean.climate_weekday") %}
 | 
			
		||||
            {% if weekday == "on" %} {% set morning = states("input_datetime.climate_morning") %}
 | 
			
		||||
            {% else %} {% set morning = states("input_datetime.climate_morning_weekend") %} {% endif %}
 | 
			
		||||
            {% set night = states("input_datetime.climate_night") %}
 | 
			
		||||
            {% set morning_temp = states("input_number.climate_temp_morning")|float %}
 | 
			
		||||
            {% set night_temp = states("input_number.climate_temp_night")|float %}
 | 
			
		||||
            {% if night > morning %}
 | 
			
		||||
              {% if time > morning and time <= night %} {{ morning_temp|float }}
 | 
			
		||||
              {% else %} {{ night_temp|float }} {% endif %}
 | 
			
		||||
            {% else %}
 | 
			
		||||
              {% if time <= morning and time > night %} {{ morning_temp|float }}
 | 
			
		||||
              {% else %} {{ night_temp|float }} {% endif %}
 | 
			
		||||
            {% endif %}
 | 
			
		||||
          {% endif %}
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Berechnung von Unterschied zwischen Heizungstemperatur und realer Temperatur
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      climate_temp_difference:
 | 
			
		||||
        friendly_name: 'akt. Unterschied'
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {% if states("sensor.aqara_temperature_kai_temperature") == "unknown" %}
 | 
			
		||||
          {{ 0 | float }}
 | 
			
		||||
          {% else %}
 | 
			
		||||
          {{ ( states("sensor.aqara_temperature_kai_temperature") | float - (states.sensor.climate_temp.state | float) ) | round(2) }}
 | 
			
		||||
          {% endif %}
 | 
			
		||||
        unit_of_measurement: '°C'
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Schrittgröße, mit der die Heizung verstellt werden soll, abhängig vom Unterschied zur realen
 | 
			
		||||
  ## Temperatur
 | 
			
		||||
  ## Variable Schrittgröße, bei positiv (zu warm) größer, bei negativ (zu kalt) geringer
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      climate_temp_steps:
 | 
			
		||||
        friendly_name: 'Schrittgröße'
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {% set difference = (states("sensor.climate_temp_difference" ) | float) %}
 | 
			
		||||
          {% set zero = ("0.0" | float ) %}
 | 
			
		||||
          {% if difference > zero %}
 | 
			
		||||
            {% if difference >= ("2.00"|float) %} {% set steps = ( "3.00" | float ) %}
 | 
			
		||||
            {% elif difference >= ("1.50"|float) %} {% set steps = ( "1.50" | float ) %}
 | 
			
		||||
            {% elif difference >= ("1.00"|float) %} {% set steps = ( "1.00" | float ) %}
 | 
			
		||||
            {% elif difference >= ("0.50"|float) %} {% set steps = ( "0.50" | float ) %}
 | 
			
		||||
            {% elif difference >= ("0.00"|float) %} {% set steps = ( "0.00" | float ) %}
 | 
			
		||||
            {% endif %}
 | 
			
		||||
          {% else %}
 | 
			
		||||
            {% if difference <= ("-2.00"|float) %} {% set steps = ( "3.00" | float ) %}
 | 
			
		||||
            {% elif difference <= ("-1.50"|float) %} {% set steps = ( "1.50" | float ) %}
 | 
			
		||||
            {% elif difference <= ("-1.00"|float) %} {% set steps = ( "0.50" | float ) %}
 | 
			
		||||
            {% elif difference <= ("-0.50"|float) %} {% set steps = ( "0.50" | float ) %}
 | 
			
		||||
            {% elif difference <= ("-0.00"|float) %} {% set steps = ( "0.00" | float ) %}
 | 
			
		||||
            {% endif %}
 | 
			
		||||
          {% endif %}
 | 
			
		||||
          {{ steps }}
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Berechnung der Temperatur, auf die die Heizung gestellt werden soll, um Zieltemperatur zu
 | 
			
		||||
  ## erreichen. Berücksichtigung für Genauigkeit, variable Temperaturanpassung und Temperatur-
 | 
			
		||||
  ## anpassung aufgrund von Offset. Berechnung ob Anpassung Positiv oder Negativ
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      climate_temp_set:
 | 
			
		||||
        friendly_name: '-> Heizung'
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {% set difference = (states("sensor.climate_temp_difference" ) | float) %}
 | 
			
		||||
          {% set change = (states("sensor.climate_temp_change" ) | float) %}
 | 
			
		||||
          {% set goal = (states("sensor.climate_temp" ) | float) %}
 | 
			
		||||
          {% set temp = (states("sensor.aqara_temperature_kai_temperature") | float ) %}
 | 
			
		||||
          {% set climate = (state_attr("climate.kai", "temperature") | float ) %}
 | 
			
		||||
          {% if climate < ("15.0" | float ) %} {% set climate = ("15.0" | float) %} {% endif %}
 | 
			
		||||
          {% set max = states("sensor.climate_temp") | float %}
 | 
			
		||||
          {% set min = states("sensor.climate_temp") | float - (states.input_number.climate_temp_accuracy.state | float) %}
 | 
			
		||||
          {% set zero = ("0.0" | float ) %}
 | 
			
		||||
          {% set difference_max = ("1.5" | float ) %}
 | 
			
		||||
          {% set difference_min = ("-2.0" | float ) %}
 | 
			
		||||
          {% set change_max = ("1.0" | float ) %}
 | 
			
		||||
          {% set offset = (states("input_number.climate_temp_offset") | float ) %}
 | 
			
		||||
          {% set climate_goal = (goal | float + ("2.0" | float) | float - offset) | float %}
 | 
			
		||||
          {% set steps = (states("sensor.climate_temp_steps") | float) %}
 | 
			
		||||
          {% if difference == zero %} {% set result = climate %}
 | 
			
		||||
          {% elif (difference > difference_max) %} {% set result = ("15.0"|float) %}
 | 
			
		||||
          {% elif (difference < difference_min) %} {% set result = goal - offset %}
 | 
			
		||||
          {% elif difference > zero %}
 | 
			
		||||
            {% if (climate_goal <= climate) or (change >= change_max) %} {% set result = goal - offset %}
 | 
			
		||||
            {% elif temp > max %} {% set result = (climate | float - steps) | float %}
 | 
			
		||||
            {% else %} {% set result = climate %} {% endif %}
 | 
			
		||||
          {% elif difference < zero %}
 | 
			
		||||
            {% if temp < min %} 
 | 
			
		||||
              {% set result = (climate | float + steps) | float %}
 | 
			
		||||
            {% else %} 
 | 
			
		||||
              {% if change >= change_max %}
 | 
			
		||||
                {% set result = goal - offset %}
 | 
			
		||||
              {% else %}
 | 
			
		||||
                {% set result = climate %} 
 | 
			
		||||
              {% endif %}
 | 
			
		||||
            {% endif %}
 | 
			
		||||
          {% endif %}
 | 
			
		||||
          {% if result < ("15.0"|float) %} {{ ("15.0"|float) }}
 | 
			
		||||
          {% elif result > ("29.5"|float) %} {{ ("29.5"|float) }}
 | 
			
		||||
          {% else %} {{ result }}
 | 
			
		||||
          {% endif %}
 | 
			
		||||
        unit_of_measurement: '°C'
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Time / Date
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - platform: time_date
 | 
			
		||||
    display_options:
 | 
			
		||||
      - 'time'
 | 
			
		||||
      - 'date'
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
automation:
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Trigger alle 15min um Abfrage und Temperaturanpassung durchzuführen
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - alias: climate_set_auto
 | 
			
		||||
    initial_state: on
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: time_pattern
 | 
			
		||||
        minutes: '/5'
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id: sensor.climate_temp
 | 
			
		||||
    condition:
 | 
			
		||||
      - condition: template
 | 
			
		||||
        value_template: '{{ states.climate.kai.state != "unavailable" }}'
 | 
			
		||||
    action:
 | 
			
		||||
      - service: script.turn_on
 | 
			
		||||
        entity_id: script.climate_set
 | 
			
		||||
      - delay: '00:20'
 | 
			
		||||
      - service: script.turn_on
 | 
			
		||||
        entity_id: script.climate_set
 | 
			
		||||
      - service: input_number.set_value
 | 
			
		||||
        data_template:
 | 
			
		||||
          entity_id: input_number.climate_temp_last
 | 
			
		||||
          value: '{{ states("sensor.aqara_temperature_kai_temperature")|float }}'
 | 
			
		||||
  - alias: climate_set_manual
 | 
			
		||||
    initial_state: on
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id: input_number.climate_temp
 | 
			
		||||
    condition:
 | 
			
		||||
      - condition: template
 | 
			
		||||
        value_template: '{{ states.climate.kai.state != "unavailable" }}'
 | 
			
		||||
    action:
 | 
			
		||||
      - service: input_boolean.turn_off
 | 
			
		||||
        entity_id: input_boolean.climate_auto
 | 
			
		||||
      - service: script.turn_on
 | 
			
		||||
        entity_id: script.climate_set
 | 
			
		||||
      - delay: '00:20'
 | 
			
		||||
      - service: script.turn_on
 | 
			
		||||
        entity_id: script.climate_set
 | 
			
		||||
  - alias: climate_set_power_off
 | 
			
		||||
    initial_state: on
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id: input_boolean.climate_power
 | 
			
		||||
        to: "off"
 | 
			
		||||
    action:
 | 
			
		||||
      - service: climate.turn_off
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
      - delay: '00:20'
 | 
			
		||||
      - service: climate.turn_off
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
  - alias: climate_set_power_on
 | 
			
		||||
    initial_state: on
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id: input_boolean.climate_power
 | 
			
		||||
        to: "on"
 | 
			
		||||
    action:
 | 
			
		||||
      - service: climate.turn_on
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
      - delay: '00:20'
 | 
			
		||||
      - service: climate.turn_on
 | 
			
		||||
        entity_id: climate.kai
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Trigger alle 5min, wenn Wochentag -> aktiviere Weekday-Boolean
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - alias: climate_weekday
 | 
			
		||||
    initial_state: on
 | 
			
		||||
    trigger:
 | 
			
		||||
      platform: time_pattern
 | 
			
		||||
      minutes: '/5'
 | 
			
		||||
    condition:
 | 
			
		||||
      - condition: time
 | 
			
		||||
        weekday:
 | 
			
		||||
          - mon
 | 
			
		||||
          - tue
 | 
			
		||||
          - wed
 | 
			
		||||
          - thu
 | 
			
		||||
          - fri
 | 
			
		||||
          - sun
 | 
			
		||||
    action:
 | 
			
		||||
      service: input_boolean.turn_on
 | 
			
		||||
      entity_id: input_boolean.climate_weekday
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  ## Trigger alle 5min, wenn Wochenende -> deaktiviere Weekday-Boolean
 | 
			
		||||
  ## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
  - alias: climate_weekend
 | 
			
		||||
    initial_state: on
 | 
			
		||||
    trigger:
 | 
			
		||||
      platform: time_pattern
 | 
			
		||||
      minutes: '/5'
 | 
			
		||||
    condition:
 | 
			
		||||
      - condition: time
 | 
			
		||||
        weekday:
 | 
			
		||||
          - sat
 | 
			
		||||
    action:
 | 
			
		||||
      service: input_boolean.turn_off
 | 
			
		||||
      entity_id: input_boolean.climate_weekday
 | 
			
		||||
        mac: '00:1A:22:0E:FB:32'
 | 
			
		||||
							
								
								
									
										26
									
								
								packages/climate/weather.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								packages/climate/weather.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## pirateweather
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## Wetter-Plattform
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
sensor:
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      temperature_outside:
 | 
			
		||||
        value_template: '{{ states.weather.openweathermap.attributes.temperature }}'
 | 
			
		||||
        friendly_name: 'Outside Temperature'
 | 
			
		||||
        unit_of_measurement: '°C'
 | 
			
		||||
      temperature_today:
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {{ state_attr('weather.home', 'forecast')[0].temperature }}
 | 
			
		||||
        friendly_name: 'Max Temperature'
 | 
			
		||||
        unit_of_measurement: '°C'  
 | 
			
		||||
      temperature_today_condition:
 | 
			
		||||
        value_template: >
 | 
			
		||||
          {{ state_attr('weather.home', 'forecast')[0].condition }}
 | 
			
		||||
        friendly_name: 'Condition'
 | 
			
		||||
 | 
			
		||||
sun:
 | 
			
		||||
@@ -1,22 +0,0 @@
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## DarkSky
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## Wetter-Plattform
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
weather:
 | 
			
		||||
  - platform: darksky
 | 
			
		||||
    api_key: !secret darksky
 | 
			
		||||
    mode: daily
 | 
			
		||||
 | 
			
		||||
sun:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
sensor:
 | 
			
		||||
  - platform: template
 | 
			
		||||
    sensors:
 | 
			
		||||
      temperature_outside_darksky:
 | 
			
		||||
        value_template: '{{ states.weather.dark_sky.attributes.temperature }}'
 | 
			
		||||
        friendly_name: 'Outside Temperature'
 | 
			
		||||
							
								
								
									
										1
									
								
								packages/homeassistant/default_theme.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										1
									
								
								packages/homeassistant/default_theme.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -5,7 +5,6 @@ automation:
 | 
			
		||||
    trigger:
 | 
			
		||||
    - event: start
 | 
			
		||||
      platform: homeassistant
 | 
			
		||||
    condition: []
 | 
			
		||||
    action:
 | 
			
		||||
    - data:
 | 
			
		||||
        name: minimalist-desktop
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										37
									
								
								packages/homeassistant/homeassistant.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										37
									
								
								packages/homeassistant/homeassistant.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -8,6 +8,41 @@ homeassistant:
 | 
			
		||||
  time_zone: Europe/Berlin
 | 
			
		||||
  allowlist_external_dirs:
 | 
			
		||||
    - '/tmp'
 | 
			
		||||
  auth_providers:
 | 
			
		||||
    - type: trusted_networks
 | 
			
		||||
      trusted_networks:
 | 
			
		||||
        - 10.10.10.0/24
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
default_config:
 | 
			
		||||
lovelace:
 | 
			
		||||
  mode: yaml
 | 
			
		||||
  resources: !include ../../resources.yaml
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
http:
 | 
			
		||||
  use_x_forwarded_for: true
 | 
			
		||||
  trusted_proxies:
 | 
			
		||||
    - 127.0.0.1
 | 
			
		||||
    - ::1
 | 
			
		||||
    - 10.10.10.0/24
 | 
			
		||||
    - 172.30.32.0/24
 | 
			
		||||
    - 172.30.33.0/24
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#default_config:
 | 
			
		||||
automation:
 | 
			
		||||
counter:
 | 
			
		||||
dhcp:
 | 
			
		||||
energy:
 | 
			
		||||
frontend:
 | 
			
		||||
history:
 | 
			
		||||
map:
 | 
			
		||||
mobile_app:
 | 
			
		||||
person:
 | 
			
		||||
ssdp:
 | 
			
		||||
system_health:
 | 
			
		||||
timer:
 | 
			
		||||
usb:
 | 
			
		||||
webhook:
 | 
			
		||||
zeroconf:
 | 
			
		||||
zone:
 | 
			
		||||
							
								
								
									
										46
									
								
								packages/homeassistant/homekit.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										46
									
								
								packages/homeassistant/homekit.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
homekit:
 | 
			
		||||
  ip_address: 10.10.10.1
 | 
			
		||||
  advertise_ip: 10.10.10.1
 | 
			
		||||
 | 
			
		||||
  filter:
 | 
			
		||||
    include_entities:
 | 
			
		||||
      - sensor.temperature_kai_humidity
 | 
			
		||||
      - sensor.temperature_kai_temperature
 | 
			
		||||
      - light.all_indirect
 | 
			
		||||
      - light.all_direct
 | 
			
		||||
      - script.light_store_off
 | 
			
		||||
      - script.light_store_restore
 | 
			
		||||
      - scene.light_flux
 | 
			
		||||
      - scene.light_night
 | 
			
		||||
      - switch.adaptive_lighting_sleep_mode_default
 | 
			
		||||
      - switch.adaptive_lighting_default
 | 
			
		||||
      - switch.server
 | 
			
		||||
      - switch.server_template
 | 
			
		||||
      - scene.light_adaptive
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  entity_config:
 | 
			
		||||
    sensor.temperature_kai_humidity:
 | 
			
		||||
      name: Feuchtigkeit
 | 
			
		||||
    sensor.temperature_kai_temperature:
 | 
			
		||||
      name: Temperatur
 | 
			
		||||
    light.all_indirect:
 | 
			
		||||
      name: Indirekt
 | 
			
		||||
    light.all_direct:
 | 
			
		||||
      name: Direkt
 | 
			
		||||
    script.light_store_off:
 | 
			
		||||
      name: Licht aus
 | 
			
		||||
    script.light_store_restore:
 | 
			
		||||
      name: Licht an
 | 
			
		||||
    scene.light_adaptive:
 | 
			
		||||
      name: Licht Adaptiv
 | 
			
		||||
    scene.light_night:
 | 
			
		||||
      name: Licht Nacht
 | 
			
		||||
    switch.adaptive_lighting_default:
 | 
			
		||||
      name: Adaptiv
 | 
			
		||||
    switch.adaptive_lighting_sleep_mode_default:
 | 
			
		||||
      name: Schlaf
 | 
			
		||||
    switch.server:
 | 
			
		||||
      name: Server
 | 
			
		||||
    switch.server_template:
 | 
			
		||||
      name: Server Status
 | 
			
		||||
							
								
								
									
										12
									
								
								packages/homeassistant/logbook.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								packages/homeassistant/logbook.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
logbook:
 | 
			
		||||
  exclude:
 | 
			
		||||
    entities:
 | 
			
		||||
      - automation.light_all_snapshot
 | 
			
		||||
      - automation.climate_weekend
 | 
			
		||||
      - automation.climate_weekday
 | 
			
		||||
    entity_globs:
 | 
			
		||||
      - sensor.pfsense_*
 | 
			
		||||
      - binary_sensor.pfsense_*
 | 
			
		||||
      - script.climate_set_*
 | 
			
		||||
      - sensor.home_*
 | 
			
		||||
      - sensor.openweathermap_*
 | 
			
		||||
@@ -1,27 +0,0 @@
 | 
			
		||||
lovelace:
 | 
			
		||||
  mode: yaml
 | 
			
		||||
 | 
			
		||||
  resources:
 | 
			
		||||
    - url: /hacsfiles/button-card/button-card.js
 | 
			
		||||
      type: module
 | 
			
		||||
    - url: /hacsfiles/light-entity-card/light-entity-card.js
 | 
			
		||||
      type: module
 | 
			
		||||
    - url: /hacsfiles/lovelace-auto-entities/auto-entities.js
 | 
			
		||||
      type: module
 | 
			
		||||
    - url: /hacsfiles/lovelace-card-mod/card-mod.js
 | 
			
		||||
      type: module
 | 
			
		||||
    - url: /hacsfiles/mini-graph-card/mini-graph-card-bundle.js
 | 
			
		||||
      type: module
 | 
			
		||||
    - url: /hacsfiles/mini-media-player/mini-media-player-bundle.js
 | 
			
		||||
      type: module
 | 
			
		||||
    - url: /hacsfiles/my-cards/my-slider.js
 | 
			
		||||
      type: module
 | 
			
		||||
    - url: /hacsfiles/simple-weather-card/simple-weather-card-bundle.js
 | 
			
		||||
      type: module
 | 
			
		||||
    - url: /hacsfiles/home-assistant-sun-card/home-assistant-sun-card.js
 | 
			
		||||
      type: module
 | 
			
		||||
    - url: /hacsfiles/lovelace-layout-card/layout-card.js
 | 
			
		||||
      type: module
 | 
			
		||||
    - url: /hacsfiles/lovelace-state-switch/state-switch.js
 | 
			
		||||
      type: module
 | 
			
		||||
                
 | 
			
		||||
							
								
								
									
										15
									
								
								packages/homeassistant/notification_summary.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										15
									
								
								packages/homeassistant/notification_summary.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
script:
 | 
			
		||||
  summary_notification:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: notify.notify
 | 
			
		||||
        data:
 | 
			
		||||
          message: >
 | 
			
		||||
            {% set maxTemp =  states("sensor.temperature_today") %}
 | 
			
		||||
            {% set condition =  states("sensor.temperature_today_condition") %}
 | 
			
		||||
            {% set currentTemp =  states("sensor.temperature_outside") %}
 | 
			
		||||
            {% set recommendation =  states("sensor.climate_temp_recommendation") %}
 | 
			
		||||
            {% set insideTemp =  states("sensor.temperature_kai_temperature") %}
 | 
			
		||||
            At the moment it is {{ condition }} outside with a temperature of {{ currentTemp }}°C.
 | 
			
		||||
            Todays max temperature will be {{ maxTemp }}°C.
 | 
			
		||||
            It is {{ insideTemp }}°C inside and recommended to {{ recommendation }}.
 | 
			
		||||
    mode: single
 | 
			
		||||
							
								
								
									
										0
									
								
								packages/homeassistant/recorder.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										0
									
								
								packages/homeassistant/recorder.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
								
								
									
										8
									
								
								packages/homeassistant/time_date.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								packages/homeassistant/time_date.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
## Time / Date
 | 
			
		||||
## -----------------------------------------------------------------------------------------------##
 | 
			
		||||
sensor:
 | 
			
		||||
  - platform: time_date
 | 
			
		||||
    display_options:
 | 
			
		||||
      - 'time'
 | 
			
		||||
      - 'date'
 | 
			
		||||
@@ -1,62 +0,0 @@
 | 
			
		||||
homekit:
 | 
			
		||||
  ip_address: 10.10.10.50
 | 
			
		||||
 | 
			
		||||
  filter:
 | 
			
		||||
    include_entities:
 | 
			
		||||
      - sensor.temperature_kai_humidity
 | 
			
		||||
      - sensor.temperature_kai_pressure
 | 
			
		||||
      - sensor.temperature_kai_temperature
 | 
			
		||||
      - sensor.temperature_outside_darksky
 | 
			
		||||
      - sensor.schreibtisch_current_consumption
 | 
			
		||||
      - sensor.schreibtisch_today_s_consumption
 | 
			
		||||
      - sensor.schreibtisch_total_consumption
 | 
			
		||||
      - light.all_indirect
 | 
			
		||||
      - light.all_direct
 | 
			
		||||
      - light.all_lights
 | 
			
		||||
      - scene.light_alloff
 | 
			
		||||
      - scene.light_blue
 | 
			
		||||
      - scene.light_flux
 | 
			
		||||
      - scene.light_night
 | 
			
		||||
      - switch.circadian_lighting_circadian_lighting
 | 
			
		||||
      - binary_sensor.mullvad_exit_ip
 | 
			
		||||
      - switch.server
 | 
			
		||||
      - switch.server_template
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  entity_config:
 | 
			
		||||
    sensor.temperature_kai_humidity:
 | 
			
		||||
      name: Humidity
 | 
			
		||||
    sensor.temperature_kai_pressure:
 | 
			
		||||
      name: Pressure
 | 
			
		||||
    sensor.temperature_kai_temperature:
 | 
			
		||||
      name: Temperature
 | 
			
		||||
    sensor.temperature_outside_darksky:
 | 
			
		||||
      name: Outside
 | 
			
		||||
    sensor.schreibtisch_current_consumption:
 | 
			
		||||
      name: Consumption
 | 
			
		||||
    sensor.schreibtisch_today_s_consumption:
 | 
			
		||||
      name: Consumption Today
 | 
			
		||||
    sensor.schreibtisch_total_consumption:
 | 
			
		||||
      name: Consumption Total
 | 
			
		||||
    light.all_indirect:
 | 
			
		||||
      name: Indirect
 | 
			
		||||
    light.all_direct:
 | 
			
		||||
      name: Direct
 | 
			
		||||
    light.all_lights:
 | 
			
		||||
      name: All Lights
 | 
			
		||||
    scene.light_alloff:
 | 
			
		||||
      name: Lights Off
 | 
			
		||||
    scene.light_blue:
 | 
			
		||||
      name: Lights Blue
 | 
			
		||||
    scene.light_flux:
 | 
			
		||||
      name: Lights Flux
 | 
			
		||||
    scene.light_night:
 | 
			
		||||
      name: Lights Night
 | 
			
		||||
    switch.circadian_lighting_circadian_lighting:
 | 
			
		||||
      name: Circadian
 | 
			
		||||
    binary_sensor.mullvad_exit_ip:
 | 
			
		||||
      name: Mullvad
 | 
			
		||||
    switch.server:
 | 
			
		||||
      name: Server
 | 
			
		||||
    switch.server_template:
 | 
			
		||||
      name: Server Status
 | 
			
		||||
@@ -1,16 +0,0 @@
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## Circadian Lighting / Flux
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
circadian_lighting:
 | 
			
		||||
  min_colortemp: 2700
 | 
			
		||||
  max_colortemp: 6500
 | 
			
		||||
  interval: 450
 | 
			
		||||
  transition: 8
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
switch:
 | 
			
		||||
  - platform: circadian_lighting
 | 
			
		||||
    lights_ct:
 | 
			
		||||
      - light.stripe
 | 
			
		||||
      - light.direct
 | 
			
		||||
    max_brightness: 80
 | 
			
		||||
							
								
								
									
										18
									
								
								packages/light/light_adaptive.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								packages/light/light_adaptive.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
adaptive_lighting:
 | 
			
		||||
- name: "default"
 | 
			
		||||
  lights:
 | 
			
		||||
    - light.stripe
 | 
			
		||||
    - light.direct
 | 
			
		||||
  prefer_rgb_color: false
 | 
			
		||||
  transition: 45
 | 
			
		||||
  initial_transition: 1
 | 
			
		||||
  interval: 90
 | 
			
		||||
  min_brightness: 1
 | 
			
		||||
  max_brightness: 80
 | 
			
		||||
  min_color_temp: 2500
 | 
			
		||||
  max_color_temp: 6500
 | 
			
		||||
  sleep_brightness: 1
 | 
			
		||||
  sleep_color_temp: 1000
 | 
			
		||||
  take_over_control: true
 | 
			
		||||
  detect_non_ha_changes: false
 | 
			
		||||
  only_once: false
 | 
			
		||||
							
								
								
									
										31
									
								
								packages/light/light_night_automation.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										31
									
								
								packages/light/light_night_automation.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
input_boolean:
 | 
			
		||||
  lights_needed:
 | 
			
		||||
    name: Lights needed
 | 
			
		||||
    initial: false
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
automation:
 | 
			
		||||
  - alias: lights_needed
 | 
			
		||||
    mode: single
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: time_pattern
 | 
			
		||||
        minutes: "10"
 | 
			
		||||
    action:
 | 
			
		||||
      - if:
 | 
			
		||||
          # Resets at midnight -> OR instead of AND
 | 
			
		||||
          - condition: or
 | 
			
		||||
            conditions:
 | 
			
		||||
              - condition: sun
 | 
			
		||||
                after: sunset
 | 
			
		||||
                after_offset: "-01:00"
 | 
			
		||||
              - condition: sun
 | 
			
		||||
                before: sunrise
 | 
			
		||||
                before_offset: "+01:00"
 | 
			
		||||
        then:
 | 
			
		||||
          - service: input_boolean.turn_on
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: input_boolean.lights_needed
 | 
			
		||||
        else:
 | 
			
		||||
          - service: input_boolean.turn_off
 | 
			
		||||
            target:
 | 
			
		||||
              entity_id: input_boolean.lights_needed
 | 
			
		||||
							
								
								
									
										66
									
								
								packages/light/light_notifications.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										66
									
								
								packages/light/light_notifications.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
automation:
 | 
			
		||||
  - alias: light_still_on_still_needed_notify
 | 
			
		||||
    mode: single
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id:
 | 
			
		||||
          - light.all_lights
 | 
			
		||||
        to: "on"
 | 
			
		||||
        for:
 | 
			
		||||
          hours: 0
 | 
			
		||||
          minutes: 15
 | 
			
		||||
          seconds: 0
 | 
			
		||||
    condition:
 | 
			
		||||
      - condition: state
 | 
			
		||||
        entity_id: input_boolean.lights_needed
 | 
			
		||||
        state: "off"
 | 
			
		||||
        for:
 | 
			
		||||
          hours: 0
 | 
			
		||||
          minutes: 15
 | 
			
		||||
          seconds: 0
 | 
			
		||||
    action:
 | 
			
		||||
      - service: notify.mobile_app_iphone
 | 
			
		||||
        data:
 | 
			
		||||
          message: "Lights are still on."
 | 
			
		||||
          data:
 | 
			
		||||
            actions:
 | 
			
		||||
              - action: "LIGHTTURNOFF"
 | 
			
		||||
                title: Turn them off
 | 
			
		||||
                icon: "sfsymbols:lightbulb"
 | 
			
		||||
 | 
			
		||||
  - alias: light_still_on_iphone_offline_notify
 | 
			
		||||
    mode: single
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id:
 | 
			
		||||
          - device_tracker.pfsense_kais_iphone_wnsrt_de
 | 
			
		||||
        to: not_home
 | 
			
		||||
        for:
 | 
			
		||||
          hours: 0
 | 
			
		||||
          minutes: 2
 | 
			
		||||
          seconds: 0
 | 
			
		||||
    condition:
 | 
			
		||||
      - condition: state
 | 
			
		||||
        entity_id: light.all_lights
 | 
			
		||||
        state: "on"
 | 
			
		||||
    action:
 | 
			
		||||
      - service: notify.mobile_app_iphone
 | 
			
		||||
        data:
 | 
			
		||||
          message: "Lights are still on."
 | 
			
		||||
          data:
 | 
			
		||||
            actions:
 | 
			
		||||
              - action: "LIGHTTURNOFF"
 | 
			
		||||
                title: Turn them off
 | 
			
		||||
                icon: "sfsymbols:lightbulb"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  - alias: light_still_on_notification_event
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: event
 | 
			
		||||
        event_type: mobile_app_notification_action
 | 
			
		||||
        event_data:
 | 
			
		||||
          action: "LIGHTTURNOFF"
 | 
			
		||||
    action:
 | 
			
		||||
      - service: light.turn_off
 | 
			
		||||
        target:
 | 
			
		||||
          entity_id: light.all_lights
 | 
			
		||||
							
								
								
									
										34
									
								
								packages/light/light_scenes.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										34
									
								
								packages/light/light_scenes.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
scene:
 | 
			
		||||
  - name: light_adaptive
 | 
			
		||||
    entities:
 | 
			
		||||
      light.all_direct: false
 | 
			
		||||
      light.all_indirect: true
 | 
			
		||||
      switch.adaptive_lighting_default: on
 | 
			
		||||
      switch.adaptive_lighting_sleep_mode_default: off
 | 
			
		||||
  - name: light_blue
 | 
			
		||||
    entities:
 | 
			
		||||
      switch.adaptive_lighting_default: off
 | 
			
		||||
      switch.adaptive_lighting_sleep_mode_default: off
 | 
			
		||||
      light.all_direct: false
 | 
			
		||||
      light.all_indirect:
 | 
			
		||||
        rgb_color: [0, 0, 255]
 | 
			
		||||
        state: true
 | 
			
		||||
        brightness: 20
 | 
			
		||||
  - name: light_night
 | 
			
		||||
    entities:
 | 
			
		||||
      switch.adaptive_lighting_default: on
 | 
			
		||||
      light.all_direct: false
 | 
			
		||||
      light.all_indirect:
 | 
			
		||||
        rgb_color: [255, 139, 21]
 | 
			
		||||
        state: true
 | 
			
		||||
        brightness: 1
 | 
			
		||||
      switch.adaptive_lighting_sleep_mode_default: on
 | 
			
		||||
  - name: light_bright
 | 
			
		||||
    entities:
 | 
			
		||||
      switch.adaptive_lighting_default: off
 | 
			
		||||
      light.all_direct: false
 | 
			
		||||
      light.all_lights:
 | 
			
		||||
        color_temp: 238
 | 
			
		||||
        state: true
 | 
			
		||||
        brightness: 255
 | 
			
		||||
      switch.adaptive_lighting_sleep_mode_default: off
 | 
			
		||||
							
								
								
									
										20
									
								
								packages/light/light_snapshot.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								packages/light/light_snapshot.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
automation:
 | 
			
		||||
  - alias: light_all_snapshot
 | 
			
		||||
    mode: single
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: time_pattern
 | 
			
		||||
        seconds: "30"
 | 
			
		||||
    condition:
 | 
			
		||||
      - condition: state
 | 
			
		||||
        entity_id: light.all_lights
 | 
			
		||||
        state: "on"
 | 
			
		||||
    action:
 | 
			
		||||
      - service: scene.create
 | 
			
		||||
        data:
 | 
			
		||||
          scene_id: snapshot_all
 | 
			
		||||
          snapshot_entities:
 | 
			
		||||
            - light.all_indirect
 | 
			
		||||
            - light.bed_ceiling
 | 
			
		||||
            - light.ceiling
 | 
			
		||||
            - switch.adaptive_lighting_sleep_mode_default
 | 
			
		||||
            - switch.adaptive_lighting_default
 | 
			
		||||
@@ -1,25 +0,0 @@
 | 
			
		||||
scene:
 | 
			
		||||
  - name: light_alloff
 | 
			
		||||
    entities:
 | 
			
		||||
      light.all_lights: false
 | 
			
		||||
  - name: light_flux
 | 
			
		||||
    entities:
 | 
			
		||||
      light.all_direct: false
 | 
			
		||||
      light.all_indirect: true
 | 
			
		||||
      switch.circadian_lighting_circadian_lighting: on
 | 
			
		||||
  - name: light_blue
 | 
			
		||||
    entities:
 | 
			
		||||
      switch.circadian_lighting_circadian_lighting: off
 | 
			
		||||
      light.all_direct: false
 | 
			
		||||
      light.all_indirect:
 | 
			
		||||
        rgb_color: [0, 0, 255]
 | 
			
		||||
        state: true
 | 
			
		||||
        brightness: 20
 | 
			
		||||
  - name: light_night
 | 
			
		||||
    entities:
 | 
			
		||||
      switch.circadian_lighting_circadian_lighting: off
 | 
			
		||||
      light.all_direct: false
 | 
			
		||||
      light.all_indirect:
 | 
			
		||||
        rgb_color: [255, 139, 21]
 | 
			
		||||
        state: true
 | 
			
		||||
        brightness: 1
 | 
			
		||||
@@ -1,28 +0,0 @@
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## Light_Store
 | 
			
		||||
## https://github.com/pnbruckner/homeassistant-config/blob/master/python_scripts/light_store.py
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
script:
 | 
			
		||||
  light_store_save:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: python_script.light_store
 | 
			
		||||
        data:
 | 
			
		||||
          store_name: flash_store
 | 
			
		||||
          entity_id:
 | 
			
		||||
            - light.bed
 | 
			
		||||
            - light.closet
 | 
			
		||||
            - light.desk
 | 
			
		||||
            - light.direct
 | 
			
		||||
            - light.tv
 | 
			
		||||
  light_store_off:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: script.light_store_save
 | 
			
		||||
      - service: light.turn_off
 | 
			
		||||
        entity_id: light.all_lights
 | 
			
		||||
  light_store_restore:
 | 
			
		||||
    sequence:
 | 
			
		||||
      - service: python_script.light_store
 | 
			
		||||
        data:
 | 
			
		||||
          store_name: flash_store
 | 
			
		||||
          operation: restore
 | 
			
		||||
  
 | 
			
		||||
							
								
								
									
										25
									
								
								packages/light/yeelight.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										25
									
								
								packages/light/yeelight.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,8 +1,3 @@
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## Yeelight
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## Discovery disable
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
@@ -12,40 +7,40 @@ discovery:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## Lampen-Konfig
 | 
			
		||||
## Lights
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
yeelight:
 | 
			
		||||
  devices:
 | 
			
		||||
    10.10.10.82:
 | 
			
		||||
      name: ceiling1
 | 
			
		||||
      save_on_change: False
 | 
			
		||||
      transition: 2500
 | 
			
		||||
      transition: 500
 | 
			
		||||
    10.10.10.83:
 | 
			
		||||
      name: ceiling2
 | 
			
		||||
      save_on_change: False
 | 
			
		||||
      transition: 2500
 | 
			
		||||
      transition: 500
 | 
			
		||||
    10.10.10.80:
 | 
			
		||||
      name: ceiling3
 | 
			
		||||
      save_on_change: False
 | 
			
		||||
      transition: 2500
 | 
			
		||||
      transition: 500
 | 
			
		||||
    10.10.10.81:
 | 
			
		||||
      name: bed_ceiling
 | 
			
		||||
      save_on_change: False
 | 
			
		||||
      transition: 2500
 | 
			
		||||
      transition: 500
 | 
			
		||||
    10.10.10.84:
 | 
			
		||||
      name: bed
 | 
			
		||||
      save_on_change: False
 | 
			
		||||
      transition: 2500
 | 
			
		||||
      transition: 500
 | 
			
		||||
      model: strip1
 | 
			
		||||
    10.10.10.85:
 | 
			
		||||
      name: desk
 | 
			
		||||
      save_on_change: False
 | 
			
		||||
      transition: 2500
 | 
			
		||||
      transition: 500
 | 
			
		||||
      model: strip1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
## Lampengruppen
 | 
			
		||||
## Light Groups
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
light:
 | 
			
		||||
  - platform: group
 | 
			
		||||
@@ -78,6 +73,4 @@ light:
 | 
			
		||||
    name: all_lights
 | 
			
		||||
    entities:
 | 
			
		||||
      - light.all_direct
 | 
			
		||||
      - light.all_indirect
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      - light.all_indirect
 | 
			
		||||
							
								
								
									
										10
									
								
								packages/minimalist/custom_entities.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										10
									
								
								packages/minimalist/custom_entities.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,11 +1,3 @@
 | 
			
		||||
input_boolean:
 | 
			
		||||
  welcome_collapse:
 | 
			
		||||
    name: welcome_collapse
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
input_select:
 | 
			
		||||
  minimalist_ui_switch:
 | 
			
		||||
    name: Select popup/view
 | 
			
		||||
    options:
 | 
			
		||||
      - light.all_indirect
 | 
			
		||||
      - light.all_direct
 | 
			
		||||
    name: welcome_collapse
 | 
			
		||||
							
								
								
									
										2
									
								
								packages/nas/wol.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										2
									
								
								packages/nas/wol.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -3,13 +3,11 @@
 | 
			
		||||
## -------------------------------------------------------------------------------------------------##
 | 
			
		||||
wake_on_lan:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
switch:
 | 
			
		||||
  - platform: wake_on_lan
 | 
			
		||||
    mac: 54:04:A6:BF:1E:43
 | 
			
		||||
    name: Server
 | 
			
		||||
    host: ip.wnsrt.de
 | 
			
		||||
#switch:
 | 
			
		||||
  - platform: template
 | 
			
		||||
    switches:
 | 
			
		||||
      server_template:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								packages/pfsense/pfsense_automations.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								packages/pfsense/pfsense_automations.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
automation:
 | 
			
		||||
  - alias: "pfSense WAN Down"
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id: sensor.pfsense_gateway_wan_gw_status
 | 
			
		||||
        to: 'False'
 | 
			
		||||
    action:
 | 
			
		||||
      - service: notify.notify
 | 
			
		||||
        data:
 | 
			
		||||
          message: "WAN Gateway went offline"
 | 
			
		||||
 | 
			
		||||
  - alias: "pfSense Mullvad Down"
 | 
			
		||||
    trigger:
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id: sensor.pfsense_gateway_mullvad1gw_status
 | 
			
		||||
        to: 'False'
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id: sensor.pfsense_gateway_mullvad1gwv6_status
 | 
			
		||||
        to: 'False'
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id: sensor.pfsense_gateway_mullvad2gw_status
 | 
			
		||||
        to: 'False'
 | 
			
		||||
      - platform: state
 | 
			
		||||
        entity_id: sensor.pfsense_gateway_mullvad2gwv6_status
 | 
			
		||||
        to: 'False'
 | 
			
		||||
    action:
 | 
			
		||||
      - service: notify.notify
 | 
			
		||||
        data:
 | 
			
		||||
          message: "A Mullvad connection went offline"
 | 
			
		||||
@@ -1,119 +0,0 @@
 | 
			
		||||
VERSION = '1.2.0'
 | 
			
		||||
 | 
			
		||||
DOMAIN = 'light_store'
 | 
			
		||||
 | 
			
		||||
ATTR_OPERATION  = 'operation'
 | 
			
		||||
ATTR_OP_SAVE    = 'save'
 | 
			
		||||
ATTR_OP_RESTORE = 'restore'
 | 
			
		||||
ATTR_OVERWRITE  = 'overwrite'
 | 
			
		||||
 | 
			
		||||
ATTR_STORE_NAME = 'store_name'
 | 
			
		||||
ATTR_ENTITY_ID  = 'entity_id'
 | 
			
		||||
 | 
			
		||||
# Select light attributes to save/restore.
 | 
			
		||||
ATTR_BRIGHTNESS = "brightness"
 | 
			
		||||
ATTR_EFFECT = "effect"
 | 
			
		||||
ATTR_WHITE_VALUE = "white_value"
 | 
			
		||||
ATTR_COLOR_TEMP = "color_temp"
 | 
			
		||||
ATTR_HS_COLOR = "hs_color"
 | 
			
		||||
# Save any of these attributes.
 | 
			
		||||
GEN_ATTRS = [ATTR_BRIGHTNESS, ATTR_EFFECT]
 | 
			
		||||
# Save only one of these attributes, in order of precedence.
 | 
			
		||||
COLOR_ATTRS = [ATTR_WHITE_VALUE, ATTR_COLOR_TEMP, ATTR_HS_COLOR]
 | 
			
		||||
 | 
			
		||||
def store_entity_id(store_name, entity_id):
 | 
			
		||||
    return '{}.{}'.format(store_name, entity_id.replace('.', '_'))
 | 
			
		||||
 | 
			
		||||
# Get operation (default to save.)
 | 
			
		||||
operation = data.get(ATTR_OPERATION, ATTR_OP_SAVE)
 | 
			
		||||
if operation not in [ATTR_OP_SAVE, ATTR_OP_RESTORE]:
 | 
			
		||||
    logger.error('Invalid operation. Expected {} or {}, got: {}'.format(
 | 
			
		||||
        ATTR_OP_SAVE, ATTR_OP_RESTORE, operation))
 | 
			
		||||
else:
 | 
			
		||||
    # Get optional store name (default to DOMAIN.)
 | 
			
		||||
    store_name = data.get(ATTR_STORE_NAME, DOMAIN)
 | 
			
		||||
 | 
			
		||||
    # Get optional overwrite parameter (only applies to saving.)
 | 
			
		||||
    overwrite = data.get(ATTR_OVERWRITE, True)
 | 
			
		||||
 | 
			
		||||
    # Get optional list (or comma separated string) of switches & lights to
 | 
			
		||||
    # save/restore.
 | 
			
		||||
    entity_id = data.get(ATTR_ENTITY_ID)
 | 
			
		||||
    if isinstance(entity_id, str):
 | 
			
		||||
        entity_id = [e.strip() for e in entity_id.split(',')]
 | 
			
		||||
 | 
			
		||||
    # Replace any group entities with their contents.
 | 
			
		||||
    # Repeat until no groups left in list.
 | 
			
		||||
    expanded_a_group = True
 | 
			
		||||
    while entity_id and expanded_a_group:
 | 
			
		||||
        expanded_a_group = False
 | 
			
		||||
        for e in entity_id:
 | 
			
		||||
            if e.startswith('group.'):
 | 
			
		||||
                entity_id.remove(e)
 | 
			
		||||
                g = hass.states.get(e)
 | 
			
		||||
                if g and 'entity_id' in g.attributes:
 | 
			
		||||
                    entity_id.extend(g.attributes['entity_id'])
 | 
			
		||||
                    expanded_a_group = True
 | 
			
		||||
 | 
			
		||||
    # Get lists of switches and lights that actually exist,
 | 
			
		||||
    # and list of entities that were previously saved.
 | 
			
		||||
    entity_ids = (hass.states.entity_ids('switch') +
 | 
			
		||||
                  hass.states.entity_ids('light'))
 | 
			
		||||
    saved      = hass.states.entity_ids(store_name)
 | 
			
		||||
    # When restoring, limit to existing entities that were saved.
 | 
			
		||||
    if operation == ATTR_OP_RESTORE:
 | 
			
		||||
        saved_entity_ids = []
 | 
			
		||||
        for e in entity_ids:
 | 
			
		||||
            if store_entity_id(store_name, e) in saved:
 | 
			
		||||
                saved_entity_ids.append(e)
 | 
			
		||||
        entity_ids = saved_entity_ids
 | 
			
		||||
 | 
			
		||||
    # If a list of entities was specified, further limit to just those.
 | 
			
		||||
    # Otherwise, save all existing switches and lights, or restore
 | 
			
		||||
    # all existing switches and lights that were previously saved.
 | 
			
		||||
    if entity_id:
 | 
			
		||||
        entity_ids = tuple(set(entity_ids).intersection(set(entity_id)))
 | 
			
		||||
 | 
			
		||||
    if operation == ATTR_OP_SAVE:
 | 
			
		||||
        # Only save if not already saved, or if overwite is True.
 | 
			
		||||
        if not saved or overwrite:
 | 
			
		||||
            # Clear out any previously saved states.
 | 
			
		||||
            for entity_id in saved:
 | 
			
		||||
                hass.states.remove(entity_id)
 | 
			
		||||
 | 
			
		||||
            # Save selected switches and lights to store.
 | 
			
		||||
            for entity_id in entity_ids:
 | 
			
		||||
                cur_state = hass.states.get(entity_id)
 | 
			
		||||
                if cur_state is None:
 | 
			
		||||
                    logger.error('Could not get state of {}.'.format(entity_id))
 | 
			
		||||
                else:
 | 
			
		||||
                    attributes = {}
 | 
			
		||||
                    if entity_id.startswith('light.') and cur_state.state == 'on':
 | 
			
		||||
                        for attr in GEN_ATTRS:
 | 
			
		||||
                            if attr in cur_state.attributes:
 | 
			
		||||
                                attributes[attr] = cur_state.attributes[attr]
 | 
			
		||||
                        for attr in COLOR_ATTRS:
 | 
			
		||||
                            if attr in cur_state.attributes:
 | 
			
		||||
                                attributes[attr] = cur_state.attributes[attr]
 | 
			
		||||
                                break
 | 
			
		||||
                    hass.states.set(store_entity_id(store_name, entity_id),
 | 
			
		||||
                                    cur_state.state, attributes)
 | 
			
		||||
    else:
 | 
			
		||||
        # Restore selected switches and lights from store.
 | 
			
		||||
        for entity_id in entity_ids:
 | 
			
		||||
            old_state = hass.states.get(store_entity_id(store_name, entity_id))
 | 
			
		||||
            if old_state is None:
 | 
			
		||||
                logger.error('No saved state for {}.'.format(entity_id))
 | 
			
		||||
            else:
 | 
			
		||||
                turn_on = old_state.state == 'on'
 | 
			
		||||
                service_data = {'entity_id': entity_id}
 | 
			
		||||
                component = entity_id.split('.')[0]
 | 
			
		||||
                if component == 'light' and turn_on and old_state.attributes:
 | 
			
		||||
                    service_data.update(old_state.attributes)
 | 
			
		||||
                hass.services.call(component,
 | 
			
		||||
                                   'turn_on' if turn_on else 'turn_off',
 | 
			
		||||
                                   service_data)
 | 
			
		||||
 | 
			
		||||
        # Remove saved states now that we're done with them.
 | 
			
		||||
        for entity_id in saved:
 | 
			
		||||
            hass.states.remove(entity_id)
 | 
			
		||||
							
								
								
									
										36
									
								
								resources.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										36
									
								
								resources.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
- url: /hacsfiles/button-card/button-card.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/light-entity-card/light-entity-card.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/lovelace-auto-entities/auto-entities.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/lovelace-card-mod/card-mod.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/mini-graph-card/mini-graph-card-bundle.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/mini-media-player/mini-media-player-bundle.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/my-cards/my-slider.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/my-cards/my-button.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/simple-weather-card/simple-weather-card-bundle.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/home-assistant-sun-card/home-assistant-sun-card.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/lovelace-layout-card/layout-card.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/lovelace-state-switch/state-switch.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/lovelace-valetudo-map-card/valetudo-map-card.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/apexcharts-card/apexcharts-card.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/lovelace-home-feed-card/lovelace-home-feed-card.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/hass-swipe-navigation/swipe-navigation.js
 | 
			
		||||
  type: module
 | 
			
		||||
- url: /hacsfiles/weather-card/weather-card.js
 | 
			
		||||
  type: module            
 | 
			
		||||
- url: /hacsfiles/lovelace-mushroom/mushroom.js
 | 
			
		||||
  type: module       
 | 
			
		||||
							
								
								
									
										129
									
								
								themes/minimalist-desktop/minimalist-desktop.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										129
									
								
								themes/minimalist-desktop/minimalist-desktop.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,129 @@
 | 
			
		||||
---
 | 
			
		||||
minimalist-desktop:
 | 
			
		||||
  # Journal
 | 
			
		||||
  state-icon-color: "rgb(var(--color-theme))"
 | 
			
		||||
  border-radius: "20px"
 | 
			
		||||
  ha-card-border-radius: "var(--border-radius)"
 | 
			
		||||
  error-color: "var(--google-red)"
 | 
			
		||||
  warning-color: "var(--google-yellow)"
 | 
			
		||||
  success-color: "var(--google-green)"
 | 
			
		||||
  info-color: "var(--google-blue)"
 | 
			
		||||
  divider-color: "rgba(var(--color-theme),.12)"
 | 
			
		||||
  accent-color: "var(--google-yellow)"
 | 
			
		||||
  card-mod-theme: "minimalist-desktop"
 | 
			
		||||
  card-mod-view-yaml: |
 | 
			
		||||
    "*:first-child$": |
 | 
			
		||||
      #columns .column > * {
 | 
			
		||||
        padding-left: 5px;
 | 
			
		||||
        padding-right: 5px;
 | 
			
		||||
        padding-bottom: 5px;
 | 
			
		||||
      }
 | 
			
		||||
  modes:
 | 
			
		||||
    light:
 | 
			
		||||
      # text
 | 
			
		||||
      primary-text-color: "#212121"
 | 
			
		||||
      # main interface colors
 | 
			
		||||
      primary-color: "#434343"
 | 
			
		||||
      google-red: "#F54436"
 | 
			
		||||
      google-green: "#01C852"
 | 
			
		||||
      google-yellow: "#FF9101"
 | 
			
		||||
      google-blue: "#3D5AFE"
 | 
			
		||||
      google-violet: "#661FFF"
 | 
			
		||||
      google-grey: "#BBBBBB"
 | 
			
		||||
      color-red: "245, 68, 54"
 | 
			
		||||
      color-green: "1, 200, 82"
 | 
			
		||||
      color-yellow: "255, 145, 1"
 | 
			
		||||
      color-blue: "61, 90, 254"
 | 
			
		||||
      color-purple: "102, 31, 255"
 | 
			
		||||
      color-grey: "187, 187, 187"
 | 
			
		||||
      color-pink: "233, 30, 99"
 | 
			
		||||
      color-theme: "51,51,51"
 | 
			
		||||
      color-background-yellow: "250, 250, 250"
 | 
			
		||||
      color-background-blue: "250, 250, 250"
 | 
			
		||||
      color-background-green: "250, 250, 250"
 | 
			
		||||
      color-background-red: "250, 250, 250"
 | 
			
		||||
      color-background-pink: "250, 250, 250"
 | 
			
		||||
      color-background-purple: "250, 250, 250"
 | 
			
		||||
      color-yellow-text: "var(--primary-text-color)"
 | 
			
		||||
      color-blue-text: "var(--primary-text-color)"
 | 
			
		||||
      color-green-text: "var(--primary-text-color)"
 | 
			
		||||
      color-red-text: "var(--primary-text-color)"
 | 
			
		||||
      color-pink-text: "var(--primary-text-color)"
 | 
			
		||||
      color-purple-text: "var(--primary-text-color)"
 | 
			
		||||
      opacity-bg: "1"
 | 
			
		||||
      # background and sidebar
 | 
			
		||||
      card-background-color: "#FAFAFA"
 | 
			
		||||
      primary-background-color: "#EFEFEF"
 | 
			
		||||
      secondary-background-color: "#EFEFEF"
 | 
			
		||||
      # header
 | 
			
		||||
      app-header-text-color: "var(--primary-text-color)"
 | 
			
		||||
      app-header-background-color: "var(--primary-background-color)"
 | 
			
		||||
      # paper-tabs-selection-bar-color: "var(--primary-text-color)"
 | 
			
		||||
      # slider
 | 
			
		||||
      slider-color: "rgb(var(--color-blue))"
 | 
			
		||||
      slider-bar-color: "rgba(var(--color-blue),0.38)"
 | 
			
		||||
      # cards
 | 
			
		||||
      box-shadow: "0px 2px 4px 0px rgba(0,0,0,0.16)"
 | 
			
		||||
      ha-card-box-shadow: "var(--box-shadow)"
 | 
			
		||||
      # sidebar
 | 
			
		||||
      sidebar-selected-text-color: "var(--google-red)"
 | 
			
		||||
      sidebar-selected-icon-color: "var(--google-red)"
 | 
			
		||||
      sidebar-text-color: "#80868b"
 | 
			
		||||
      # switch
 | 
			
		||||
      switch-checked-color: "var(--google-blue)"
 | 
			
		||||
      # media player
 | 
			
		||||
      mini-media-player-accent-color: "var(--google-blue)"
 | 
			
		||||
    dark:
 | 
			
		||||
      # text
 | 
			
		||||
      primary-text-color: "#DDDDDD"
 | 
			
		||||
      # main interface colors
 | 
			
		||||
      primary-color: "#89B3F8"
 | 
			
		||||
      google-red: "#F18B82"
 | 
			
		||||
      google-green: "#80C994"
 | 
			
		||||
      google-yellow: "#FCD663"
 | 
			
		||||
      google-blue: "#89B3F8"
 | 
			
		||||
      google-violet: "#BB86FC"
 | 
			
		||||
      google-grey: "#BBBBBB"
 | 
			
		||||
      color-red: "241, 139, 130"
 | 
			
		||||
      color-green: "128, 201, 148"
 | 
			
		||||
      color-yellow: "252, 214, 99"
 | 
			
		||||
      color-blue: "137, 179, 248"
 | 
			
		||||
      color-theme: "221,221,221"
 | 
			
		||||
      color-purple: "102, 31, 255"
 | 
			
		||||
      color-grey: "187, 187, 187"
 | 
			
		||||
      color-pink: "233, 30, 99"
 | 
			
		||||
      color-background-yellow: "var(--color-yellow)"
 | 
			
		||||
      color-background-blue: "var(--color-blue)"
 | 
			
		||||
      color-background-green: "var(--color-green)"
 | 
			
		||||
      color-background-red: "var(--color-red)"
 | 
			
		||||
      color-background-pink: "var(--color-pink)"
 | 
			
		||||
      color-background-purple: "var(--color-purple)"
 | 
			
		||||
      color-yellow-text: "var(--color-yellow)"
 | 
			
		||||
      color-blue-text: "var(--color-blue)"
 | 
			
		||||
      color-green-text: "var(--color-green)"
 | 
			
		||||
      color-red-text: "var(--color-red)"
 | 
			
		||||
      color-pink-text: "var(--color-pink)"
 | 
			
		||||
      color-purple-text: "var(--color-purple)"
 | 
			
		||||
      opacity-bg: "0.1"
 | 
			
		||||
      # floating button text color
 | 
			
		||||
      mdc-theme-on-secondary: "var(--card-background-color)"
 | 
			
		||||
      # background and sidebar
 | 
			
		||||
      card-background-color: "#1D1D1D"
 | 
			
		||||
      primary-background-color: "#121212"
 | 
			
		||||
      secondary-background-color: "#121212"
 | 
			
		||||
      # header
 | 
			
		||||
      app-header-text-color: "var(--primary-text-color)"
 | 
			
		||||
      app-header-background-color: "var(--primary-background-color)"
 | 
			
		||||
      paper-tabs-selection-bar-color: "var(--primary-text-color)"
 | 
			
		||||
      # Sidebar
 | 
			
		||||
      sidebar-selected-text-color: "rgb(var(--color-blue))"
 | 
			
		||||
      sidebar-selected-icon-color: "rgb(var(--color-blue))"
 | 
			
		||||
      # Slider
 | 
			
		||||
      slider-color: "rgb(var(--color-blue))"
 | 
			
		||||
      slider-bar-color: "rgba(var(--color-blue),0.38)"
 | 
			
		||||
      # card
 | 
			
		||||
      box-shadow: "none"
 | 
			
		||||
      # media player
 | 
			
		||||
      mini-media-player-accent-color: "var(--google-blue)"
 | 
			
		||||
      # Journal
 | 
			
		||||
      state-icon-color: "rgb(var(--color-theme))"
 | 
			
		||||
							
								
								
									
										206
									
								
								themes/minimalist-ios-tapbar/minimalist-ios-tapbar.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										206
									
								
								themes/minimalist-ios-tapbar/minimalist-ios-tapbar.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,206 @@
 | 
			
		||||
---
 | 
			
		||||
minimalist-ios-tapbar:
 | 
			
		||||
  # version 1.0.1
 | 
			
		||||
  # By LRvdLinden
 | 
			
		||||
  # Journal
 | 
			
		||||
  state-icon-color: "rgb(var(--color-theme))"
 | 
			
		||||
  border-radius: "20px"
 | 
			
		||||
  ha-card-border-radius: "var(--border-radius)"
 | 
			
		||||
  error-color: "var(--google-red)"
 | 
			
		||||
  warning-color: "var(--google-yellow)"
 | 
			
		||||
  success-color: "var(--google-green)"
 | 
			
		||||
  info-color: "var(--google-blue)"
 | 
			
		||||
  divider-color: "rgba(var(--color-theme),.12)"
 | 
			
		||||
  accent-color: "var(--google-yellow)"
 | 
			
		||||
  card-mod-theme: "minimalist-ios-tapbar"
 | 
			
		||||
  card-mod-root: |
 | 
			
		||||
    app-toolbar {
 | 
			
		||||
      display: none;
 | 
			
		||||
    }
 | 
			
		||||
  header-height: "78px"
 | 
			
		||||
  card-mod-view-yaml: |
 | 
			
		||||
    "*:first-child$": |
 | 
			
		||||
      #columns .column > * {
 | 
			
		||||
        padding-left: 5px;
 | 
			
		||||
        padding-right: 5px;
 | 
			
		||||
        padding-bottom: 5px;
 | 
			
		||||
      }
 | 
			
		||||
  # Move navbar
 | 
			
		||||
  card-mod-root-yaml: |
 | 
			
		||||
    ha-tabs$: |
 | 
			
		||||
      #tabsContent {
 | 
			
		||||
        width: 97%;
 | 
			
		||||
      }
 | 
			
		||||
    .: |
 | 
			
		||||
      @media (orientation: portrait) {
 | 
			
		||||
        a.menu-link[target="_blank"], ha-button-menu, ha-menu-button, [main-title] {
 | 
			
		||||
          display: none !important;
 | 
			
		||||
        }
 | 
			
		||||
        app-toolbar {
 | 
			
		||||
          padding-right: 0px;
 | 
			
		||||
          padding-left: 0px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      ha-app-layout{
 | 
			
		||||
        transform: initial;
 | 
			
		||||
        padding: 0 !important;
 | 
			
		||||
        margin: 0 !important;
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        height: 100% !important;
 | 
			
		||||
      }
 | 
			
		||||
      app-header {
 | 
			
		||||
        top: auto;
 | 
			
		||||
        bottom: 0;
 | 
			
		||||
        box-shadow: var(--footer-shadow);
 | 
			
		||||
        position: fixed;
 | 
			
		||||
        height: var(--header-height) !important;
 | 
			
		||||
      }
 | 
			
		||||
      app-toolbar {
 | 
			
		||||
        height: var(--header-height) !important;
 | 
			
		||||
        padding: 10px 0px !important;
 | 
			
		||||
        background: var( --ha-card-background, var(--card-background-color) );
 | 
			
		||||
      }
 | 
			
		||||
      #view {
 | 
			
		||||
        margin-top: calc(-1 * var(--header-height)) !important;
 | 
			
		||||
        padding-bottom: var(--header-height) !important;
 | 
			
		||||
      }
 | 
			
		||||
      ha-tabs {
 | 
			
		||||
        --paper-tabs-selection-bar-color: var(--header-tab-indicator-color) !important;
 | 
			
		||||
        --mdc-icon-size: 26px;
 | 
			
		||||
        display: flex;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
        padding: 10px;
 | 
			
		||||
        margin-top:15px;
 | 
			
		||||
        height:var(--header-height) !important;
 | 
			
		||||
      }
 | 
			
		||||
      paper-tab[aria-selected=true] {
 | 
			
		||||
        color: var(--header-active-tab-color);
 | 
			
		||||
        background-color: var(--header-active-tab-bg-color);
 | 
			
		||||
      }
 | 
			
		||||
      paper-tab {
 | 
			
		||||
        color: var(--header-all-tabs-color);
 | 
			
		||||
        border-radius: 25px;
 | 
			
		||||
        height:50px;
 | 
			
		||||
        padding: 0 20px;
 | 
			
		||||
      }
 | 
			
		||||
  # Color themes
 | 
			
		||||
  modes:
 | 
			
		||||
    light:
 | 
			
		||||
      # main interface colors
 | 
			
		||||
      primary-color: "#434343"
 | 
			
		||||
      google-red: "#F54436"
 | 
			
		||||
      google-green: "#01C852"
 | 
			
		||||
      google-yellow: "#FF9101"
 | 
			
		||||
      google-blue: "#3D5AFE"
 | 
			
		||||
      google-violet: "#661FFF"
 | 
			
		||||
      google-grey: "#BBBBBB"
 | 
			
		||||
      color-red: "245, 68, 54"
 | 
			
		||||
      color-green: "1, 200, 82"
 | 
			
		||||
      color-yellow: "255, 145, 1"
 | 
			
		||||
      color-blue: "61, 90, 254"
 | 
			
		||||
      color-purple: "102, 31, 255"
 | 
			
		||||
      color-grey: "187, 187, 187"
 | 
			
		||||
      color-pink: "233, 30, 99"
 | 
			
		||||
      color-theme: "51,51,51"
 | 
			
		||||
      color-background-yellow: "250, 250, 250"
 | 
			
		||||
      color-background-blue: "250, 250, 250"
 | 
			
		||||
      color-background-green: "250, 250, 250"
 | 
			
		||||
      color-background-red: "250, 250, 250"
 | 
			
		||||
      color-background-pink: "250, 250, 250"
 | 
			
		||||
      color-background-purple: "250, 250, 250"
 | 
			
		||||
      color-yellow-text: "var(--primary-text-color)"
 | 
			
		||||
      color-blue-text: "var(--primary-text-color)"
 | 
			
		||||
      color-green-text: "var(--primary-text-color)"
 | 
			
		||||
      color-red-text: "var(--primary-text-color)"
 | 
			
		||||
      color-pink-text: "var(--primary-text-color)"
 | 
			
		||||
      color-purple-text: "var(--primary-text-color)"
 | 
			
		||||
      opacity-bg: "1"
 | 
			
		||||
      # Header / Footer
 | 
			
		||||
      header-active-tab-color: "rgb(var(--color-blue))"
 | 
			
		||||
      header-active-tab-bg-color: "rgba(var(--color-blue), .3)"
 | 
			
		||||
      header-all-tabs-color: "var(--paper-item-icon-color)"
 | 
			
		||||
      header-tab-indicator-color: "rgba(0, 0, 0, 0)"
 | 
			
		||||
      app-header-text-color: "var(--primary-text-color)"
 | 
			
		||||
      app-header-background-color: "var(--primary-background-color)"
 | 
			
		||||
      paper-tabs-selection-bar-color: "var(--primary-text-color)"
 | 
			
		||||
      footer-shadow: "0px -1px 3px 0px rgba(0,0,0,0.12)"
 | 
			
		||||
      # background and sidebar
 | 
			
		||||
      card-background-color: "#FAFAFA"
 | 
			
		||||
      primary-background-color: "#EFEFEF"
 | 
			
		||||
      secondary-background-color: "#EFEFEF"
 | 
			
		||||
      # text
 | 
			
		||||
      primary-text-color: "#212121"
 | 
			
		||||
      # slider
 | 
			
		||||
      slider-color: "rgb(var(--google-blue))"
 | 
			
		||||
      slider-bar-color: "rgba(var(--google-blue),0.38)"
 | 
			
		||||
      # cards
 | 
			
		||||
      box-shadow: "0px 2px 4px 0px rgba(0,0,0,0.16)"
 | 
			
		||||
      ha-card-box-shadow: "var(--box-shadow)"
 | 
			
		||||
      # sidebar
 | 
			
		||||
      sidebar-selected-text-color: "rgb(var(--color-blue))"
 | 
			
		||||
      sidebar-selected-icon-color: "rgb(var(--color-blue))"
 | 
			
		||||
      sidebar-text-color: "#80868b"
 | 
			
		||||
      # switch
 | 
			
		||||
      switch-checked-color: "rgb(var(--color-blue))"
 | 
			
		||||
      # media player
 | 
			
		||||
      mini-media-player-accent-color: "rgb(var(--color-blue))"
 | 
			
		||||
    dark:
 | 
			
		||||
      # main interface colors
 | 
			
		||||
      primary-color: "#89B3F8"
 | 
			
		||||
      google-red: "#F18B82"
 | 
			
		||||
      google-green: "#80C994"
 | 
			
		||||
      google-yellow: "#FCD663"
 | 
			
		||||
      google-blue: "#89B3F8"
 | 
			
		||||
      google-violet: "#BB86FC"
 | 
			
		||||
      google-grey: "#BBBBBB"
 | 
			
		||||
      color-red: "241, 139, 130"
 | 
			
		||||
      color-green: "128, 201, 148"
 | 
			
		||||
      color-yellow: "252, 214, 99"
 | 
			
		||||
      color-blue: "137, 179, 248"
 | 
			
		||||
      color-theme: "221,221,221"
 | 
			
		||||
      color-purple: "102, 31, 255"
 | 
			
		||||
      color-grey: "187, 187, 187"
 | 
			
		||||
      color-pink: "233, 30, 99"
 | 
			
		||||
      color-amber: "255, 145, 1"
 | 
			
		||||
      color-background-yellow: "var(--color-yellow)"
 | 
			
		||||
      color-background-blue: "var(--color-blue)"
 | 
			
		||||
      color-background-green: "var(--color-green)"
 | 
			
		||||
      color-background-red: "var(--color-red)"
 | 
			
		||||
      color-background-pink: "var(--color-pink)"
 | 
			
		||||
      color-background-purple: "var(--color-purple)"
 | 
			
		||||
      color-yellow-text: "var(--color-yellow)"
 | 
			
		||||
      color-blue-text: "var(--color-blue)"
 | 
			
		||||
      color-green-text: "var(--color-green)"
 | 
			
		||||
      color-red-text: "var(--color-red)"
 | 
			
		||||
      color-pink-text: "var(--color-pink)"
 | 
			
		||||
      color-purple-text: "var(--color-purple)"
 | 
			
		||||
      opacity-bg: "0.1"
 | 
			
		||||
      # Header / Footer
 | 
			
		||||
      header-active-tab-color: "rgb(var(--color-amber))"
 | 
			
		||||
      header-active-tab-bg-color: "rgba(var(--color-amber), .3)"
 | 
			
		||||
      header-all-tabs-color: "var(--paper-item-icon-color)"
 | 
			
		||||
      header-tab-indicator-color: "rgba(0, 0, 0, 0)"
 | 
			
		||||
      app-header-text-color: "var(--primary-text-color)"
 | 
			
		||||
      app-header-background-color: "var(--primary-background-color)"
 | 
			
		||||
      paper-tabs-selection-bar-color: "var(--primary-text-color)"
 | 
			
		||||
      footer-shadow: "0px -1px 3px 0px rgba(0,0,0,0.12)"
 | 
			
		||||
      # background and sidebar
 | 
			
		||||
      card-background-color: "#1D1D1D"
 | 
			
		||||
      primary-background-color: "#121212"
 | 
			
		||||
      secondary-background-color: "#121212"
 | 
			
		||||
      # text
 | 
			
		||||
      primary-text-color: "#DDDDDD"
 | 
			
		||||
      # floating button text color
 | 
			
		||||
      mdc-theme-on-secondary: "var(--card-background-color)"
 | 
			
		||||
      # Sidebar
 | 
			
		||||
      sidebar-selected-text-color: "rgb(var(--color-amber))"
 | 
			
		||||
      sidebar-selected-icon-color: "rgb(var(--color-amber))"
 | 
			
		||||
      # Slider
 | 
			
		||||
      slider-color: "rgb(var(--color-blue))"
 | 
			
		||||
      slider-bar-color: "rgba(var(--color-blue),0.38)"
 | 
			
		||||
      # card
 | 
			
		||||
      box-shadow: "none"
 | 
			
		||||
      # media player
 | 
			
		||||
      mini-media-player-accent-color: "var(--google-blue)"
 | 
			
		||||
      # Journal
 | 
			
		||||
      state-icon-color: "rgb(var(--color-theme))"
 | 
			
		||||
							
								
								
									
										206
									
								
								themes/minimalist-mobile-tapbar/minimalist-mobile-tapbar.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										206
									
								
								themes/minimalist-mobile-tapbar/minimalist-mobile-tapbar.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,206 @@
 | 
			
		||||
---
 | 
			
		||||
minimalist-mobile-tapbar:
 | 
			
		||||
  # Journal
 | 
			
		||||
  state-icon-color: "rgb(var(--color-theme))"
 | 
			
		||||
  border-radius: "20px"
 | 
			
		||||
  ha-card-border-radius: "var(--border-radius)"
 | 
			
		||||
  error-color: "var(--google-red)"
 | 
			
		||||
  warning-color: "var(--google-yellow)"
 | 
			
		||||
  success-color: "var(--google-green)"
 | 
			
		||||
  info-color: "var(--google-blue)"
 | 
			
		||||
  divider-color: "rgba(var(--color-theme),.12)"
 | 
			
		||||
  accent-color: "var(--google-yellow)"
 | 
			
		||||
  card-mod-theme: "minimalist-mobile-tapbar"
 | 
			
		||||
  header-height: "calc(var(--header-base-height) + env(safe-area-inset-bottom))"
 | 
			
		||||
  header-base-height: "70px"
 | 
			
		||||
  app-header-selection-bar-color: "transparent"
 | 
			
		||||
 | 
			
		||||
  card-mod-view-yaml: |
 | 
			
		||||
    "*:first-child$": |
 | 
			
		||||
      #columns .column > * {
 | 
			
		||||
        padding-left: 5px;
 | 
			
		||||
        padding-right: 5px;
 | 
			
		||||
        padding-bottom: 5px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
  # Move navbar
 | 
			
		||||
  card-mod-root-yaml: |
 | 
			
		||||
    ha-tabs$: |
 | 
			
		||||
      #tabsContent {
 | 
			
		||||
        width: 97%;
 | 
			
		||||
      }
 | 
			
		||||
    .: |
 | 
			
		||||
      @media (orientation: portrait) {
 | 
			
		||||
        a.menu-link[target="_blank"], ha-button-menu, ha-menu-button, [main-title] {
 | 
			
		||||
          display: none !important;
 | 
			
		||||
        }
 | 
			
		||||
        app-toolbar {
 | 
			
		||||
          padding-right: 0px;
 | 
			
		||||
          padding-left: 0px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      ha-app-layout{
 | 
			
		||||
        transform: initial;
 | 
			
		||||
        padding: 0 !important;
 | 
			
		||||
        margin: 0 !important;
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        height: 100% !important;
 | 
			
		||||
      }
 | 
			
		||||
      app-header {
 | 
			
		||||
        top: auto;
 | 
			
		||||
        bottom: 0;
 | 
			
		||||
        box-shadow: var(--footer-shadow);
 | 
			
		||||
        position: fixed;
 | 
			
		||||
        height: var(--header-height) !important;
 | 
			
		||||
      }
 | 
			
		||||
      app-toolbar {
 | 
			
		||||
        height: var(--header-base-height) !important;
 | 
			
		||||
        padding-bottom: env(safe-area-inset-bottom) !important;
 | 
			
		||||
      }
 | 
			
		||||
      #view {
 | 
			
		||||
        margin-top: calc(-1 * var(--header-height)) !important;
 | 
			
		||||
        padding-bottom: var(--header-height);
 | 
			
		||||
      }
 | 
			
		||||
      ha-tabs {
 | 
			
		||||
        --paper-tabs-selection-bar-color: var(--header-tab-indicator-color);
 | 
			
		||||
        --mdc-icon-size: 26px;
 | 
			
		||||
        display: flex;
 | 
			
		||||
        justify-content: space-between;
 | 
			
		||||
        padding: 0 10px;
 | 
			
		||||
        height:50px !important;
 | 
			
		||||
      }
 | 
			
		||||
      paper-tab[aria-selected=true] {
 | 
			
		||||
        color: var(--header-active-tab-color);
 | 
			
		||||
        background-color: var(--header-active-tab-bg-color);
 | 
			
		||||
      }
 | 
			
		||||
      paper-tab {
 | 
			
		||||
        color: var(--header-all-tabs-color);
 | 
			
		||||
        border-radius: 25px;
 | 
			
		||||
        height:50px;
 | 
			
		||||
        /*width: calc(100% / 4);
 | 
			
		||||
        padding: 0;*/
 | 
			
		||||
        padding-left: 20px;
 | 
			
		||||
        padding-right: 20px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
  # Color themes
 | 
			
		||||
  modes:
 | 
			
		||||
    light:
 | 
			
		||||
      # main interface colors
 | 
			
		||||
      primary-color: "#434343"
 | 
			
		||||
      google-red: "#F54436"
 | 
			
		||||
      google-green: "#01C852"
 | 
			
		||||
      google-yellow: "#FF9101"
 | 
			
		||||
      google-blue: "#3D5AFE"
 | 
			
		||||
      google-violet: "#661FFF"
 | 
			
		||||
      google-grey: "#BBBBBB"
 | 
			
		||||
      color-red: "245, 68, 54"
 | 
			
		||||
      color-green: "1, 200, 82"
 | 
			
		||||
      color-yellow: "255, 145, 1"
 | 
			
		||||
      color-blue: "61, 90, 254"
 | 
			
		||||
      color-purple: "102, 31, 255"
 | 
			
		||||
      color-grey: "187, 187, 187"
 | 
			
		||||
      color-pink: "233, 30, 99"
 | 
			
		||||
      color-theme: "51,51,51"
 | 
			
		||||
      color-background-yellow: "250, 250, 250"
 | 
			
		||||
      color-background-blue: "250, 250, 250"
 | 
			
		||||
      color-background-green: "250, 250, 250"
 | 
			
		||||
      color-background-red: "250, 250, 250"
 | 
			
		||||
      color-background-pink: "250, 250, 250"
 | 
			
		||||
      color-background-purple: "250, 250, 250"
 | 
			
		||||
      color-yellow-text: "var(--primary-text-color)"
 | 
			
		||||
      color-blue-text: "var(--primary-text-color)"
 | 
			
		||||
      color-green-text: "var(--primary-text-color)"
 | 
			
		||||
      color-red-text: "var(--primary-text-color)"
 | 
			
		||||
      color-pink-text: "var(--primary-text-color)"
 | 
			
		||||
      color-purple-text: "var(--primary-text-color)"
 | 
			
		||||
      opacity-bg: "1"
 | 
			
		||||
      # Header / Footer
 | 
			
		||||
      header-active-tab-color: "rgb(var(--color-blue))"
 | 
			
		||||
      header-active-tab-bg-color: "rgba(var(--color-blue), .3)"
 | 
			
		||||
      header-all-tabs-color: "var(--paper-item-icon-color)"
 | 
			
		||||
      header-tab-indicator-color: "rgba(0, 0, 0, 0)"
 | 
			
		||||
      app-header-text-color: "var(--primary-text-color)"
 | 
			
		||||
      app-header-background-color: "var( --ha-card-background, var(--card-background-color, white) )"
 | 
			
		||||
      paper-tabs-selection-bar-color: "var(--primary-text-color)"
 | 
			
		||||
      footer-shadow: "0px -1px 3px 0px rgba(0,0,0,0.12)"
 | 
			
		||||
      # background and sidebar
 | 
			
		||||
      card-background-color: "#FAFAFA"
 | 
			
		||||
      primary-background-color: "#EFEFEF"
 | 
			
		||||
      secondary-background-color: "#EFEFEF"
 | 
			
		||||
      # text
 | 
			
		||||
      primary-text-color: "#212121"
 | 
			
		||||
      # slider
 | 
			
		||||
      slider-color: "rgb(var(--color-blue))"
 | 
			
		||||
      slider-bar-color: "rgba(var(--color-blue),0.38)"
 | 
			
		||||
      # cards
 | 
			
		||||
      box-shadow: "0px 2px 4px 0px rgba(0,0,0,0.16)"
 | 
			
		||||
      ha-card-box-shadow: "var(--box-shadow)"
 | 
			
		||||
      # sidebar
 | 
			
		||||
      sidebar-selected-text-color: "rgb(var(--color-blue))"
 | 
			
		||||
      sidebar-selected-icon-color: "rgb(var(--color-blue))"
 | 
			
		||||
      sidebar-text-color: "#80868b"
 | 
			
		||||
      # switch
 | 
			
		||||
      switch-checked-color: "rgb(var(--color-blue))"
 | 
			
		||||
      # media player
 | 
			
		||||
      mini-media-player-accent-color: "rgb(var(--color-blue))"
 | 
			
		||||
    dark:
 | 
			
		||||
      # main interface colors
 | 
			
		||||
      primary-color: "#89B3F8"
 | 
			
		||||
      google-red: "#F18B82"
 | 
			
		||||
      google-green: "#80C994"
 | 
			
		||||
      google-yellow: "#FCD663"
 | 
			
		||||
      google-blue: "#89B3F8"
 | 
			
		||||
      google-violet: "#BB86FC"
 | 
			
		||||
      google-grey: "#BBBBBB"
 | 
			
		||||
      color-red: "241, 139, 130"
 | 
			
		||||
      color-green: "128, 201, 148"
 | 
			
		||||
      color-yellow: "252, 214, 99"
 | 
			
		||||
      color-blue: "137, 179, 248"
 | 
			
		||||
      color-theme: "221,221,221"
 | 
			
		||||
      color-purple: "102, 31, 255"
 | 
			
		||||
      color-grey: "187, 187, 187"
 | 
			
		||||
      color-pink: "233, 30, 99"
 | 
			
		||||
      color-amber: "255, 145, 1"
 | 
			
		||||
      color-background-yellow: "var(--color-yellow)"
 | 
			
		||||
      color-background-blue: "var(--color-blue)"
 | 
			
		||||
      color-background-green: "var(--color-green)"
 | 
			
		||||
      color-background-red: "var(--color-red)"
 | 
			
		||||
      color-background-pink: "var(--color-pink)"
 | 
			
		||||
      color-background-purple: "var(--color-purple)"
 | 
			
		||||
      color-yellow-text: "var(--color-yellow)"
 | 
			
		||||
      color-blue-text: "var(--color-blue)"
 | 
			
		||||
      color-green-text: "var(--color-green)"
 | 
			
		||||
      color-red-text: "var(--color-red)"
 | 
			
		||||
      color-pink-text: "var(--color-pink)"
 | 
			
		||||
      color-purple-text: "var(--color-purple)"
 | 
			
		||||
      opacity-bg: "0.1"
 | 
			
		||||
      # Header / Footer
 | 
			
		||||
      header-active-tab-color: "rgb(var(--color-amber))"
 | 
			
		||||
      header-active-tab-bg-color: "rgba(var(--color-amber), .3)"
 | 
			
		||||
      header-all-tabs-color: "var(--paper-item-icon-color)"
 | 
			
		||||
      header-tab-indicator-color: "rgba(0, 0, 0, 0)"
 | 
			
		||||
      app-header-text-color: "var(--primary-text-color)"
 | 
			
		||||
      app-header-background-color: "var( --ha-card-background, var(--card-background-color, rgb(29, 29, 29)) )"
 | 
			
		||||
      paper-tabs-selection-bar-color: "var(--primary-text-color)"
 | 
			
		||||
      footer-shadow: "0px -1px 3px 0px rgba(0,0,0,0.12)"
 | 
			
		||||
      # background and sidebar
 | 
			
		||||
      card-background-color: "#1D1D1D"
 | 
			
		||||
      primary-background-color: "#121212"
 | 
			
		||||
      secondary-background-color: "#121212"
 | 
			
		||||
      # text
 | 
			
		||||
      primary-text-color: "#DDDDDD"
 | 
			
		||||
      # floating button text color
 | 
			
		||||
      mdc-theme-on-secondary: "var(--card-background-color)"
 | 
			
		||||
      # Sidebar
 | 
			
		||||
      sidebar-selected-text-color: "rgb(var(--color-amber))"
 | 
			
		||||
      sidebar-selected-icon-color: "rgb(var(--color-amber))"
 | 
			
		||||
      # Slider
 | 
			
		||||
      slider-color: "rgb(var(--color-blue))"
 | 
			
		||||
      slider-bar-color: "rgba(var(--color-blue),0.38)"
 | 
			
		||||
      # card
 | 
			
		||||
      box-shadow: "none"
 | 
			
		||||
      # media player
 | 
			
		||||
      mini-media-player-accent-color: "var(--google-blue)"
 | 
			
		||||
      # Journal
 | 
			
		||||
      state-icon-color: "rgb(var(--color-theme))"
 | 
			
		||||
							
								
								
									
										133
									
								
								themes/minimalist-mobile/minimalist-mobile.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										133
									
								
								themes/minimalist-mobile/minimalist-mobile.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,133 @@
 | 
			
		||||
---
 | 
			
		||||
minimalist-mobile:
 | 
			
		||||
  # Journal
 | 
			
		||||
  state-icon-color: "rgb(var(--color-theme))"
 | 
			
		||||
  border-radius: "20px"
 | 
			
		||||
  ha-card-border-radius: "var(--border-radius)"
 | 
			
		||||
  error-color: "var(--google-red)"
 | 
			
		||||
  warning-color: "var(--google-yellow)"
 | 
			
		||||
  success-color: "var(--google-green)"
 | 
			
		||||
  info-color: "var(--google-blue)"
 | 
			
		||||
  divider-color: "rgba(var(--color-theme),.12)"
 | 
			
		||||
  accent-color: "var(--google-yellow)"
 | 
			
		||||
  card-mod-theme: "minimalist-mobile"
 | 
			
		||||
  card-mod-root: |
 | 
			
		||||
    app-toolbar {
 | 
			
		||||
      display: none;
 | 
			
		||||
    }
 | 
			
		||||
  card-mod-view-yaml: |
 | 
			
		||||
    "*:first-child$": |
 | 
			
		||||
      #columns .column > * {
 | 
			
		||||
        padding-left: 5px;
 | 
			
		||||
        padding-right: 5px;
 | 
			
		||||
        padding-bottom: 5px;
 | 
			
		||||
      }
 | 
			
		||||
  modes:
 | 
			
		||||
    light:
 | 
			
		||||
      # text
 | 
			
		||||
      primary-text-color: "#212121"
 | 
			
		||||
      # main interface colors
 | 
			
		||||
      primary-color: "#434343"
 | 
			
		||||
      google-red: "#F54436"
 | 
			
		||||
      google-green: "#01C852"
 | 
			
		||||
      google-yellow: "#FF9101"
 | 
			
		||||
      google-blue: "#3D5AFE"
 | 
			
		||||
      google-violet: "#661FFF"
 | 
			
		||||
      google-grey: "#BBBBBB"
 | 
			
		||||
      color-red: "245, 68, 54"
 | 
			
		||||
      color-green: "1, 200, 82"
 | 
			
		||||
      color-yellow: "255, 145, 1"
 | 
			
		||||
      color-blue: "61, 90, 254"
 | 
			
		||||
      color-purple: "102, 31, 255"
 | 
			
		||||
      color-grey: "187, 187, 187"
 | 
			
		||||
      color-pink: "233, 30, 99"
 | 
			
		||||
      color-theme: "51,51,51"
 | 
			
		||||
      color-background-yellow: "250, 250, 250"
 | 
			
		||||
      color-background-blue: "250, 250, 250"
 | 
			
		||||
      color-background-green: "250, 250, 250"
 | 
			
		||||
      color-background-red: "250, 250, 250"
 | 
			
		||||
      color-background-pink: "250, 250, 250"
 | 
			
		||||
      color-background-purple: "250, 250, 250"
 | 
			
		||||
      color-yellow-text: "var(--primary-text-color)"
 | 
			
		||||
      color-blue-text: "var(--primary-text-color)"
 | 
			
		||||
      color-green-text: "var(--primary-text-color)"
 | 
			
		||||
      color-red-text: "var(--primary-text-color)"
 | 
			
		||||
      color-pink-text: "var(--primary-text-color)"
 | 
			
		||||
      color-purple-text: "var(--primary-text-color)"
 | 
			
		||||
      opacity-bg: "1"
 | 
			
		||||
      # background and sidebar
 | 
			
		||||
      card-background-color: "#FAFAFA"
 | 
			
		||||
      primary-background-color: "#EFEFEF"
 | 
			
		||||
      secondary-background-color: "#EFEFEF"
 | 
			
		||||
      # header
 | 
			
		||||
      app-header-text-color: "var(--primary-text-color)"
 | 
			
		||||
      app-header-background-color: "var(--primary-background-color)"
 | 
			
		||||
      # paper-tabs-selection-bar-color: "var(--primary-text-color)"
 | 
			
		||||
      # slider
 | 
			
		||||
      slider-color: "rgb(var(--color-blue))"
 | 
			
		||||
      slider-bar-color: "rgba(var(--color-blue),0.38)"
 | 
			
		||||
      # cards
 | 
			
		||||
      box-shadow: "0px 2px 4px 0px rgba(0,0,0,0.16)"
 | 
			
		||||
      ha-card-box-shadow: "var(--box-shadow)"
 | 
			
		||||
      # sidebar
 | 
			
		||||
      sidebar-selected-text-color: "var(--google-red)"
 | 
			
		||||
      sidebar-selected-icon-color: "var(--google-red)"
 | 
			
		||||
      sidebar-text-color: "#80868b"
 | 
			
		||||
      # switch
 | 
			
		||||
      switch-checked-color: "var(--google-blue)"
 | 
			
		||||
      # media player
 | 
			
		||||
      mini-media-player-accent-color: "var(--google-blue)"
 | 
			
		||||
    dark:
 | 
			
		||||
      # text
 | 
			
		||||
      primary-text-color: "#DDDDDD"
 | 
			
		||||
      # main interface colors
 | 
			
		||||
      primary-color: "#89B3F8"
 | 
			
		||||
      google-red: "#F18B82"
 | 
			
		||||
      google-green: "#80C994"
 | 
			
		||||
      google-yellow: "#FCD663"
 | 
			
		||||
      google-blue: "#89B3F8"
 | 
			
		||||
      google-violet: "#BB86FC"
 | 
			
		||||
      google-grey: "#BBBBBB"
 | 
			
		||||
      color-red: "241, 139, 130"
 | 
			
		||||
      color-green: "128, 201, 148"
 | 
			
		||||
      color-yellow: "252, 214, 99"
 | 
			
		||||
      color-blue: "137, 179, 248"
 | 
			
		||||
      color-theme: "221,221,221"
 | 
			
		||||
      color-purple: "102, 31, 255"
 | 
			
		||||
      color-grey: "187, 187, 187"
 | 
			
		||||
      color-pink: "233, 30, 99"
 | 
			
		||||
      color-background-yellow: "var(--color-yellow)"
 | 
			
		||||
      color-background-blue: "var(--color-blue)"
 | 
			
		||||
      color-background-green: "var(--color-green)"
 | 
			
		||||
      color-background-red: "var(--color-red)"
 | 
			
		||||
      color-background-pink: "var(--color-pink)"
 | 
			
		||||
      color-background-purple: "var(--color-purple)"
 | 
			
		||||
      color-yellow-text: "var(--color-yellow)"
 | 
			
		||||
      color-blue-text: "var(--color-blue)"
 | 
			
		||||
      color-green-text: "var(--color-green)"
 | 
			
		||||
      color-red-text: "var(--color-red)"
 | 
			
		||||
      color-pink-text: "var(--color-pink)"
 | 
			
		||||
      color-purple-text: "var(--color-purple)"
 | 
			
		||||
      opacity-bg: "0.1"
 | 
			
		||||
      # floating button text color
 | 
			
		||||
      mdc-theme-on-secondary: "var(--card-background-color)"
 | 
			
		||||
      # background and sidebar
 | 
			
		||||
      card-background-color: "#1D1D1D"
 | 
			
		||||
      primary-background-color: "#121212"
 | 
			
		||||
      secondary-background-color: "#121212"
 | 
			
		||||
      # header
 | 
			
		||||
      app-header-text-color: "var(--primary-text-color)"
 | 
			
		||||
      app-header-background-color: "var(--primary-background-color)"
 | 
			
		||||
      paper-tabs-selection-bar-color: "var(--primary-text-color)"
 | 
			
		||||
      # Sidebar
 | 
			
		||||
      sidebar-selected-text-color: "rgb(var(--color-blue))"
 | 
			
		||||
      sidebar-selected-icon-color: "rgb(var(--color-blue))"
 | 
			
		||||
      # Slider
 | 
			
		||||
      slider-color: "rgb(var(--color-blue))"
 | 
			
		||||
      slider-bar-color: "rgba(var(--color-blue),0.38)"
 | 
			
		||||
      # card
 | 
			
		||||
      box-shadow: "none"
 | 
			
		||||
      # media player
 | 
			
		||||
      mini-media-player-accent-color: "var(--google-blue)"
 | 
			
		||||
      # Journal
 | 
			
		||||
      state-icon-color: "rgb(var(--color-theme))"
 | 
			
		||||
							
								
								
									
										172
									
								
								ui-lovelace.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										172
									
								
								ui-lovelace.yaml
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -4,65 +4,147 @@ button_card_templates: !include_dir_merge_named "custom_components/ui_lovelace_m
 | 
			
		||||
 | 
			
		||||
title: "Overview"
 | 
			
		||||
theme: "minimalist-desktop"
 | 
			
		||||
background: "var(--background-image)"
 | 
			
		||||
background: "var(--background-image)"             
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
swipe_nav:
 | 
			
		||||
  wrap: true
 | 
			
		||||
  animate: swipe
 | 
			
		||||
  prevent_default: true
 | 
			
		||||
  swipe_amount: 30
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
views:
 | 
			
		||||
  - type: "custom:grid-layout"
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  # Dashboard
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  - type: custom:vertical-layout
 | 
			
		||||
    title: "Overview"
 | 
			
		||||
    path: 0
 | 
			
		||||
    layout:
 | 
			
		||||
      grid-template-columns: "1fr 1fr 1fr"
 | 
			
		||||
      grid-template-rows: "min-content"
 | 
			
		||||
      grid-template-areas: |
 | 
			
		||||
        "main popup"
 | 
			
		||||
      mediaquery:
 | 
			
		||||
        "(max-width: 1100px), (orientation: portrait)":
 | 
			
		||||
          grid-template-columns: "100%"
 | 
			
		||||
          grid-template-areas: "main"
 | 
			
		||||
    cards:
 | 
			
		||||
 | 
			
		||||
      - type: "vertical-stack"
 | 
			
		||||
      ## Column 1
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/welcome.yaml
 | 
			
		||||
 | 
			
		||||
      - type: "vertical-stack"
 | 
			
		||||
          !include lovelace/overview/welcome.yaml
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/lights.yaml
 | 
			
		||||
 | 
			
		||||
      - type: "vertical-stack"
 | 
			
		||||
          !include lovelace/overview/lights.yaml
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/climate.yaml
 | 
			
		||||
 | 
			
		||||
      - type: "vertical-stack"
 | 
			
		||||
          !include lovelace/overview/feed.yaml
 | 
			
		||||
      - type: custom:layout-break
 | 
			
		||||
      ## Column 2
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/batteries.yaml
 | 
			
		||||
      
 | 
			
		||||
      - type: "vertical-stack"
 | 
			
		||||
          !include lovelace/overview/climate.yaml
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/energy.yaml
 | 
			
		||||
 | 
			
		||||
      - type: "vertical-stack"
 | 
			
		||||
          !include lovelace/overview/batteries.yaml
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/nas.yaml
 | 
			
		||||
 | 
			
		||||
      - type: "vertical-stack"
 | 
			
		||||
          !include lovelace/overview/nas.yaml
 | 
			
		||||
      - type: custom:layout-break
 | 
			
		||||
      ## Column 3
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/popup.yaml
 | 
			
		||||
          !include lovelace/overview/energy.yaml
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/overview/multimedia.yaml
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/overview/vacuum.yaml
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  - type: "custom:grid-layout"
 | 
			
		||||
    title: "Testing"
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  # Lights
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  - type: custom:vertical-layout
 | 
			
		||||
    title: "Lights"
 | 
			
		||||
    path: 1
 | 
			
		||||
    layout:
 | 
			
		||||
      grid-template-columns: "1fr 1fr 1fr"
 | 
			
		||||
      grid-template-rows: "min-content"
 | 
			
		||||
      grid-template-areas: |
 | 
			
		||||
        "main popup"
 | 
			
		||||
      mediaquery:
 | 
			
		||||
        "(max-width: 1100px), (orientation: portrait)":
 | 
			
		||||
          grid-template-columns: "100%"
 | 
			
		||||
          grid-template-areas: "main"
 | 
			
		||||
    cards:
 | 
			
		||||
      ## Column 1
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/lights/scenes.yaml
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/lights/adaptive.yaml
 | 
			
		||||
      - type: custom:layout-break
 | 
			
		||||
      ## Column 2
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/lights/lightgroups.yaml
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/lights/lightbulbs.yaml
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/lights/lightstripes.yaml
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/lights/lightmenu.yaml
 | 
			
		||||
 | 
			
		||||
      !include lovelace/testing.yaml
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  # pfSense
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  - type: custom:vertical-layout
 | 
			
		||||
    title: "pfSense"
 | 
			
		||||
    path: 2
 | 
			
		||||
    cards:
 | 
			
		||||
      ## Column 1
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/pfsense/notifications.yaml
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/pfsense/load.yaml
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/pfsense/gateways.yaml
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/pfsense/rules.yaml
 | 
			
		||||
      - type: custom:layout-break
 | 
			
		||||
      ## Column 2
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/pfsense/traffic.yaml
 | 
			
		||||
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  # Climate
 | 
			
		||||
  #----------------------------------------------------------------------------------#
 | 
			
		||||
  - type: custom:vertical-layout
 | 
			
		||||
    title: "Climate"
 | 
			
		||||
    path: 3
 | 
			
		||||
    cards:
 | 
			
		||||
      ## Column 1
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/climate/setup.yaml
 | 
			
		||||
      - type: custom:layout-break
 | 
			
		||||
      ## Column 2
 | 
			
		||||
      - type: custom:vertical-layout
 | 
			
		||||
        type: "vertical-stack"
 | 
			
		||||
        cards:
 | 
			
		||||
          !include lovelace/climate/recommendation.yaml
 | 
			
		||||
							
								
								
									
										12
									
								
								ui_lovelace_minimalist/custom_actions/custom_actions.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								ui_lovelace_minimalist/custom_actions/custom_actions.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
---
 | 
			
		||||
ulm_custom_actions:
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_tap_action: "toggle"
 | 
			
		||||
    ulm_card_hold_action: "popup"
 | 
			
		||||
    ulm_card_double_tap_action: "adaptive"
 | 
			
		||||
    ulm_icon_tap_action: "toggle"
 | 
			
		||||
    ulm_icon_hold_action: "popup"
 | 
			
		||||
    ulm_icon_double_tap_action: "adaptive"
 | 
			
		||||
    ulm_name_tap_action: "toggle"
 | 
			
		||||
    ulm_name_hold_action: "popup"
 | 
			
		||||
    ulm_name_double_tap_action: "adaptive"
 | 
			
		||||
							
								
								
									
										39
									
								
								ui_lovelace_minimalist/custom_cards/custom_card_httpedo13.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										39
									
								
								ui_lovelace_minimalist/custom_cards/custom_card_httpedo13.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
---
 | 
			
		||||
custom_card_httpedo13_sun:
 | 
			
		||||
  show_icon: false
 | 
			
		||||
  show_name: false
 | 
			
		||||
  show_label: false
 | 
			
		||||
  variables:
 | 
			
		||||
    darkMode: "[[[ return hass.themes.darkMode; ]]]"
 | 
			
		||||
    language: "[[[ return hass.language; ]]]"
 | 
			
		||||
    showAzimuth: false
 | 
			
		||||
    showElevation: false
 | 
			
		||||
    timeFormat: "24h"
 | 
			
		||||
    title:
 | 
			
		||||
  tap-action:
 | 
			
		||||
    action: "none"
 | 
			
		||||
  styles:
 | 
			
		||||
    grid:
 | 
			
		||||
      - grid-template-areas: "'item1'"
 | 
			
		||||
      - grid-template-columns: "1fr"
 | 
			
		||||
      - grid-template-rows: "min-content"
 | 
			
		||||
    card:
 | 
			
		||||
      - border-radius: "var(--border-radius)"
 | 
			
		||||
      - box-shadow: "var(--box-shadow)"
 | 
			
		||||
      - padding: "12px"
 | 
			
		||||
  custom_fields:
 | 
			
		||||
    item1:
 | 
			
		||||
      card:
 | 
			
		||||
        type: "custom:sun-card"
 | 
			
		||||
        darkMode: "[[[ return variables.darkMode; ]]]"
 | 
			
		||||
        language: "[[[ return variables.language; ]]]"
 | 
			
		||||
        showAzimuth: "[[[ return variables.showAzimuth; ]]]"
 | 
			
		||||
        showElevation: "[[[ return variables.showElevation; ]]]"
 | 
			
		||||
        timeFormat: "[[[ return variables.timeFormat; ]]]"
 | 
			
		||||
        title: "[[[ return variables.title; ]]]"
 | 
			
		||||
        card_mod:
 | 
			
		||||
        style: |
 | 
			
		||||
          ha-card.type-custom-sun-card {
 | 
			
		||||
            border-radius: 14px;
 | 
			
		||||
            box-shadow: none;
 | 
			
		||||
          }
 | 
			
		||||
							
								
								
									
										172
									
								
								ui_lovelace_minimalist/custom_cards/custom_card_input_datetime.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										172
									
								
								ui_lovelace_minimalist/custom_cards/custom_card_input_datetime.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,172 @@
 | 
			
		||||
---
 | 
			
		||||
card_input_datetime:
 | 
			
		||||
  show_name: false
 | 
			
		||||
  show_icon: false
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_input_datetime_name: "n/a"
 | 
			
		||||
  triggers_update: "all"
 | 
			
		||||
  styles:
 | 
			
		||||
    grid:
 | 
			
		||||
      - grid-template-areas: "'item1' 'item2'"
 | 
			
		||||
      - grid-template-columns: "1fr"
 | 
			
		||||
      - grid-template-rows: "min-content  min-content"
 | 
			
		||||
      - row-gap: "12px"
 | 
			
		||||
    card:
 | 
			
		||||
      - border-radius: "var(--border-radius)"
 | 
			
		||||
      - box-shadow: "var(--box-shadow)"
 | 
			
		||||
      - padding: "12px"
 | 
			
		||||
  custom_fields:
 | 
			
		||||
    item1:
 | 
			
		||||
      card:
 | 
			
		||||
        type: "custom:button-card"
 | 
			
		||||
        template:
 | 
			
		||||
          - "icon_info"
 | 
			
		||||
          - "ulm_translation_engine"
 | 
			
		||||
          - "input_datetime"
 | 
			
		||||
        tap_action:
 | 
			
		||||
          action: "more-info"
 | 
			
		||||
        entity: "[[[ return entity.entity_id ]]]"
 | 
			
		||||
        name: "[[[ return variables.ulm_card_input_datetime_name ]]]"
 | 
			
		||||
    item2:
 | 
			
		||||
      card:
 | 
			
		||||
        type: "custom:button-card"
 | 
			
		||||
        template: "list_3_items"
 | 
			
		||||
        custom_fields:
 | 
			
		||||
          item1:
 | 
			
		||||
            card:
 | 
			
		||||
              type: "custom:button-card"
 | 
			
		||||
              template: "widget_icon"
 | 
			
		||||
              tap_action:
 | 
			
		||||
                action: "call-service"
 | 
			
		||||
                service: "input_datetime.set_datetime"
 | 
			
		||||
                service_data:
 | 
			
		||||
                  entity_id: "[[[ return entity.entity_id ]]]"
 | 
			
		||||
                  time: >
 | 
			
		||||
                    [[[
 | 
			
		||||
                      var timestamp = entity.attributes.timestamp
 | 
			
		||||
 | 
			
		||||
                      let unix_timestamp = timestamp - 4500;
 | 
			
		||||
                      // Create a new JavaScript Date object based on the timestamp
 | 
			
		||||
                      // multiplied by 1000 so that the argument is in milliseconds, not seconds.
 | 
			
		||||
                      var date = new Date(unix_timestamp * 1000);
 | 
			
		||||
                      // Hours part from the timestamp
 | 
			
		||||
                      var hours = date.getHours();
 | 
			
		||||
                      // Minutes part from the timestamp
 | 
			
		||||
                      var minutes = "0" + date.getMinutes();
 | 
			
		||||
                      // Seconds part from the timestamp
 | 
			
		||||
                      var seconds = "0" + date.getSeconds();
 | 
			
		||||
 | 
			
		||||
                      // Will display time in 10:30:23 format
 | 
			
		||||
                      var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
 | 
			
		||||
 | 
			
		||||
                      return formattedTime;
 | 
			
		||||
                    ]]]
 | 
			
		||||
              icon: "mdi:arrow-down"
 | 
			
		||||
          item2:
 | 
			
		||||
            card:
 | 
			
		||||
              type: "custom:button-card"
 | 
			
		||||
              template: "widget_text"
 | 
			
		||||
              entity: "[[[ return entity.entity_id ]]]"
 | 
			
		||||
              tap_action:
 | 
			
		||||
                action: "call-service"
 | 
			
		||||
                service: "input_datetime.set_datetime"
 | 
			
		||||
                service_data:
 | 
			
		||||
                  entity_id: "[[[ return entity.entity_id ]]]"
 | 
			
		||||
                  time: >
 | 
			
		||||
                    [[[
 | 
			
		||||
                      var timestamp = entity.attributes.timestamp
 | 
			
		||||
 | 
			
		||||
                      let unix_timestamp = timestamp - 3540;
 | 
			
		||||
                      // Create a new JavaScript Date object based on the timestamp
 | 
			
		||||
                      // multiplied by 1000 so that the argument is in milliseconds, not seconds.
 | 
			
		||||
                      var date = new Date(unix_timestamp * 1000);
 | 
			
		||||
                      // Hours part from the timestamp
 | 
			
		||||
                      var hours = date.getHours();
 | 
			
		||||
                      // Minutes part from the timestamp
 | 
			
		||||
                      var minutes = "0" + date.getMinutes();
 | 
			
		||||
                      // Seconds part from the timestamp
 | 
			
		||||
                      var seconds = "0" + date.getSeconds();
 | 
			
		||||
 | 
			
		||||
                      // Will display time in 10:30:23 format
 | 
			
		||||
                      var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
 | 
			
		||||
 | 
			
		||||
                      return formattedTime;
 | 
			
		||||
                    ]]]
 | 
			
		||||
              hold_action:
 | 
			
		||||
                action: "call-service"
 | 
			
		||||
                service: "input_datetime.set_datetime"
 | 
			
		||||
                service_data:
 | 
			
		||||
                  entity_id: "[[[ return entity.entity_id ]]]"
 | 
			
		||||
                  time: >
 | 
			
		||||
                    [[[
 | 
			
		||||
                      var timestamp = entity.attributes.timestamp
 | 
			
		||||
 | 
			
		||||
                      let unix_timestamp = timestamp - 3660;
 | 
			
		||||
                      // Create a new JavaScript Date object based on the timestamp
 | 
			
		||||
                      // multiplied by 1000 so that the argument is in milliseconds, not seconds.
 | 
			
		||||
                      var date = new Date(unix_timestamp * 1000);
 | 
			
		||||
                      // Hours part from the timestamp
 | 
			
		||||
                      var hours = date.getHours();
 | 
			
		||||
                      // Minutes part from the timestamp
 | 
			
		||||
                      var minutes = "0" + date.getMinutes();
 | 
			
		||||
                      // Seconds part from the timestamp
 | 
			
		||||
                      var seconds = "0" + date.getSeconds();
 | 
			
		||||
 | 
			
		||||
                      // Will display time in 10:30:23 format
 | 
			
		||||
                      var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
 | 
			
		||||
 | 
			
		||||
                      return formattedTime;
 | 
			
		||||
                    ]]]
 | 
			
		||||
 | 
			
		||||
          item3:
 | 
			
		||||
            card:
 | 
			
		||||
              type: "custom:button-card"
 | 
			
		||||
              template: "widget_icon"
 | 
			
		||||
              tap_action:
 | 
			
		||||
                action: "call-service"
 | 
			
		||||
                service: "input_datetime.set_datetime"
 | 
			
		||||
                service_data:
 | 
			
		||||
                  entity_id: "[[[ return entity.entity_id ]]]"
 | 
			
		||||
                  time: >
 | 
			
		||||
                    [[[
 | 
			
		||||
                      var timestamp = entity.attributes.timestamp
 | 
			
		||||
 | 
			
		||||
                      let unix_timestamp = timestamp - 2700;
 | 
			
		||||
                      var date = new Date(unix_timestamp * 1000);
 | 
			
		||||
                      var hours = date.getHours();
 | 
			
		||||
                      var minutes = "0" + date.getMinutes();
 | 
			
		||||
                      var seconds = "0" + date.getSeconds();
 | 
			
		||||
                      var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
 | 
			
		||||
 | 
			
		||||
                      return formattedTime;
 | 
			
		||||
                    ]]]
 | 
			
		||||
              icon: "mdi:arrow-up"
 | 
			
		||||
 | 
			
		||||
input_datetime:
 | 
			
		||||
  tap_action:
 | 
			
		||||
    action: "more-info"
 | 
			
		||||
  show_last_changed: true
 | 
			
		||||
 | 
			
		||||
widget_text:
 | 
			
		||||
  tap_action:
 | 
			
		||||
    action: "toggle"
 | 
			
		||||
  template:
 | 
			
		||||
    - "ulm_translation_engine"
 | 
			
		||||
  show_icon: false
 | 
			
		||||
  show_label: true
 | 
			
		||||
  show_name: false
 | 
			
		||||
  label: "[[[ return variables.ulm_translation_state_unit ]]]"
 | 
			
		||||
  styles:
 | 
			
		||||
    grid:
 | 
			
		||||
      - grid-template-areas: "'l'"
 | 
			
		||||
    card:
 | 
			
		||||
      - box-shadow: "none"
 | 
			
		||||
      - padding: "0px"
 | 
			
		||||
      - background-color: "rgba(var(--color-theme),0.05)"
 | 
			
		||||
      - border-radius: "14px"
 | 
			
		||||
      - place-self: "center"
 | 
			
		||||
      - height: "42px"
 | 
			
		||||
    state:
 | 
			
		||||
      - color: "rgba(var(--color-theme),0.9)"
 | 
			
		||||
  size: "20px"
 | 
			
		||||
  color: "var(--google-grey)"
 | 
			
		||||
							
								
								
									
										107
									
								
								ui_lovelace_minimalist/custom_cards/custom_card_input_number.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										107
									
								
								ui_lovelace_minimalist/custom_cards/custom_card_input_number.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,107 @@
 | 
			
		||||
---
 | 
			
		||||
card_input_number:
 | 
			
		||||
  variables:
 | 
			
		||||
    ulm_card_input_number_name: "[[[ return entity.attributes.friendly_name ]]]"
 | 
			
		||||
  triggers_update: "all"
 | 
			
		||||
  show_icon: false
 | 
			
		||||
  show_label: false
 | 
			
		||||
  show_name: false
 | 
			
		||||
  styles:
 | 
			
		||||
    grid:
 | 
			
		||||
      - grid-template-areas: "'item1' 'item2'"
 | 
			
		||||
      - grid-template-columns: "1fr"
 | 
			
		||||
      - grid-template-rows: "min-content  min-content"
 | 
			
		||||
      - row-gap: "12px"
 | 
			
		||||
    card:
 | 
			
		||||
      - border-radius: "var(--border-radius)"
 | 
			
		||||
      - box-shadow: "var(--box-shadow)"
 | 
			
		||||
      - padding: "12px"
 | 
			
		||||
  custom_fields:
 | 
			
		||||
    item1:
 | 
			
		||||
      card:
 | 
			
		||||
        type: "custom:button-card"
 | 
			
		||||
        template:
 | 
			
		||||
          - "icon_info"
 | 
			
		||||
          - "ulm_translation_engine"
 | 
			
		||||
          - "input_number"
 | 
			
		||||
        tap_action:
 | 
			
		||||
          action: "more-info"
 | 
			
		||||
        entity: "[[[ return entity.entity_id ]]]"
 | 
			
		||||
        name: "[[[ return variables.ulm_card_input_number_name ]]]"
 | 
			
		||||
    item2:
 | 
			
		||||
      card:
 | 
			
		||||
        type: "custom:button-card"
 | 
			
		||||
        template: "list_3_items"
 | 
			
		||||
        custom_fields:
 | 
			
		||||
          item1:
 | 
			
		||||
            card:
 | 
			
		||||
              type: "custom:button-card"
 | 
			
		||||
              template: "widget_icon"
 | 
			
		||||
              tap_action:
 | 
			
		||||
                action: "call-service"
 | 
			
		||||
                service: |
 | 
			
		||||
                      [[[
 | 
			
		||||
                        if( entity.entity_id.startsWith("input_number.") )
 | 
			
		||||
                          return "input_number.decrement";
 | 
			
		||||
                        if( entity.entity_id.startsWith("counter.") )
 | 
			
		||||
                          return "counter.decrement";
 | 
			
		||||
                        return "";
 | 
			
		||||
                      ]]]
 | 
			
		||||
                service_data:
 | 
			
		||||
                  entity_id: "[[[ return entity.entity_id ]]]"
 | 
			
		||||
              icon: "mdi:arrow-down"
 | 
			
		||||
          item2:
 | 
			
		||||
            card:
 | 
			
		||||
              type: "custom:button-card"
 | 
			
		||||
              template: "widget_text"
 | 
			
		||||
              entity: "[[[ return entity.entity_id ]]]"
 | 
			
		||||
              tap_action:
 | 
			
		||||
                action: "call-service"
 | 
			
		||||
                service: "cover.stop_cover"
 | 
			
		||||
                service_data:
 | 
			
		||||
                  entity_id: "[[[ return entity.entity_id ]]]"
 | 
			
		||||
          item3:
 | 
			
		||||
            card:
 | 
			
		||||
              type: "custom:button-card"
 | 
			
		||||
              template: "widget_icon"
 | 
			
		||||
              tap_action:
 | 
			
		||||
                action: "call-service"
 | 
			
		||||
                service: |
 | 
			
		||||
                      [[[
 | 
			
		||||
                        if( entity.entity_id.startsWith("input_number.") )
 | 
			
		||||
                          return "input_number.increment";
 | 
			
		||||
                        if( entity.entity_id.startsWith("counter.") )
 | 
			
		||||
                          return "counter.increment";
 | 
			
		||||
                        return "";
 | 
			
		||||
                      ]]]
 | 
			
		||||
                service_data:
 | 
			
		||||
                  entity_id: "[[[ return entity.entity_id ]]]"
 | 
			
		||||
              icon: "mdi:arrow-up"
 | 
			
		||||
 | 
			
		||||
input_number:
 | 
			
		||||
  tap_action:
 | 
			
		||||
    action: "more-info"
 | 
			
		||||
  show_last_changed: true
 | 
			
		||||
 | 
			
		||||
widget_text:
 | 
			
		||||
  tap_action:
 | 
			
		||||
    action: "toggle"
 | 
			
		||||
  template:
 | 
			
		||||
    - "ulm_translation_engine"
 | 
			
		||||
  show_icon: false
 | 
			
		||||
  show_label: true
 | 
			
		||||
  show_name: false
 | 
			
		||||
  label: "[[[ return variables.ulm_translation_state_unit ]]]"
 | 
			
		||||
  styles:
 | 
			
		||||
    grid:
 | 
			
		||||
      - grid-template-areas: "'l'"
 | 
			
		||||
    card:
 | 
			
		||||
      - box-shadow: "none"
 | 
			
		||||
      - padding: "0px"
 | 
			
		||||
      - border-radius: "14px"
 | 
			
		||||
      - place-self: "center"
 | 
			
		||||
      - height: "42px"
 | 
			
		||||
    state:
 | 
			
		||||
      - color: "rgba(var(--color-theme),0.9)"
 | 
			
		||||
  size: "20px"
 | 
			
		||||
  color: "var(--google-grey)"
 | 
			
		||||
							
								
								
									
										243
									
								
								ui_lovelace_minimalist/custom_cards/custom_card_scenes.yaml
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										243
									
								
								ui_lovelace_minimalist/custom_cards/custom_card_scenes.yaml
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,243 @@
 | 
			
		||||
---
 | 
			
		||||
card_scenes:
 | 
			
		||||
  show_icon: false
 | 
			
		||||
  show_name: false
 | 
			
		||||
  show_label: false
 | 
			
		||||
  variables:
 | 
			
		||||
    entity_1:
 | 
			
		||||
      entity_id:
 | 
			
		||||
      icon: "mdi:help-circle-outline"
 | 
			
		||||
      icon_color: "gray"
 | 
			
		||||
      name: "n/a"
 | 
			
		||||
      bg_color: "gray"
 | 
			
		||||
    entity_2:
 | 
			
		||||
      entity_id:
 | 
			
		||||
      icon: "mdi:help-circle-outline"
 | 
			
		||||
      icon_color: "gray"
 | 
			
		||||
      name: "n/a"
 | 
			
		||||
      bg_color: "gray"
 | 
			
		||||
    entity_3:
 | 
			
		||||
      entity_id:
 | 
			
		||||
      icon: "mdi:help-circle-outline"
 | 
			
		||||
      icon_color: "gray"
 | 
			
		||||
      name: "n/a"
 | 
			
		||||
      bg_color: "gray"
 | 
			
		||||
    entity_4:
 | 
			
		||||
      entity_id:
 | 
			
		||||
      icon: "mdi:help-circle-outline"
 | 
			
		||||
      icon_color: "gray"
 | 
			
		||||
      name: "n/a"
 | 
			
		||||
      bg_color: "gray"
 | 
			
		||||
    entity_5:
 | 
			
		||||
      entity_id:
 | 
			
		||||
      icon: "mdi:help-circle-outline"
 | 
			
		||||
      icon_color: "gray"
 | 
			
		||||
      name: "n/a"
 | 
			
		||||
      bg_color: "gray"
 | 
			
		||||
  styles:
 | 
			
		||||
    grid:
 | 
			
		||||
      - grid-template-areas: "'item1 item2 item3 item4 item5'"
 | 
			
		||||
      - grid-template-columns: "1fr 1fr 1fr 1fr 1fr"
 | 
			
		||||
      - grid-template-rows: "min-content"
 | 
			
		||||
      - justify-items: "center"
 | 
			
		||||
      - column-gap: "auto"
 | 
			
		||||
    card:
 | 
			
		||||
      - border-radius: "var(--border-radius)"
 | 
			
		||||
      - box-shadow: "var(--box-shadow)"
 | 
			
		||||
      - padding: "12px"
 | 
			
		||||
  custom_fields:
 | 
			
		||||
    item1:
 | 
			
		||||
      card:
 | 
			
		||||
        type: "custom:button-card"
 | 
			
		||||
        template: "card_scenes_pill"
 | 
			
		||||
        entity: "[[[ return variables.entity_1.entity_id ]]]"
 | 
			
		||||
        icon: "[[[ return variables.entity_1.icon ]]]"
 | 
			
		||||
        name: "[[[ return variables.entity_1.name ]]]"
 | 
			
		||||
        variables:
 | 
			
		||||
          color_icon: "[[[ return variables.entity_1.icon_color ]]]"
 | 
			
		||||
          color_bg: "[[[ return variables.entity_1.bg_color ]]]"
 | 
			
		||||
        tap_action:
 | 
			
		||||
          action: "call-service"
 | 
			
		||||
          service: |
 | 
			
		||||
            [[[
 | 
			
		||||
              let domain = variables.entity_1.entity_id.substr(0, variables.entity_1.entity_id.indexOf("."));
 | 
			
		||||
              if (domain == "automation") {
 | 
			
		||||
                return "automation.trigger"
 | 
			
		||||
              } else {
 | 
			
		||||
                return "homeassistant.turn_on"
 | 
			
		||||
              }
 | 
			
		||||
            ]]]
 | 
			
		||||
          service_data:
 | 
			
		||||
            entity_id: "[[[ return variables.entity_1.entity_id ]]]"
 | 
			
		||||
    item2:
 | 
			
		||||
      card:
 | 
			
		||||
        type: "custom:button-card"
 | 
			
		||||
        template: "card_scenes_pill"
 | 
			
		||||
        entity: "[[[ return variables.entity_2.entity_id ]]]"
 | 
			
		||||
        icon: "[[[ return variables.entity_2.icon ]]]"
 | 
			
		||||
        name: "[[[ return variables.entity_2.name ]]]"
 | 
			
		||||
        variables:
 | 
			
		||||
          color_icon: "[[[ return variables.entity_2.icon_color ]]]"
 | 
			
		||||
          color_bg: "[[[ return variables.entity_2.bg_color ]]]"
 | 
			
		||||
        tap_action:
 | 
			
		||||
          action: "call-service"
 | 
			
		||||
          service: |
 | 
			
		||||
            [[[
 | 
			
		||||
              let domain = variables.entity_2.entity_id.substr(0, variables.entity_2.entity_id.indexOf("."));
 | 
			
		||||
              if (domain == "automation") {
 | 
			
		||||
                return "automation.trigger"
 | 
			
		||||
              } else {
 | 
			
		||||
                return "homeassistant.turn_on"
 | 
			
		||||
              }
 | 
			
		||||
            ]]]
 | 
			
		||||
          service_data:
 | 
			
		||||
            entity_id: "[[[ return variables.entity_2.entity_id ]]]"
 | 
			
		||||
    item3:
 | 
			
		||||
      card:
 | 
			
		||||
        type: "custom:button-card"
 | 
			
		||||
        template: "card_scenes_pill"
 | 
			
		||||
        entity: "[[[ return variables.entity_3.entity_id ]]]"
 | 
			
		||||
        icon: "[[[ return variables.entity_3.icon ]]]"
 | 
			
		||||
        name: "[[[ return variables.entity_3.name ]]]"
 | 
			
		||||
        variables:
 | 
			
		||||
          color_icon: "[[[ return variables.entity_3.icon_color ]]]"
 | 
			
		||||
          color_bg: "[[[ return variables.entity_3.bg_color ]]]"
 | 
			
		||||
        tap_action:
 | 
			
		||||
          action: "call-service"
 | 
			
		||||
          service: |
 | 
			
		||||
            [[[
 | 
			
		||||
              let domain = variables.entity_3.entity_id.substr(0, variables.entity_3.entity_id.indexOf("."));
 | 
			
		||||
              if (domain == "automation") {
 | 
			
		||||
                return "automation.trigger"
 | 
			
		||||
              } else {
 | 
			
		||||
                return "homeassistant.turn_on"
 | 
			
		||||
              }
 | 
			
		||||
            ]]]
 | 
			
		||||
          service_data:
 | 
			
		||||
            entity_id: "[[[ return variables.entity_3.entity_id ]]]"
 | 
			
		||||
    item4:
 | 
			
		||||
      card:
 | 
			
		||||
        type: "custom:button-card"
 | 
			
		||||
        template: "card_scenes_pill"
 | 
			
		||||
        entity: "[[[ return variables.entity_4.entity_id ]]]"
 | 
			
		||||
        icon: "[[[ return variables.entity_4.icon ]]]"
 | 
			
		||||
        name: "[[[ return variables.entity_4.name ]]]"
 | 
			
		||||
        variables:
 | 
			
		||||
          color_icon: "[[[ return variables.entity_4.icon_color ]]]"
 | 
			
		||||
          color_bg: "[[[ return variables.entity_4.bg_color ]]]"
 | 
			
		||||
        tap_action:
 | 
			
		||||
          action: "call-service"
 | 
			
		||||
          service: |
 | 
			
		||||
            [[[
 | 
			
		||||
              let domain = variables.entity_4.entity_id.substr(0, variables.entity_4.entity_id.indexOf("."));
 | 
			
		||||
              if (domain == "automation") {
 | 
			
		||||
                return "automation.trigger"
 | 
			
		||||
              } else {
 | 
			
		||||
                return "homeassistant.turn_on"
 | 
			
		||||
              }
 | 
			
		||||
            ]]]
 | 
			
		||||
          service_data:
 | 
			
		||||
            entity_id: "[[[ return variables.entity_4.entity_id ]]]"
 | 
			
		||||
    item5:
 | 
			
		||||
      card:
 | 
			
		||||
        type: "custom:button-card"
 | 
			
		||||
        template: "card_scenes_pill"
 | 
			
		||||
        entity: "[[[ return variables.entity_5.entity_id ]]]"
 | 
			
		||||
        icon: "[[[ return variables.entity_5.icon ]]]"
 | 
			
		||||
        name: "[[[ return variables.entity_5.name ]]]"
 | 
			
		||||
        variables:
 | 
			
		||||
          color_icon: "[[[ return variables.entity_5.icon_color ]]]"
 | 
			
		||||
          color_bg: "[[[ return variables.entity_5.bg_color ]]]"
 | 
			
		||||
        tap_action:
 | 
			
		||||
          action: "call-service"
 | 
			
		||||
          service: |
 | 
			
		||||
            [[[
 | 
			
		||||
              let domain = variables.entity_5.entity_id.substr(0, variables.entity_5.entity_id.indexOf("."));
 | 
			
		||||
              if (domain == "automation") {
 | 
			
		||||
                return "automation.trigger"
 | 
			
		||||
              } else {
 | 
			
		||||
                return "homeassistant.turn_on"
 | 
			
		||||
              }
 | 
			
		||||
            ]]]
 | 
			
		||||
          service_data:
 | 
			
		||||
            entity_id: "[[[ return variables.entity_5.entity_id ]]]"
 | 
			
		||||
 | 
			
		||||
card_scenes_pill:
 | 
			
		||||
  show_icon: true
 | 
			
		||||
  show_label: false
 | 
			
		||||
  show_name: true
 | 
			
		||||
  variables:
 | 
			
		||||
    color_icon: "gray"
 | 
			
		||||
    color_bg: "gray"
 | 
			
		||||
  styles:
 | 
			
		||||
    grid:
 | 
			
		||||
      - grid-template-areas: "'i' 'n'"
 | 
			
		||||
      - grid-template-columns: "min-content"
 | 
			
		||||
      - grid-template-rows: "1fr 1fr"
 | 
			
		||||
      - row-gap: "12px"
 | 
			
		||||
      - justify-items: "center"
 | 
			
		||||
      - column-gap: "auto"
 | 
			
		||||
    card:
 | 
			
		||||
      - box-shadow: "none"
 | 
			
		||||
      - padding: "5px"
 | 
			
		||||
      - box-shadow: >
 | 
			
		||||
          [[[
 | 
			
		||||
            if (hass.themes.darkMode){
 | 
			
		||||
              return "0px 2px 4px 0px rgba(0,0,0,0.80)";
 | 
			
		||||
            } else {
 | 
			
		||||
              return "var(--box-shadow)";
 | 
			
		||||
            }
 | 
			
		||||
          ]]]
 | 
			
		||||
      - border-radius: "50px"
 | 
			
		||||
      - place-self: "center"
 | 
			
		||||
      - width: "52px"
 | 
			
		||||
      - height: "84px"
 | 
			
		||||
    icon:
 | 
			
		||||
      - color: >
 | 
			
		||||
          [[[
 | 
			
		||||
            var color = [variables.color_icon];
 | 
			
		||||
            if (color == "gray"){
 | 
			
		||||
              var color = "rgba(var(--color-theme),0.20)";
 | 
			
		||||
            } else if(color == "yellow"){
 | 
			
		||||
              var color = "rgba(var(--color-yellow),1)";
 | 
			
		||||
            } else if(color == "blue"){
 | 
			
		||||
              var color = "rgba(var(--color-blue),1)";
 | 
			
		||||
            } else if(color == "purple"){
 | 
			
		||||
              var color = "rgba(var(--color-purple),1)";
 | 
			
		||||
            } else if(color == "green"){
 | 
			
		||||
              var color = "rgba(var(--color-green),1)";
 | 
			
		||||
            } else if(color == "red"){
 | 
			
		||||
              var color = "rgba(var(--color-red),1)";
 | 
			
		||||
            }
 | 
			
		||||
            return color;
 | 
			
		||||
          ]]]
 | 
			
		||||
    img_cell:
 | 
			
		||||
      - background-color: >
 | 
			
		||||
          [[[
 | 
			
		||||
            var color = [variables.color_bg];
 | 
			
		||||
            if (color == "gray"){
 | 
			
		||||
              var color = "rgba(var(--color-theme),0.05)";
 | 
			
		||||
            } else if(color == "yellow"){
 | 
			
		||||
              var color = "rgba(var(--color-yellow),0.20)";
 | 
			
		||||
            } else if(color == "blue"){
 | 
			
		||||
              var color = "rgba(var(--color-blue),0.20)";
 | 
			
		||||
            } else if(color == "purple"){
 | 
			
		||||
              var color = "rgba(var(--color-purple),0.20)";
 | 
			
		||||
            } else if(color == "green"){
 | 
			
		||||
              var color = "rgba(var(--color-green),0.20)";
 | 
			
		||||
            } else if(color == "red"){
 | 
			
		||||
              var color = "rgba(var(--color-red),0.20)";
 | 
			
		||||
            }
 | 
			
		||||
            return color;
 | 
			
		||||
          ]]]
 | 
			
		||||
      - border-radius: "50%"
 | 
			
		||||
      - width: "42px"
 | 
			
		||||
      - height: "42px"
 | 
			
		||||
    name:
 | 
			
		||||
      - font-weight: "bold"
 | 
			
		||||
      - font-size: "9.5px"
 | 
			
		||||
      - width: "33px"
 | 
			
		||||
      - padding-bottom: "7px"
 | 
			
		||||
    state:
 | 
			
		||||
      - color: "rgba(var(--color-theme),0.9)"
 | 
			
		||||
  color: "var(--google-grey)"
 | 
			
		||||
		Reference in New Issue
	
	Block a user