├── README.md ├── automations ├── media.json ├── motion.yaml ├── motion2.yaml ├── notify-machine-finishes.yaml └── power_notify.yaml ├── blob ├── circles │ ├── circle-speaker.yaml │ ├── circle-x.yaml │ └── circle.yaml ├── holds │ ├── hold-action-es-3.yaml │ ├── hold-action-es-cover.yaml │ ├── hold-action-es-speaker-1.yaml │ ├── hold-action-es-switch.yaml │ ├── hold-action-es.yaml │ ├── hold-action-lights.yaml │ └── hold-action-vacuum.yaml ├── icon-action.yaml ├── icons │ ├── arbeitszimmer.yaml │ ├── badezimmer.yaml │ ├── dusche.yaml │ ├── eingang.yaml │ ├── essbereich.yaml │ ├── flur.yaml │ ├── freizeitraum.yaml │ ├── garten.yaml │ ├── hauseingang.yaml │ ├── kinderzimmer.yaml │ ├── obergeschoss.yaml │ ├── path-devices.yaml │ ├── path-girl.yaml │ ├── path-kid.yaml │ ├── path-lights.yaml │ ├── path-man.yaml │ ├── path-sensors.yaml │ ├── path-shutter.yaml │ ├── schlafzimmer.yaml │ ├── shutter.yaml │ ├── speaker.yaml │ ├── switch.yaml │ ├── tv.yaml │ ├── untergeschoss.yaml │ ├── vacuum.yaml │ └── wohnzimmer.yaml ├── sensors │ ├── sensors-arbeitszimmer.yaml │ ├── sensors-badezimmer.yaml │ ├── sensors-dusche.yaml │ ├── sensors-flur.yaml │ ├── sensors-haus.yaml │ ├── sensors-kinderzimmer.yaml │ ├── sensors-kueche.yaml │ ├── sensors-obergeschoss.yaml │ ├── sensors-schlafzimmer.yaml │ ├── sensors-untergeschoss.yaml │ └── sensors-wohnzimmer.yaml ├── states │ ├── state-es-speaker-1.yaml │ ├── state-es.yaml │ ├── state-icon.yaml │ └── state-x.yaml ├── styles │ ├── style-card-path.yaml │ ├── style-card-sensors.yaml │ ├── style-card.yaml │ ├── style-icon-2.yaml │ ├── style-icon.yaml │ └── styles-x.yaml └── taps │ ├── tap-action-es-arbeitszimmer.yaml │ ├── tap-action-es-dusche.yaml │ ├── tap-action-es-flur.yaml │ ├── tap-action-es-haus.yaml │ ├── tap-action-es-kinderzimmer.yaml │ ├── tap-action-es-kueche.yaml │ ├── tap-action-es-obergeschoss.yaml │ ├── tap-action-es-schlafzimmer.yaml │ ├── tap-action-es-untergeschoss.yaml │ ├── tap-action-es-vacuum.yaml │ ├── tap-action-es-wohnzimmer.yaml │ ├── tap-action-girl.yaml │ ├── tap-action-kid.yaml │ └── tap-action-man.yaml ├── logos ├── Custom cards for Home Assistant.png ├── Mattias Persson.png ├── Thomas Lovén.png ├── blob-1.png ├── blob-2.png ├── blob-3.png ├── blob-4.png ├── blob-5.png ├── blob-video.mp4 ├── case.gif ├── case.jpg ├── the blob.gif ├── unraid-1.png └── unraid-2.png ├── ui-lovelace.yaml └── www ├── DarkBlue.jpg ├── DarkBlue_2.jpg ├── DarkGreen.jpg ├── DarkGreen_2.jpg ├── Disk-5s-400px.svg ├── Fluid-11.1s-101px.svg ├── Fluid-20s-100px.svg ├── Fluid-20s-150px.svg ├── Foam-10s-120px.svg ├── Foam-10s-1644px-3.svg ├── LightBlue.jpg ├── LightBlue_2.jpg ├── LightGreen.jpg ├── LightGreen_2.jpg ├── Mountains.jpg ├── Orange.jpg ├── Orange_2.jpg ├── Photon-10s-150px.svg ├── Red.jpg ├── Red_2.jpg ├── Vacuum - On-2.svg ├── Vacuum - On.svg ├── Valley-20s-100px.svg ├── Wave-10s-100px.svg ├── Wave-20s-100px.svg ├── ambiance.png ├── classic.png ├── color.png ├── css └── sanfracisco.css ├── day.jpeg ├── day_2.jpeg ├── fan.svg ├── hass-bha-icons.html ├── hass-fontawesome-brands.html ├── hass-fontawesome-regular.html ├── hass-fontawesome-solid.html ├── images ├── abstract.jpg ├── apple-1.jpg ├── apple-10.jpg ├── apple-11.jpg ├── apple-12.jpg ├── apple-13.jpg ├── apple-14.jpg ├── apple-15.jpg ├── apple-16.jpg ├── apple-2.jpg ├── apple-3.jpg ├── apple-4.jpg ├── apple-5.jpg ├── apple-6.jpg ├── apple-7.jpg ├── apple-8.jpg ├── apple-9.jpg └── ios.jpg └── night.jpeg /automations/motion.yaml: -------------------------------------------------------------------------------- 1 | blueprint: 2 | name: Motion sensor controls the light 3 | description: > 4 | Predefined scene is switched on based on movement and illuminance. And after no movement is registered, the so-called dimmed scene is switched on. 5 | And after that, the light is switched off. This blueprint uses auxiliary entities that need to be created for some input values themselves in order to set limits dynamically. 6 | 7 | This is a fork of this blueprint. 8 | 9 | https://community.home-assistant.io/t/turn-on-light-switch-scene-script-or-group-based-on-motion-and-illuminance-more-conditions 10 | 11 | - service: homeassistant.turn_on 12 | entity_id: !input target_entity_dimmed 13 | 14 | target_entity_dimmed: 15 | name: Enter the dimmed scene for the target entity. 16 | description: The light, switch, scene to turn on (or script to run) after the wait time. 17 | selector: 18 | entity: 19 | 20 | target_entity_dimmed: !input target_entity_dimmed 21 | 22 | Thank you very much. 23 | 24 | domain: automation 25 | input: 26 | motion_sensor: 27 | name: Motion Sensor 28 | description: This sensor will trigger the turning on of the target entity. 29 | selector: 30 | entity: 31 | domain: binary_sensor 32 | device_class: motion 33 | target_entity: 34 | name: Enter the scene for the target entity. 35 | description: The light, switch, scene to turn on (or script to run) when the automation is triggered. 36 | selector: 37 | entity: 38 | target_entity_dimmed: 39 | name: Enter the dimmed scene for the target entity. 40 | description: The light, switch, scene to turn on (or script to run) after the wait time. 41 | selector: 42 | entity: 43 | illuminance_sensor: 44 | name: (OPTIONAL) Illuminance sensor 45 | description: This sensor will be used to determine the illumination. 46 | default: 47 | selector: 48 | entity: 49 | domain: sensor 50 | device_class: illuminance 51 | illuminance_cutoff: 52 | name: (OPTIONAL) Illuminance cutoff value 53 | description: This input_number will be used to compare to the current illumination to determine if it is low. 54 | default: 55 | selector: 56 | entity: 57 | domain: input_number 58 | blocker_entity: 59 | name: (OPTIONAL) Blocking entity 60 | description: If this entity's state is on, it will prevent the automation from running. E.g. sleepmode or away mode. 61 | default: 62 | selector: 63 | entity: 64 | time_limit_before: 65 | name: (OPTIONAL) Only run before time. 66 | description: Automation will only run when time is earlier than this input_datetime value. 67 | default: 68 | selector: 69 | entity: 70 | domain: input_datetime 71 | time_limit_after: 72 | name: (OPTIONAL) Only run after time. 73 | description: Automation will only run when time is later than this input_datetime value. 74 | default: 75 | selector: 76 | entity: 77 | domain: input_datetime 78 | no_motion_wait: 79 | name: (OPTIONAL) Turn off wait time 80 | description: Time to leave the light on after last motion is detected. If not used entity will not auto turn off. Only works for target_entity types light and switch. 81 | default: 82 | selector: 83 | entity: 84 | domain: input_number 85 | turn_off_blocker_entity: 86 | name: (OPTIONAL) Turn-off Blocking entity 87 | description: If this entity's state is on, it will prevent the target entity from turning off after the set delay. 88 | default: 89 | selector: 90 | entity: 91 | target_off_entity: 92 | name: (OPTIONAL) Turn-off entity 93 | description: If defined, this entity will be turned off instead of the default target entity. This can be helpful when using target entities of type scene or script. 94 | default: 95 | selector: 96 | entity: 97 | 98 | mode: restart 99 | max_exceeded: silent 100 | 101 | variables: 102 | target_entity: !input target_entity 103 | target_entity_dimmed: !input target_entity_dimmed 104 | illuminance_currently: !input illuminance_sensor 105 | illuminance_cutoff: !input illuminance_cutoff 106 | blocker_entity: !input blocker_entity 107 | time_limit_before: !input time_limit_before 108 | time_limit_after: !input time_limit_after 109 | no_motion_wait: !input no_motion_wait 110 | entity_domain: "{{ states[target_entity].domain }}" 111 | turn_off_blocker_entity: !input turn_off_blocker_entity 112 | target_off_entity: !input target_off_entity 113 | 114 | trigger: 115 | platform: state 116 | entity_id: !input motion_sensor 117 | to: 'on' 118 | 119 | condition: 120 | # First condition: When entity was already on because the automation ran recently, do not check illuminance because it could have increased above threshold because of a light that was just turned on. 121 | - condition: template 122 | value_template: "{{ (states[target_entity].state == 'on') or (illuminance_currently == none) or (illuminance_cutoff == none) or (states[illuminance_currently].state | int < states[illuminance_cutoff].state | int) }}" 123 | - condition: template 124 | value_template: "{{ (blocker_entity == none) or (states[blocker_entity].state == 'off') }}" 125 | - condition: template 126 | value_template: > 127 | {% set current_time = now().strftime("%H:%M") %} 128 | 129 | {% if time_limit_before != none and time_limit_after == none %} 130 | {{ states[time_limit_before].state > current_time }} 131 | {% elif time_limit_before == none and time_limit_after != none %} 132 | {{ states[time_limit_after].state < current_time }} 133 | {% elif time_limit_before != none and time_limit_after != none %} 134 | {% set before_limit_is_on_next_day = states[time_limit_after].state > states[time_limit_before].state %} 135 | {{ (before_limit_is_on_next_day or states[time_limit_before].state > current_time) and states[time_limit_after].state < current_time }} 136 | {% else %} 137 | true 138 | {% endif %} 139 | 140 | action: 141 | - service: homeassistant.turn_on 142 | entity_id: !input target_entity 143 | - condition: template 144 | value_template: "{{ no_motion_wait != none }}" 145 | - wait_for_trigger: 146 | platform: state 147 | entity_id: !input motion_sensor 148 | from: "on" 149 | to: "off" 150 | - service: homeassistant.turn_on 151 | entity_id: !input target_entity_dimmed 152 | - delay: 153 | minutes: '{{ states[no_motion_wait].state | int }}' 154 | - condition: template 155 | value_template: "{{ (turn_off_blocker_entity == none) or (states[turn_off_blocker_entity].state == 'off') }}" 156 | - choose: 157 | - conditions: 158 | - condition: template 159 | value_template: "{{ (target_off_entity != none) }}" 160 | sequence: 161 | - service: homeassistant.turn_off 162 | entity_id: !input target_off_entity 163 | default: 164 | - service: homeassistant.turn_off 165 | entity_id: !input target_entity 166 | -------------------------------------------------------------------------------- /automations/motion2.yaml: -------------------------------------------------------------------------------- 1 | blueprint: 2 | name: Motion sensor controls the light 3 | description: > 4 | Predefined scene is switched on based on movement and illuminance. And after no movement is registered, the so-called dimmed scene is switched on. And after that, the light is switched off. This blueprint uses auxiliary entities that need to be created for some input values themselves in order to set limits dynamically. 5 | 6 | This is a fork of this blueprint. 7 | https://community.home-assistant.io/t/turn-on-light-switch-scene-script-or-group-based-on-motion-and-illuminance-more-conditions 8 | 9 | domain: automation 10 | input: 11 | motion_sensor: 12 | name: Motion Sensor 13 | description: This sensor will trigger the turning on of the target entity. 14 | selector: 15 | entity: 16 | target_entity: 17 | name: Target entity. 18 | description: The light, switch, scene to turn on (or script to run) when the automation is triggered. 19 | selector: 20 | entity: 21 | light_brightness: 22 | name: Brightness for the dimmed light. 23 | description: Choose the brightness. 24 | default: 25 25 | selector: 26 | number: 27 | min: 1.0 28 | max: 255.0 29 | mode: slider 30 | step: 1.0 31 | illuminance_sensor: 32 | name: (OPTIONAL) Illuminance sensor 33 | description: This sensor will be used to determine the illumination. 34 | default: 35 | selector: 36 | entity: 37 | domain: sensor 38 | device_class: illuminance 39 | illuminance_cutoff: 40 | name: (OPTIONAL) Illuminance cutoff value 41 | description: This input_number will be used to compare to the current illumination to determine if it is low. 42 | default: 43 | selector: 44 | entity: 45 | domain: input_number 46 | blocker_entity: 47 | name: (OPTIONAL) Blocking entity 48 | description: If this entity's state is on, it will prevent the automation from running. E.g. sleepmode or away mode. 49 | default: 50 | selector: 51 | entity: 52 | time_limit_before: 53 | name: (OPTIONAL) Only run before time. 54 | description: Automation will only run when time is earlier than this input_datetime value. 55 | default: 56 | selector: 57 | entity: 58 | domain: input_datetime 59 | time_limit_after: 60 | name: (OPTIONAL) Only run after time. 61 | description: Automation will only run when time is later than this input_datetime value. 62 | default: 63 | selector: 64 | entity: 65 | domain: input_datetime 66 | no_motion_wait: 67 | name: (OPTIONAL) Turn off wait time 68 | description: Time to leave the target entity on after last motion is detected. If not used entity will not auto turn off. 69 | default: 70 | selector: 71 | entity: 72 | domain: input_number 73 | turn_off_blocker_entity: 74 | name: (OPTIONAL) Turn-off Blocking entity 75 | description: If this entity's state is on, it will prevent the target entity from turning off after the set delay. 76 | default: 77 | selector: 78 | entity: 79 | target_off_entity: 80 | name: (OPTIONAL) Turn-off entity 81 | description: If defined, this entity will be turned off instead of the default target entity. This can be helpful when using target entities of type scene or script. 82 | default: 83 | selector: 84 | entity: 85 | 86 | mode: restart 87 | max_exceeded: silent 88 | 89 | variables: 90 | target_entity: !input target_entity 91 | illuminance_currently: !input illuminance_sensor 92 | illuminance_cutoff: !input illuminance_cutoff 93 | blocker_entity: !input blocker_entity 94 | time_limit_before: !input time_limit_before 95 | time_limit_after: !input time_limit_after 96 | no_motion_wait: !input no_motion_wait 97 | entity_domain: "{{ states[target_entity].domain }}" 98 | turn_off_blocker_entity: !input turn_off_blocker_entity 99 | target_off_entity: !input target_off_entity 100 | 101 | trigger: 102 | platform: state 103 | entity_id: !input motion_sensor 104 | to: 'on' 105 | 106 | condition: 107 | # First condition: When entity was already on because the automation ran recently, do not check illuminance because it could have increased above threshold because of a light that was just turned on. 108 | - condition: template 109 | value_template: "{{ (states[target_entity].state == 'on') or (illuminance_currently == none) or (illuminance_cutoff == none) or (states[illuminance_currently].state | int < states[illuminance_cutoff].state | int) }}" 110 | - condition: template 111 | value_template: "{{ (blocker_entity == none) or (states[blocker_entity].state == 'off') }}" 112 | - condition: template 113 | value_template: > 114 | {% set current_time = now().strftime("%H:%M") %} 115 | 116 | {% if time_limit_before != none and time_limit_after == none %} 117 | {{ states[time_limit_before].state > current_time }} 118 | {% elif time_limit_before == none and time_limit_after != none %} 119 | {{ states[time_limit_after].state < current_time }} 120 | {% elif time_limit_before != none and time_limit_after != none %} 121 | {% set before_limit_is_on_next_day = time_limit_after > time_limit_before %} 122 | {% if not before_limit_is_on_next_day %} 123 | {{ (states[time_limit_after].state < current_time) and (states[time_limit_before].state > current_time) }} 124 | {% elif before_limit_is_on_next_day %} 125 | {{ (states[time_limit_before].state > current_time) or (states[time_limit_after].state < current_time) }} 126 | {% endif %} 127 | {% else %} 128 | true 129 | {% endif %} 130 | 131 | action: 132 | - service: homeassistant.turn_on 133 | entity_id: !input target_entity 134 | - condition: template 135 | value_template: "{{ no_motion_wait != none }}" 136 | - wait_for_trigger: 137 | platform: state 138 | entity_id: !input motion_sensor 139 | from: "on" 140 | to: "off" 141 | - service: light.turn_on 142 | data: 143 | brightness: !input 'light_brightness' 144 | entity_id: !input target_entity 145 | - delay: 146 | minutes: '{{ states[no_motion_wait].state | int }}' 147 | - condition: template 148 | value_template: "{{ (turn_off_blocker_entity == none) or (states[turn_off_blocker_entity].state == 'off') }}" 149 | - choose: 150 | - conditions: 151 | - condition: template 152 | value_template: "{{ (target_off_entity != none) }}" 153 | sequence: 154 | - service: homeassistant.turn_off 155 | entity_id: !input target_off_entity 156 | default: 157 | - service: homeassistant.turn_off 158 | entity_id: !input target_entity 159 | -------------------------------------------------------------------------------- /automations/notify-machine-finishes.yaml: -------------------------------------------------------------------------------- 1 | blueprint: 2 | name: Appliance has finished 3 | description: Do something when an appliance (like a washing machine or dishwasher) 4 | has finished as detected by a power sensor. 5 | domain: automation 6 | input: 7 | power_sensor: 8 | name: Power Sensor 9 | description: 'Power sensor entity (e.g. from a smart plug device).' 10 | selector: 11 | entity: 12 | domain: switch 13 | starting_threshold: 14 | name: Starting power threshold 15 | description: Power threshold above which we assume the appliance has started. 16 | default: 5 17 | selector: 18 | number: 19 | min: 1.0 20 | max: 100.0 21 | unit_of_measurement: W 22 | mode: slider 23 | step: 1.0 24 | starting_hysteresis: 25 | name: Starting hysteresis 26 | description: Time duration the power measurement has to stay above the starting 27 | power threshold. 28 | default: 5 29 | selector: 30 | number: 31 | min: 0.25 32 | max: 60.0 33 | unit_of_measurement: min 34 | mode: slider 35 | step: 0.25 36 | finishing_threshold: 37 | name: Finishing power threshold 38 | description: Power threshold below which we assume the appliance has finished. 39 | default: 5 40 | selector: 41 | number: 42 | min: 1.0 43 | max: 100.0 44 | unit_of_measurement: W 45 | mode: slider 46 | step: 1.0 47 | finishing_hysteresis: 48 | name: Finishing hysteresis 49 | description: Time duration the power measurement has to stay below the finishing 50 | power threshold. 51 | default: 5 52 | selector: 53 | number: 54 | min: 0.25 55 | max: 60.0 56 | unit_of_measurement: min 57 | mode: slider 58 | step: 0.25 59 | actions: 60 | name: Actions 61 | description: Actions (e.g. pushing a notification, TTS announcement, ...) 62 | selector: 63 | action: {} 64 | trigger: 65 | - platform: numeric_state 66 | entity_id: !input 'power_sensor' 67 | attribute: current_power_w 68 | for: 69 | minutes: !input 'starting_hysteresis' 70 | above: !input 'starting_threshold' 71 | condition: [] 72 | action: 73 | - wait_for_trigger: 74 | - platform: numeric_state 75 | entity_id: !input 'power_sensor' 76 | attribute: current_power_w 77 | below: !input 'finishing_threshold' 78 | for: 79 | minutes: !input 'finishing_hysteresis' 80 | - choose: [] 81 | default: !input 'actions' 82 | mode: single 83 | max_exceeded: silent 84 | -------------------------------------------------------------------------------- /automations/power_notify.yaml: -------------------------------------------------------------------------------- 1 | blueprint: 2 | name: Appliance has finished 3 | description: Do something when an appliance (like a washing machine or dishwasher) 4 | has finished as detected by a power sensor. 5 | domain: automation 6 | input: 7 | power_sensor: 8 | name: Power Sensor 9 | description: 'Power sensor entity (e.g. from a smart plug device).' 10 | selector: 11 | entity: 12 | domain: sensor 13 | starting_threshold: 14 | name: Starting power threshold 15 | description: Power threshold above which we assume the appliance has started. 16 | default: 5 17 | selector: 18 | number: 19 | min: 1.0 20 | max: 100.0 21 | unit_of_measurement: W 22 | mode: slider 23 | step: 1.0 24 | starting_hysteresis: 25 | name: Starting hysteresis 26 | description: Time duration the power measurement has to stay above the starting 27 | power threshold. 28 | default: 5 29 | selector: 30 | number: 31 | min: 0.25 32 | max: 60.0 33 | unit_of_measurement: min 34 | mode: slider 35 | step: 0.25 36 | finishing_threshold: 37 | name: Finishing power threshold 38 | description: Power threshold below which we assume the appliance has finished. 39 | default: 5 40 | selector: 41 | number: 42 | min: 1.0 43 | max: 100.0 44 | unit_of_measurement: W 45 | mode: slider 46 | step: 1.0 47 | finishing_hysteresis: 48 | name: Finishing hysteresis 49 | description: Time duration the power measurement has to stay below the finishing 50 | power threshold. 51 | default: 5 52 | selector: 53 | number: 54 | min: 0.25 55 | max: 60.0 56 | unit_of_measurement: min 57 | mode: slider 58 | step: 0.25 59 | actions: 60 | name: Actions 61 | description: Actions (e.g. pushing a notification, TTS announcement, ...) 62 | selector: 63 | action: {} 64 | source_url: https://gist.github.com/sbyx/6d8344d3575c9865657ac51915684696 65 | trigger: 66 | - platform: numeric_state 67 | entity_id: !input 'power_sensor' 68 | for: 69 | minutes: !input 'starting_hysteresis' 70 | above: !input 'starting_threshold' 71 | condition: [] 72 | action: 73 | - wait_for_trigger: 74 | - platform: numeric_state 75 | entity_id: !input 'power_sensor' 76 | below: !input 'finishing_threshold' 77 | for: 78 | minutes: !input 'finishing_hysteresis' 79 | - choose: [] 80 | default: !input 'actions' 81 | mode: single 82 | max_exceeded: silent 83 | -------------------------------------------------------------------------------- /blob/circles/circle-speaker.yaml: -------------------------------------------------------------------------------- 1 | info: > 2 | [[[ var brightness = entity.attributes.volume_level * 100; if 3 | (entity.state === 'playing') return '' + brightness + '%'; ]]] -------------------------------------------------------------------------------- /blob/circles/circle-x.yaml: -------------------------------------------------------------------------------- 1 | 2 | # info: > 3 | # [[[ var brightness = [[circle-1]] * [[circle-2]]; if 4 | # (entity.state === '[[circle-3]]') return '' + brightness + '%'; ]]] 11 | 12 | info: > 13 | [[[ if (entity.state === '[[circle-3]]' && [[circle-1]]) { 14 | const [[circle-4]] = Math.round([[circle-1]] / [[circle-2]]); 15 | const radius = 20.5; const circumference = radius * 2 * Math.PI; 16 | return ` 18 | ${[[circle-4]]}%`; } ]]] 19 | 20 | icon_shade: > 21 | -------------------------------------------------------------------------------- /blob/circles/circle.yaml: -------------------------------------------------------------------------------- 1 | info: > 2 | [[[ var brightness = entity.attributes.brightness / 2.54 3 | ; if (entity.state === 'on') return '' + brightness + 8 | '%'; 10 | ]]] -------------------------------------------------------------------------------- /blob/holds/hold-action-es-cover.yaml: -------------------------------------------------------------------------------- 1 | action: call-service 2 | service: browser_mod.popup 3 | service_data: 4 | card: 5 | cards: 6 | 7 | - type: custom:layout-card 8 | layout: vertical 9 | column_width: 24% 10 | cards: 11 | - template: es-icon 12 | type: 'custom:decluttering-card' 13 | variables: 14 | - template: '[[template]]' 15 | - entity-1: '[[entity-1]]' 16 | - name-1: '[[name-1]]' 17 | - state-1: 'open' 18 | - state-2: 'closed' 19 | - circle-1: entity.attributes.current_position 20 | - circle-2: 1 21 | - circle-3: 'open' 22 | - circle-4: current_position 23 | - scene-hell: '[[scene-hell]]' 24 | - scene-relax: '[[scene-relax]]' 25 | 26 | - type: custom:hui-vertical-stack-card 27 | cards: 28 | - style: 'ha-card { width: 10px; }' 29 | template: device 30 | type: 'custom:decluttering-card' 31 | variables: 32 | - content: '[[name-1]]' 33 | 34 | - entities: 35 | - actionSize: 50px 36 | actions: 37 | - icon: 'mdi:brightness-5' 38 | name: Hell 39 | service: scene.turn_on 40 | service_data: 41 | entity_id: '[[scene-hell]]' 42 | - icon: 'mdi:brightness-4' 43 | name: Relax 44 | service: scene.turn_on 45 | service_data: 46 | entity_id: '[[scene-relax]]' 47 | borderRadius: 20px 48 | brightnessHeight: 250px 49 | brightnessWidth: 100px 50 | sliderHeight: 250px 51 | sliderWidth: 100px 52 | entity: '[[entity-1]]' 53 | fullscreen: false 54 | icon: true 55 | sliderService: cover.set_cover_position 56 | sliderColor: '#a18568' 57 | sliderTrackColor: 'rgba(25, 25, 25, 0.9)' 58 | style: > 59 | #popup > div.action-holder > div > div { 60 | margin: 1em 1em 1em 1em; 61 | font-family: 'San Francisco'; 62 | font-weight: 700; 63 | font-size: 0.9em; 64 | color: #fff; 65 | } 66 | div > div > h4 { 67 | color: rgba(255, 255, 255, 1); 68 | margin-top: -65px; 69 | margin-bottom: 20px; 70 | font-size: 10px; 71 | font-weight: 700; 72 | font-family: 'San Francisco'; 73 | letter-spacing: 0.04em; 74 | } 75 | #popup { 76 | margin: 0 0 0.8em 0; 77 | } 78 | #popup > div.range-holder > input[type=range]::-webkit-slider-thumb { 79 | border: 100% 80 | height: 100% 81 | width: 10px; 82 | cursor: pointer; 83 | } 84 | type: 'custom:cover-popup-card' 85 | show_header_toggle: false 86 | type: entities 87 | type: vertical-stack 88 | deviceID: this 89 | style: 90 | '--ha-card-background': transparent 91 | '--ha-card-border-radius': transparent 92 | '--iron-icon-fill-color': '#ffffff' 93 | background: 'rgba(0, 0, 0, 0.95)' 94 | border-radius: 20px 95 | font-family: San Francisco !important; 96 | font-weight: 700 !important; 97 | width: 400px; 98 | margin: 0 auto; 99 | title: ' ' 100 | 101 | 102 | -------------------------------------------------------------------------------- /blob/holds/hold-action-es-switch.yaml: -------------------------------------------------------------------------------- 1 | action: call-service 2 | service: browser_mod.popup 3 | service_data: 4 | card: 5 | cards: 6 | - entities: 7 | - entity: light.arbeitszimmer 8 | name: dssdsd 9 | toggle: true 10 | type: 'custom:slider-entity-row' 11 | show_header_toggle: false 12 | type: entities 13 | type: vertical-stack 14 | deviceID: this 15 | style: 16 | '--ha-card-background': transparent 17 | '--ha-card-border-radius': transparent 18 | '--iron-icon-fill-color': '#ffffff' 19 | background: 'rgba(0, 0, 0, 0.95)' 20 | border-radius: 20px 21 | box-shadow: unset !important; 22 | font-family: San Francisco !important; 23 | font-weight: 700 !important; 24 | title: ' ' -------------------------------------------------------------------------------- /blob/holds/hold-action-es.yaml: -------------------------------------------------------------------------------- 1 | action: call-service 2 | service: browser_mod.popup 3 | service_data: 4 | card: 5 | cards: 6 | 7 | - type: custom:layout-card 8 | layout: vertical 9 | column_width: 24% 10 | cards: 11 | - template: es-icon 12 | type: 'custom:decluttering-card' 13 | variables: 14 | - template: '[[template]]' 15 | - entity-1: '[[entity-1]]' 16 | - name-1: '[[name-1]]' 17 | - state-1: 'open' 18 | - state-2: 'closed' 19 | - circle-1: entity.attributes.current_position 20 | - circle-2: 1 21 | - circle-3: 'open' 22 | - circle-4: current_position 23 | - scene-hell: '[[scene-hell]]' 24 | - scene-relax: '[[scene-relax]]' 25 | 26 | - type: custom:hui-vertical-stack-card 27 | cards: 28 | - style: 'ha-card { width: 10px; }' 29 | template: device 30 | type: 'custom:decluttering-card' 31 | variables: 32 | - content: '[[name-1]]' 33 | 34 | - entities: 35 | - actionSize: 50px 36 | actions: 37 | - icon: 'mdi:brightness-5' 38 | name: Hell 39 | service: scene.turn_on 40 | service_data: 41 | entity_id: '[[scene-hell]]' 42 | - icon: 'mdi:brightness-4' 43 | name: Relax 44 | service: scene.turn_on 45 | service_data: 46 | entity_id: '[[scene-relax]]' 47 | borderRadius: 20px 48 | brightnessHeight: 250px 49 | brightnessWidth: 100px 50 | entity: '[[entity-1]]' 51 | fullscreen: false 52 | icon: true 53 | sliderColor: '#f8cd41' 54 | sliderTrackColor: 'rgba(25, 25, 25, 0.9)' 55 | style: > 56 | #popup > div.action-holder > div > div { 57 | margin: 1em 1em 1em 1em; 58 | font-family: 'San Francisco'; 59 | font-weight: 700; 60 | font-size: 0.9em; 61 | color: #fff; 62 | } 63 | #brightnessValue { 64 | color: rgba(255, 255, 255, 1); 65 | margin-top: -65px; 66 | margin-bottom: 20px; 67 | font-size: 10px; 68 | font-weight: 700; 69 | font-family: 'San Francisco'; 70 | color: #c7c7c7; 71 | } 72 | #popup { 73 | margin: 0 0 0.8em 0; 74 | } 75 | #popup > div.range-holder > input[type=range]::-webkit-slider-thumb { 76 | border: 100% 77 | height: 100% 78 | width: 10px; 79 | cursor: pointer; 80 | } 81 | type: 'custom:light-popup-card' 82 | show_header_toggle: false 83 | type: entities 84 | type: vertical-stack 85 | deviceID: this 86 | style: 87 | '--ha-card-background': transparent 88 | '--ha-card-border-radius': transparent 89 | '--iron-icon-fill-color': '#ffffff' 90 | background: 'rgba(0, 0, 0, 0.95)' 91 | border-radius: 20px 92 | font-family: San Francisco !important; 93 | font-weight: 700 !important; 94 | width: 400px; 95 | title: ' ' -------------------------------------------------------------------------------- /blob/holds/hold-action-vacuum.yaml: -------------------------------------------------------------------------------- 1 | action: call-service 2 | service: browser_mod.popup 3 | service_data: 4 | card: 5 | cards: 6 | - entities: 7 | - entity: light.arbeitszimmer 8 | name: dssdsd 9 | toggle: true 10 | type: 'custom:slider-entity-row' 11 | show_header_toggle: false 12 | type: entities 13 | type: vertical-stack 14 | deviceID: this 15 | style: 16 | '--ha-card-background': transparent 17 | '--ha-card-border-radius': transparent 18 | '--iron-icon-fill-color': '#ffffff' 19 | background: 'rgba(0, 0, 0, 0.95)' 20 | border-radius: 20px 21 | box-shadow: unset !important; 22 | font-family: San Francisco !important; 23 | font-weight: 700 !important; 24 | title: ' ' -------------------------------------------------------------------------------- /blob/icon-action.yaml: -------------------------------------------------------------------------------- 1 | color: '#fff' 2 | styles: 3 | card: 4 | - background: transparent 5 | - border-radius: 50% 6 | - border: 1px solid white 7 | - box-shadow: none 8 | - transition: none 9 | - width: 50px 10 | - height: 50px 11 | icon: 12 | - color: '#fff' 13 | - width: 25px 14 | - height: 25px -------------------------------------------------------------------------------- /blob/icons/arbeitszimmer.yaml: -------------------------------------------------------------------------------- 1 | #button_card_templates: 2 | # arbeitszimmer: 3 | # custom_fields: 4 | icon_hue: > 5 | [[[ if (entity.state === 'on') return ' '; 28 | else return ''; ]]] -------------------------------------------------------------------------------- /blob/icons/badezimmer.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' ' 22 | 23 | ; else return ''; ]]] -------------------------------------------------------------------------------- /blob/icons/dusche.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' ' ; 23 | else return ''; 43 | ]]] -------------------------------------------------------------------------------- /blob/icons/eingang.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' ' 23 | 24 | ; else return ''; 45 | ]]] -------------------------------------------------------------------------------- /blob/icons/essbereich.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' ' 29 | 30 | ; else return ''; ]]] -------------------------------------------------------------------------------- /blob/icons/flur.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' ' 22 | 23 | ; else return ''; ]]] -------------------------------------------------------------------------------- /blob/icons/freizeitraum.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' ' ; 22 | else return ''; ]]] -------------------------------------------------------------------------------- /blob/icons/garten.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' ' 24 | 25 | ; else return ''; 47 | ]]] -------------------------------------------------------------------------------- /blob/icons/hauseingang.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' ' 26 | 27 | ; else return ''; ]]] -------------------------------------------------------------------------------- /blob/icons/kinderzimmer.yaml: -------------------------------------------------------------------------------- 1 | 2 | icon_hue: > 3 | [[[ if (entity.state === 'on') return ' ' 23 | 24 | ; else return ''; ]]] -------------------------------------------------------------------------------- /blob/icons/obergeschoss.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' ' 29 | 30 | ; else return ''; ]]] -------------------------------------------------------------------------------- /blob/icons/path-lights.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' '; 3 | else return ''; ]]] 4 | sd1: > 5 | [[[ 6 | return ` ${states['sensor.status_lights_es_count_on'].state}` 7 | ]]] -------------------------------------------------------------------------------- /blob/icons/switch.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' '; else return ''; ]]] -------------------------------------------------------------------------------- /blob/icons/tv.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' '; else return ''; ]]] -------------------------------------------------------------------------------- /blob/icons/untergeschoss.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' ' ; else return ''; ]]] -------------------------------------------------------------------------------- /blob/icons/wohnzimmer.yaml: -------------------------------------------------------------------------------- 1 | icon_hue: > 2 | [[[ if (entity.state === 'on') return ' ' ; 32 | else return ''; ]]] -------------------------------------------------------------------------------- /blob/sensors/sensors-arbeitszimmer.yaml: -------------------------------------------------------------------------------- 1 | 2 | icon_hue: > 3 | [[[ if (entity.state === 'on') return ' '; 26 | else return ''; ]]] 27 | 28 | temp: > 29 | [[[ 30 | return ` 33 | ${entity.state}°C` 34 | ]]] 35 | 36 | sd1: > 37 | [[[ 38 | return ` 41 | ${states['sensor.multisensor_1_2'].state} %` 42 | ]]] 43 | 44 | sd2: > 45 | [[[ 46 | return ` 49 | ${states['sensor.multisensor_1_3'].state} HPa` 50 | ]]] 51 | 52 | sd3: > 53 | [[[ 54 | return ` 57 | ${states['sensor.status_bewegungsmelder_2'].state}` 58 | ]]] 59 | 60 | sd4: > 61 | [[[ 62 | return ` 65 | ${states['sensor.bewegungsmelder_2'].state} Lux` 66 | ]]] 67 | -------------------------------------------------------------------------------- /blob/states/state-es-speaker-1.yaml: -------------------------------------------------------------------------------- 1 | - styles: 2 | card: 3 | - background-color: 'rgba(255, 255, 255, 0.99)' 4 | - '--button-card-light-color-no-temperature': '#57A8D7' 5 | - overflow: hidden 6 | name: 7 | - color: 'rgba(0, 0, 0, 1)' 8 | state: 9 | - color: 'rgba(0, 0, 0, 0.4)' 10 | value: playing 11 | - styles: 12 | card: 13 | - background-color: 'rgba(255, 255, 255, 0.5)' 14 | name: 15 | - color: 'rgba(0, 0, 0, 0.4)' 16 | state: 17 | - color: 'rgba(0, 0, 0, 0.2)' -------------------------------------------------------------------------------- /blob/states/state-es.yaml: -------------------------------------------------------------------------------- 1 | - styles: 2 | card: 3 | - background-color: 'rgba(255, 255, 255, 0.99)' 4 | - '--button-card-light-color-no-temperature': '#57A8D7' 5 | - overflow: hidden 6 | name: 7 | - color: 'rgba(0, 0, 0, 1)' 8 | state: 9 | - color: 'rgba(0, 0, 0, 0.4)' 10 | value: 'on' 11 | - styles: 12 | card: 13 | - background-color: 'rgba(255, 255, 255, 0.5)' 14 | name: 15 | - color: 'rgba(0, 0, 0, 0.4)' 16 | state: 17 | - color: 'rgba(0, 0, 0, 0.2)' 18 | value: 'off' -------------------------------------------------------------------------------- /blob/states/state-icon.yaml: -------------------------------------------------------------------------------- 1 | - styles: 2 | card: 3 | - background-color: 'transparent' 4 | - '--button-card-light-color-no-temperature': '#transparent' 5 | - overflow: hidden 6 | name: 7 | - color: 'transparent' 8 | state: 9 | - color: 'transparent' 10 | value: '[[state-1]]' 11 | - styles: 12 | card: 13 | - background-color: 'transparent' 14 | name: 15 | - color: 'transparent' 16 | state: 17 | - color: 'transparent' 18 | value: '[[state-2]]' -------------------------------------------------------------------------------- /blob/states/state-x.yaml: -------------------------------------------------------------------------------- 1 | - styles: 2 | card: 3 | - background-color: 'rgba(255, 255, 255, 0.99)' 4 | - '--button-card-light-color-no-temperature': '#57A8D7' 5 | - overflow: hidden 6 | name: 7 | - color: 'rgba(0, 0, 0, 1)' 8 | state: 9 | - color: 'rgba(0, 0, 0, 0.4)' 10 | value: '[[state-1]]' 11 | - styles: 12 | card: 13 | - background-color: 'rgba(255, 255, 255, 0.5)' 14 | name: 15 | - color: 'rgba(0, 0, 0, 0.4)' 16 | state: 17 | - color: 'rgba(0, 0, 0, 0.2)' 18 | value: '[[state-2]]' -------------------------------------------------------------------------------- /blob/styles/style-card-path.yaml: -------------------------------------------------------------------------------- 1 | card: 2 | - width: 110px 3 | - height: 110px 4 | - letter-spacing: 0.1em; 5 | - font-family: San Francisco 6 | - text-rendering: optimizeLegibility 7 | - font-weight: 700 8 | - color: 'rgba(87, 87, 87, 0.8)' 9 | - font-size: 12px 10 | - background-color: 'rgba(193,119,223, 0.3)' 11 | - border-radius: 15px 12 | - box-shadow: none 13 | - transition: none 14 | custom_fields: 15 | icon_hue: 16 | - top: 15% 17 | - left: 30% 18 | - width: 45px 19 | - position: absolute 20 | info: 21 | - top: 0px 22 | - left: 20px 23 | - width: 40px 24 | - position: absolute 25 | - letter-spacing: 0.03vw 26 | sd1: 27 | - font-size: 12px 28 | - color: 'rgba(0, 0, 0, 0.3)' 29 | - top: 79% 30 | - position: absolute 31 | - width: 100% 32 | grid: 33 | - grid-template-areas: '"i" "n" "s" "sd1 sd1"' 34 | - grid-template-columns: 1fr 35 | - grid-template-rows: 1fr min-content min-content 36 | img_cell: 37 | - align-self: start 38 | - text-align: start 39 | name: 40 | - align-self: center 41 | - text-align: center 42 | - padding-left: 0px 43 | - font-weight: bold 44 | - padding-bottom: 0px 45 | - margin-bottom: '-2px' 46 | - font-size: 12px 47 | - margin-top: 50px 48 | state: 49 | - justify-self: start 50 | - padding-left: 20px 51 | - padding-bottom: 5px 52 | - color: 'rgba(87, 87, 87, 0.5)' 53 | - display: none 54 | sd1: 55 | - align-self: center 56 | - text-align: center -------------------------------------------------------------------------------- /blob/styles/style-card-sensors.yaml: -------------------------------------------------------------------------------- 1 | card: 2 | - width: 165px 3 | - height: 110px 4 | - font-family: San Francisco 5 | - background-color: '#000044' 6 | - text-rendering: optimizeLegibility 7 | - font-weight: 700 8 | - color: '#666' 9 | - font-size: 8px 10 | - background-color: 'rgba(255, 255, 255, 0.9)' 11 | - border-radius: 15px 12 | - padding: 0px 13 | - box-shadow: none 14 | - transition: none 15 | 16 | custom_fields: 17 | icon_hue: 18 | - top: 10% 19 | - left: 4.5% 20 | - width: 40px 21 | - position: absolute 22 | 23 | temp: 24 | - top: 10px 25 | - right: 10px 26 | - position: absolute 27 | - color: '#f69836' 28 | - font-size: 14px 29 | 30 | sd1: 31 | - top: 75px 32 | - left: 8px 33 | - position: absolute 34 | 35 | sd2: 36 | - top: 90px 37 | - left: 8px 38 | - position: absolute 39 | 40 | sd3: 41 | - top: 75px 42 | - left: 60px 43 | - position: absolute 44 | 45 | sd4: 46 | - top: 90px 47 | - left: 60px 48 | - position: absolute 49 | 50 | sd5: 51 | - top: 75px 52 | - left: 115px 53 | - position: absolute 54 | 55 | sd6: 56 | - top: 90px 57 | - left: 115px 58 | - position: absolute 59 | 60 | grid: 61 | - grid-template-areas: '"i temp" "n n" "sd1 sd1" "sd2 sd2" "sd3 sd3" "sd4 sd4" "sd5 sd5" "sd6 sd6"' 62 | - grid-template-columns: 1fr 1fr 63 | - grid-template-rows: 1fr min-content min-content min-content min-content 64 | 65 | name: 66 | - font-weight: bold 67 | - font-size: 12px 68 | - color: '#111' 69 | - top: 55px 70 | - left: 10px 71 | - position: absolute 72 | -------------------------------------------------------------------------------- /blob/styles/style-card.yaml: -------------------------------------------------------------------------------- 1 | card: 2 | - width: 110px 3 | - height: 110px 4 | - letter-spacing: 0.1em; 5 | - font-family: San Francisco 6 | - text-rendering: optimizeLegibility 7 | - font-weight: 700 8 | - color: 'rgba(255, 255, 255, 0.3)' 9 | - font-size: 12px 10 | - background-color: 'rgba(115, 115, 115, 0.2)' 11 | - border-radius: 15px 12 | - box-shadow: none 13 | - transition: none 14 | custom_fields: 15 | icon_hue: 16 | - top: 10% 17 | - left: 4.5% 18 | - width: 40px 19 | - position: absolute 20 | info: 21 | - top: 10px 22 | - left: 65px 23 | - width: 40px 24 | - position: absolute 25 | - letter-spacing: 0.03vw 26 | extra_styles: > 27 | [[[ var radius = 20.5; 28 | 29 | var circumference = radius * 2 * Math.PI; 30 | 31 | var brightness = Math.round( entity.attributes.brightness / 2.54 ); 32 | 33 | return "#c_brightness { transform: rotate(-90deg); transform-origin: 34 | 50% 50%; stroke-dasharray: " + circumference + "; stroke-dashoffset: " 35 | + (circumference - brightness / 100 * circumference) + ";}"; ]]] 36 | grid: 37 | - grid-template-areas: '"i" "n" "s"' 38 | - grid-template-columns: 1fr 39 | - grid-template-rows: 1fr min-content min-content 40 | img_cell: 41 | - align-self: start 42 | - text-align: start 43 | name: 44 | - justify-self: start 45 | - padding-left: 10px 46 | - font-weight: bold 47 | - padding-bottom: 0px 48 | - margin-bottom: '-2px' 49 | state: 50 | - justify-self: start 51 | - padding-left: 10px 52 | - padding-bottom: 5px -------------------------------------------------------------------------------- /blob/styles/style-icon-2.yaml: -------------------------------------------------------------------------------- 1 | card: 2 | - width: 200px 3 | - height: 70px 4 | 5 | - border-radius: 50% 6 | - box-shadow: none 7 | - transition: none 8 | 9 | - background-color: '#fff' 10 | - color: 'rgba(255, 255, 255, 0.3)' 11 | - font-size: 12px 12 | custom_fields: 13 | icon_hue: 14 | - top: 5% 15 | - left: 14% 16 | - width: 60px 17 | - position: absolute 18 | info: 19 | - width: 0px 20 | - position: absolute 21 | 22 | img_cell: 23 | - align-self: start 24 | - text-align: start 25 | 26 | -------------------------------------------------------------------------------- /blob/styles/style-icon.yaml: -------------------------------------------------------------------------------- 1 | card: 2 | - width: 80px 3 | - height: 80px 4 | - box-shadow: none 5 | - transition: none 6 | 7 | custom_fields: 8 | icon_hue: 9 | - top: 5% 10 | - left: 6% 11 | - width: 68px 12 | - position: absolute 13 | 14 | temp: 15 | - display: none 16 | 17 | sd1: 18 | - display: none 19 | 20 | sd2: 21 | - display: none 22 | 23 | sd3: 24 | - display: none 25 | 26 | sd4: 27 | - display: none 28 | 29 | sd5: 30 | - display: none 31 | 32 | sd6: 33 | - display: none -------------------------------------------------------------------------------- /blob/styles/styles-x.yaml: -------------------------------------------------------------------------------- 1 | card: 2 | - width: 110px 3 | - height: 110px 4 | - letter-spacing: 0.1em; 5 | - font-family: San Francisco 6 | - text-rendering: optimizeLegibility 7 | - font-weight: 700 8 | - color: 'rgba(255, 255, 255, 0.3)' 9 | - font-size: 12px 10 | - background-color: 'rgba(115, 115, 115, 0.2)' 11 | - border-radius: 15px 12 | - box-shadow: none 13 | - transition: none 14 | custom_fields: 15 | icon_hue: 16 | - top: 10% 17 | - left: 4.5% 18 | - width: 40px 19 | - position: absolute 20 | info: 21 | - top: 10px 22 | - left: 65px 23 | - width: 40px 24 | - position: absolute 25 | - letter-spacing: 0.03vw 26 | extra_styles: > 27 | [[[ var radius = 20.5; 28 | 29 | var circumference = radius * 2 * Math.PI; 30 | 31 | var brightness = Math.round( entity.attributes.brightness / 2.54 ); 32 | 33 | return "#c_brightness { transform: rotate(-90deg); transform-origin: 34 | 50% 50%; stroke-dasharray: " + circumference + "; stroke-dashoffset: " 35 | + (circumference - brightness / 100 * circumference) + ";}"; ]]] 36 | grid: 37 | - grid-template-areas: '"i" "n" "s"' 38 | - grid-template-columns: 1fr 39 | - grid-template-rows: 1fr min-content min-content 40 | img_cell: 41 | - align-self: start 42 | - text-align: start 43 | name: 44 | - justify-self: start 45 | - padding-left: 10px 46 | - font-weight: bold 47 | - padding-bottom: 0px 48 | - margin-bottom: '-2px' 49 | state: 50 | - justify-self: start 51 | - padding-left: 10px 52 | - padding-bottom: 5px -------------------------------------------------------------------------------- /blob/taps/tap-action-man.yaml: -------------------------------------------------------------------------------- 1 | action: call-service 2 | service: browser_mod.popup 3 | service_data: 4 | card: 5 | cards: 6 | 7 | - type: custom:layout-card 8 | layout: vertical 9 | column_width: 24% 10 | cards: 11 | - template: es-icon 12 | type: 'custom:decluttering-card' 13 | variables: 14 | - template: '[[template]]' 15 | - entity-1: '[[entity-1]]' 16 | - name-1: '[[name-1]]' 17 | - state-1: 'cleaning' 18 | - state-2: 'cleaning' 19 | - circle-1: entity.attributes.current_position 20 | - circle-2: 1 21 | - circle-3: 'open' 22 | - circle-4: current_position 23 | - scene-hell: '[[scene-hell]]' 24 | - scene-relax: '[[scene-relax]]' 25 | 26 | - type: custom:hui-vertical-stack-card 27 | cards: 28 | - style: 'ha-card { width: 10px; }' 29 | template: device 30 | type: 'custom:decluttering-card' 31 | variables: 32 | - content: '[[name-1]]' 33 | 34 | - type: markdown 35 | style: > 36 | ha-card { 37 | box-shadow: none; 38 | height: 100%; 39 | background: none; 40 | font-family: San Francisco; 41 | font-weight: 700; 42 | font-size: 13px; 43 | color: #fff; 44 | text-rendering: optimizeLegibility; 45 | text-align: center; 46 | position: static; 47 | margin-top: -20px; 48 | margin-bottom: -25px; 49 | } 50 | content: > 51 | 52 | {% if is_state('sensor.vacuum_status', 'Status: Cleaning') %} 53 | Reinigung{% endif %} 54 | {% if is_state('sensor.vacuum_status', 'Status: Paused') %} 55 | Pausiert{% endif %} 56 | {% if is_state('sensor.vacuum_status', 'Status: Returning home') %} 57 | Zurück{% endif %} 58 | {% if is_state('sensor.vacuum_status', 'Status: Charging') %} 59 | Angedockt{% endif %} 60 | {% if is_state('sensor.vacuum_status', 'Status: Charger disconnected') %} 61 | Standby{% endif %} 62 | 63 | 64 | 65 | - entities: 66 | - actionSize: 50px 67 | actions: 68 | - icon: 'mdi:play-pause' 69 | name: Start/Pause 70 | service: > 71 | [[[ if (states['[[entity-1]]'].state === 72 | 'docked' || states['[[entity-1]]'].state === 73 | 'paused') return 'vacuum.start'; else return 74 | 'vacuum.pause'; ]]] 75 | service_data: 76 | entity_id: '[[entity-1]]' 77 | 78 | - icon: 'mdi:map-marker-question' 79 | name: Lokalisieren 80 | service: vacuum.locate 81 | service_data: 82 | entity_id: '[[entity-1]]' 83 | 84 | - icon: 'mdi:home-map-marker' 85 | name: Beenden 86 | service: vacuum.return_to_base 87 | service_data: 88 | entity_id: '[[entity-1]]' 89 | 90 | 91 | 92 | actionsInARow: 3 93 | borderRadius: 20px 94 | brightnessHeight: 250px 95 | brightnessWidth: 100px 96 | entity: '[[entity-1]]' 97 | fullscreen: false 98 | icon: true 99 | sliderColor: '#f8cd41' 100 | sliderTrackColor: 'rgba(25, 25, 25, 0.9)' 101 | style: > 102 | #popup > div.action-holder > div > div { 103 | margin: 1em 1em 1em 1em; 104 | font-family: 'San Francisco'; 105 | font-weight: 700; 106 | font-size: 0.9em; 107 | color: #fff; 108 | } 109 | #brightnessValue { 110 | display: none !important; 111 | } 112 | #popup { 113 | margin: 0 0 0.8em 0; 114 | } 115 | #popup > div.range-holder { 116 | display: none !important; 117 | } 118 | 119 | type: 'custom:light-popup-card' 120 | show_header_toggle: false 121 | type: entities 122 | 123 | style: | 124 | ha-card { 125 | box-shadow: none; 126 | border-radius: 1em; 127 | background: rgba(0, 0, 0, 0.9); 128 | padding: 20px; 129 | font-family: 'San Francisco'; 130 | font-weight: 700; 131 | color: white; 132 | } 133 | .card-header { 134 | margin-left: 0.4em; 135 | margin-bottom: 0.1em; 136 | font-family: 'San Francisco'; 137 | letter-spacing: 0.005em; 138 | font-weight: 700; 139 | margin-top: -100px; 140 | } 141 | title: ' ' 142 | 143 | 144 | - entities: 145 | 146 | - entity: '[[entity-2]]' 147 | style: | 148 | ha-card { 149 | box-shadow: none; 150 | border-radius: 1em; 151 | background: rgba(0, 0, 0, 0.9); 152 | padding: 20px; 153 | font-family: 'San Francisco'; 154 | font-weight: 700; 155 | color: white; 156 | } 157 | - entity: '[[entity-3]]' 158 | - entity: '[[entity-4]]' 159 | - entity: '[[entity-5]]' 160 | - entity: '[[entity-6]]' 161 | - entity: '[[entity-7]]' 162 | - entity: '[[entity-8]]' 163 | show_header_toggle: false 164 | type: entities 165 | 166 | 167 | style: | 168 | ha-card { 169 | box-shadow: none; 170 | border-radius: 1em; 171 | background: rgba(0, 0, 0, 0.9); 172 | padding: 40px 10px 10px 0px; 173 | font-family: 'San Francisco'; 174 | font-weight: 700; 175 | color: white; 176 | margin: 10px; 177 | font-size: 10px; 178 | } 179 | .card-header { 180 | margin-left: 0.4em; 181 | margin-bottom: 0.1em; 182 | font-family: 'San Francisco'; 183 | letter-spacing: 0.005em; 184 | font-weight: 700; 185 | margin-top: -100px; 186 | } 187 | title: ' ' 188 | 189 | 190 | type: custom:hui-vertical-stack-card 191 | deviceID: this 192 | style: 193 | '--ha-card-background': transparent 194 | '--ha-card-border-radius': transparent 195 | '--iron-icon-fill-color': '#ffffff' 196 | background: 'rgba(0, 0, 0, 0.95)' 197 | border-radius: 20px 198 | font-family: San Francisco !important; 199 | font-weight: 700 !important; 200 | width: 400px; 201 | title: ' ' -------------------------------------------------------------------------------- /logos/Custom cards for Home Assistant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/Custom cards for Home Assistant.png -------------------------------------------------------------------------------- /logos/Mattias Persson.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/Mattias Persson.png -------------------------------------------------------------------------------- /logos/Thomas Lovén.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/Thomas Lovén.png -------------------------------------------------------------------------------- /logos/blob-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/blob-1.png -------------------------------------------------------------------------------- /logos/blob-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/blob-2.png -------------------------------------------------------------------------------- /logos/blob-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/blob-3.png -------------------------------------------------------------------------------- /logos/blob-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/blob-4.png -------------------------------------------------------------------------------- /logos/blob-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/blob-5.png -------------------------------------------------------------------------------- /logos/blob-video.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/blob-video.mp4 -------------------------------------------------------------------------------- /logos/case.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/case.gif -------------------------------------------------------------------------------- /logos/case.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/case.jpg -------------------------------------------------------------------------------- /logos/the blob.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/the blob.gif -------------------------------------------------------------------------------- /logos/unraid-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/unraid-1.png -------------------------------------------------------------------------------- /logos/unraid-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/logos/unraid-2.png -------------------------------------------------------------------------------- /www/DarkBlue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/DarkBlue.jpg -------------------------------------------------------------------------------- /www/DarkBlue_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/DarkBlue_2.jpg -------------------------------------------------------------------------------- /www/DarkGreen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/DarkGreen.jpg -------------------------------------------------------------------------------- /www/DarkGreen_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/DarkGreen_2.jpg -------------------------------------------------------------------------------- /www/Disk-5s-400px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /www/Fluid-11.1s-101px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /www/Fluid-20s-100px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /www/Fluid-20s-150px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /www/Foam-10s-120px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /www/Foam-10s-1644px-3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /www/LightBlue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/LightBlue.jpg -------------------------------------------------------------------------------- /www/LightBlue_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/LightBlue_2.jpg -------------------------------------------------------------------------------- /www/LightGreen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/LightGreen.jpg -------------------------------------------------------------------------------- /www/LightGreen_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/LightGreen_2.jpg -------------------------------------------------------------------------------- /www/Mountains.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/Mountains.jpg -------------------------------------------------------------------------------- /www/Orange.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/Orange.jpg -------------------------------------------------------------------------------- /www/Orange_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/Orange_2.jpg -------------------------------------------------------------------------------- /www/Red.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/Red.jpg -------------------------------------------------------------------------------- /www/Red_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/Red_2.jpg -------------------------------------------------------------------------------- /www/Vacuum - On.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /www/Valley-20s-100px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /www/Wave-10s-100px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /www/Wave-20s-100px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /www/ambiance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/ambiance.png -------------------------------------------------------------------------------- /www/classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/classic.png -------------------------------------------------------------------------------- /www/color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/color.png -------------------------------------------------------------------------------- /www/css/sanfracisco.css: -------------------------------------------------------------------------------- 1 | 2 | /** Ultra Light */ 3 | @font-face { 4 | font-family: "San Francisco"; 5 | font-weight: 100; 6 | src: url("sanfranciscodisplay-ultralight-webfont.woff"); 7 | } 8 | 9 | /** Thin */ 10 | @font-face { 11 | font-family: "San Francisco"; 12 | font-weight: 200; 13 | src: url("sanfranciscodisplay-thin-webfont.woff"); 14 | } 15 | 16 | /** Regular */ 17 | @font-face { 18 | font-family: "San Francisco"; 19 | font-weight: 400; 20 | src: url("sanfranciscodisplay-regular-webfont.woff"); 21 | } 22 | 23 | /** Medium */ 24 | @font-face { 25 | font-family: "San Francisco"; 26 | font-weight: 500; 27 | src: url("sanfranciscodisplay-medium-webfont.woff"); 28 | } 29 | 30 | /** Semi Bold */ 31 | @font-face { 32 | font-family: "San Francisco"; 33 | font-weight: 600; 34 | src: url("sanfranciscodisplay-semibold-webfont.woff"); 35 | } 36 | 37 | /** Bold */ 38 | @font-face { 39 | font-family: "San Francisco"; 40 | font-weight: 700; 41 | src: url("sanfranciscodisplay-bold-webfont.woff"); 42 | } 43 | 44 | * { 45 | font-family: "San Francisco" 46 | } 47 | 48 | h1 { font-weight: 700; } 49 | h2 { font-weight: 600; } 50 | h3 { font-weight: 500; } 51 | h4 { font-weight: 500; font-family: "San Francisco";} 52 | h5 { font-weight: 500; } 53 | p { font-weight: 400; } 54 | p.thin { font-weight: 200; } 55 | p.ultralight { font-weight: 100; } 56 | -------------------------------------------------------------------------------- /www/day.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/day.jpeg -------------------------------------------------------------------------------- /www/day_2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/day_2.jpeg -------------------------------------------------------------------------------- /www/fan.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /www/images/abstract.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/abstract.jpg -------------------------------------------------------------------------------- /www/images/apple-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-1.jpg -------------------------------------------------------------------------------- /www/images/apple-10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-10.jpg -------------------------------------------------------------------------------- /www/images/apple-11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-11.jpg -------------------------------------------------------------------------------- /www/images/apple-12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-12.jpg -------------------------------------------------------------------------------- /www/images/apple-13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-13.jpg -------------------------------------------------------------------------------- /www/images/apple-14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-14.jpg -------------------------------------------------------------------------------- /www/images/apple-15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-15.jpg -------------------------------------------------------------------------------- /www/images/apple-16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-16.jpg -------------------------------------------------------------------------------- /www/images/apple-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-2.jpg -------------------------------------------------------------------------------- /www/images/apple-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-3.jpg -------------------------------------------------------------------------------- /www/images/apple-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-4.jpg -------------------------------------------------------------------------------- /www/images/apple-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-5.jpg -------------------------------------------------------------------------------- /www/images/apple-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-6.jpg -------------------------------------------------------------------------------- /www/images/apple-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-7.jpg -------------------------------------------------------------------------------- /www/images/apple-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-8.jpg -------------------------------------------------------------------------------- /www/images/apple-9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/apple-9.jpg -------------------------------------------------------------------------------- /www/images/ios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/images/ios.jpg -------------------------------------------------------------------------------- /www/night.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fastender/blob/b8029c7a557a48215b07ee7a7595a1c3c44cc494/www/night.jpeg --------------------------------------------------------------------------------