mirror of
https://github.com/CeeWeasel/fresh-home.git
synced 2026-08-09 10:30:14 -04:00
Bunches of fixes nd changes
This commit is contained in:
@@ -14,7 +14,7 @@ condition:
|
||||
conditions:
|
||||
- condition: state
|
||||
entity_id: binary_sensor.have_custody
|
||||
state: "off"
|
||||
state: "on"
|
||||
- condition: state
|
||||
entity_id: person.kristy
|
||||
state: "home"
|
||||
|
||||
@@ -6,6 +6,15 @@ trigger:
|
||||
# I've moved
|
||||
- platform: state
|
||||
entity_id:
|
||||
- input_select.podein_kids
|
||||
# Kristy moved
|
||||
- input_select.kristy_status_dropdown
|
||||
- input_boolean.kristy_home
|
||||
# Custody changed
|
||||
- binary_sensor.have_custody
|
||||
# Sleeping status changed
|
||||
- input_boolean.ebin_is_awake
|
||||
- input_boolean.ebin_in_bed
|
||||
- input_select.ebin_status_dropdown
|
||||
- input_boolean.ebin_home
|
||||
condition:
|
||||
|
||||
@@ -6,7 +6,7 @@ trigger:
|
||||
from: "playing"
|
||||
condition:
|
||||
- condition: state
|
||||
entity_id: input_boolean.nursery_asleep
|
||||
entity_id: input_boolean.girls_room_asleep
|
||||
state: "on"
|
||||
- condition: or
|
||||
conditions:
|
||||
|
||||
@@ -164,29 +164,6 @@ action:
|
||||
target:
|
||||
entity_id: input_select.nursery_wled
|
||||
|
||||
# - action: automation.trigger
|
||||
# target:
|
||||
# entity_id: automation.nursery_wled_changed
|
||||
|
||||
# - choose:
|
||||
# - conditions: "{{is_state('input_boolean.bridget_home','on')}}"
|
||||
# sequence:
|
||||
# - action: input_boolean.turn_on
|
||||
# data: {}
|
||||
# target:
|
||||
# entity_id: input_boolean.nursery_asleep
|
||||
|
||||
# - delay: "00:00:05"
|
||||
|
||||
# - choose:
|
||||
# - conditions: "{{is_state('media_player.ytube_music_player','on')}}"
|
||||
# sequence:
|
||||
# - action: media_player.turn_off
|
||||
# target:
|
||||
# entity_id: media_player.ytube_music_player
|
||||
|
||||
- delay: "00:25:00"
|
||||
|
||||
- choose:
|
||||
- conditions: "{{is_state('input_boolean.emmett_home','on')}}"
|
||||
sequence:
|
||||
@@ -195,6 +172,8 @@ action:
|
||||
target:
|
||||
entity_id: input_boolean.boys_room_asleep
|
||||
|
||||
- delay: "00:25:00"
|
||||
|
||||
- action: input_select.select_option
|
||||
target:
|
||||
entity_id: input_select.boys_room_mode
|
||||
|
||||
@@ -125,7 +125,9 @@ action:
|
||||
state: "unavailable"
|
||||
sequence:
|
||||
- action: input_boolean.turn_off
|
||||
entity_id: input_boolean.emmett_in_bed
|
||||
entity_id:
|
||||
- input_boolean.emmett_in_bed
|
||||
- input_boolean.boys_room_asleep
|
||||
- action: input_boolean.turn_on
|
||||
entity_id: input_boolean.emmett_is_awake
|
||||
|
||||
@@ -147,7 +149,9 @@ action:
|
||||
state: "unavailable"
|
||||
sequence:
|
||||
- action: input_boolean.turn_off
|
||||
entity_id: input_boolean.bridget_in_bed
|
||||
entity_id:
|
||||
- input_boolean.bridget_in_bed
|
||||
- input_boolean.girls_room_asleep
|
||||
- action: input_boolean.turn_on
|
||||
entity_id: input_boolean.bridget_is_awake
|
||||
|
||||
|
||||
@@ -5,13 +5,14 @@ trigger:
|
||||
- platform: state
|
||||
entity_id: input_boolean.boys_room_asleep
|
||||
to: "on"
|
||||
|
||||
- platform: state
|
||||
entity_id: media_player.ma_boys_room_clock
|
||||
to: "idle"
|
||||
for: 00:00:05
|
||||
|
||||
condition:
|
||||
- alias: "Do we want to be alerted?"
|
||||
- alias: "Is the boys' room asleep?"
|
||||
condition: state
|
||||
entity_id: input_boolean.boys_room_asleep
|
||||
state: "on"
|
||||
|
||||
@@ -4,9 +4,7 @@ description: "Handles the lights in the furnace room"
|
||||
mode: queued
|
||||
triggers:
|
||||
- id: door_open
|
||||
entity_id: >-
|
||||
binary_sensor.hvac_multisensor_door,
|
||||
binary_sensor.furnace_room_door_contact
|
||||
entity_id: binary_sensor.water_softener_multisensor_door
|
||||
from: "off"
|
||||
to: "on"
|
||||
trigger: state
|
||||
@@ -14,9 +12,7 @@ triggers:
|
||||
When one of the door sensors detect that the furnace room door has been
|
||||
opened
|
||||
- id: door_closed
|
||||
entity_id: >-
|
||||
binary_sensor.hvac_multisensor_door,
|
||||
binary_sensor.furnace_room_door_contact
|
||||
entity_id: binary_sensor.water_softener_multisensor_door
|
||||
to: "off"
|
||||
for: "00:10:00"
|
||||
trigger: state
|
||||
|
||||
@@ -28,4 +28,4 @@ action:
|
||||
- action: input_boolean.turn_off
|
||||
data: {}
|
||||
target:
|
||||
entity_id: input_boolean.nursery_asleep
|
||||
entity_id: input_boolean.girls_room_asleep
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
alias: Continue Nursery White Noise
|
||||
id: automation_continue_nursery_white_noise
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: media_player.girls_room_hub
|
||||
to: "off"
|
||||
for: "00:00:02"
|
||||
- platform: state
|
||||
entity_id: media_player.girls_room_hub
|
||||
to: "idle"
|
||||
for: "00:00:02"
|
||||
condition:
|
||||
- condition: state
|
||||
entity_id: input_boolean.nursery_asleep
|
||||
state: "on"
|
||||
|
||||
action:
|
||||
#- action: input_select.select_option
|
||||
# data:
|
||||
# entity_id: input_select.master_bedroom_mode
|
||||
# option: 'Off'
|
||||
- action: input_select.select_option
|
||||
data:
|
||||
entity_id: input_select.google_home
|
||||
option: "Nursery"
|
||||
- action: input_select.select_option
|
||||
data:
|
||||
entity_id: input_select.ambient_sound
|
||||
option: "Thunderstorm"
|
||||
- action: input_number.set_value
|
||||
data:
|
||||
entity_id: input_number.volume_ambientsounds
|
||||
value: "0.6"
|
||||
- action: script.ambientsounds
|
||||
@@ -3,7 +3,7 @@ id: automation_nursery_white_noise_off
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: input_boolean.nursery_asleep
|
||||
entity_id: input_boolean.girls_room_asleep
|
||||
to: "off"
|
||||
|
||||
action:
|
||||
|
||||
@@ -3,9 +3,21 @@ id: automation_nursery_white_noise_on
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: input_boolean.nursery_asleep
|
||||
entity_id: input_boolean.girls_room_asleep
|
||||
to: "on"
|
||||
|
||||
- platform: state
|
||||
entity_id: media_player.ma_girls_room_hub
|
||||
to: "idle"
|
||||
for: 00:00:05
|
||||
|
||||
condition:
|
||||
- alias: "Is the girls' room asleep?"
|
||||
condition: state
|
||||
entity_id: input_boolean.girls_room_asleep
|
||||
state: "on"
|
||||
|
||||
|
||||
action:
|
||||
- choose:
|
||||
- conditions:
|
||||
|
||||
@@ -59,7 +59,7 @@ triggers:
|
||||
entity_id: input_boolean.master_bedroom_occupied
|
||||
|
||||
- trigger: state
|
||||
entity_id: input_boolean.nursery_asleep
|
||||
entity_id: input_boolean.girls_room_asleep
|
||||
|
||||
- trigger: state
|
||||
entity_id: input_boolean.master_bedroom_asleep
|
||||
@@ -115,7 +115,7 @@ action:
|
||||
state: "off"
|
||||
- alias: "Nusery not asleep"
|
||||
condition: state
|
||||
entity_id: input_boolean.nursery_asleep
|
||||
entity_id: input_boolean.girls_room_asleep
|
||||
state: "off"
|
||||
- alias: "Nursery fan on"
|
||||
condition: state
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
id: set_house_to_early_afternoon
|
||||
alias: Set House to Early Afternoon
|
||||
mode: single
|
||||
# Testing if this will update, save, and push just fine
|
||||
|
||||
# platform: tod
|
||||
# name: Early Afternoon
|
||||
# after: '12:00'
|
||||
# before: '15:00'
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
@@ -19,10 +23,6 @@ condition:
|
||||
state: Early Afternoon
|
||||
|
||||
action:
|
||||
# - action: homeassistant.turn_on
|
||||
# entity_id:
|
||||
# - input_boolean.clint_needs_pm_meds
|
||||
|
||||
- action: input_select.select_option
|
||||
data:
|
||||
entity_id: input_select.time_of_day
|
||||
|
||||
@@ -2,6 +2,11 @@ id: set_house_to_early_evening
|
||||
alias: Set House to Early Evening
|
||||
mode: single
|
||||
|
||||
# platform: tod
|
||||
# name: Early Evening
|
||||
# after: '17:00'
|
||||
# before: '19:00'
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.early_evening
|
||||
|
||||
@@ -2,6 +2,11 @@ id: set_house_to_early_morning
|
||||
alias: Set House to Early Morning
|
||||
mode: single
|
||||
|
||||
# platform: tod
|
||||
# name: Early Morning
|
||||
# after: '04:00'
|
||||
# before: '06:00'
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.early_morning
|
||||
|
||||
@@ -2,6 +2,11 @@ id: set_house_to_evening
|
||||
alias: Set House to Evening
|
||||
mode: single
|
||||
|
||||
# platform: tod
|
||||
# name: Evening
|
||||
# after: '19:00'
|
||||
# before: '22:00'
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.evening
|
||||
|
||||
@@ -2,6 +2,11 @@ id: set_house_to_late_afternoon
|
||||
alias: Set House to Late Afternoon
|
||||
mode: single
|
||||
|
||||
# platform: tod
|
||||
# name: Late Afternoon
|
||||
# after: '15:00'
|
||||
# before: '17:00'
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.late_afternoon
|
||||
|
||||
@@ -2,6 +2,11 @@ id: set_house_to_late_evening
|
||||
alias: Set House to Late Evening
|
||||
mode: single
|
||||
|
||||
# platform: tod
|
||||
# name: Late Evening
|
||||
# after: '22:00'
|
||||
# before: '00:00'
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.late_evening
|
||||
@@ -53,7 +58,7 @@ action:
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_boolean.ebin_in_bed
|
||||
entity_id: input_boolean.ebin_home
|
||||
state: "on"
|
||||
- condition: state
|
||||
entity_id: input_boolean.ebin_in_bed
|
||||
@@ -64,13 +69,4 @@ action:
|
||||
- action: homeassistant.turn_off
|
||||
entity_id: input_boolean.ebin_is_awake
|
||||
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: media_player.girls_room_hub
|
||||
state: "playing"
|
||||
sequence:
|
||||
- action: media_player.turn_off
|
||||
entity_id: media_player.girls_room_hub
|
||||
|
||||
- delay: "00:00:30"
|
||||
|
||||
@@ -2,6 +2,11 @@ id: set_house_to_late_morning
|
||||
alias: Set House to Late Morning
|
||||
mode: single
|
||||
|
||||
# platform: tod
|
||||
# name: Late Morning
|
||||
# after: '09:00'
|
||||
# before: '12:00'
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.late_morning
|
||||
@@ -66,7 +71,7 @@ action:
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_boolean.kristy_in_bed
|
||||
entity_id: input_boolean.kristy_home
|
||||
state: "on"
|
||||
- condition: state
|
||||
entity_id: input_boolean.kristy_in_bed
|
||||
@@ -79,7 +84,7 @@ action:
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_boolean.marshall_in_bed
|
||||
entity_id: input_boolean.marshall_home
|
||||
state: "on"
|
||||
- condition: state
|
||||
entity_id: input_boolean.marshall_in_bed
|
||||
@@ -92,7 +97,7 @@ action:
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_boolean.tess_in_bed
|
||||
entity_id: input_boolean.tess_home
|
||||
state: "on"
|
||||
- condition: state
|
||||
entity_id: input_boolean.tess_in_bed
|
||||
@@ -105,7 +110,7 @@ action:
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_boolean.ebin_in_bed
|
||||
entity_id: input_boolean.ebin_home
|
||||
state: "on"
|
||||
- condition: state
|
||||
entity_id: input_boolean.ebin_in_bed
|
||||
|
||||
@@ -2,6 +2,11 @@ id: set_house_to_morning
|
||||
alias: Set House to Morning
|
||||
mode: single
|
||||
|
||||
# platform: tod
|
||||
# name: Morning
|
||||
# after: '06:00'
|
||||
# before: '09:00'
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.morning
|
||||
@@ -24,6 +29,9 @@ action:
|
||||
option: Morning
|
||||
|
||||
- action: homeassistant.turn_off
|
||||
entity_id: input_boolean.nursery_asleep
|
||||
entity_id: input_boolean.boys_room_asleep
|
||||
|
||||
- action: homeassistant.turn_off
|
||||
entity_id: input_boolean.girls_room_asleep
|
||||
|
||||
- delay: "00:00:30"
|
||||
|
||||
@@ -2,6 +2,11 @@ id: set_house_to_night
|
||||
alias: Set House to Night
|
||||
mode: single
|
||||
|
||||
# platform: tod
|
||||
# name: Night
|
||||
# after: '00:00'
|
||||
# before: '04:00'
|
||||
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.night
|
||||
@@ -41,7 +46,7 @@ action:
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_boolean.tess_in_bed
|
||||
entity_id: input_boolean.tess_home
|
||||
state: "on"
|
||||
- condition: state
|
||||
entity_id: input_boolean.tess_in_bed
|
||||
|
||||
@@ -687,7 +687,7 @@ sensors:
|
||||
need_salt:
|
||||
unique_id: templatebinarysensor.need_salt
|
||||
friendly_name: Need Salt
|
||||
value_template: "{{ is_state('binary_sensor.hvac_multisensor_status', 'on') and is_state('sensor.hvac_multisensor_salt_level_in_bags','0') }}"
|
||||
value_template: "{{ is_state('binary_sensor.water_softener_multisensor_status', 'on') and is_state('sensor.water_softener_multisensor_salt_level_in_bags','0') }}"
|
||||
icon_template: mdi:shaker-outline
|
||||
delay_on:
|
||||
seconds: 900
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
name: Master Bedroom Asleep
|
||||
icon: mdi:sleep
|
||||
@@ -1,2 +0,0 @@
|
||||
name: Nursery Asleep
|
||||
icon: mdi:sleep
|
||||
@@ -1 +0,0 @@
|
||||
name: Nursery White Noise
|
||||
@@ -2,12 +2,19 @@ lock:
|
||||
- platform: template
|
||||
unique_id: templatelock.patio_door
|
||||
name: Patio Door
|
||||
value_template: "{{ is_state('switch.shelly_sliding_glass_door', 'on') }}"
|
||||
#value_template: "{{ is_state('switch.shelly_sliding_glass_door', 'on') }}"
|
||||
value_template: "{{ is_state('light.deck', 'on') }}"
|
||||
lock:
|
||||
action: switch.turn_on
|
||||
# action: switch.turn_on
|
||||
# target:
|
||||
# entity_id: switch.shelly_sliding_glass_door
|
||||
action: light.turn_on
|
||||
target:
|
||||
entity_id: switch.shelly_sliding_glass_door
|
||||
entity_id: light.deck
|
||||
unlock:
|
||||
action: switch.turn_off
|
||||
# action: switch.turn_off
|
||||
# target:
|
||||
# entity_id: switch.shelly_sliding_glass_door
|
||||
action: light.turn_off
|
||||
target:
|
||||
entity_id: switch.shelly_sliding_glass_door
|
||||
entity_id: light.deck
|
||||
|
||||
@@ -8,11 +8,17 @@ substitutions:
|
||||
board: wemos_d1_mini32
|
||||
static_ip: !secret hvac-multisensor-ip
|
||||
|
||||
# For i2c devices
|
||||
# In this case it's just the display
|
||||
sda_pin: GPIO21
|
||||
scl_pin: GPIO22
|
||||
|
||||
door_pin: GPIO19
|
||||
one_wire_pin: GPIO14
|
||||
trigger_pin: GPIO04
|
||||
|
||||
one_wire_pin: GPIO26
|
||||
|
||||
# For the ultrasonic sensor
|
||||
trigger_pin: GPIO16
|
||||
echo_pin: GPIO13
|
||||
|
||||
#mdc_pin: GPIO23
|
||||
@@ -21,8 +27,8 @@ substitutions:
|
||||
#power_pin: GPIO5
|
||||
|
||||
packages:
|
||||
#wifi: !include common/wifi_no_power_save.yaml
|
||||
ethernet: !include common/ethernet.yaml
|
||||
# network: !include common/ethernet.yaml
|
||||
network: !include common/wifi.yaml
|
||||
device_base: !include common/device_base.yaml
|
||||
ble_proxy: !include common/ble_proxy.yaml
|
||||
|
||||
@@ -30,34 +36,14 @@ esphome:
|
||||
name: ${devicename}
|
||||
friendly_name: ${friendly_name}
|
||||
name_add_mac_suffix: false
|
||||
on_boot:
|
||||
- priority: -100
|
||||
then:
|
||||
- lambda: |-
|
||||
if (id(oled)) {
|
||||
id(oled_enabled) = true;
|
||||
} else {
|
||||
id(oled_enabled) = false;
|
||||
}
|
||||
|
||||
esp32:
|
||||
board: ${board}
|
||||
framework:
|
||||
type: esp-idf
|
||||
|
||||
# web_server:
|
||||
# port: 80
|
||||
# version: 3
|
||||
# include_internal: true
|
||||
|
||||
# Enable logging
|
||||
logger:
|
||||
level: DEBUG
|
||||
logs:
|
||||
sensor: INFO
|
||||
component: INFO
|
||||
ultrasonic: INFO
|
||||
ethernet: DEBUG
|
||||
|
||||
api: # Using settings from common/device_base.yaml
|
||||
|
||||
@@ -74,13 +60,22 @@ globals:
|
||||
- id: screen_power
|
||||
type: bool
|
||||
restore_value: yes
|
||||
initial_value: 'true'
|
||||
initial_value: 'false'
|
||||
|
||||
font:
|
||||
- file: 'CascadiaMonoPL.ttf'
|
||||
- file: 'fonts/CascadiaMonoPL.ttf'
|
||||
id: font1
|
||||
size: 17
|
||||
|
||||
# - file: "gfonts://Roboto"
|
||||
# id: roboto_20
|
||||
# size: 20
|
||||
|
||||
# - file: "gfonts://Material+Symbols+Outlined"
|
||||
# id: icons_50
|
||||
# size: 50
|
||||
# glyphs: ["\U0000e425"] # mdi-timer
|
||||
|
||||
one_wire:
|
||||
- platform: gpio
|
||||
pin: ${one_wire_pin}
|
||||
@@ -142,7 +137,7 @@ sensor:
|
||||
trigger_pin: ${trigger_pin}
|
||||
echo_pin: ${echo_pin}
|
||||
id: ultrasonic_source
|
||||
#update_interval: 5s
|
||||
update_interval: 1s
|
||||
internal: True
|
||||
filters:
|
||||
- sliding_window_moving_average:
|
||||
@@ -221,24 +216,21 @@ binary_sensor:
|
||||
filters:
|
||||
- invert:
|
||||
|
||||
# switch:
|
||||
# - platform: template
|
||||
# id: display_switch
|
||||
# name: "Display"
|
||||
# lambda: |-
|
||||
# if (id(oled_enabled)) {
|
||||
# if (id(screen_power)) {
|
||||
# id(oled).turn_on();
|
||||
# } else {
|
||||
# id(oled).turn_off();
|
||||
# }
|
||||
# }
|
||||
# return id(screen_power);
|
||||
# turn_on_action:
|
||||
# - lambda: |-
|
||||
# id(screen_power) = true;
|
||||
# // id(oled).turn_on();
|
||||
# turn_off_action:
|
||||
# - lambda: |-
|
||||
# id(screen_power) = false;
|
||||
# // id(oled).turn_off();
|
||||
switch:
|
||||
- platform: template
|
||||
id: display_switch
|
||||
icon: mdi:console
|
||||
name: "Display"
|
||||
lambda: |-
|
||||
// if (id(screen_power)) {
|
||||
// id(oled).turn_on();
|
||||
// } else {
|
||||
// id(oled).turn_off();
|
||||
// }
|
||||
return id(screen_power);
|
||||
turn_on_action:
|
||||
- lambda: |-
|
||||
id(screen_power) = true;
|
||||
turn_off_action:
|
||||
- lambda: |-
|
||||
id(screen_power) = false;
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
# 3v3 en svp sun 34 35 32 33 25 26 27 14 12 gnd 13 sd2 sd3 gnd 5v
|
||||
substitutions:
|
||||
devicename: water-softener-multisensor
|
||||
entity_name: water_softener_multisensor
|
||||
friendly_name: Water Softener MultiSensor
|
||||
comment: Clever Water Softener MultiSensor
|
||||
platform: ESP32
|
||||
board: wemos_d1_mini32
|
||||
static_ip: !secret water-softener-multisensor-ip
|
||||
|
||||
door_pin: GPIO18
|
||||
|
||||
# For the ultrasonic sensor
|
||||
trigger_pin: GPIO16
|
||||
echo_pin: GPIO17
|
||||
|
||||
packages:
|
||||
# network: !include common/ethernet.yaml
|
||||
network: !include common/wifi.yaml
|
||||
device_base: !include common/device_base.yaml
|
||||
ble_proxy: !include common/ble_proxy.yaml
|
||||
|
||||
esphome:
|
||||
name: ${devicename}
|
||||
friendly_name: ${friendly_name}
|
||||
name_add_mac_suffix: false
|
||||
|
||||
esp32:
|
||||
board: ${board}
|
||||
framework:
|
||||
type: esp-idf
|
||||
|
||||
# Enable logging
|
||||
logger:
|
||||
|
||||
api: # Using settings from common/device_base.yaml
|
||||
|
||||
ota: # Using settings from common/device_base.yaml
|
||||
|
||||
esp32_ble_tracker:
|
||||
|
||||
sensor:
|
||||
- platform: ultrasonic
|
||||
trigger_pin: ${trigger_pin}
|
||||
echo_pin: ${echo_pin}
|
||||
id: ultrasonic_source
|
||||
update_interval: 1s
|
||||
internal: True
|
||||
filters:
|
||||
- sliding_window_moving_average:
|
||||
window_size: 5
|
||||
send_every: 5
|
||||
send_first_at: 1
|
||||
on_value:
|
||||
then:
|
||||
- sensor.template.publish:
|
||||
id: distance_from_bottom
|
||||
state: !lambda 'return id(ultrasonic_source).state;'
|
||||
|
||||
- sensor.template.publish:
|
||||
id: distance_from_top
|
||||
state: !lambda 'return id(ultrasonic_source).state;'
|
||||
|
||||
- platform: template
|
||||
unit_of_measurement: "cm"
|
||||
state_class: measurement
|
||||
id: distance_from_bottom
|
||||
name: "Salt Level in CM"
|
||||
icon: mdi:arrow-collapse-up
|
||||
disabled_by_default: true
|
||||
#update_interval: 5s
|
||||
filters:
|
||||
- lambda: 'return (0.94 - (id(ultrasonic_source).state)) * 100;'
|
||||
on_value:
|
||||
then:
|
||||
- sensor.template.publish:
|
||||
id: level_in_bags
|
||||
state: !lambda 'return id(distance_from_bottom).state;'
|
||||
|
||||
- platform: template
|
||||
unit_of_measurement: "cm"
|
||||
state_class: measurement
|
||||
id: distance_from_top
|
||||
name: "Salt Level From Top in CM"
|
||||
icon: mdi:arrow-collapse-down
|
||||
disabled_by_default: true
|
||||
#update_interval: 5s
|
||||
filters:
|
||||
- lambda: 'return (id(ultrasonic_source).state) * 100;'
|
||||
|
||||
- platform: template
|
||||
unit_of_measurement: "bags"
|
||||
state_class: measurement
|
||||
id: level_in_bags
|
||||
name: "Salt Level in Bags"
|
||||
icon: mdi:counter
|
||||
disabled_by_default: true
|
||||
#update_interval: 5s
|
||||
filters:
|
||||
- lambda: 'return (id(distance_from_bottom).state) / 17.5;'
|
||||
|
||||
binary_sensor:
|
||||
- platform: gpio
|
||||
name: "Door"
|
||||
device_class: door
|
||||
pin:
|
||||
number: ${door_pin}
|
||||
mode: INPUT_PULLUP
|
||||
# filters:
|
||||
# - invert:
|
||||
|
||||
@@ -3,14 +3,17 @@ platform: wifi_info
|
||||
ip_address:
|
||||
name: IP
|
||||
icon: mdi:ip
|
||||
update_interval: 60s
|
||||
disabled_by_default: true
|
||||
ssid:
|
||||
name: SSID
|
||||
icon: mdi:lan
|
||||
update_interval: 60s
|
||||
disabled_by_default: true
|
||||
bssid:
|
||||
name: BSSID
|
||||
disabled_by_default: true
|
||||
update_interval: 60s
|
||||
icon: mdi:router-network
|
||||
mac_address:
|
||||
name: Wifi MAC Address
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+595
-130
@@ -5,32 +5,41 @@ substitutions:
|
||||
friendly_name: HVAC MultiSensor
|
||||
comment: Clever MultiSensor
|
||||
platform: ESP32
|
||||
board: wemos_d1_mini32
|
||||
board: esp32-wroom-32d
|
||||
variant: esp32
|
||||
# framework: esp-idf
|
||||
framework: arduino
|
||||
static_ip: !secret hvac-multisensor-ip
|
||||
|
||||
# Backlight Button
|
||||
backlight_button: GPIO34
|
||||
|
||||
# For TFT Display
|
||||
tft_dc_pin: GPIO02
|
||||
tft_reset_pin: GPIO04
|
||||
tft_cs_pin: GPIO15
|
||||
tft_backlight_pin: GPIO32
|
||||
|
||||
# For SPI and TFT
|
||||
spi_miso_pin: GPIO19
|
||||
spi_mosi_pin: GPIO23
|
||||
spi_clock_pin: GPIO18
|
||||
|
||||
# For Touchscreen
|
||||
touchscreen_irq_pin: GPIO27
|
||||
|
||||
# For i2c devices
|
||||
# In this case it's just the display
|
||||
sda_pin: GPIO21
|
||||
scl_pin: GPIO22
|
||||
|
||||
door_pin: GPIO19
|
||||
|
||||
one_wire_pin: GPIO26
|
||||
|
||||
# For the ultrasonic sensor
|
||||
trigger_pin: GPIO16
|
||||
echo_pin: GPIO13
|
||||
|
||||
#mdc_pin: GPIO23
|
||||
#mdio_pin: GPIO18
|
||||
#clk_mode: GPIO17_OUT
|
||||
#power_pin: GPIO5
|
||||
passive_buzzer_pin: GPIO26
|
||||
one_wire_pin: GPIO17
|
||||
|
||||
packages:
|
||||
# network: !include common/ethernet.yaml
|
||||
network: !include common/wifi.yaml
|
||||
device_base: !include common/device_base.yaml
|
||||
ble_proxy: !include common/ble_proxy.yaml
|
||||
# ble_proxy: !include common/ble_proxy.yaml
|
||||
|
||||
esphome:
|
||||
name: ${devicename}
|
||||
@@ -38,34 +47,103 @@ esphome:
|
||||
name_add_mac_suffix: false
|
||||
|
||||
esp32:
|
||||
board: ${board}
|
||||
# board: ${board}
|
||||
variant: ${variant}
|
||||
framework:
|
||||
type: esp-idf
|
||||
type: ${framework}
|
||||
|
||||
# Enable logging
|
||||
logger:
|
||||
level: VERBOSE
|
||||
|
||||
time:
|
||||
- id: !remove homeassistant_time
|
||||
- platform: sntp
|
||||
id: sntp_time
|
||||
timezone: America/Detroit
|
||||
on_time:
|
||||
- hours: 2,3,4,5
|
||||
minutes: 5
|
||||
seconds: 0
|
||||
then:
|
||||
- switch.turn_on: switch_antiburn
|
||||
- hours: 2,3,4,5
|
||||
minutes: 35
|
||||
seconds: 0
|
||||
then:
|
||||
- switch.turn_off: switch_antiburn
|
||||
|
||||
api: # Using settings from common/device_base.yaml
|
||||
actions:
|
||||
- action: play_rtttl
|
||||
variables:
|
||||
song_str: string
|
||||
then:
|
||||
- rtttl.play: !lambda 'return song_str;'
|
||||
on_client_connected:
|
||||
- logger.log:
|
||||
format: "Client %s connected to API with IP %s"
|
||||
args: ["client_info.c_str()", "client_address.c_str()"]
|
||||
- if:
|
||||
condition:
|
||||
lambda: 'return (0 == client_info.find("Home Assistant "));'
|
||||
then:
|
||||
- lvgl.widget.show: lbl_hastatus
|
||||
on_client_disconnected:
|
||||
- logger.log:
|
||||
format: "Client %s disconnected to API with IP %s"
|
||||
args: ["client_info.c_str()", "client_address.c_str()"]
|
||||
- if:
|
||||
condition:
|
||||
lambda: 'return (0 == client_info.find("Home Assistant "));'
|
||||
then:
|
||||
- lvgl.widget.hide: lbl_hastatus
|
||||
|
||||
ota: # Using settings from common/device_base.yaml
|
||||
|
||||
esp32_ble_tracker:
|
||||
# esp32_ble_tracker:
|
||||
|
||||
globals:
|
||||
- id: oled_enabled
|
||||
type: bool
|
||||
restore_value: yes
|
||||
initial_value: 'false'
|
||||
# globals:
|
||||
# - id: oled_enabled
|
||||
# type: bool
|
||||
# restore_value: yes
|
||||
# initial_value: 'false'
|
||||
|
||||
- id: screen_power
|
||||
type: bool
|
||||
restore_value: yes
|
||||
initial_value: 'false'
|
||||
# - id: screen_power
|
||||
# type: bool
|
||||
# restore_value: yes
|
||||
# initial_value: 'false'
|
||||
|
||||
font:
|
||||
- file: 'fonts/CascadiaMonoPL.ttf'
|
||||
id: font1
|
||||
size: 17
|
||||
# - file: 'fonts/CascadiaMonoPL.ttf'
|
||||
# id: regular_20
|
||||
# size: 20
|
||||
# bpp: 4
|
||||
# extras:
|
||||
# - file: "fonts/materialdesignicons-webfont.ttf"
|
||||
# glyphs: [
|
||||
# "\U000F02D1", # mdi-heart
|
||||
# "\U000F05D4", # mdi-airplane-landing
|
||||
# "\U000F02DC", # mdi-home
|
||||
# "\U000F035E", # mdi-menu-left
|
||||
# "\U000F035F", # mdi-menu-right
|
||||
# ]
|
||||
|
||||
- file: 'fonts/RobotoCondensed-Regular.ttf'
|
||||
id: regular_20
|
||||
size: 20
|
||||
bpp: 4
|
||||
extras:
|
||||
- file: "fonts/materialdesignicons-webfont.ttf"
|
||||
glyphs: [
|
||||
"\U000F02DC", # mdi-home
|
||||
"\U000F035E", # mdi-menu-left
|
||||
"\U000F035F", # mdi-menu-right
|
||||
"\U000F05A9", # mdi-wifi
|
||||
"\U000F19B2", # mdi-arrow-up-thin
|
||||
"\U000F19B3", # mdi-arrow-down-thin
|
||||
"\U000F04DB", # mdi-stop
|
||||
]
|
||||
|
||||
# - file: "gfonts://Roboto"
|
||||
# id: roboto_20
|
||||
@@ -78,13 +156,92 @@ font:
|
||||
|
||||
one_wire:
|
||||
- platform: gpio
|
||||
pin: ${one_wire_pin}
|
||||
pin:
|
||||
number: ${one_wire_pin}
|
||||
mode:
|
||||
input: true
|
||||
pullup: true
|
||||
|
||||
i2c:
|
||||
sda: ${sda_pin}
|
||||
scl: ${scl_pin}
|
||||
frequency: 800kHz
|
||||
|
||||
spi:
|
||||
clk_pin: ${spi_clock_pin}
|
||||
mosi_pin: ${spi_mosi_pin}
|
||||
miso_pin: ${spi_miso_pin}
|
||||
|
||||
output:
|
||||
- platform: ledc
|
||||
pin: ${tft_backlight_pin}
|
||||
id: backlight_pwm
|
||||
|
||||
- platform: ledc
|
||||
pin: ${passive_buzzer_pin}
|
||||
id: rtttl_out
|
||||
|
||||
rtttl:
|
||||
output: rtttl_out
|
||||
id: buzzer
|
||||
gain: 60%
|
||||
|
||||
switch:
|
||||
- platform: template
|
||||
name: Antiburn
|
||||
id: switch_antiburn
|
||||
icon: mdi:television-shimmer
|
||||
optimistic: true
|
||||
entity_category: "config"
|
||||
turn_on_action:
|
||||
- logger.log: "Starting Antiburn"
|
||||
- if:
|
||||
condition: lvgl.is_paused
|
||||
then:
|
||||
- lvgl.resume:
|
||||
- lvgl.widget.redraw:
|
||||
- lvgl.pause:
|
||||
show_snow: true
|
||||
turn_off_action:
|
||||
- logger.log: "Stopping Antiburn"
|
||||
- if:
|
||||
condition: lvgl.is_paused
|
||||
then:
|
||||
- lvgl.resume:
|
||||
- lvgl.widget.redraw:
|
||||
|
||||
light:
|
||||
- platform: monochromatic
|
||||
output: backlight_pwm
|
||||
name: "Display Backlight"
|
||||
id: display_backlight
|
||||
restore_mode: RESTORE_DEFAULT_OFF
|
||||
|
||||
number:
|
||||
- platform: template
|
||||
name: LVGL Screen timeout
|
||||
optimistic: true
|
||||
id: display_timeout
|
||||
unit_of_measurement: "s"
|
||||
initial_value: 30
|
||||
restore_value: true
|
||||
min_value: 10
|
||||
max_value: 180
|
||||
step: 5
|
||||
mode: box
|
||||
|
||||
# binary_sensor:
|
||||
# - platform: gpio
|
||||
# pin:
|
||||
# number: ${backlight_button}
|
||||
# id: backlight_switch
|
||||
# filters:
|
||||
# - delayed_on: 10ms
|
||||
# - delayed_off: 10ms
|
||||
# on_press:
|
||||
# - light.toggle:
|
||||
# id: display_backlight
|
||||
|
||||
sensor:
|
||||
- platform: dallas_temp
|
||||
address: 0xB33C01B607798528
|
||||
@@ -93,7 +250,16 @@ sensor:
|
||||
icon: mdi:home-thermometer-outline
|
||||
update_interval: 10s
|
||||
filters:
|
||||
- lambda: return x * (9.0/5.0) + 32.0;
|
||||
- lambda: |-
|
||||
float val = x;
|
||||
if (isnan(val)) {
|
||||
val = 0.0;
|
||||
}
|
||||
return val * (9.0/5.0) + 32.0;
|
||||
#- lambda: return x * (9.0/5.0) + 32.0;
|
||||
- clamp:
|
||||
min_value: 0.0
|
||||
max_value: 100.0
|
||||
unit_of_measurement: "°F"
|
||||
state_class: measurement
|
||||
|
||||
@@ -105,6 +271,9 @@ sensor:
|
||||
update_interval: 10s
|
||||
filters:
|
||||
- lambda: return x * (9.0/5.0) + 32.0;
|
||||
- clamp:
|
||||
min_value: 0.0
|
||||
max_value: 100.0
|
||||
unit_of_measurement: "°F"
|
||||
state_class: measurement
|
||||
|
||||
@@ -116,6 +285,9 @@ sensor:
|
||||
update_interval: 10s
|
||||
filters:
|
||||
- lambda: return x * (9.0/5.0) + 32.0;
|
||||
- clamp:
|
||||
min_value: 0.0
|
||||
max_value: 100.0
|
||||
unit_of_measurement: "°F"
|
||||
state_class: measurement
|
||||
|
||||
@@ -129,108 +301,401 @@ sensor:
|
||||
unit_of_measurement: "°F"
|
||||
state_class: measurement
|
||||
filters:
|
||||
- clamp:
|
||||
min_value: 0.0
|
||||
max_value: 100.0
|
||||
- or:
|
||||
- throttle: 60s
|
||||
- delta: 1.0
|
||||
|
||||
- platform: ultrasonic
|
||||
trigger_pin: ${trigger_pin}
|
||||
echo_pin: ${echo_pin}
|
||||
id: ultrasonic_source
|
||||
update_interval: 1s
|
||||
internal: True
|
||||
filters:
|
||||
- sliding_window_moving_average:
|
||||
window_size: 5
|
||||
send_every: 5
|
||||
send_first_at: 1
|
||||
on_value:
|
||||
then:
|
||||
- sensor.template.publish:
|
||||
id: distance_from_bottom
|
||||
state: !lambda 'return id(ultrasonic_source).state;'
|
||||
|
||||
- sensor.template.publish:
|
||||
id: distance_from_top
|
||||
state: !lambda 'return id(ultrasonic_source).state;'
|
||||
|
||||
- platform: template
|
||||
unit_of_measurement: "cm"
|
||||
state_class: measurement
|
||||
id: distance_from_bottom
|
||||
name: "Salt Level in CM"
|
||||
icon: mdi:arrow-collapse-up
|
||||
disabled_by_default: true
|
||||
#update_interval: 5s
|
||||
filters:
|
||||
- lambda: 'return (0.94 - (id(ultrasonic_source).state)) * 100;'
|
||||
on_value:
|
||||
then:
|
||||
- sensor.template.publish:
|
||||
id: level_in_bags
|
||||
state: !lambda 'return id(distance_from_bottom).state;'
|
||||
|
||||
- platform: template
|
||||
unit_of_measurement: "cm"
|
||||
state_class: measurement
|
||||
id: distance_from_top
|
||||
name: "Salt Level From Top in CM"
|
||||
icon: mdi:arrow-collapse-down
|
||||
disabled_by_default: true
|
||||
#update_interval: 5s
|
||||
filters:
|
||||
- lambda: 'return (id(ultrasonic_source).state) * 100;'
|
||||
|
||||
- platform: template
|
||||
unit_of_measurement: "bags"
|
||||
state_class: measurement
|
||||
id: level_in_bags
|
||||
name: "Salt Level in Bags"
|
||||
icon: mdi:counter
|
||||
disabled_by_default: true
|
||||
#update_interval: 5s
|
||||
filters:
|
||||
- lambda: 'return (id(distance_from_bottom).state) / 17.5;'
|
||||
|
||||
display:
|
||||
- platform: ssd1306_i2c
|
||||
id: oled
|
||||
model: "SSD1306 128x64"
|
||||
#reset_pin: GPIO14 #D0
|
||||
address: 0x3C
|
||||
lambda: |-
|
||||
it.print(0, 0, id(font1), "Delta:");
|
||||
it.printf(128, 0, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(hvac_delta).state);
|
||||
it.print(0, 16, id(font1), "Supply:");
|
||||
it.printf(128, 16, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(hvac_supply).state);
|
||||
it.print(0, 32, id(font1), "Return:");
|
||||
it.printf(128, 32, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(hvac_return).state);
|
||||
it.print(0, 48, id(font1), "Ambient:");
|
||||
it.printf(128, 48, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(ambient).state);
|
||||
- platform: ili9xxx
|
||||
id: main_display
|
||||
# data_rate: 20MHz
|
||||
# spi_mode: MODE3
|
||||
# color_palette: 8BIT
|
||||
invert_colors: false
|
||||
auto_clear_enabled: false
|
||||
update_interval: never
|
||||
model: ili9488
|
||||
dc_pin: ${tft_dc_pin}
|
||||
reset_pin: ${tft_reset_pin}
|
||||
cs_pin: ${tft_cs_pin}
|
||||
transform:
|
||||
swap_xy: true
|
||||
mirror_x: true
|
||||
dimensions:
|
||||
height: 480
|
||||
width: 320
|
||||
|
||||
binary_sensor:
|
||||
- platform: gpio
|
||||
name: "Door"
|
||||
device_class: door
|
||||
pin: ${door_pin}
|
||||
filters:
|
||||
- invert:
|
||||
touchscreen:
|
||||
# - platform: ft5x06
|
||||
- platform: ft63x6
|
||||
id: main_touchscreen
|
||||
display: main_display
|
||||
transform:
|
||||
swap_xy: true
|
||||
mirror_y: true
|
||||
interrupt_pin: ${touchscreen_irq_pin}
|
||||
# on_touch:
|
||||
# - lambda: |-
|
||||
# ESP_LOGI("cal", "x=%d, y=%d, x_raw=%d, y_raw=%0d",
|
||||
# touch.x,
|
||||
# touch.y,
|
||||
# touch.x_raw,
|
||||
# touch.y_raw
|
||||
# );
|
||||
on_release:
|
||||
- if:
|
||||
condition: lvgl.is_paused
|
||||
then:
|
||||
- logger.log: "LVGL resuming"
|
||||
- lvgl.resume:
|
||||
- lvgl.widget.redraw:
|
||||
- if:
|
||||
condition:
|
||||
light.is_off: display_backlight
|
||||
then:
|
||||
- light.turn_on: display_backlight
|
||||
|
||||
switch:
|
||||
- platform: template
|
||||
id: display_switch
|
||||
icon: mdi:console
|
||||
name: "Display"
|
||||
lambda: |-
|
||||
// if (id(screen_power)) {
|
||||
// id(oled).turn_on();
|
||||
// } else {
|
||||
// id(oled).turn_off();
|
||||
// }
|
||||
return id(screen_power);
|
||||
turn_on_action:
|
||||
- lambda: |-
|
||||
id(screen_power) = true;
|
||||
turn_off_action:
|
||||
- lambda: |-
|
||||
id(screen_power) = false;
|
||||
lvgl:
|
||||
buffer_size: 25%
|
||||
displays: main_display
|
||||
top_layer:
|
||||
widgets:
|
||||
- label:
|
||||
text: "\U000F05A9"
|
||||
id: lbl_hastatus
|
||||
hidden: true
|
||||
align: top_right
|
||||
x: -2
|
||||
y: 7
|
||||
text_align: right
|
||||
|
||||
- buttonmatrix:
|
||||
align: bottom_mid
|
||||
styles: header_footer
|
||||
pad_all: 0
|
||||
outline_width: 0
|
||||
id: top_layer
|
||||
items:
|
||||
styles: header_footer
|
||||
rows:
|
||||
- buttons:
|
||||
- id: page_prev
|
||||
text: "\U000F035E"
|
||||
on_press:
|
||||
then:
|
||||
lvgl.page.previous:
|
||||
- id: page_home
|
||||
text: "\U000F02DC"
|
||||
on_press:
|
||||
then:
|
||||
lvgl.page.show: main_page
|
||||
- id: page_next
|
||||
text: "\U000F035F"
|
||||
on_press:
|
||||
then:
|
||||
lvgl.page.next:
|
||||
on_idle:
|
||||
timeout: !lambda "return (id(display_timeout).state * 1000);"
|
||||
then:
|
||||
- logger.log: "LVGL is idle"
|
||||
- light.turn_off: display_backlight
|
||||
- lvgl.pause:
|
||||
|
||||
pages:
|
||||
- id: room_page
|
||||
widgets:
|
||||
- obj: # a properly placed coontainer object for all these controls
|
||||
align: CENTER
|
||||
width: 400
|
||||
height: 256
|
||||
pad_all: 2
|
||||
bg_color: 0x414559
|
||||
bg_opa: TRANSP
|
||||
border_opa: TRANSP
|
||||
layout: # enable the GRID layout for the children widgets
|
||||
pad_row: 6
|
||||
pad_column: 8
|
||||
type: GRID # split the rows and the columns proportionally
|
||||
grid_columns: [FR(1), FR(1), FR(1)] # equal
|
||||
grid_rows: [FR(10), FR(30), FR(30), FR(30)] # like percents
|
||||
widgets:
|
||||
- label:
|
||||
text: "Red"
|
||||
grid_cell_column_pos: 0 # place the widget in
|
||||
grid_cell_row_pos: 0 # the corresponding cell
|
||||
grid_cell_x_align: STRETCH
|
||||
grid_cell_y_align: STRETCH
|
||||
- button:
|
||||
id: but_cov_up_east
|
||||
bg_color: 0xFF0000
|
||||
grid_cell_column_pos: 0
|
||||
grid_cell_row_pos: 1
|
||||
grid_cell_x_align: STRETCH
|
||||
grid_cell_y_align: STRETCH
|
||||
widgets:
|
||||
- label:
|
||||
id: cov_up_east
|
||||
align: CENTER
|
||||
text: "\U000F19B2"
|
||||
- button:
|
||||
id: but_cov_stop_east
|
||||
bg_color: 0xFF0000
|
||||
grid_cell_column_pos: 0
|
||||
grid_cell_row_pos: 2
|
||||
grid_cell_x_align: STRETCH
|
||||
grid_cell_y_align: STRETCH
|
||||
widgets:
|
||||
- label:
|
||||
id: cov_stop_east
|
||||
align: CENTER
|
||||
text: "\U000F04DB"
|
||||
- button:
|
||||
id: but_cov_down_east
|
||||
bg_color: 0xFF0000
|
||||
grid_cell_column_pos: 0
|
||||
grid_cell_row_pos: 3
|
||||
grid_cell_x_align: STRETCH
|
||||
grid_cell_y_align: STRETCH
|
||||
widgets:
|
||||
- label:
|
||||
id: cov_down_east
|
||||
align: CENTER
|
||||
text: "\U000F19B3"
|
||||
|
||||
- label:
|
||||
text: "Green"
|
||||
grid_cell_column_pos: 1
|
||||
grid_cell_row_pos: 0
|
||||
grid_cell_x_align: STRETCH
|
||||
grid_cell_y_align: STRETCH
|
||||
- button:
|
||||
id: but_cov_up_south
|
||||
bg_color: 0x00FF00
|
||||
grid_cell_column_pos: 1
|
||||
grid_cell_row_pos: 1
|
||||
grid_cell_x_align: STRETCH
|
||||
grid_cell_y_align: STRETCH
|
||||
widgets:
|
||||
- label:
|
||||
id: cov_up_south
|
||||
align: CENTER
|
||||
text: "\U000F19B2"
|
||||
- button:
|
||||
id: but_cov_stop_south
|
||||
bg_color: 0x00FF00
|
||||
grid_cell_column_pos: 1
|
||||
grid_cell_row_pos: 2
|
||||
grid_cell_x_align: STRETCH
|
||||
grid_cell_y_align: STRETCH
|
||||
widgets:
|
||||
- label:
|
||||
id: cov_stop_south
|
||||
align: CENTER
|
||||
text: "\U000F04DB"
|
||||
- button:
|
||||
id: but_cov_down_south
|
||||
bg_color: 0x00FF00
|
||||
grid_cell_column_pos: 1
|
||||
grid_cell_row_pos: 3
|
||||
grid_cell_x_align: STRETCH
|
||||
grid_cell_y_align: STRETCH
|
||||
widgets:
|
||||
- label:
|
||||
id: cov_down_south
|
||||
align: CENTER
|
||||
text: "\U000F19B3"
|
||||
|
||||
- label:
|
||||
text: "Blue"
|
||||
grid_cell_column_pos: 2
|
||||
grid_cell_row_pos: 0
|
||||
grid_cell_x_align: STRETCH
|
||||
grid_cell_y_align: STRETCH
|
||||
- button:
|
||||
id: but_cov_up_west
|
||||
bg_color: 0x0000FF
|
||||
grid_cell_column_pos: 2
|
||||
grid_cell_row_pos: 1
|
||||
grid_cell_x_align: STRETCH
|
||||
grid_cell_y_align: STRETCH
|
||||
widgets:
|
||||
- label:
|
||||
id: cov_up_west
|
||||
align: CENTER
|
||||
text: "\U000F19B2"
|
||||
- button:
|
||||
id: but_cov_stop_west
|
||||
bg_color: 0x0000FF
|
||||
grid_cell_column_pos: 2
|
||||
grid_cell_row_pos: 2
|
||||
grid_cell_x_align: STRETCH
|
||||
grid_cell_y_align: STRETCH
|
||||
widgets:
|
||||
- label:
|
||||
id: cov_stop_west
|
||||
align: CENTER
|
||||
text: "\U000F04DB"
|
||||
- button:
|
||||
id: but_cov_down_west
|
||||
bg_color: 0x0000FF
|
||||
grid_cell_column_pos: 2
|
||||
grid_cell_row_pos: 3
|
||||
grid_cell_x_align: STRETCH
|
||||
grid_cell_y_align: STRETCH
|
||||
widgets:
|
||||
- label:
|
||||
id: cov_down_west
|
||||
align: CENTER
|
||||
text: "\U000F19B3"
|
||||
- id: main_page
|
||||
widgets:
|
||||
- obj:
|
||||
align: TOP_MID
|
||||
styles: header_footer
|
||||
widgets:
|
||||
- label:
|
||||
text: "ESPHome LVGL Display"
|
||||
align: CENTER
|
||||
text_align: CENTER
|
||||
- label:
|
||||
align: CENTER
|
||||
text: 'Hello World!'
|
||||
- label:
|
||||
align: LEFT_MID
|
||||
text: 'Left Mid'
|
||||
- label:
|
||||
align: RIGHT_MID
|
||||
text: 'Right Mid'
|
||||
- id: second_page
|
||||
widgets:
|
||||
- obj:
|
||||
align: TOP_MID
|
||||
styles: header_footer
|
||||
widgets:
|
||||
- label:
|
||||
text: "A second page"
|
||||
align: CENTER
|
||||
text_align: CENTER
|
||||
- label:
|
||||
align: CENTER
|
||||
text: 'Hello Again!'
|
||||
- id: third_page
|
||||
widgets:
|
||||
- obj:
|
||||
align: TOP_MID
|
||||
styles: header_footer
|
||||
widgets:
|
||||
- label:
|
||||
text: "A third page"
|
||||
align: CENTER
|
||||
text_align: CENTER
|
||||
- label:
|
||||
align: CENTER
|
||||
text: 'I am the very model of a modern major general'
|
||||
- id: fourth_page
|
||||
widgets:
|
||||
- obj:
|
||||
align: TOP_MID
|
||||
styles: header_footer
|
||||
widgets:
|
||||
- label:
|
||||
text: "A fourth page"
|
||||
align: CENTER
|
||||
text_align: CENTER
|
||||
- label:
|
||||
align: CENTER
|
||||
text: "I've information vegetable animal and mineral"
|
||||
|
||||
theme:
|
||||
label:
|
||||
text_font: regular_20 # set all your labels to use your custom defined font
|
||||
text_color: 0xcad3f5
|
||||
button:
|
||||
bg_color: 0x24273a
|
||||
bg_grad_color: 0x005782
|
||||
bg_grad_dir: VER
|
||||
bg_opa: COVER
|
||||
border_color: 0x0077b3
|
||||
border_width: 1
|
||||
text_color: 0xcad3f5
|
||||
pressed: # set some button colors to be different in pressed state
|
||||
bg_color: 0x006699
|
||||
bg_grad_color: 0x00334d
|
||||
checked: # set some button colors to be different in checked state
|
||||
bg_color: 0x1d5f96
|
||||
bg_grad_color: 0x03324A
|
||||
text_color: 0xfff300
|
||||
buttonmatrix:
|
||||
bg_opa: TRANSP
|
||||
border_color: 0x0077b3
|
||||
border_width: 0
|
||||
text_color: 0xcad3f5
|
||||
pad_all: 0
|
||||
items: # set all your buttonmatrix buttons to use your custom defined styles and font
|
||||
bg_color: 0x24273a
|
||||
bg_grad_color: 0x005782
|
||||
bg_grad_dir: VER
|
||||
bg_opa: COVER
|
||||
border_color: 0x0077b3
|
||||
border_width: 1
|
||||
text_color: 0xcad3f5
|
||||
text_font: regular_20
|
||||
pressed:
|
||||
bg_color: 0x006699
|
||||
bg_grad_color: 0x00334d
|
||||
checked:
|
||||
bg_color: 0x1d5f96
|
||||
bg_grad_color: 0x03324A
|
||||
text_color: 0x005580
|
||||
switch:
|
||||
bg_color: 0xC0C0C0
|
||||
bg_grad_color: 0xb0b0b0
|
||||
bg_grad_dir: VER
|
||||
bg_opa: COVER
|
||||
checked:
|
||||
bg_color: 0x1d5f96
|
||||
bg_grad_color: 0x03324A
|
||||
bg_grad_dir: VER
|
||||
bg_opa: COVER
|
||||
knob:
|
||||
bg_color: 0xFFFFFF
|
||||
bg_grad_color: 0xC0C0C0
|
||||
bg_grad_dir: VER
|
||||
bg_opa: COVER
|
||||
slider:
|
||||
border_width: 1
|
||||
border_opa: 15%
|
||||
bg_color: 0xcccaca
|
||||
bg_opa: 15%
|
||||
indicator:
|
||||
bg_color: 0x1d5f96
|
||||
bg_grad_color: 0x03324A
|
||||
bg_grad_dir: VER
|
||||
bg_opa: COVER
|
||||
knob:
|
||||
bg_color: 0x24273a
|
||||
bg_grad_color: 0x005782
|
||||
bg_grad_dir: VER
|
||||
bg_opa: COVER
|
||||
border_color: 0x0077b3
|
||||
border_width: 1
|
||||
text_color: 0xcad3f5
|
||||
|
||||
style_definitions:
|
||||
- id: header_footer
|
||||
bg_color: 0x24273a
|
||||
bg_grad_color: 0x005782
|
||||
bg_grad_dir: VER
|
||||
bg_opa: COVER
|
||||
border_opa: TRANSP
|
||||
radius: 0
|
||||
pad_all: 0
|
||||
pad_row: 0
|
||||
pad_column: 0
|
||||
border_color: 0x0077b3
|
||||
text_color: 0xcad3f5
|
||||
width: 100%
|
||||
height: 30
|
||||
@@ -92,6 +92,7 @@ esp32:
|
||||
time:
|
||||
- platform: sntp
|
||||
id: sntp_time
|
||||
timezone: America/Detroit
|
||||
|
||||
logger:
|
||||
level: DEBUG
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
# 3v3 en svp sun 34 35 32 33 25 26 27 14 12 gnd 13 sd2 sd3 gnd 5v
|
||||
substitutions:
|
||||
devicename: water-softener-multisensor
|
||||
entity_name: water_softener_multisensor
|
||||
friendly_name: Water Softener MultiSensor
|
||||
comment: Clever Water Softener MultiSensor
|
||||
board: nodemcuv2
|
||||
static_ip: !secret water-softener-multisensor-ip
|
||||
|
||||
door_pin: D5
|
||||
|
||||
# For the ultrasonic sensor
|
||||
trigger_pin: D7
|
||||
echo_pin: D6
|
||||
|
||||
packages:
|
||||
# network: !include common/ethernet.yaml
|
||||
network: !include common/wifi.yaml
|
||||
device_base: !include common/device_base.yaml
|
||||
|
||||
esphome:
|
||||
name: ${devicename}
|
||||
friendly_name: ${friendly_name}
|
||||
name_add_mac_suffix: false
|
||||
|
||||
esp8266:
|
||||
board: ${board}
|
||||
|
||||
# Enable logging
|
||||
logger:
|
||||
|
||||
api: # Using settings from common/device_base.yaml
|
||||
|
||||
ota: # Using settings from common/device_base.yaml
|
||||
|
||||
sensor:
|
||||
- platform: ultrasonic
|
||||
trigger_pin: ${trigger_pin}
|
||||
echo_pin: ${echo_pin}
|
||||
id: ultrasonic_source
|
||||
update_interval: 1s
|
||||
internal: True
|
||||
filters:
|
||||
- sliding_window_moving_average:
|
||||
window_size: 5
|
||||
send_every: 5
|
||||
send_first_at: 1
|
||||
- lambda: 'return round( x * 10.0) / 10.0;'
|
||||
- clamp:
|
||||
min_value: 0.0
|
||||
max_value: 150.0
|
||||
on_value:
|
||||
then:
|
||||
- sensor.template.publish:
|
||||
id: distance_from_bottom
|
||||
state: !lambda 'return id(ultrasonic_source).state;'
|
||||
|
||||
- sensor.template.publish:
|
||||
id: distance_from_top
|
||||
state: !lambda 'return id(ultrasonic_source).state;'
|
||||
|
||||
- platform: template
|
||||
unit_of_measurement: "cm"
|
||||
state_class: measurement
|
||||
id: distance_from_bottom
|
||||
name: "Salt Level in CM"
|
||||
icon: mdi:arrow-collapse-up
|
||||
disabled_by_default: true
|
||||
#update_interval: 5s
|
||||
filters:
|
||||
- lambda: 'return (0.94 - x) * 100;'
|
||||
- clamp:
|
||||
min_value: 0.0
|
||||
max_value: 150.0
|
||||
|
||||
on_value:
|
||||
then:
|
||||
- sensor.template.publish:
|
||||
id: level_in_bags
|
||||
state: !lambda 'return id(distance_from_bottom).state;'
|
||||
|
||||
- platform: template
|
||||
unit_of_measurement: "cm"
|
||||
state_class: measurement
|
||||
id: distance_from_top
|
||||
name: "Salt Level From Top in CM"
|
||||
icon: mdi:arrow-collapse-down
|
||||
disabled_by_default: true
|
||||
#update_interval: 5s
|
||||
filters:
|
||||
- lambda: 'return x * 100;'
|
||||
- round: 1
|
||||
- clamp:
|
||||
min_value: 0.0
|
||||
max_value: 150.0
|
||||
|
||||
|
||||
- platform: template
|
||||
unit_of_measurement: "bags"
|
||||
state_class: measurement
|
||||
id: level_in_bags
|
||||
name: "Salt Level in Bags"
|
||||
icon: mdi:counter
|
||||
disabled_by_default: true
|
||||
#update_interval: 5s
|
||||
filters:
|
||||
- lambda: 'return x / 17.5;'
|
||||
- round: 1
|
||||
- clamp:
|
||||
min_value: 0.0
|
||||
max_value: 10.0
|
||||
|
||||
|
||||
binary_sensor:
|
||||
- platform: gpio
|
||||
name: "Door"
|
||||
device_class: door
|
||||
pin:
|
||||
number: ${door_pin}
|
||||
mode: INPUT_PULLUP
|
||||
# filters:
|
||||
# - invert:
|
||||
|
||||
@@ -88,6 +88,7 @@ card:
|
||||
style:
|
||||
left: 50%
|
||||
top: 95%
|
||||
|
||||
- type: state-icon
|
||||
entity: input_boolean.boys_room_occupied
|
||||
tap_action:
|
||||
@@ -95,6 +96,7 @@ card:
|
||||
style:
|
||||
left: 70%
|
||||
top: 95%
|
||||
|
||||
- type: state-icon
|
||||
entity: binary_sensor.boys_room_occupied
|
||||
style:
|
||||
@@ -169,11 +171,17 @@ card:
|
||||
- type: state-icon
|
||||
entity: binary_sensor.white_bed_occupied
|
||||
style:
|
||||
top: 45%
|
||||
left: 40%
|
||||
top: 55%
|
||||
left: 25%
|
||||
|
||||
- type: state-icon
|
||||
entity: media_player.boys_room_clock
|
||||
style:
|
||||
left: 38%
|
||||
top: 22%
|
||||
left: 21%
|
||||
top: 75%
|
||||
|
||||
- type: state-icon
|
||||
entity: light.accent
|
||||
style:
|
||||
left: 6%
|
||||
top: 49%
|
||||
@@ -47,7 +47,8 @@ cards:
|
||||
entity: binary_sensor.frigate_cam14_person_occupancy
|
||||
- type: custom:advanced-camera-card
|
||||
cameras:
|
||||
- camera_entity: camera.frigate_cam14
|
||||
- camera_entity: camera.frigate_cam12
|
||||
# - camera_entity: camera.frigate_cam14
|
||||
title: Person
|
||||
icon: mdi:slide
|
||||
live_provider: ha
|
||||
|
||||
@@ -65,7 +65,7 @@ sections:
|
||||
layout: vertical
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: homeassistant.toggle
|
||||
service: homeassistant.toggle
|
||||
service_data: {}
|
||||
target:
|
||||
entity_id: input_boolean.front_room_light_cycle
|
||||
|
||||
@@ -43,7 +43,7 @@ cards:
|
||||
- type: horizontal-stack
|
||||
cards:
|
||||
- type: custom:mushroom-entity-card
|
||||
entity: switch.hvac_multisensor_display
|
||||
entity: light.hvac_multisensor_display_backlight
|
||||
name: HVAC Display
|
||||
icon: mdi:monitor
|
||||
layout: vertical
|
||||
|
||||
@@ -184,7 +184,7 @@ cards:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: call-service
|
||||
action: homeassistant.toggle
|
||||
service: homeassistant.toggle
|
||||
service_data: {}
|
||||
target:
|
||||
entity_id: light.black_bed_wled
|
||||
@@ -202,7 +202,7 @@ cards:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: call-service
|
||||
action: homeassistant.toggle
|
||||
service: homeassistant.toggle
|
||||
service_data: {}
|
||||
target:
|
||||
entity_id: light.white_bed_wled
|
||||
@@ -264,7 +264,7 @@ cards:
|
||||
name: All Songs
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: script.all_kids_youtube_music
|
||||
service: script.all_kids_youtube_music
|
||||
service_data: {}
|
||||
target: {}
|
||||
primary_info: name
|
||||
@@ -276,7 +276,7 @@ cards:
|
||||
name: Goodnight Songs
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: script.goodnight_kids_youtube_music
|
||||
service: script.goodnight_kids_youtube_music
|
||||
service_data: {}
|
||||
target: {}
|
||||
primary_info: name
|
||||
@@ -288,7 +288,7 @@ cards:
|
||||
name: "Off"
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: homeassistant.turn_off
|
||||
service: homeassistant.turn_off
|
||||
service_data: {}
|
||||
target:
|
||||
entity_id: media_player.ytube_music_player
|
||||
@@ -319,13 +319,13 @@ cards:
|
||||
primary: Black Bed
|
||||
double_tap_action:
|
||||
action: call-service
|
||||
action: homeassistant.toggle
|
||||
service: homeassistant.toggle
|
||||
service_data: {}
|
||||
target:
|
||||
entity_id: switch.black_bed_force_occupancy
|
||||
hold_action:
|
||||
action: call-service
|
||||
action: button.press
|
||||
service: button.press
|
||||
service_data: {}
|
||||
target:
|
||||
entity_id: button.black_bed_manual_tare
|
||||
|
||||
+102
-104
@@ -292,7 +292,7 @@ cards:
|
||||
- type: vertical-stack
|
||||
cards:
|
||||
- type: custom:mushroom-title-card
|
||||
title: Upstairs
|
||||
title: Private
|
||||
- type: horizontal-stack
|
||||
cards:
|
||||
- type: custom:mushroom-template-card
|
||||
@@ -310,6 +310,21 @@ cards:
|
||||
icon_color: "{{iif(is_state('light.nursery_hue','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Boy's Room
|
||||
icon: mdi:earth
|
||||
entity: light.boys_room_hue
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: boys-room
|
||||
hold_action:
|
||||
action: toggle
|
||||
secondary: |-
|
||||
{{states('sensor.boys_room_multisensor_air_temperature')}}°F
|
||||
{{states('sensor.boys_room_multisensor_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.boys_room_hue','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Master Bedroom
|
||||
icon: mdi:bed-king
|
||||
@@ -319,15 +334,16 @@ cards:
|
||||
navigation_path: master-bedroom
|
||||
hold_action:
|
||||
action: toggle
|
||||
secondary: >-
|
||||
secondary: |-
|
||||
{{states('sensor.master_bedroom_multisensor_air_temperature')}}°F
|
||||
|
||||
{{states('sensor.master_bedroom_multisensor_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.master_bedroom_hue','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: horizontal-stack
|
||||
cards:
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Master Bathroom
|
||||
primary: Bathroom
|
||||
icon: mdi:shower
|
||||
entity: light.master_bathroom_hue
|
||||
tap_action:
|
||||
@@ -338,9 +354,43 @@ cards:
|
||||
secondary: |-
|
||||
{{states('sensor.master_bathroom_thermostat_temperature')}}°F
|
||||
{{states('sensor.master_bathroom_thermostat_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.master_bathroom_hue','on'),'yellow')}}"
|
||||
icon_color: "{{iif(is_state('light.master_bathroom','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Utility Room
|
||||
icon: mdi:washing-machine
|
||||
entity: light.utility_room_vanity
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: utility-room
|
||||
hold_action:
|
||||
action: toggle
|
||||
secondary: |-
|
||||
{{states('sensor.utility_room_thermostat_temperature')}}°F
|
||||
{{states('sensor.utility_room_thermostat_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.utility_room_vanity','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Furnace Room
|
||||
icon: mdi:hvac
|
||||
entity: light.furnace_room
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: furnace-room
|
||||
hold_action:
|
||||
action: toggle
|
||||
secondary: |-
|
||||
{{states('sensor.furnace_room_thermostat_temperature')}}°F
|
||||
{{states('sensor.furnace_room_thermostat_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.furnace_room','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: vertical-stack
|
||||
cards:
|
||||
- type: custom:mushroom-title-card
|
||||
title: Public
|
||||
- type: horizontal-stack
|
||||
cards:
|
||||
- type: custom:mushroom-template-card
|
||||
@@ -388,6 +438,53 @@ cards:
|
||||
icon_color: "{{iif(is_state('light.dining_room_switch','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: horizontal-stack
|
||||
cards:
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Computer Area
|
||||
icon: mdi:desktop-classic
|
||||
entity: light.computer_area_hue
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: computer-area
|
||||
hold_action:
|
||||
action: toggle
|
||||
secondary: >-
|
||||
{{states('sensor.computer_area_multisensor_air_temperature')}}°F
|
||||
{{states('sensor.computer_area_multisensor_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.computer_area_hue','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Great Room
|
||||
icon: mdi:microsoft-xbox-controller
|
||||
entity: light.great_room_hue
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: great-room
|
||||
hold_action:
|
||||
action: toggle
|
||||
secondary: |-
|
||||
{{states('sensor.great_room_multisensor_air_temperature')}}°F
|
||||
{{states('sensor.great_room_multisensor_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.great_room_hue','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Mancave
|
||||
icon: mdi:human-male
|
||||
entity: light.mancave
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: mancave
|
||||
hold_action:
|
||||
action: toggle
|
||||
secondary: |-
|
||||
{{states('sensor.mancave_thermostat_temperature')}}°F
|
||||
{{states('sensor.mancave_thermostat_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.mancave','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: vertical-stack
|
||||
cards:
|
||||
- type: custom:mushroom-title-card
|
||||
@@ -486,102 +583,3 @@ cards:
|
||||
icon_color: "{{iif(is_state('light.deck','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: vertical-stack
|
||||
cards:
|
||||
- type: custom:mushroom-title-card
|
||||
subtitle: Downstairs
|
||||
- type: horizontal-stack
|
||||
cards:
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Computer Area
|
||||
icon: mdi:desktop-classic
|
||||
entity: light.computer_area_hue
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: computer-area
|
||||
hold_action:
|
||||
action: toggle
|
||||
secondary: >-
|
||||
{{states('sensor.computer_area_multisensor_air_temperature')}}°F
|
||||
|
||||
{{states('sensor.computer_area_multisensor_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.computer_area_hue','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Great Room
|
||||
icon: mdi:microsoft-xbox-controller
|
||||
entity: light.great_room_hue
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: great-room
|
||||
hold_action:
|
||||
action: toggle
|
||||
secondary: |-
|
||||
{{states('sensor.great_room_multisensor_air_temperature')}}°F
|
||||
{{states('sensor.great_room_multisensor_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.great_room_hue','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Utility Room
|
||||
icon: mdi:washing-machine
|
||||
entity: light.utility_room_vanity
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: utility-room
|
||||
hold_action:
|
||||
action: toggle
|
||||
secondary: |-
|
||||
{{states('sensor.utility_room_thermostat_temperature')}}°F
|
||||
{{states('sensor.utility_room_thermostat_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.utility_room_vanity','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: horizontal-stack
|
||||
cards:
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Boy's Room
|
||||
icon: mdi:earth
|
||||
entity: light.boys_room_hue
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: boys-room
|
||||
hold_action:
|
||||
action: toggle
|
||||
secondary: |-
|
||||
{{states('sensor.boys_room_multisensor_air_temperature')}}°F
|
||||
{{states('sensor.boys_room_multisensor_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.boys_room_hue','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Mancave
|
||||
icon: mdi:human-male
|
||||
entity: light.mancave
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: mancave
|
||||
hold_action:
|
||||
action: toggle
|
||||
secondary: |-
|
||||
{{states('sensor.mancave_thermostat_temperature')}}°F
|
||||
{{states('sensor.mancave_thermostat_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.mancave','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Furnace Room
|
||||
icon: mdi:hvac
|
||||
entity: light.furnace_room
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: furnace-room
|
||||
hold_action:
|
||||
action: toggle
|
||||
secondary: |-
|
||||
{{states('sensor.furnace_room_thermostat_temperature')}}°F
|
||||
{{states('sensor.furnace_room_thermostat_humidity')}}%
|
||||
icon_color: "{{iif(is_state('light.furnace_room','on'),'yellow')}}"
|
||||
multiline_secondary: true
|
||||
layout: vertical
|
||||
|
||||
@@ -18,7 +18,7 @@ cards:
|
||||
use_light_color: false
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: homeassistant.toggle
|
||||
service: homeassistant.toggle
|
||||
service_data: {}
|
||||
target:
|
||||
entity_id: input_boolean.nursery_occupied
|
||||
@@ -43,7 +43,7 @@ cards:
|
||||
'yellow') }}
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: homeassistant.toggle
|
||||
service: homeassistant.toggle
|
||||
service_data: {}
|
||||
target:
|
||||
entity_id: input_boolean.nursery_light_cycle
|
||||
@@ -62,7 +62,7 @@ cards:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: call-service
|
||||
action: homeassistant.toggle
|
||||
service: homeassistant.toggle
|
||||
service_data: {}
|
||||
target:
|
||||
entity_id: light.black_bed_wled
|
||||
@@ -79,7 +79,7 @@ cards:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: call-service
|
||||
action: homeassistant.toggle
|
||||
service: homeassistant.toggle
|
||||
service_data: {}
|
||||
target:
|
||||
entity_id: light.white_bed_wled
|
||||
@@ -109,7 +109,7 @@ cards:
|
||||
'yellow') }}
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: homeassistant.toggle
|
||||
service: homeassistant.toggle
|
||||
service_data: {}
|
||||
target:
|
||||
entity_id: input_boolean.front_room_light_cycle
|
||||
@@ -207,7 +207,7 @@ cards:
|
||||
'on'), 'yellow') }}
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: homeassistant.toggle
|
||||
service: homeassistant.toggle
|
||||
service_data: {}
|
||||
target:
|
||||
entity_id: input_boolean.computer_area_light_cycle
|
||||
@@ -237,7 +237,7 @@ cards:
|
||||
'yellow') }}
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: homeassistant.toggle
|
||||
service: homeassistant.toggle
|
||||
service_data: {}
|
||||
target:
|
||||
entity_id: input_boolean.great_room_light_cycle
|
||||
|
||||
@@ -150,7 +150,7 @@ sections:
|
||||
value: false
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: ytube_music_player.call_method
|
||||
service: ytube_music_player.call_method
|
||||
service_data:
|
||||
entity_id: media_player.ytube_music_player
|
||||
command: rate_track
|
||||
|
||||
@@ -181,14 +181,14 @@ cards:
|
||||
name: 5 Minute Test
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: opensprinkler.run
|
||||
service: opensprinkler.run
|
||||
data:
|
||||
entity_id: switch.5_minute_test_program_enabled
|
||||
- entity: binary_sensor.full_run_program_running
|
||||
name: Full Run
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: opensprinkler.run
|
||||
service: opensprinkler.run
|
||||
data:
|
||||
entity_id: switch.full_run_program_enabled
|
||||
- entity: switch.morning_program_enabled
|
||||
@@ -203,14 +203,14 @@ cards:
|
||||
name: Front Yard Fun
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: opensprinkler.run
|
||||
service: opensprinkler.run
|
||||
data:
|
||||
entity_id: switch.front_yard_fun_program_enabled
|
||||
- entity: binary_sensor.back_yard_fun_program_running
|
||||
name: Back Yard Fun
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: opensprinkler.run
|
||||
service: opensprinkler.run
|
||||
data:
|
||||
entity_id: switch.back_yard_fun_program_enabled
|
||||
columns: 2
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
type: custom:advanced-camera-card
|
||||
cameras:
|
||||
- camera_entity: camera.frigate_cam14
|
||||
- camera_entity: camera.frigate_cam12
|
||||
live_provider: go2rtc
|
||||
go2rtc:
|
||||
modes:
|
||||
|
||||
@@ -7,13 +7,13 @@ cameras:
|
||||
modes:
|
||||
- webrtc
|
||||
stream: rtsp_cam04_sub
|
||||
- camera_entity: camera.frigate_cam14
|
||||
title: Back Yard
|
||||
live_provider: go2rtc
|
||||
go2rtc:
|
||||
modes:
|
||||
- webrtc
|
||||
stream: rtsp_cam14_sub
|
||||
# - camera_entity: camera.frigate_cam14
|
||||
# title: Back Yard
|
||||
# live_provider: go2rtc
|
||||
# go2rtc:
|
||||
# modes:
|
||||
# - webrtc
|
||||
# stream: rtsp_cam14_sub
|
||||
- camera_entity: camera.frigate_cam18
|
||||
title: Front Yard
|
||||
live_provider: go2rtc
|
||||
|
||||
@@ -14,7 +14,7 @@ cards:
|
||||
enabled: false
|
||||
style: none
|
||||
cameras:
|
||||
- camera_entity: camera.frigate_cam14
|
||||
- camera_entity: camera.frigate_cam12
|
||||
live_provider: go2rtc
|
||||
id: frigate-cam14
|
||||
capabilities:
|
||||
|
||||
@@ -140,25 +140,25 @@ cards:
|
||||
# name: Hassio
|
||||
# tap_action:
|
||||
# action: call-service
|
||||
# action: homeassistant.restart
|
||||
# service: homeassistant.restart
|
||||
# - entity: zone.home
|
||||
# icon: mdi:cogs
|
||||
# name: Automation
|
||||
# tap_action:
|
||||
# action: call-service
|
||||
# action: automation.reload
|
||||
# service: automation.reload
|
||||
# - entity: zone.home
|
||||
# icon: mdi:script-text
|
||||
# name: Script
|
||||
# tap_action:
|
||||
# action: call-service
|
||||
# action: script.reload
|
||||
# service: script.reload
|
||||
# - entity: zone.home
|
||||
# icon: mdi:group
|
||||
# name: Groups
|
||||
# tap_action:
|
||||
# action: call-service
|
||||
# action: group.reload
|
||||
# service: group.reload
|
||||
|
||||
# - type: vertical-stack
|
||||
# cards:
|
||||
|
||||
@@ -425,6 +425,27 @@ cards:
|
||||
return "temp-unknown";
|
||||
'
|
||||
|
||||
# The HVAC Delta can be positive or negative, depending on if the furnace, heat pump, or ac is running
|
||||
- entities:
|
||||
- sensor.hvac_multisensor_delta
|
||||
# An example of rounding up a number, i.e. a temperature of 90.1 becomes 91
|
||||
text_template: '${entity.state ? Math.ceil(entity.state) : "undefined"} F'
|
||||
class_template: '
|
||||
var temp = parseFloat(entity.state.replace("°", ""));
|
||||
if (temp < -30)
|
||||
return "temp-freeze";
|
||||
else if (temp < -20)
|
||||
return "temp-low";
|
||||
else if (temp < 10)
|
||||
return "temp-medium";
|
||||
else if (temp < 30)
|
||||
return "temp-high";
|
||||
else if (temp >= 100)
|
||||
return "temp-hot";
|
||||
else
|
||||
return "hidden-entity";
|
||||
'
|
||||
|
||||
- entities:
|
||||
- sensor.kitchen_fridge_thermostat_temperature
|
||||
text_template: '${entity.state ? Math.floor(entity.state) : "unknown"}'
|
||||
@@ -547,7 +568,8 @@ cards:
|
||||
'
|
||||
|
||||
- entities:
|
||||
- sensor.hvac_multisensor_salt_level_in_bags
|
||||
- sensor.water_softener_multisensor_salt_level_in_bags
|
||||
text_template: '${entity.state ? Math.floor(entity.state) : "undefined"}'
|
||||
class_template: '
|
||||
var bags = parseFloat(entity.state);
|
||||
if (bags > 4)
|
||||
@@ -729,7 +751,7 @@ cards:
|
||||
- binary_sensor.storage_room_door_contact
|
||||
- binary_sensor.mancave_door_contact
|
||||
- binary_sensor.boys_room_door_contact
|
||||
- binary_sensor.hvac_multisensor_door
|
||||
- binary_sensor.water_softener_multisensor_door
|
||||
#- binary_sensor.furnace_room_door_contact
|
||||
- binary_sensor.utility_room_door_contact
|
||||
states:
|
||||
|
||||
@@ -151,7 +151,7 @@ cards:
|
||||
- entity: input_boolean.master_bedroom_asleep
|
||||
tap_action:
|
||||
action: toggle
|
||||
- entity: input_boolean.nursery_asleep
|
||||
- entity: input_boolean.girls_room_asleep
|
||||
tap_action:
|
||||
action: toggle
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ cards:
|
||||
camera_image: camera.clint
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: input_boolean.toggle
|
||||
service: input_boolean.toggle
|
||||
service_data:
|
||||
entity_id: input_boolean.lovelace_clint_more
|
||||
- type: conditional
|
||||
@@ -58,7 +58,7 @@ cards:
|
||||
camera_image: camera.emmett
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: input_boolean.toggle
|
||||
service: input_boolean.toggle
|
||||
service_data:
|
||||
entity_id: input_boolean.lovelace_emmett_more
|
||||
- type: conditional
|
||||
@@ -94,7 +94,7 @@ cards:
|
||||
camera_image: camera.bridget
|
||||
tap_action:
|
||||
action: call-service
|
||||
action: input_boolean.toggle
|
||||
service: input_boolean.toggle
|
||||
service_data:
|
||||
entity_id: input_boolean.lovelace_bridget_more
|
||||
- type: conditional
|
||||
|
||||
@@ -38,9 +38,9 @@
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.028284271"
|
||||
inkscape:cx="61076.349"
|
||||
inkscape:cy="43045.126"
|
||||
inkscape:zoom="0.079999999"
|
||||
inkscape:cx="66018.751"
|
||||
inkscape:cy="37168.75"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
@@ -1605,14 +1605,14 @@
|
||||
style="stroke-width:0.012145"
|
||||
transform="scale(-1)" />
|
||||
<rect
|
||||
id="binary_sensor.hvac_multisensor_door"
|
||||
id="binary_sensor.water_softener_multisensor_door"
|
||||
width="28.25"
|
||||
height="1.25"
|
||||
x="-719.29169"
|
||||
y="17456.875"
|
||||
style="fill:#a05a2c;stroke:#a05a2c;stroke-width:0.00515836"
|
||||
transform="scale(-1)"
|
||||
inkscape:label="binary_sensor.hvac_multisensor_door" />
|
||||
inkscape:label="binary_sensor.water_softener_multisensor_door" />
|
||||
<rect
|
||||
id="rect12-8-8-9-3-20-4-5-2"
|
||||
width="68.25"
|
||||
@@ -3153,8 +3153,8 @@
|
||||
xml:space="preserve"
|
||||
x="611.51886"
|
||||
y="-17958.744"
|
||||
id="sensor.hvac_multisensor_salt_level_in_bags"
|
||||
inkscape:label="sensor.hvac_multisensor_salt_level_in_bags"
|
||||
id="sensor.water_softener_multisensor_salt_level_in_bags"
|
||||
inkscape:label="sensor.water_softener_multisensor_salt_level_in_bags"
|
||||
transform="scale(1.0282777,0.97249994)"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:19.5306px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#d4d4d4;fill-opacity:1;stroke-width:1.20408"><tspan
|
||||
style="stroke-width:1.20408"
|
||||
@@ -3857,7 +3857,7 @@
|
||||
d="m 720.0222,-17679.003 a 4.5,4.5 0 0 1 4.99225,3.941 4.5,4.5 0 0 1 -3.93422,4.997 4.5,4.5 0 0 1 -5.00204,-3.928 4.5,4.5 0 0 1 3.92178,-5.007"
|
||||
inkscape:label="light.storage_room"
|
||||
sodipodi:arc-type="arc" />
|
||||
inkscape:label="light.front_porch_overhead" /> <rect
|
||||
inkscape:label="light.front_porch_overhead" /> <rect
|
||||
id="rect12-8-8-9-3-20-4-5-3"
|
||||
width="43.5"
|
||||
height="4.5"
|
||||
|
||||
|
Before Width: | Height: | Size: 521 KiB After Width: | Height: | Size: 521 KiB |
Reference in New Issue
Block a user