so many freaking changes!

This commit is contained in:
CeeWeasel
2025-11-21 09:42:43 -05:00
parent 2e0a197b4d
commit 7b8fbb063e
104 changed files with 9183 additions and 2432 deletions
+5 -2
View File
@@ -22,7 +22,7 @@ action:
- action: media_player.volume_set
data:
entity_id: media_player.ma_home_assistant_voice_097b44_media_player
volume_level: 0.50
volume_level: 0.60
- action: input_select.select_option
data:
@@ -35,7 +35,10 @@ action:
entity_id: media_player.ma_home_assistant_voice_097b44_media_player
data:
media_type: playlist
media_id: library://playlist/32
#media_id: library://playlist/7
media_id: >
{% set playlists = ['library://playlist/33','library://playlist/32','library://playlist/21','library://playlist/28','library://playlist/27','library://playlist/22','library://playlist/29','library://playlist/36','library://playlist/23','library://playlist/12','library://playlist/34','library://playlist/35','library://playlist/19'] %}
{{ playlists|random }}
enqueue: replace
- action: script.wake_the_bedroom
@@ -98,7 +98,7 @@ action:
- action: webrtc.dash_cast
data:
entity_id: media_player.computer_area_hub
url: rtsp_cam01_sub
url: cam01_sub_opus
force: true
extra:
mode: webrtc
@@ -112,7 +112,7 @@ action:
- action: webrtc.dash_cast
data:
entity_id: media_player.front_room_hub
url: rtsp_cam01_sub
url: cam01_sub_opus
force: true
extra:
mode: webrtc
@@ -28,31 +28,10 @@ action:
target:
entity_id: media_player.ma_boys_room_clock
- action: media_player.volume_set
data:
volume_level: 0.30
target:
entity_id: media_player.ma_boys_room_clock
#- action: script.goodnight_kids_youtube_music
- action: media_player.shuffle_set
metadata: {}
- action: script.search_and_play_playlist
data:
speaker: media_player.ma_boys_room_clock
search_term: CleverThunderstorm
volume: 0.3
repeat: all
shuffle: false
target:
entity_id: media_player.ma_boys_room_clock
- action: media_player.repeat_set
metadata: {}
data:
repeat: "all"
target:
entity_id: media_player.ma_boys_room_clock
- action: music_assistant.play_media
metadata: {}
data:
media_id: library://track/101
media_type: track
enqueue: replace
target:
entity_id: media_player.ma_boys_room_clock
+2 -2
View File
@@ -4,7 +4,7 @@ description: "Handles the lights in the furnace room"
mode: queued
triggers:
- id: door_open
entity_id: binary_sensor.water_softener_multisensor_door
entity_id: binary_sensor.furnace_room_multisensor_door
from: "off"
to: "on"
trigger: state
@@ -12,7 +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.water_softener_multisensor_door
entity_id: binary_sensor.furnace_room_multisensor_door
to: "off"
for: "00:10:00"
trigger: state
@@ -103,7 +103,7 @@ action:
- action: webrtc.dash_cast
data:
entity_id: media_player.computer_area_hub
url: rtsp_cam08_sub
url: cam08_sub_opus
force: true
extra:
mode: webrtc
@@ -117,7 +117,7 @@ action:
- action: webrtc.dash_cast
data:
entity_id: media_player.front_room_hub
url: rtsp_cam08_sub
url: cam08_sub_opus
force: true
extra:
mode: webrtc
@@ -29,31 +29,10 @@ action:
target:
entity_id: media_player.ma_girls_room_hub
- action: media_player.volume_set
data:
volume_level: 0.25
target:
entity_id: media_player.ma_girls_room_hub
#- action: script.goodnight_kids_youtube_music
- action: media_player.shuffle_set
metadata: {}
- action: script.search_and_play_playlist
data:
speaker: media_player.ma_girls_room_hub
search_term: Clever Kids Goodnight Songs
volume: 0.25
repeat: all
shuffle: false
target:
entity_id: media_player.ma_girls_room_hub
- action: media_player.repeat_set
metadata: {}
data:
repeat: "all"
target:
entity_id: media_player.ma_girls_room_hub
- action: music_assistant.play_media
metadata: {}
data:
media_id: library://track/101
media_type: track
enqueue: replace
target:
entity_id: media_player.ma_girls_room_hub
@@ -7,35 +7,10 @@ trigger:
to: "on"
action:
#- action: input_select.select_option
# data:
# entity_id: input_select.master_bedroom_mode
# option: 'Off'
- action: media_player.volume_set
- action: script.search_and_play_playlist
data:
volume_level: 0.25
target:
device_id: 8350a88218fdf3807d190142a9e2dc18
#- action: script.goodnight_kids_youtube_music
- action: music_assistant.play_media
metadata: {}
data:
media_id: library://track/101
media_type: track
enqueue: replace
target:
device_id: 8350a88218fdf3807d190142a9e2dc18
# - action: media_player.shuffle_set
# metadata: {}
# data:
# shuffle: false
# target:
# entity_id: media_player.ma_home_assistant_voice_097b44_media_player
# - action: media_player.repeat_set
# metadata: {}
# data:
# repeat: "all"
# target:
# entity_id: media_player.ma_home_assistant_voice_097b44_media_player
speaker: media_player.ma_home_assistant_voice_097b44_media_player
search_term: CleverThunderstorm
volume: 0.25
repeat: all
shuffle: false
@@ -33,6 +33,12 @@ condition:
entity_id: light.utility_room_vanity
state: "on"
variables:
switch_name: switch.utility_room_motion_switch
light_name: utility_room_hue
mode_name: input_select.utility_room_mode
automatic_profile: input_select.automatic_light_profile
action:
- alias: "Make sure Z-Wave switch is turned on"
action: homeassistant.turn_on
@@ -47,10 +53,10 @@ action:
sequence:
- action: scene.turn_on
target:
entity_id: "scene.utility_room_hue_{{states('input_select.automatic_light_profile').lower().replace(' ','_')}}"
entity_id: "scene.{{light_name}}_{{states(automatic_profile).lower().replace(' ','_')}}"
default:
- action: scene.turn_on
target:
entity_id: "scene.utility_room_hue_{{states('input_select.utility_room_mode').lower().replace(' ','_')}}"
entity_id: "scene.{{light_name}}_{{states(mode_name).lower().replace(' ','_')}}"
- delay: 1
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -30,12 +30,6 @@ observations:
prob_given_false: 0.01
to_state: 'on'
# - platform: template
# value_template: >
# {{ states('sensor.master_bathroom_thermostat_humidity') | float(default=0) - states('sensor.master_bedroom_multisensor_humidity') | float(default=0) > 30 }}
# prob_given_true: 0.99
# prob_given_false: 0.01
# - entity_id: input_boolean.home_occupied
# platform: state
# prob_given_true: .01
+6 -7
View File
@@ -136,18 +136,17 @@ sensors:
friendly_name: Bathroom Getting Humid
delay_off:
minutes: 5
#value_template: "{{ is_state('binary_sensor.trend_bathroom_humidity','on') or states('sensor.master_bathroom_thermostat_humidity') | int(default=0) - states('sensor.master_bedroom_multisensor_humidity') | int(default=100) > 5}}"
value_template: "{{ states('sensor.master_bathroom_thermostat_humidity') | float(default=0) - states('sensor.upstairs_mean_humidity') | float(default=100) > 10 }}"
value_template: "{{ states('sensor.bathroom_multisensor_relative_humidity') | float(default=0) - states('sensor.upstairs_mean_humidity') | float(default=100) > 10 }}"
icon_template: >
{% if states('sensor.master_bathroom_thermostat_humidity') | float(default=0) - states('sensor.upstairs_mean_humidity') | float(default=100) > 10 %}
{% if states('sensor.bathroom_multisensor_relative_humidity') | float(default=0) - states('sensor.upstairs_mean_humidity') | float(default=100) > 10 %}
mdi:water-percent
{% else %}
mdi:water-off
{% endif %}
attribute_templates:
room_humidity: "{{ states('sensor.master_bathroom_thermostat_humidity') | float(default=0) }}"
room_humidity: "{{ states('sensor.bathroom_multisensor_relative_humidity') | float(default=0) }}"
mean_humidity: "{{ states('sensor.upstairs_mean_humidity') | float(default=0) }}"
difference: "{{ states('sensor.master_bathroom_thermostat_humidity') | float(default=0) - states('sensor.upstairs_mean_humidity') | float(default=0) }}"
difference: "{{ states('sensor.bathroom_multisensor_relative_humidity') | float(default=0) - states('sensor.upstairs_mean_humidity') | float(default=0) }}"
utility_room_getting_humid:
unique_id: templatebinarysensor.utility_room_getting_humid
@@ -584,7 +583,7 @@ sensors:
mancave_light_left_on:
unique_id: templatebinarysensor.mancave_light_left_on
friendly_name: Mancave Light Left On
value_template: "{{ is_state('light.mancave','on') }}"
value_template: "{{ is_state('light.mancave','on') and is_state('input_boolean.mancave_occupied','off') }}"
delay_on:
seconds: 30
@@ -687,7 +686,7 @@ sensors:
need_salt:
unique_id: templatebinarysensor.need_salt
friendly_name: Need Salt
value_template: "{{ is_state('binary_sensor.water_softener_multisensor_status', 'on') and is_state('sensor.water_softener_multisensor_salt_level_in_bags','0') }}"
value_template: "{{ is_state('binary_sensor.furnace_room_multisensor_status', 'on') and is_state('sensor.furnace_room_multisensor_salt_level_in_bags','1') }}"
icon_template: mdi:shaker-outline
delay_on:
seconds: 900
+10 -10
View File
@@ -82,25 +82,25 @@ script:
# {% endif %}
# url: >
# {% if is_state('input_select.camera_dropdown', 'Boys Room') %}
# rtsp://192.168.1.11:8554/rtsp_cam01_sub
# rtsp://192.168.1.11:8554/cam01_sub_opus
# {% elif is_state('input_select.camera_dropdown', 'Kitchen') %}
# rtsp://192.168.1.11:8554/rtsp_cam12_sub
# rtsp://192.168.1.11:8554/cam12_sub_opus
# {% elif is_state('input_select.camera_dropdown', 'Computer Area') %}
# rtsp://192.168.1.11:8554/rtsp_cam03_sub
# rtsp://192.168.1.11:8554/cam03_sub_opus
# {% elif is_state('input_select.camera_dropdown', 'Garage') %}
# rtsp://192.168.1.11:8554/rtsp_cam04_sub
# rtsp://192.168.1.11:8554/cam04_sub_opus
# {% elif is_state('input_select.camera_dropdown', 'Master Bedroom') %}
# rtsp://192.168.1.11:8554/rtsp_cam06_sub
# rtsp://192.168.1.11:8554/cam06_sub_opus
# {% elif is_state('input_select.camera_dropdown', 'Nursery') %}
# rtsp://192.168.1.11:8554/rtsp_cam08_sub
# rtsp://192.168.1.11:8554/cam08_sub_opus
# {% elif is_state('input_select.camera_dropdown', 'Back Yard') %}
# rtsp://192.168.1.11:8554/rtsp_cam14_sub
# rtsp://192.168.1.11:8554/cam14_sub_opus
# {% elif is_state('input_select.camera_dropdown', 'Front Yard') %}
# rtsp://192.168.1.11:8554/rtsp_cam18_sub
# rtsp://192.168.1.11:8554/cam18_sub_opus
# {% elif is_state('input_select.camera_dropdown', 'Front Door') %}
# rtsp://192.168.1.11:8554/rtsp_cam19_sub
# rtsp://192.168.1.11:8554/cam19_sub_opus
# {% elif is_state('input_select.camera_dropdown', 'Front Room') %}
# rtsp://192.168.1.11:8554/rtsp_cam13_sub
# rtsp://192.168.1.11:8554/cam13_sub_opus
# {% endif %}
# force: true
# extra:
+7
View File
@@ -49,3 +49,10 @@ template:
icon: mdi:chip
attributes:
devices: "{{ states.update | selectattr('state', 'eq', 'on') | map(attribute='entity_id') | select ('in',integration_entities('esphome')) | list }}"
- name: ESPHome Offline Devices
unique_id: c17e967e-e3ff-42dd-a85c-a5c1d1e9ae63
state: "{{ integration_entities('esphome') | select('search', 'status') | select('is_state', 'off') | list | count }}"
icon: mdi:chip
attributes:
devices: "{{ integration_entities('esphome') | select('search', 'status') | select('is_state', 'off') | list }}"
+798
View File
@@ -0,0 +1,798 @@
substitutions:
devicename: circuit-sensor
entity_name: circuit_sensor
friendly_name: Circuit Sensor
board: esp32-s3-devkitc-1
framework: esp-idf
comment: Clever ${friendly_name}
name_prefix: 'PM:'
static_ip: !secret circuit-sensor-ip
update_time: 500ms
kwh_report_interval: 60s
watt_heartbeat: 60s
throttle_time: 60s
watt_delta: "50.0"
grid_watt_delta: "200.0"
# Current Transformer Names
ct01Name: 'Grid Phase A'
ct04Name: 'Grid Phase B'
ct22Name: 'Well' # 1, 3 # sct010 - O
ct12Name: 'Kitchen 1' # 5 # sct006 - L
ct16Name: 'Kitchen 2' # 7 # sct006 - S
ct18Name: 'Laundry Plug' # 9 # sct006 - N
ct08Name: 'Microwave Plug' # 11 # sct006 - H
ct17Name: 'Bathroom Plug' # 13 # sct006 - R
ct11Name: 'Heat Pump' # 15, 17 - M
ct24Name: 'Basement Bedroom and Furnace Room Lights' # 19 # sct006 - K
ct05Name: 'Basement Plugs' # 21a # sct006 - E
ct23Name: 'Basement and Laundry Lights and Plugs' # 21b # sct006 - W
ct07Name: 'Sump Pump Plug' # 23 # sct006 - C
ct06Name: 'Nursery, Dining, Kitchen Lights' # 2 # sct006 - F
ct20Name: 'Master Suite' # 4 # sct006 - T
ct03Name: 'Furnace' # 6 # sct006 - D
ct15Name: 'Basement Stairs and Lights' # 8 # sct006 - P
ct21Name: 'Dishwasher' # 10 # sct006 - V
ct13Name: 'Garage Outside and Front Garage Lights' # 12 # sct006 - U
ct10Name: 'Front Room Plugs' # 14 # sct006 - J
ct14Name: 'Garage and Outside Plugs' # 16 # sct006 - Q
ct09Name: 'Stove' # 18, 20 # sct016 - I
ct02Name: 'Dryer' # 22, 24 # sct010 - G
ct19Name: 'Unused'
# Current Transformers:
sct006: '11143'
sct010: '41660'
sct013: '27518'
sct016: '41787'
voltage_cal: '7305'
# Sensor Pins
spi_clk: 7
spi_miso: 5
spi_mosi: 6
ic1_main: 8
ic1_addon1: 0
ic1_addon2: 7
ic1_addon3: 2
ic2_main: 4
ic2_addon1: 16
ic2_addon2: 17
ic2_addon3: 21
packages:
network: !include common/waveshare_esp32_s3_eth.yaml
device_base: !include common/device_base.yaml
web_server: !include common/web_server.yaml
esp32:
board: ${board}
framework:
type: ${framework}
time:
- platform: sntp
id: sntp_time
timezone: America/Detroit
# TODO: If I want to use this board, I'd need to translate PINs
# https://www.waveshare.com/esp32-s3-eth.htm
# Use a 40 pin ribbon cable so that the esp can be outside the breaker box?
# https://github.com/CircuitSetup/Expandable-6-Channel-ESP32-Energy-Meter/blob/master/Software/ESPHome/README.md
# QUESTION: Is there a way to separate the power so this can use POE
# Either way, the power from the adapter would need to make it to the main board somehow.
spi:
clk_pin: ${spi_clk}
miso_pin: ${spi_miso}
mosi_pin: ${spi_mosi}
interface: any
sensor:
#IC1 Main
- platform: atm90e32
cs_pin: ${ic1_main}
phase_a:
voltage:
name: ${name_prefix} [V]
id: ic1Volts
filters:
- throttle_average: 60s
accuracy_decimals: 1
current:
name: ${name_prefix} ${ct01Name} [A]
id: ct1Amps
filters:
- or:
- delta: 2
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
power:
name: ${name_prefix} ${ct01Name} [W]
id: ct1Watts
filters:
- or:
- delta: ${grid_watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct016}
phase_b:
power:
name: ${name_prefix} ${ct02Name} [W]
id: ct2Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct010}
phase_c:
power:
name: ${name_prefix} ${ct03Name} [W]
id: ct3Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
frequency:
name: ${name_prefix} Freq A
filters:
- or:
- delta: 0.05
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 Main
- platform: atm90e32
cs_pin: ${ic2_main}
phase_a:
current:
name: ${name_prefix} ${ct04Name} [A]
id: ct4Amps
filters:
- or:
- delta: ${grid_watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
power:
name: ${name_prefix} ${ct04Name} [W]
id: ct4Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
gain_voltage: ${voltage_cal}
gain_ct: ${sct016}
phase_b:
power:
name: ${name_prefix} ${ct05Name} [W]
id: ct5Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_c:
power:
name: ${name_prefix} ${ct06Name} [W]
id: ct6Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
frequency:
name: ${name_prefix} Freq B
filters:
- or:
- delta: 0.05
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 1
- platform: atm90e32
cs_pin: ${ic1_addon1}
phase_a:
power:
name: ${name_prefix} ${ct07Name} [W]
id: ct7Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_b:
power:
name: ${name_prefix} ${ct08Name} [W]
id: ct8Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_c:
power:
name: ${name_prefix} ${ct09Name} [W]
id: ct9Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct013}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 1
- platform: atm90e32
cs_pin: ${ic2_addon1}
phase_a:
power:
name: ${name_prefix} ${ct10Name} [W]
id: ct10Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_b:
power:
name: ${name_prefix} ${ct11Name} [W]
id: ct11Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct010}
phase_c:
power:
name: ${name_prefix} ${ct12Name} [W]
id: ct12Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 2
- platform: atm90e32
cs_pin: ${ic1_addon2}
phase_a:
power:
name: ${name_prefix} ${ct13Name} [W]
id: ct13Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_b:
power:
name: ${name_prefix} ${ct14Name} [W]
id: ct14Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_c:
power:
name: ${name_prefix} ${ct15Name} [W]
id: ct15Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 2
- platform: atm90e32
cs_pin: ${ic2_addon2}
phase_a:
power:
name: ${name_prefix} ${ct16Name} [W]
id: ct16Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_b:
power:
name: ${name_prefix} ${ct17Name} [W]
id: ct17Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_c:
power:
name: ${name_prefix} ${ct18Name} [W]
id: ct18Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC1 AddOn 3
- platform: atm90e32
#do not use GPIO2 if ESP32 has an on-board LED assigned to it
cs_pin: ${ic1_addon3}
phase_a:
power:
name: ${name_prefix} ${ct19Name} [W]
id: ct19Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_b:
power:
name: ${name_prefix} ${ct20Name} [W]
id: ct20Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_c:
power:
name: ${name_prefix} ${ct21Name} [W]
id: ct21Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#IC2 AddOn 3
- platform: atm90e32
cs_pin: ${ic2_addon3}
phase_a:
power:
#name: ${name_prefix} ${ct22Name} [W]
internal: true
id: ct22Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct010}
phase_b:
power:
name: ${name_prefix} ${ct23Name} [W]
id: ct23Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
phase_c:
power:
name: ${name_prefix} ${ct24Name} [W]
id: ct24Watts
filters:
- or:
- delta: ${watt_delta}
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
- multiply: -1
accuracy_decimals: 1
gain_voltage: ${voltage_cal}
gain_ct: ${sct006}
line_frequency: 60Hz
gain_pga: 1X
update_interval: ${update_time}
#Total Amps From Grid
- platform: template
name: ${name_prefix} Grid Total [A]
id: totalAmpsFromGrid
lambda: return id(ct1Amps).state + id(ct4Amps).state ;
accuracy_decimals: 1
unit_of_measurement: A
device_class: current
state_class: measurement
update_interval: ${update_time}
filters:
- or:
- delta: 2.0
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
#Total Watts From Grid
- platform: template
name: ${name_prefix} Grid Total [W]
id: totalWattsFromGrid
lambda: return id(ct1Watts).state + id(ct4Watts).state ;
accuracy_decimals: 1
unit_of_measurement: W
device_class: power
state_class: measurement
update_interval: ${update_time}
filters:
- or:
- delta: 5.0
- throttle_average: ${throttle_time}
# - heartbeat: ${watt_heartbeat}
#kWh From Grid
- platform: total_daily_energy
name: ${name_prefix} Grid [kWh]
power_id: totalWattsFromGrid
filters:
- multiply: 0.001
# - heartbeat: ${kwh_report_interval}
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
# The CT for the Well needs to be calibrated.
# In the interim, I'm using this lambda
- platform: template
name: ${name_prefix} ${ct22Name} [W]
id: ct22WattsPositive
state_class: measurement
lambda: |-
if (id(ct22Watts).state < 0){
return 0;
} else {
return id(ct22Watts).state ;
}
accuracy_decimals: 1
unit_of_measurement: W
icon: mdi:lightning-bolt-circle
update_interval: ${update_time}
filters:
- delta: 5.0
# - heartbeat: ${watt_heartbeat}
# kWh from CT1
# This is included in the grid calculation
# kWh from CT2 (the dryer)
- platform: total_daily_energy
name: ${name_prefix} ${ct02Name} [kWh]
power_id: ct2Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 3
- platform: total_daily_energy
name: ${name_prefix} ${ct03Name} [kWh]
power_id: ct3Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
# kWh From CT 4
# This is included in the Grid calculation area
#kWh From CT 5
- platform: total_daily_energy
name: ${name_prefix} ${ct05Name} [kWh]
power_id: ct5Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 6
- platform: total_daily_energy
name: ${name_prefix} ${ct06Name} [kWh]
power_id: ct6Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 7
- platform: total_daily_energy
name: ${name_prefix} ${ct07Name} [kWh]
power_id: ct7Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 8
- platform: total_daily_energy
name: ${name_prefix} ${ct08Name} [kWh]
power_id: ct8Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 9
- platform: total_daily_energy
name: ${name_prefix} ${ct09Name} [kWh]
power_id: ct9Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 10
- platform: total_daily_energy
name: ${name_prefix} ${ct10Name} [kWh]
power_id: ct10Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 11 (Heat Pump)
- platform: total_daily_energy
name: ${name_prefix} ${ct11Name} [kWh]
power_id: ct11Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 12
- platform: total_daily_energy
name: ${name_prefix} ${ct12Name} [kWh]
power_id: ct12Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 13
- platform: total_daily_energy
name: ${name_prefix} ${ct13Name} [kWh]
power_id: ct13Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 14
- platform: total_daily_energy
name: ${name_prefix} ${ct14Name} [kWh]
power_id: ct14Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 15
- platform: total_daily_energy
name: ${name_prefix} ${ct15Name} [kWh]
power_id: ct15Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 16
- platform: total_daily_energy
name: ${name_prefix} ${ct16Name} [kWh]
power_id: ct16Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 17
- platform: total_daily_energy
name: ${name_prefix} ${ct17Name} [kWh]
power_id: ct17Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 18
- platform: total_daily_energy
name: ${name_prefix} ${ct18Name} [kWh]
power_id: ct18Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 19
# this is not used
# - platform: total_daily_energy
# name: ${name_prefix} ${ct19Name} [kWh]
# power_id: ct19Watts
# filters:
# - multiply: 0.001
# - throttle_average: ${kwh_report_interval}
# unit_of_measurement: kWh
# device_class: energy
# state_class: total_increasing
# # min_save_interval: ${update_time}
#kWh From CT 20
- platform: total_daily_energy
name: ${name_prefix} ${ct20Name} [kWh]
power_id: ct20Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 21
- platform: total_daily_energy
name: ${name_prefix} ${ct21Name} [kWh]
power_id: ct21Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 22
- platform: total_daily_energy
name: ${name_prefix} ${ct22Name} [kWh]
power_id: ct22WattsPositive
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 23
- platform: total_daily_energy
name: ${name_prefix} ${ct23Name} [kWh]
power_id: ct23Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
#kWh From CT 24
- platform: total_daily_energy
name: ${name_prefix} ${ct24Name} [kWh]
power_id: ct24Watts
filters:
- multiply: 0.001
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
# min_save_interval: ${update_time}
@@ -1,220 +0,0 @@
# 3v3 en svp sun 34 35 32 33 25 26 27 14 12 gnd 13 sd2 sd3 gnd 5v
substitutions:
devicename: furnace-room-multisensor
entity_name: furnace_room_multisensor
friendly_name: Furnace Room MultiSensor
comment: Clever MultiSensor
platform: ESP32
board: wemos_d1_mini32
static_ip: !secret furnace-room-multisensor-ip
one_wire_pin: GPIO14
sda_pin: GPIO21
scl_pin: GPIO22
door_pin: GPIO34
trigger_pin: GPIO33
echo_pin: GPIO35
#mdc_pin: GPIO23
#mdio_pin: GPIO18
#clk_mode: GPIO17_OUT
#power_pin: GPIO5
packages:
#wifi: !include common/wifi_no_power_save.yaml
ethernet: !include common/ethernet.yaml
device_base: !include common/device_base.yaml
ble_proxy: !include common/ble_proxy.yaml
esphome:
name: ${devicename}
friendly_name: ${friendly_name}
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:
globals:
- id: screen_power
type: bool
restore_value: yes
initial_value: 'true'
font:
- file: 'CascadiaMonoPL.ttf'
id: font1
size: 17
one_wire:
- platform: gpio
pin: ${one_wire_pin}
i2c:
sda: ${sda_pin}
scl: ${scl_pin}
frequency: 800kHz
display:
- platform: ssd1306_i2c
id: oled
model: "SSD1306 128x64"
#reset_pin: GPIO14 #D0
address: 0x3C
lambda: |-
it.print(0, 0, id(font1), "Delt:");
it.printf(128, 0, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(hvac_delta).state);
it.print(0, 16, id(font1), "HVAC:");
it.printf(128, 16, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(hvac).state);
it.print(0, 32, id(font1), "Retn:");
it.printf(128, 32, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(hvac_return).state);
it.print(0, 48, id(font1), "Ambt:");
it.printf(128, 48, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(ambient).state);
sensor:
- platform: dallas_temp
address: 0xB33C01B607798528
name: "Return Temperature"
id: hvac_return
update_interval: 10s
filters:
- lambda: return x * (9.0/5.0) + 32.0;
unit_of_measurement: "°F"
state_class: measurement
- platform: dallas_temp
address: 0x0F3C01B6070C1328
name: "Supply Temperature"
id: hvac_supply
update_interval: 10s
filters:
- lambda: return x * (9.0/5.0) + 32.0;
unit_of_measurement: "°F"
state_class: measurement
- platform: dallas_temp
address: 0xFA3C01B607005B28
name: "Ambient Temperature"
id: ambient
update_interval: 10s
filters:
- lambda: return x * (9.0/5.0) + 32.0;
unit_of_measurement: "°F"
state_class: measurement
- platform: template
name: "Delta Temperature"
id: hvac_delta
lambda: |-
return (id(hvac_supply).state - id(hvac_return).state);
update_interval: 10s
unit_of_measurement: "°F"
state_class: measurement
filters:
- or:
- throttle: 60s
- delta: 1.0
- platform: ultrasonic
trigger_pin: ${trigger_pin}
echo_pin: ${echo_pin}
id: ultrasonic_source
#update_interval: 5s
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"
#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"
#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"
#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
- platform: homeassistant
internal: true
id: light_state
entity_id: light.furnace_room
on_state:
then:
- if:
condition:
lambda: 'return id(light_state).state;'
then:
- logger.log: "The light is on"
else:
- logger.log: "The is off. Turning off display"
- switch.turn_off: display_switch
switch:
- platform: template
id: display_switch
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;
// id(oled).turn_on();
turn_off_action:
- lambda: |-
id(screen_power) = false;
// id(oled).turn_off();
+124 -148
View File
@@ -1,141 +1,141 @@
# 3v3 en svp sun 34 35 32 33 25 26 27 14 12 gnd 13 sd2 sd3 gnd 5v
substitutions:
devicename: furnace-room-multisensor
entity_name: furnace_room_multisensor
friendly_name: Furnace Room MultiSensor
comment: Clever MultiSensor
platform: ESP32
board: wemos_d1_mini32
board: nodemcuv2
static_ip: !secret furnace-room-multisensor-ip
sda_pin: GPIO21
scl_pin: GPIO22
door_pin: GPIO19
# For the reed switches
door: 35
moisture: 36
one_wire_pin: GPIO14
trigger_pin: GPIO04
echo_pin: GPIO12
#mdc_pin: GPIO23
#mdio_pin: GPIO18
#clk_mode: GPIO17_OUT
#power_pin: GPIO5
# For the ultrasonic sensor
trigger: 14
echo: 15
packages:
#wifi: !include common/wifi_no_power_save.yaml
ethernet: !include common/ethernet.yaml
device_base: !include common/device_base.yaml
ble_proxy: !include common/ble_proxy.yaml
# Infrared Sensor
ir_tx: 12
ir_rx: 39
# I2C Pins
i2c_sda: 13
i2c_scl: 16
# For the ethernet adapter
ethernet_mdc_pin: 23
ethernet_mdio_pin: 18
ethernet_clk_pin: 0
# For the relays
relay1: 32
relay2: 33
# Built-in button
button1: 34
# For the HVAC temperature sensors
one_wire: 17
one_wire:
- platform: gpio
pin: ${one_wire}
esphome:
name: ${devicename}
friendly_name: ${friendly_name}
name_add_mac_suffix: false
esp32:
board: ${board}
framework:
type: esp-idf
packages:
network: !include common/olimex_evb.yaml
device_base: !include common/device_base.yaml
# Included in common/olimex-evb.yaml
# esp32:
# board: esp32dev
# framework:
# type: esp-idf
# Enable logging
logger:
api: # Using settings from common/device_base.yaml
web_server:
port: 80
version: 3
include_internal: True
ota: # Using settings from common/device_base.yaml
# # Enable Home Assistant API
# api:
# encryption:
# key: "mupTLNBggWPdKHxBeY1yV47qXgyhVJUgIVVAvfGrZ40="
esp32_ble_tracker:
# ota:
# - platform: esphome
# password: "b43bd5c6f724d64a9bd4e92504830d8f"
globals:
- id: screen_power
type: bool
restore_value: yes
initial_value: 'true'
remote_receiver:
pin: ${ir_rx}
dump: all
font:
- file: 'CascadiaMonoPL.ttf'
id: font1
size: 17
one_wire:
- platform: gpio
pin: ${one_wire_pin}
remote_transmitter:
pin: ${ir_tx}
carrier_duty_percent: 50%
i2c:
sda: ${sda_pin}
scl: ${scl_pin}
frequency: 800kHz
sda: ${i2c_sda}
scl: ${i2c_scl}
scan: true
id: bus_a
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);
binary_sensor:
- platform: gpio
name: "ESP32-EVB button"
pin: ${button1}
- platform: gpio
name: "Door"
device_class: door
filters:
- invert:
pin:
number: ${door}
# mode: INPUT_PULLUP
- platform: gpio
name: "Moisture"
device_class: moisture
pin:
number: ${moisture}
# mode: INPUT_PULLUP
switch:
- platform: gpio
pin: ${relay1}
name: "Relay1"
- platform: gpio
pin: ${relay2}
name: "Relay2"
sensor:
- platform: dallas_temp
address: 0xB33C01B607798528
name: "Return Temperature"
id: hvac_return
update_interval: 10s
filters:
- lambda: return x * (9.0/5.0) + 32.0;
unit_of_measurement: "°F"
state_class: measurement
- platform: dallas_temp
address: 0x0F3C01B6070C1328
name: "Supply Temperature"
id: hvac_supply
update_interval: 10s
filters:
- lambda: return x * (9.0/5.0) + 32.0;
unit_of_measurement: "°F"
state_class: measurement
- platform: dallas_temp
address: 0xFA3C01B607005B28
name: "Ambient Temperature"
id: ambient
update_interval: 10s
filters:
- lambda: return x * (9.0/5.0) + 32.0;
unit_of_measurement: "°F"
state_class: measurement
- platform: template
name: "Delta Temperature"
id: hvac_delta
lambda: |-
return (id(hvac_supply).state - id(hvac_return).state);
update_interval: 10s
unit_of_measurement: "°F"
state_class: measurement
filters:
- or:
- throttle: 60s
- delta: 1.0
- platform: ultrasonic
trigger_pin: ${trigger_pin}
echo_pin: ${echo_pin}
trigger_pin: ${trigger}
echo_pin: ${echo}
id: ultrasonic_source
#update_interval: 5s
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:
@@ -151,9 +151,15 @@ sensor:
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;'
- lambda: 'return (0.94 - x) * 100;'
- clamp:
min_value: 0.0
max_value: 150.0
on_value:
then:
- sensor.template.publish:
@@ -165,58 +171,28 @@ sensor:
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;'
- 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 (id(distance_from_bottom).state) / 17.5;'
binary_sensor:
- platform: gpio
name: "Door"
device_class: door
pin:
number: ${door_pin}
mode: INPUT_PULLUP
- platform: homeassistant
internal: true
id: light_state
entity_id: light.furnace_room
on_state:
then:
- if:
condition:
lambda: 'return id(light_state).state;'
then:
- logger.log: "The light is on"
else:
- logger.log: "The is off. Turning off display"
- switch.turn_off: display_switch
switch:
- platform: template
id: display_switch
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;
// id(oled).turn_on();
turn_off_action:
- lambda: |-
id(screen_power) = false;
// id(oled).turn_off();
- lambda: 'return x / 17.5;'
- round: 1
- clamp:
min_value: 0.0
max_value: 10.0
+20 -611
View File
@@ -4,243 +4,35 @@ substitutions:
entity_name: hvac_multisensor
friendly_name: HVAC MultiSensor
comment: Clever MultiSensor
platform: ESP32
board: esp32-wroom-32d
variant: esp32
platform: ESP8266
board: d1_mini
#variant: esp32
# framework: esp-idf
framework: arduino
#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 Ultrasonic Sensor
trigger_pin: GPIO14
echo_pin: GPIO16
# For i2c devices
sda_pin: GPIO21
scl_pin: GPIO22
# For additional devices
passive_buzzer_pin: GPIO26
one_wire_pin: GPIO17
moisture_pin: GPIO33
door_pin: GPIO34
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}
variant: ${variant}
framework:
type: ${framework}
esp8266:
board: ${board}
# 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
font:
- 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
]
one_wire:
- platform: gpio
pin:
number: ${one_wire_pin}
# mode:
# input: true
# pullup: true
i2c:
- id: bus_a
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
binary_sensor:
- platform: gpio
name: "Door"
device_class: door
pin:
number: ${door_pin}
inverted: True
pin: D5
sensor:
- platform: ultrasonic
trigger_pin: ${trigger_pin}
echo_pin: ${echo_pin}
name: "Ultrasonic Sensor"
update_interval: 1s
- platform: bme280_i2c
i2c_id: bus_a
address: 0x76
update_interval: 10s
temperature:
name: "BME280 76A Temperature"
pressure:
name: "BME280 76A Pressure"
humidity:
name: "BME280 76A Humidity"
- platform: dallas_temp
address: 0x5a3c01d6078a2e28
name: "Probe 1"
@@ -257,6 +49,9 @@ sensor:
- clamp:
min_value: 0.0
max_value: 150.0
- or:
- throttle: 60s
- delta: 1.0
unit_of_measurement: "°F"
state_class: measurement
@@ -271,6 +66,9 @@ sensor:
- clamp:
min_value: 0.0
max_value: 150.0
- or:
- throttle: 60s
- delta: 1.0
unit_of_measurement: "°F"
state_class: measurement
@@ -285,6 +83,9 @@ sensor:
- clamp:
min_value: 0.0
max_value: 150.0
- or:
- throttle: 60s
- delta: 1.0
unit_of_measurement: "°F"
state_class: measurement
@@ -293,409 +94,17 @@ sensor:
id: hvac_delta
icon: mdi:thermometer-lines
lambda: |-
return (id(probe1).state - id(probe2).state);
return round( (id(probe1).state - id(probe2).state) * 100.0) / 100.0;
update_interval: 10s
unit_of_measurement: "°F"
state_class: measurement
device_class: ""
accuracy_decimals: 1
filters:
- lambda: 'return round( x * 100.0) / 100.0;'
#- lambda: 'return round( (id(probe1).state - id(probe2).state) * 100.0) / 100.0;'
- clamp:
min_value: -100.0
max_value: 100.0
- or:
- throttle: 60s
- delta: 1.0
display:
- 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
touchscreen:
# - platform: ft5x06
# Uses i2c
- platform: ft63x6
i2c_id: bus_a
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
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
@@ -1,42 +1,129 @@
# 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
devicename: furnace-room-multisensor
entity_name: furnace_room_multisensor
friendly_name: Furnace Room MultiSensor
comment: Clever MultiSensor
board: nodemcuv2
static_ip: !secret water-softener-multisensor-ip
static_ip: !secret furnace-room-multisensor-ip
door_pin: D5
# For the reed switches
door: 35
moisture: 36
# For the ultrasonic sensor
trigger_pin: D7
echo_pin: D6
trigger: 14
echo: 15
packages:
# network: !include common/ethernet.yaml
network: !include common/wifi.yaml
device_base: !include common/device_base.yaml
# Infrared Sensor
ir_tx: 12
ir_rx: 39
# I2C Pins
i2c_sda: 13
i2c_scl: 16
# For the ethernet adapter
ethernet_mdc_pin: 23
ethernet_mdio_pin: 18
ethernet_clk_pin: 0
# For the relays
relay1: 32
relay2: 33
# Built-in button
button1: 34
# For the HVAC temperature sensors
one_wire: 17
one_wire:
- platform: gpio
pin: ${one_wire}
esphome:
name: ${devicename}
friendly_name: ${friendly_name}
name_add_mac_suffix: false
esp8266:
board: ${board}
packages:
network: !include common/olimex_evb.yaml
device_base: !include common/device_base.yaml
# Included in common/olimex-evb.yaml
# esp32:
# board: esp32dev
# framework:
# type: esp-idf
# Enable logging
logger:
api: # Using settings from common/device_base.yaml
web_server:
port: 80
version: 3
include_internal: True
ota: # Using settings from common/device_base.yaml
# # Enable Home Assistant API
# api:
# encryption:
# key: "mupTLNBggWPdKHxBeY1yV47qXgyhVJUgIVVAvfGrZ40="
# ota:
# - platform: esphome
# password: "b43bd5c6f724d64a9bd4e92504830d8f"
remote_receiver:
pin: ${ir_rx}
dump: all
remote_transmitter:
pin: ${ir_tx}
carrier_duty_percent: 50%
i2c:
sda: ${i2c_sda}
scl: ${i2c_scl}
scan: true
id: bus_a
binary_sensor:
- platform: gpio
name: "ESP32-EVB button"
pin: ${button1}
- platform: gpio
name: "Door"
device_class: door
filters:
- invert:
pin:
number: ${door}
# mode: INPUT_PULLUP
- platform: gpio
name: "Moisture"
device_class: moisture
pin:
number: ${moisture}
# mode: INPUT_PULLUP
switch:
- platform: gpio
pin: ${relay1}
name: "Relay1"
- platform: gpio
pin: ${relay2}
name: "Relay2"
sensor:
- platform: ultrasonic
trigger_pin: ${trigger_pin}
echo_pin: ${echo_pin}
trigger_pin: ${trigger}
echo_pin: ${echo}
id: ultrasonic_source
update_interval: 1s
internal: True
@@ -109,15 +196,3 @@ sensor:
- 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:
+3 -202
View File
@@ -5,11 +5,13 @@ substitutions:
comment: Clever MultiSensor
platform: ESP8266
board: nodemcu
i2c_id: bus_a
static_ip: !secret bathroom-multisensor-ip
packages:
network: !include common/wifi.yaml
device_base: !include common/device_base.yaml
bme680: !include common/bme680.yaml
esphome:
name: ${devicename}
@@ -29,207 +31,6 @@ web_server:
include_internal: True
i2c:
- id: bus_a
- id: ${i2c_id}
sda: D2
scl: D1
bme680_bsec:
i2c_id: bus_a
# i2c address
# -----------
# Common values are:
# - 0x76
# - 0x77
# Default: 0x76
address: 0x77
# Temperature offset
# ------------------
# Useful if device is in enclosure and reads too high
# Default: 0
temperature_offset: 0
# IAQ calculation mode
# --------------------
# Available options:
# - static (for fixed position devices)
# - mobile (for on person or other moveable devices)
# Default: static
iaq_mode: static
# Sample rate
# -----------
# This controls the sampling rate for gas-dependant sensors and will govern the interval
# at which the sensor heater is operated.
# By default this rate will also be used for temperature, pressure and humidity sensors
# but these can be overridden on a per-sensor level if required.
#
# Available options:
# - lp (low power - samples every 3 seconds)
# - ulp (ultra low power - samples every 5 minutes)
# Default: lp
sample_rate: lp
# Interval at which to save BSEC state
# ------------------------------------
# Default: 6h
state_save_interval: 6h
sensor:
# - platform: bme680
# i2c_id: bus_a
# address: 0x77
# update_interval: 3s
# temperature:
# name: "Standard Temperature"
# oversampling: 16x
# device_class: temperature
# unit_of_measurement: "°C"
# web_server:
# sorting_weight: 10
# pressure:
# name: "Standard Pressure"
# device_class: atmospheric_pressure
# unit_of_measurement: hPa
# web_server:
# sorting_weight: 20
# humidity:
# id: "humidity"
# name: "Standard Humidity"
# device_class: humidity
# unit_of_measurement: "%"
# web_server:
# sorting_weight: 30
# gas_resistance:
# id: "gas_resistance"
# name: "Standard Gas Resistance"
# unit_of_measurement: "Ω"
# web_server:
# sorting_weight: 40
# - platform: template
# name: "Standard Indoor Air Quality"
# id: iaq
# icon: "mdi:gauge"
# # calculation: comp_gas = log(R_gas[ohm]) + 0.04 log(Ohm)/%rh * hum[%rh]
# lambda: |-
# return log(id(gas_resistance).state) + 0.04 * id(humidity).state;
# state_class: "measurement"
# web_server:
# sorting_weight: 50
- platform: bme680_bsec
temperature:
# Temperature in °C
name: "Temperature"
id: temp
sample_rate: lp
unit_of_measurement: "°C"
web_server:
sorting_weight: 11
filters:
- median
pressure:
# Pressure in hPa
name: "Pressure"
id: pressure
sample_rate: lp
unit_of_measurement: "hPa"
web_server:
sorting_weight: 21
filters:
- median
humidity:
# Relative humidity %
id: humidity
name: "Relative Humidity"
sample_rate: lp
unit_of_measurement: "%"
web_server:
sorting_weight: 31
filters:
- median
gas_resistance:
# Gas resistance in Ω
name: "Gas Resistance"
id: gas_resistance
unit_of_measurement: "Ω"
disabled_by_default: True
web_server:
sorting_weight: 41
filters:
- median
iaq:
# Indoor air quality value
name: "Air Quality Index"
unit_of_measurement: "AQI"
id: iaq
web_server:
sorting_weight: 51
filters:
- median
iaq_accuracy:
# IAQ accuracy as a numeric value of 0, 1, 2, 3
name: "Numeric IAQ Accuracy"
id: iaq_accuracy
disabled_by_default: True
web_server:
sorting_weight: 71
co2_equivalent:
# CO2 equivalent estimate in ppm
name: "CO2 Equivalent"
id: co2
unit_of_measurement: "ppm"
web_server:
sorting_weight: 81
filters:
- median
breath_voc_equivalent:
# Volatile organic compounds equivalent estimate in ppm
name: "Breath VOC Equivalent"
id: breath_voc
unit_of_measurement: "ppm"
web_server:
sorting_weight: 91
filters:
- median
text_sensor:
- platform: template
name: "IAQ Classification"
icon: "mdi:checkbox-marked-circle-outline"
web_server:
sorting_weight: 60
lambda: |-
if (int(id(iaq).state) <= 50) {
return {"Excellent"};
}
else if (int(id(iaq).state) <= 100) {
return {"Good"};
}
else if (int(id(iaq).state) <= 150) {
return {"Lightly polluted"};
}
else if (int(id(iaq).state) <= 200) {
return {"Moderately polluted"};
}
else if (int(id(iaq).state) <= 250) {
return {"Heavily polluted"};
}
else if (int(id(iaq).state) <= 350) {
return {"Severely polluted"};
}
else if (int(id(iaq).state) <= 500) {
return {"Extremely polluted"};
}
else {
return {"unknown"};
}
- platform: bme680_bsec
iaq_accuracy:
# IAQ accuracy as a text value of Stabilizing, Uncertain, Calibrating, Calibrated
name: "AQI Accuracy"
web_server:
sorting_weight: 61
+19 -19
View File
@@ -1,7 +1,14 @@
esphome:
substitutions:
name: bed-presence-2d14a4
devicename: bed-presence-2d14a4
friendly_name: Bed Presence 2d14a4
comment: White Bed Sensor
static_ip: !secret white-bed-ip
esphome:
name: ${name}
friendly_name: ${friendly_name}
comment: ${comment}
min_version: 2024.6.0
name_add_mac_suffix: false
project:
@@ -18,27 +25,11 @@ esp32:
CONFIG_BT_BLE_42_FEATURES_SUPPORTED: y
CONFIG_BT_BLE_50_FEATURES_SUPPORTED: n
# Enable logging
logger:
# Enable Home Assistant API
api:
# Enable wifi
wifi:
# Set up a wifi access point
ap: {}
# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
captive_portal:
# Enable esphome OTA updates
ota:
- platform: esphome
################################################################################
packages:
base: !include common/device_base.yaml
network: !include common/wifi.yaml
remote_package:
url: https://github.com/ElevatedSensors/sensor-configs
ref: main
@@ -47,6 +38,15 @@ packages:
- bed-presence-mk1/base.yaml
- esphome-common/bluetooth-proxy.yaml
binary_sensor:
- id: !remove bed_presence_status
button:
- id: !remove btn_restart
sensor:
- id: !remove bed_presence_uptime
# See https://github.com/ElevatedSensors/sensor-configs/blob/main/bed-presence-mk1/sensor.yaml for a detailed
# description of available substitutions.
#
+18 -19
View File
@@ -1,7 +1,14 @@
esphome:
substitutions:
name: bed-presence-c175a4
devicename: bed-presence-c175a4
friendly_name: Bed Presence c175a4
comment: Master Bed Sensor
static_ip: !secret master-bed-ip
esphome:
name: ${name}
friendly_name: ${friendly_name}
comment: ${comment}
min_version: 2024.6.0
name_add_mac_suffix: false
project:
@@ -18,27 +25,11 @@ esp32:
CONFIG_BT_BLE_42_FEATURES_SUPPORTED: y
CONFIG_BT_BLE_50_FEATURES_SUPPORTED: n
# Enable logging
logger:
# Enable Home Assistant API
api:
# Enable wifi
wifi:
# Set up a wifi access point
ap: {}
# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
captive_portal:
# Enable esphome OTA updates
ota:
- platform: esphome
################################################################################
packages:
base: !include common/device_base.yaml
network: !include common/wifi.yaml
remote_package:
url: https://github.com/ElevatedSensors/sensor-configs
ref: main
@@ -47,6 +38,14 @@ packages:
- bed-presence-mk1/base.yaml
- esphome-common/bluetooth-proxy.yaml
binary_sensor:
- id: !remove bed_presence_status
button:
- id: !remove btn_restart
sensor:
- id: !remove bed_presence_uptime
# See https://github.com/ElevatedSensors/sensor-configs/blob/main/bed-presence-mk1/sensor.yaml for a detailed
# description of available substitutions.
#
+19
View File
@@ -0,0 +1,19 @@
substitutions:
devicename: circuit-sensor
entity_name: circuit_sensor
friendly_name: Circuit Sensor
board: esp32-s3-devkitc-1
framework: esp-idf
comment: Clever ${friendly_name}
static_ip: !secret circuit-sensor-ip
packages:
network: !include common/waveshare_esp32_s3_eth.yaml
device_base: !include common/device_base.yaml
web_server: !include common/web_server.yaml
esp32:
board: ${board}
framework:
type: ${framework}
+336
View File
@@ -0,0 +1,336 @@
web_server:
port: 80
version: 3
include_internal: true
sorting_groups:
- id: sorting_group_temperature_settings
name: "Temperature Settings"
sorting_weight: 10
- id: sorting_group_humidity_settings
name: "Humidity Settings"
sorting_weight: 20
- id: sorting_group_pressure_settings
name: "Pressure Settings"
sorting_weight: 30
- id: sorting_group_quality_settings
name: "Quality Settings"
sorting_weight: 40
bme680_bsec:
i2c_id: ${i2c_id}
# i2c address
# -----------
# Common values are:
# - 0x76
# - 0x77
# Default: 0x76
address: 0x77
# Temperature offset
# ------------------
# Useful if device is in enclosure and reads too high
# Default: 0
temperature_offset: 0
# IAQ calculation mode
# --------------------
# Available options:
# - static (for fixed position devices)
# - mobile (for on person or other moveable devices)
# Default: static
iaq_mode: static
# Sample rate
# -----------
# This controls the sampling rate for gas-dependant sensors and will govern the interval
# at which the sensor heater is operated.
# By default this rate will also be used for temperature, pressure and humidity sensors
# but these can be overridden on a per-sensor level if required.
#
# Available options:
# - lp (low power - samples every 3 seconds)
# - ulp (ultra low power - samples every 5 minutes)
# Default: lp
sample_rate: lp
# Interval at which to save BSEC state
# ------------------------------------
# Default: 6h
state_save_interval: 6h
sensor:
- platform: bme680_bsec
temperature:
# Temperature in °C
id: temperature
internal: true
sample_rate: lp
unit_of_measurement: "°C"
web_server:
sorting_weight: 11
sorting_group_id: sorting_group_temperature_settings
humidity:
# Relative humidity %
id: humidity
internal: true
sample_rate: lp
unit_of_measurement: "%"
web_server:
sorting_weight: 21
sorting_group_id: sorting_group_humidity_settings
pressure:
# Pressure in hPa
id: pressure
internal: true
sample_rate: lp
unit_of_measurement: "hPa"
web_server:
sorting_weight: 31
sorting_group_id: sorting_group_pressure_settings
gas_resistance:
# Gas resistance in Ω
id: resistance
internal: true
unit_of_measurement: "Ω"
disabled_by_default: True
web_server:
sorting_weight: 41
sorting_group_id: sorting_group_pressure_settings
iaq:
# Indoor air quality value
id: iaq
internal: true
unit_of_measurement: "AQI"
web_server:
sorting_weight: 51
sorting_group_id: sorting_group_quality_settings
co2_equivalent:
# CO2 equivalent estimate in ppm
id: co2
internal: true
unit_of_measurement: "ppm"
web_server:
sorting_weight: 61
sorting_group_id: sorting_group_quality_settings
breath_voc_equivalent:
# Volatile organic compounds equivalent estimate in ppm
id: breath_voc
internal: true
unit_of_measurement: "ppm"
web_server:
sorting_weight: 71
sorting_group_id: sorting_group_quality_settings
iaq_accuracy:
# IAQ accuracy as a numeric value of 0, 1, 2, 3
name: "Numeric IAQ Accuracy"
id: iaq_accuracy
disabled_by_default: True
web_server:
sorting_weight: 81
sorting_group_id: sorting_group_quality_settings
filters:
- median:
window_size: 20
send_every: 20
send_first_at: 1
# These source sensors update every 3 seconds
# An average with a window size of 10 and send_every of 10 means that an average is pushed out every 30 seconds
- platform: copy
source_id: temperature
device_class: temperature
unit_of_measurement: "°C"
name: "Air Temperature"
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
send_first_at: 1
web_server:
sorting_weight: 12
sorting_group_id: sorting_group_temperature_settings
# These derivatives attempt to calculate the change per minute
- platform: copy
source_id: temperature
device_class: temperature
unit_of_measurement: "°C/m"
name: "Air Temperature Change"
icon: mdi:chart-line
disabled_by_default: true
filters:
- lambda: |-
static float last_value = 0;
static float last_time = 0;
float time = (float) millis();
if (last_time == 0){
last_value = x;
last_time = time;
return {};
}
float change = ( ( x - last_value ) / ( time - last_time ) ) *1000*5;
last_value = x;
last_time = time;
return change;
- sliding_window_moving_average:
window_size: 10
send_every: 10
send_first_at: 1
web_server:
sorting_weight: 13
sorting_group_id: sorting_group_temperature_settings
- platform: copy
source_id: humidity
device_class: humidity
unit_of_measurement: "%"
name: "Relative Humidity"
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
send_first_at: 1
web_server:
sorting_weight: 22
sorting_group_id: sorting_group_humidity_settings
- platform: copy
source_id: humidity
device_class: humidity
unit_of_measurement: "%/m"
name: "Relative Humidity Change"
icon: mdi:chart-line
disabled_by_default: true
filters:
- lambda: |-
static float last_value = 0;
static float last_time = 0;
float time = (float) millis();
if (last_time == 0){
last_value = x;
last_time = time;
return {};
}
float change = ( ( x - last_value ) / ( time - last_time ) ) *1000*5;
last_value = x;
last_time = time;
return change;
- sliding_window_moving_average:
window_size: 10
send_every: 10
send_first_at: 1
web_server:
sorting_weight: 23
sorting_group_id: sorting_group_humidity_settings
- platform: copy
source_id: pressure
unit_of_measurement: "hPa"
name: "Pressure"
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
send_first_at: 1
web_server:
sorting_group_id: sorting_group_pressure_settings
- platform: copy
source_id: resistance
unit_of_measurement: "Ω"
name: "Gas Resistance"
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
send_first_at: 1
web_server:
sorting_group_id: sorting_group_pressure_settings
- platform: copy
source_id: iaq
unit_of_measurement: "AQI"
name: "Air Quality Index"
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
send_first_at: 1
web_server:
sorting_group_id: sorting_group_quality_settings
- platform: copy
source_id: co2
unit_of_measurement: "ppm"
name: "CO2 Equivalent"
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
send_first_at: 1
web_server:
sorting_group_id: sorting_group_quality_settings
- platform: copy
source_id: breath_voc
unit_of_measurement: "ppm"
name: "Breath VOC Equivalent"
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
send_first_at: 1
web_server:
sorting_group_id: sorting_group_quality_settings
text_sensor:
- platform: template
name: "IAQ Classification"
icon: "mdi:checkbox-marked-circle-outline"
web_server:
sorting_weight: 60
sorting_group_id: sorting_group_quality_settings
lambda: |-
if (int(id(iaq).state) <= 50) {
return {"Excellent"};
}
else if (int(id(iaq).state) <= 100) {
return {"Good"};
}
else if (int(id(iaq).state) <= 150) {
return {"Lightly polluted"};
}
else if (int(id(iaq).state) <= 200) {
return {"Moderately polluted"};
}
else if (int(id(iaq).state) <= 250) {
return {"Heavily polluted"};
}
else if (int(id(iaq).state) <= 350) {
return {"Severely polluted"};
}
else if (int(id(iaq).state) <= 500) {
return {"Extremely polluted"};
}
else {
return {"unknown"};
}
- platform: bme680_bsec
iaq_accuracy:
# IAQ accuracy as a text value of Stabilizing, Uncertain, Calibrating, Calibrated
name: "AQI Accuracy"
web_server:
sorting_weight: 61
sorting_group_id: sorting_group_quality_settings
+3
View File
@@ -16,9 +16,12 @@ time:
# Enable Home Assistant API
api:
reboot_timeout: 15min
encryption:
key: !secret api-encryption-key
ota:
- platform: esphome
password: !secret ota-password
binary_sensor:
- <<: !include binary_sensor/status_sensor.config.yaml
-1
View File
@@ -16,7 +16,6 @@ ethernet:
gateway: !secret iot_default_gateway
subnet: !secret iot_subnet_mask
dns1: !secret iot_default_dns1
dns2: !secret iot_default_dns2
text_sensor:
- <<: !include text_sensor/ethernet_info.config.yaml
-1
View File
@@ -21,7 +21,6 @@ ethernet:
gateway: !secret iot_default_gateway
subnet: !secret iot_subnet_mask
dns1: !secret iot_default_dns1
dns2: !secret iot_default_dns2
text_sensor:
- <<: !include text_sensor/ethernet_info.config.yaml
@@ -0,0 +1,82 @@
esphome:
name: ${devicename}
platformio_options:
board_build.arduino.memory_type: qio_opi
board_build.flash_mode: dio
upload_speed: 921600
monitor_speed: 115200
esp32:
board: ${board}
flash_size: 16MB
framework:
type: ${framework}
sdkconfig_options:
CONFIG_ESP32_S3_BOX_BOARD: "y"
psram:
mode: octal
speed: 80MHz
# logger:
# api:
# encryption:
# key: !secret api_encryption_psk
# ota:
# - platform: esphome
# password: !secret ota-password
ethernet:
type: W5500
clk_pin: GPIO13
mosi_pin: GPIO11
miso_pin: GPIO12
cs_pin: GPIO14
interrupt_pin: GPIO10
reset_pin: GPIO9
######################################
### Camera
######################################
# esp32_camera:
# name: ${room_friendly_name} Camera
# external_clock:
# pin: GPIO3
# frequency: 20MHz
# i2c_pins:
# sda: GPIO48
# scl: GPIO47
# data_pins: [GPIO41, GPIO45, GPIO46, GPIO42, GPIO40, GPIO38, GPIO15, GPIO18]
# vsync_pin: GPIO1
# href_pin: GPIO2
# pixel_clock_pin: GPIO39
# power_down_pin: GPIO8
# resolution: 640x480
# jpeg_quality: 10
# #resolution: 1280x1024
# #jpeg_quality: 30
# vertical_flip: false
# horizontal_mirror: false
# # aec_mode: MANUAL
# # aec_value: 1200
# # brightness: 2
# # wb_mode: HOME
# # agc_mode: AUTO
#######################################
### Bluetooth Proxy
#######################################
esp32_ble_tracker:
scan_parameters:
# only use these values on Ethernet not WIFI
interval: 1100ms
window: 1100ms
active: true
bluetooth_proxy:
active: true
@@ -1,8 +1,22 @@
esphome:
name: ${devicename}
platformio_options:
board_build.arduino.memory_type: qio_opi
board_build.flash_mode: dio
upload_speed: 921600
monitor_speed: 115200
esp32:
board: esp32-s3
board: ${board}
flash_size: 16MB
framework:
#type: arduino
type: esp-idf
type: ${framework}
sdkconfig_options:
CONFIG_ESP32_S3_BOX_BOARD: "y"
psram:
mode: octal
speed: 80MHz
ethernet:
id: eth
@@ -21,7 +35,9 @@ ethernet:
gateway: !secret iot_default_gateway
subnet: !secret iot_subnet_mask
dns1: !secret iot_default_dns1
dns2: !secret iot_default_dns2
packages:
ble_proxy: !include ../common/ble_proxy.yaml
text_sensor:
- <<: !include text_sensor/ethernet_info.config.yaml
+9 -11
View File
@@ -2,29 +2,27 @@ esphome:
captive_portal:
wifi:
#power_save_mode: none
networks:
- ssid: !secret Wifi_SSID
password: !secret Wifi_PWD
# Enable fast connect
fast_connect: true
min_auth_mode: WPA2
use_address: ${devicename}.local
#- ssid: !secret IoT_Wifi_SSID
# password: !secret IoT_Wifi_PWD
networks:
- ssid: !secret wifi_ssid
password: !secret wifi_password
hidden: true
manual_ip:
static_ip: ${static_ip}
gateway: !secret iot_default_gateway
subnet: !secret iot_subnet_mask
use_address: ${devicename}.local
dns1: !secret iot_default_dns1
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "${friendly_name}"
password: !secret fallback_ap_password
# Enable fast connect
fast_connect: true
sensor:
- <<: !include sensor/rssi_sensor.config.yaml
+9 -8
View File
@@ -1,16 +1,17 @@
esphome:
captive_portal:
wifi:
power_save_mode: none
networks:
- ssid: !secret Wifi_SSID
password: !secret Wifi_PWD
- ssid: !secret IoT_Wifi_SSID
password: !secret IoT_Wifi_PWD
# Enable fast connect
fast_connect: true
min_auth_mode: WPA2
use_address: ${devicename}.local
networks:
- ssid: !secret wifi_ssid
password: !secret wifi_password
hidden: true
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "${friendly_name}"
-30
View File
@@ -1,30 +0,0 @@
esphome:
captive_portal:
wifi:
ssid: !secret Wifi_SSID
password: !secret Wifi_PWD
#- ssid: !secret IoT_Wifi_SSID
# password: !secret IoT_Wifi_PWD
use_address: ${devicename}.local
manual_ip:
static_ip: ${static_ip}
gateway: !secret iot_default_gateway
subnet: !secret iot_subnet_mask
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "${friendly_name}"
password: !secret fallback_ap_password
# Enable fast connect
fast_connect: true
sensor:
- <<: !include sensor/rssi_sensor.config.yaml
text_sensor:
- <<: !include text_sensor/wifi_sensor.config.yaml
+6 -12
View File
@@ -53,25 +53,19 @@
substitutions:
name: everything-presence-lite-8fa4fc
devicename: everything-presence-lite-8fa4fc
friendly_name: Everything Presence Great Room
static_ip: !secret everything-presence-greate-room-ip
packages:
base: !include common/device_base.yaml
network: !include common/wifi.yaml
EverythingSmartTechnology.Everything_Presence_Lite: github://everythingsmarthome/everything-presence-lite/everything-presence-lite-ha.yaml@main
esphome:
name: ${name}
name_add_mac_suffix: false
friendly_name: ${friendly_name}
api:
encryption:
key: Qi7Fi+ayleijFB6gE1/jnEtuI95NCEiwNM/QnqB+e28=
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
binary_sensor:
- platform: status
name: "Status"
# sensor:
# - platform: bme280_i2c
+110 -121
View File
@@ -1,3 +1,4 @@
# 3v3 en svp sun 34 35 32 33 25 26 27 14 12 gnd 13 sd2 sd3 gnd 5v
substitutions:
devicename: furnace-room-multisensor
entity_name: furnace_room_multisensor
@@ -6,126 +7,42 @@ substitutions:
board: nodemcuv2
static_ip: !secret furnace-room-multisensor-ip
moisture: D1
door: D2
one_wire: D5
ultrasonic_trigger: D6
ultrasonic_echo: D7
# For the reed switches
door: 35
moisture: 36
# For the ultrasonic sensor
trigger: 14
echo: 15
# Infrared Sensor
ir_tx: 12
ir_rx: 39
# I2C Pins
i2c_sda: 13
i2c_scl: 16
# For the ethernet adapter
ethernet_mdc_pin: 23
ethernet_mdio_pin: 18
ethernet_clk_pin: 0
# For the relays
relay1: 32
relay2: 33
# Built-in button
button1: 34
# For the HVAC temperature sensors
one_wire: 17
one_wire:
- platform: gpio
pin: ${one_wire}
packages:
network: !include common/wifi.yaml
device_base: !include common/device_base.yaml
web_server: !include common/web_server.yaml
esphome:
name: ${devicename}
friendly_name: ${friendly_name}
name_add_mac_suffix: false
packages:
network: !include common/olimex_evb.yaml
device_base: !include common/device_base.yaml
# Included in common/olimex-evb.yaml
# esp32:
# board: esp32dev
# framework:
# type: esp-idf
esp8266:
board: ${board}
# Enable logging
logger:
web_server:
port: 80
version: 3
include_internal: True
api: # Using settings from common/device_base.yaml
# # Enable Home Assistant API
# api:
# encryption:
# key: "mupTLNBggWPdKHxBeY1yV47qXgyhVJUgIVVAvfGrZ40="
ota: # Using settings from common/device_base.yaml
# ota:
# - platform: esphome
# password: "b43bd5c6f724d64a9bd4e92504830d8f"
remote_receiver:
pin: ${ir_rx}
dump: all
remote_transmitter:
pin: ${ir_tx}
carrier_duty_percent: 50%
i2c:
sda: ${i2c_sda}
scl: ${i2c_scl}
scan: true
id: bus_a
binary_sensor:
one_wire:
- platform: gpio
name: "ESP32-EVB button"
pin: ${button1}
- platform: gpio
name: "Door"
device_class: door
filters:
- invert:
pin:
number: ${door}
# mode: INPUT_PULLUP
- platform: gpio
name: "Moisture"
device_class: moisture
pin:
number: ${moisture}
# mode: INPUT_PULLUP
switch:
- platform: gpio
pin: ${relay1}
name: "Relay1"
- platform: gpio
pin: ${relay2}
name: "Relay2"
pin: ${one_wire}
sensor:
- platform: ultrasonic
trigger_pin: ${trigger}
echo_pin: ${echo}
trigger_pin: ${ultrasonic_trigger}
echo_pin: ${ultrasonic_echo}
id: ultrasonic_source
update_interval: 1s
update_interval: 60s
internal: True
filters:
- sliding_window_moving_average:
@@ -136,17 +53,9 @@ sensor:
- 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
- platform: copy
source_id: ultrasonic_source
unit_of_measurement: "cm"
state_class: measurement
id: distance_from_bottom
@@ -160,13 +69,8 @@ sensor:
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
- platform: copy
source_id: ultrasonic_source
unit_of_measurement: "cm"
state_class: measurement
id: distance_from_top
@@ -181,8 +85,8 @@ sensor:
min_value: 0.0
max_value: 150.0
- platform: template
- platform: copy
source_id: distance_from_bottom
unit_of_measurement: "bags"
state_class: measurement
id: level_in_bags
@@ -196,3 +100,88 @@ sensor:
- clamp:
min_value: 0.0
max_value: 10.0
- platform: dallas_temp
address: 0x5a3c01d6078a2e28
name: "Probe 1"
id: probe1
device_class: "temperature"
update_interval: 5s
filters:
- lambda: return x * (9.0/5.0) + 32.0;
- clamp:
min_value: 0.0
max_value: 150.0
- round: 2
- or:
- throttle: 60s
- delta: 1.0
unit_of_measurement: "°F"
state_class: measurement
- platform: dallas_temp
address: 0x6b3c01d6077bbb28
name: "Probe 2"
id: probe2
device_class: "temperature"
update_interval: 5s
filters:
- clamp:
min_value: 0.0
max_value: 150.0
- or:
- throttle: 60s
- delta: 1.0
- lambda: return round( (x * (9.0/5.0) + 32.0) * 100.0) / 100.0;
unit_of_measurement: "°F"
state_class: measurement
- platform: dallas_temp
address: 0x2a3c01d6073e0728
name: "Probe 3"
id: probe3
device_class: "temperature"
update_interval: 5s
filters:
- lambda: return round( (x * (9.0/5.0) + 32.0) * 100.0) / 100.0;
- clamp:
min_value: 0.0
max_value: 150.0
- or:
- throttle: 60s
- delta: 1.0
accuracy_decimals: 2
unit_of_measurement: "°F"
state_class: measurement
- platform: template
name: "Delta"
id: hvac_delta
icon: mdi:thermometer-lines
lambda: |-
return id(probe1).state - id(probe2).state;
update_interval: 10s
unit_of_measurement: "°F"
state_class: measurement
device_class: ""
accuracy_decimals: 2
filters:
- or:
- throttle: 60s
- delta: 1.0
binary_sensor:
- platform: gpio
name: "Door"
device_class: door
pin:
number: ${door}
mode: INPUT_PULLUP
- platform: gpio
name: "Leak"
device_class: moisture
pin:
number: ${moisture}
mode: INPUT_PULLUP
inverted: true
+1 -2
View File
@@ -9,8 +9,7 @@ esphome:
friendly_name: ${friendly_name}
api:
encryption:
key: iAx9Roq7zrUefNVRfIGGd+5u7QXMYdCMoCPXfIIACpk=
key: !secret api-encryption-key
wifi:
ssid: !secret wifi_ssid
-110
View File
@@ -1,110 +0,0 @@
# 3v3 en svp sun 34 35 32 33 25 26 27 14 12 gnd 13 sd2 sd3 gnd 5v
substitutions:
devicename: hvac-multisensor
entity_name: hvac_multisensor
friendly_name: HVAC MultiSensor
comment: Clever MultiSensor
platform: ESP8266
board: d1_mini
#variant: esp32
# framework: esp-idf
#framework: arduino
static_ip: !secret hvac-multisensor-ip
packages:
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:
#level: VERBOSE
one_wire:
- platform: gpio
pin: D5
sensor:
- platform: dallas_temp
address: 0x5a3c01d6078a2e28
name: "Probe 1"
id: probe1
icon: mdi:thermostat
update_interval: 10s
filters:
- lambda: |-
float val = x;
if (isnan(val)) {
val = 0.0;
}
return val * (9.0/5.0) + 32.0;
- clamp:
min_value: 0.0
max_value: 150.0
- or:
- throttle: 60s
- delta: 1.0
unit_of_measurement: "°F"
state_class: measurement
- platform: dallas_temp
address: 0x6b3c01d6077bbb28
name: "Probe 2"
id: probe2
icon: mdi:thermostat
update_interval: 10s
filters:
- lambda: return x * (9.0/5.0) + 32.0;
- clamp:
min_value: 0.0
max_value: 150.0
- or:
- throttle: 60s
- delta: 1.0
unit_of_measurement: "°F"
state_class: measurement
- platform: dallas_temp
address: 0x2a3c01d6073e0728
name: "Probe 3"
id: probe3
icon: mdi:thermostat
update_interval: 10s
filters:
- lambda: return x * (9.0/5.0) + 32.0;
- clamp:
min_value: 0.0
max_value: 150.0
- or:
- throttle: 60s
- delta: 1.0
unit_of_measurement: "°F"
state_class: measurement
- platform: template
name: "Delta"
id: hvac_delta
icon: mdi:thermometer-lines
lambda: |-
return round( (id(probe1).state - id(probe2).state) * 100.0) / 100.0;
update_interval: 10s
unit_of_measurement: "°F"
state_class: measurement
device_class: ""
accuracy_decimals: 1
filters:
#- lambda: 'return round( (id(probe1).state - id(probe2).state) * 100.0) / 100.0;'
- clamp:
min_value: -100.0
max_value: 100.0
- or:
- throttle: 60s
- delta: 1.0
+38 -14
View File
@@ -78,6 +78,30 @@ substitutions:
# >= v1.3: 7305
voltage_cal: '7305'
spi_clk: 18
spi_miso: 19
spi_mosi: 23
ic1_main: 5
ic1_addon1: 0
ic1_addon2: 27
ic1_addon3: 2
ic2_main: 4
ic2_addon1: 16
ic2_addon2: 17
ic2_addon3: 21
# ethernet:
# id: eth
# type: W5500
# clk_pin: GPIO13
# mosi_pin: GPIO11
# miso_pin: GPIO12
# cs_pin: GPIO14
# interrupt_pin: GPIO10
# reset_pin: GPIO9
packages:
wifi: !include common/wifi.yaml
# device_base: !include common/complex_esp32_base.yaml
@@ -95,19 +119,19 @@ time:
timezone: America/Detroit
logger:
level: DEBUG
logs:
sensor: DEBUG
# level: DEBUG
# logs:
# sensor: DEBUG
spi:
clk_pin: 18
miso_pin: 19
mosi_pin: 23
clk_pin: ${spi_clk}
miso_pin: ${spi_miso}
mosi_pin: ${spi_mosi}
sensor:
#IC1 Main
- platform: atm90e32
cs_pin: 5
cs_pin: ${ic1_main}
phase_a:
voltage:
name: ${friendly_name} [V]
@@ -171,7 +195,7 @@ sensor:
#IC2 Main
- platform: atm90e32
cs_pin: 4
cs_pin: ${ic2_main}
phase_a:
current:
name: ${friendly_name} ${ct04Name} [A]
@@ -230,7 +254,7 @@ sensor:
#IC1 AddOn 1
- platform: atm90e32
cs_pin: 0
cs_pin: ${ic1_addon1}
phase_a:
power:
name: ${friendly_name} ${ct07Name} [W]
@@ -273,7 +297,7 @@ sensor:
update_interval: ${update_time}
#IC2 AddOn 1
- platform: atm90e32
cs_pin: 16
cs_pin: ${ic2_addon1}
phase_a:
power:
name: ${friendly_name} ${ct10Name} [W]
@@ -318,7 +342,7 @@ sensor:
#IC1 AddOn 2
- platform: atm90e32
cs_pin: 27
cs_pin: ${ic1_addon2}
phase_a:
power:
name: ${friendly_name} ${ct13Name} [W]
@@ -363,7 +387,7 @@ sensor:
update_interval: ${update_time}
#IC2 AddOn 2
- platform: atm90e32
cs_pin: 17
cs_pin: ${ic2_addon2}
phase_a:
power:
name: ${friendly_name} ${ct16Name} [W]
@@ -408,7 +432,7 @@ sensor:
#IC1 AddOn 3
- platform: atm90e32
#do not use GPIO2 if ESP32 has an on-board LED assigned to it
cs_pin: 2
cs_pin: ${ic1_addon3}
phase_a:
power:
name: ${friendly_name} ${ct19Name} [W]
@@ -449,7 +473,7 @@ sensor:
update_interval: ${update_time}
#IC2 AddOn 3
- platform: atm90e32
cs_pin: 21
cs_pin: ${ic2_addon3}
phase_a:
power:
#name: ${friendly_name} ${ct22Name} [W]
+80 -94
View File
@@ -1,56 +1,42 @@
esphome:
name: test-device-1
substitutions:
devicename: test-device-1
entity_name: test_device_1
friendly_name: Test Device 1
board: esp32dev
framework: esp-idf
comment: Clever Device
esp32:
board: esp32dev
board: ${board}
framework:
type: esp-idf
type: ${framework}
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "PySr6PXZw6crnoT/oQJC3hYyVnPlXi2OwF8CAuA1d1U="
ota:
- platform: esphome
password: "d9ccd2607c37bc67061f8f76971ec953"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Test-Device-1 Fallback Hotspot"
password: "ELfuAtKmRwOC"
packages:
network: !include common/wifi_dhcp.yaml
device_base: !include common/device_base.yaml
web_server: !include common/web_server.yaml
# For Ultrasonic Sensor
# trigger_pin: GPIO13
# echo_pin: GPIO14
captive_portal:
# i2c:
# - id: bus_a
# sda: 21
# scl: 22
# scan: true
i2c:
- id: bus_a
sda: 21
scl: 22
scan: true
# - id: bus_b
# sda: 32
# scl: 33
# scan: true
- id: bus_b
sda: 32
scl: 33
scan: true
sensor:
- platform: ultrasonic
update_interval: 1s
trigger_pin: GPIO13
echo_pin: GPIO14
name: "Ultrasonic Sensor"
# sensor:
# - platform: ultrasonic
# update_interval: 1s
# trigger_pin: GPIO13
# echo_pin: GPIO14
# name: "Ultrasonic Sensor"
# - platform: bme280_i2c
# i2c_id: bus_a
@@ -74,63 +60,63 @@ sensor:
# humidity:
# name: "BME280 76B Humidity"
- platform: bme680
i2c_id: bus_a
temperature:
name: "BME680 Temperature"
oversampling: 16x
pressure:
name: "BME680 Pressure"
humidity:
id: "humidity"
name: "BME680 Humidity"
gas_resistance:
id: "gas_resistance"
name: "BME680 Gas Resistance"
address: 0x77
update_interval: 60s
- platform: template
name: "BME680 Indoor Air Quality"
id: iaq
icon: "mdi:gauge"
# calculation: comp_gas = log(R_gas[ohm]) + 0.04 log(Ohm)/%rh * hum[%rh]
lambda: |-
return log(id(gas_resistance).state) + 0.04 * id(humidity).state;
state_class: "measurement"
# - platform: bme680
# i2c_id: bus_a
# temperature:
# name: "BME680 Temperature"
# oversampling: 16x
# pressure:
# name: "BME680 Pressure"
# humidity:
# id: "humidity"
# name: "BME680 Humidity"
# gas_resistance:
# id: "gas_resistance"
# name: "BME680 Gas Resistance"
# address: 0x77
# update_interval: 60s
# - platform: template
# name: "BME680 Indoor Air Quality"
# id: iaq
# icon: "mdi:gauge"
# # calculation: comp_gas = log(R_gas[ohm]) + 0.04 log(Ohm)/%rh * hum[%rh]
# lambda: |-
# return log(id(gas_resistance).state) + 0.04 * id(humidity).state;
# state_class: "measurement"
text_sensor:
- platform: template
name: "BME680 IAQ Classification"
icon: "mdi:checkbox-marked-circle-outline"
lambda: |-
if (int(id(iaq).state) <= 50) {
return {"Excellent"};
}
else if (int(id(iaq).state) <= 100) {
return {"Good"};
}
else if (int(id(iaq).state) <= 150) {
return {"Lightly polluted"};
}
else if (int(id(iaq).state) <= 200) {
return {"Moderately polluted"};
}
else if (int(id(iaq).state) <= 250) {
return {"Heavily polluted"};
}
else if (int(id(iaq).state) <= 350) {
return {"Severely polluted"};
}
else if (int(id(iaq).state) <= 500) {
return {"Extremely polluted"};
}
else {
return {"unknown"};
}
# text_sensor:
# - platform: template
# name: "BME680 IAQ Classification"
# icon: "mdi:checkbox-marked-circle-outline"
# lambda: |-
# if (int(id(iaq).state) <= 50) {
# return {"Excellent"};
# }
# else if (int(id(iaq).state) <= 100) {
# return {"Good"};
# }
# else if (int(id(iaq).state) <= 150) {
# return {"Lightly polluted"};
# }
# else if (int(id(iaq).state) <= 200) {
# return {"Moderately polluted"};
# }
# else if (int(id(iaq).state) <= 250) {
# return {"Heavily polluted"};
# }
# else if (int(id(iaq).state) <= 350) {
# return {"Severely polluted"};
# }
# else if (int(id(iaq).state) <= 500) {
# return {"Extremely polluted"};
# }
# else {
# return {"unknown"};
# }
esp32_touch:
# esp32_touch:
binary_sensor:
+3 -202
View File
@@ -5,11 +5,13 @@ substitutions:
comment: Clever MultiSensor
platform: ESP8266
board: nodemcu
i2c_id: bus_a
static_ip: !secret utility-room-multisensor-ip
packages:
network: !include common/wifi.yaml
device_base: !include common/device_base.yaml
bme680: !include common/bme680.yaml
esphome:
name: ${devicename}
@@ -29,207 +31,6 @@ web_server:
include_internal: True
i2c:
- id: bus_a
- id: ${i2c_id}
sda: D6
scl: D5
bme680_bsec:
i2c_id: bus_a
# i2c address
# -----------
# Common values are:
# - 0x76
# - 0x77
# Default: 0x76
address: 0x77
# Temperature offset
# ------------------
# Useful if device is in enclosure and reads too high
# Default: 0
temperature_offset: 0
# IAQ calculation mode
# --------------------
# Available options:
# - static (for fixed position devices)
# - mobile (for on person or other moveable devices)
# Default: static
iaq_mode: static
# Sample rate
# -----------
# This controls the sampling rate for gas-dependant sensors and will govern the interval
# at which the sensor heater is operated.
# By default this rate will also be used for temperature, pressure and humidity sensors
# but these can be overridden on a per-sensor level if required.
#
# Available options:
# - lp (low power - samples every 3 seconds)
# - ulp (ultra low power - samples every 5 minutes)
# Default: lp
sample_rate: lp
# Interval at which to save BSEC state
# ------------------------------------
# Default: 6h
state_save_interval: 6h
sensor:
# - platform: bme680
# i2c_id: bus_a
# address: 0x77
# update_interval: 3s
# temperature:
# name: "Standard Temperature"
# oversampling: 16x
# device_class: temperature
# unit_of_measurement: "°C"
# web_server:
# sorting_weight: 10
# pressure:
# name: "Standard Pressure"
# device_class: atmospheric_pressure
# unit_of_measurement: hPa
# web_server:
# sorting_weight: 20
# humidity:
# id: "humidity"
# name: "Standard Humidity"
# device_class: humidity
# unit_of_measurement: "%"
# web_server:
# sorting_weight: 30
# gas_resistance:
# id: "gas_resistance"
# name: "Standard Gas Resistance"
# unit_of_measurement: "Ω"
# web_server:
# sorting_weight: 40
# - platform: template
# name: "Standard Indoor Air Quality"
# id: iaq
# icon: "mdi:gauge"
# # calculation: comp_gas = log(R_gas[ohm]) + 0.04 log(Ohm)/%rh * hum[%rh]
# lambda: |-
# return log(id(gas_resistance).state) + 0.04 * id(humidity).state;
# state_class: "measurement"
# web_server:
# sorting_weight: 50
- platform: bme680_bsec
temperature:
# Temperature in °C
name: "Temperature"
id: temp
sample_rate: lp
unit_of_measurement: "°C"
web_server:
sorting_weight: 11
filters:
- median
pressure:
# Pressure in hPa
name: "Pressure"
id: pressure
sample_rate: lp
unit_of_measurement: "hPa"
web_server:
sorting_weight: 21
filters:
- median
humidity:
# Relative humidity %
id: humidity
name: "Relative Humidity"
sample_rate: lp
unit_of_measurement: "%"
web_server:
sorting_weight: 31
filters:
- median
gas_resistance:
# Gas resistance in Ω
name: "Gas Resistance"
id: gas_resistance
unit_of_measurement: "Ω"
disabled_by_default: True
web_server:
sorting_weight: 41
filters:
- median
iaq:
# Indoor air quality value
name: "Air Quality Index"
unit_of_measurement: "AQI"
id: iaq
web_server:
sorting_weight: 51
filters:
- median
iaq_accuracy:
# IAQ accuracy as a numeric value of 0, 1, 2, 3
name: "Numeric IAQ Accuracy"
id: iaq_accuracy
disabled_by_default: True
web_server:
sorting_weight: 71
co2_equivalent:
# CO2 equivalent estimate in ppm
name: "CO2 Equivalent"
id: co2
unit_of_measurement: "ppm"
web_server:
sorting_weight: 81
filters:
- median
breath_voc_equivalent:
# Volatile organic compounds equivalent estimate in ppm
name: "Breath VOC Equivalent"
id: breath_voc
unit_of_measurement: "ppm"
web_server:
sorting_weight: 91
filters:
- median
text_sensor:
- platform: template
name: "IAQ Classification"
icon: "mdi:checkbox-marked-circle-outline"
web_server:
sorting_weight: 60
lambda: |-
if (int(id(iaq).state) <= 50) {
return {"Excellent"};
}
else if (int(id(iaq).state) <= 100) {
return {"Good"};
}
else if (int(id(iaq).state) <= 150) {
return {"Lightly polluted"};
}
else if (int(id(iaq).state) <= 200) {
return {"Moderately polluted"};
}
else if (int(id(iaq).state) <= 250) {
return {"Heavily polluted"};
}
else if (int(id(iaq).state) <= 350) {
return {"Severely polluted"};
}
else if (int(id(iaq).state) <= 500) {
return {"Extremely polluted"};
}
else {
return {"unknown"};
}
- platform: bme680_bsec
iaq_accuracy:
# IAQ accuracy as a text value of Stabilizing, Uncertain, Calibrating, Calibrated
name: "AQI Accuracy"
web_server:
sorting_weight: 61
-1
View File
@@ -106,7 +106,6 @@ kitchen_motion:
icon: mdi:motion-sensor
name: Kitchen Motion
entities:
- binary_sensor.kitchen_motion_sensor_home_security_motion_detection
- binary_sensor.kitchen_multisensor_home_security_motion_detection
great_room_motion:
+1 -1
View File
@@ -19,7 +19,7 @@ card:
go2rtc:
modes:
- webrtc
stream: rtsp_cam01_sub
stream: cam01_sub_opus
icon: mdi:earth
title: Boys Room
id: boys_room
+1 -1
View File
@@ -19,7 +19,7 @@ card:
go2rtc:
modes:
- webrtc
stream: rtsp_cam03_sub
stream: cam03_sub_opus
icon: mdi:desktop-classic
title: Computer Area
id: computer_area
+1 -1
View File
@@ -19,7 +19,7 @@ card:
go2rtc:
modes:
- webrtc
stream: rtsp_cam04_sub
stream: cam04_sub_opus
live:
preload: true
draggable: true
+1 -1
View File
@@ -19,7 +19,7 @@ card:
go2rtc:
modes:
- webrtc
stream: rtsp_cam06_sub
stream: cam06_sub_opus
live:
preload: true
draggable: true
+1 -1
View File
@@ -19,7 +19,7 @@ card:
go2rtc:
modes:
- webrtc
stream: rtsp_cam07_sub
stream: cam07_sub_opus
live:
preload: true
draggable: true
+1 -1
View File
@@ -19,7 +19,7 @@ card:
go2rtc:
modes:
- webrtc
stream: rtsp_cam08_sub
stream: cam08_sub_opus
live:
preload: true
draggable: true
+1 -1
View File
@@ -17,7 +17,7 @@ card:
go2rtc:
modes:
- webrtc
stream: rtsp_cam12_sub
stream: cam12_sub_opus
cast:
method: dashboard
dashboard:
+1 -1
View File
@@ -19,7 +19,7 @@ card:
go2rtc:
modes:
- webrtc
stream: rtsp_cam13_sub
stream: cam13_sub_opus
live:
preload: true
draggable: true
+1 -1
View File
@@ -19,7 +19,7 @@ card:
go2rtc:
modes:
- webrtc
stream: rtsp_cam14_sub
stream: cam14_sub_opus
live:
preload: true
draggable: true
+1 -1
View File
@@ -19,7 +19,7 @@ card:
go2rtc:
modes:
- webrtc
stream: rtsp_cam18_sub
stream: cam18_sub_opus
live:
preload: true
draggable: true
+1 -1
View File
@@ -19,7 +19,7 @@ card:
go2rtc:
modes:
- webrtc
stream: rtsp_cam19_sub
stream: cam19_sub_opus
live:
preload: true
draggable: true
+2 -2
View File
@@ -28,7 +28,7 @@ card:
disable_except:
- live
go2rtc:
stream: rtsp_cam06_sub
stream: cam06_sub_opus
modes:
- webrtc
title: MBR Left
@@ -46,7 +46,7 @@ card:
disable_except:
- live
go2rtc:
stream: rtsp_cam07_sub
stream: cam07_sub_opus
modes:
- webrtc
title: MBR Right
+2 -2
View File
@@ -1389,11 +1389,11 @@ sections:
heading_style: title
badges:
- type: entity
entity: sensor.master_bathroom_thermostat_temperature
entity: sensor.bathroom_multisensor_air_temperature
tap_action:
action: more-info
- type: entity
entity: sensor.master_bathroom_thermostat_humidity
entity: sensor.bathroom_multisensor_relative_humidity
tap_action:
action: more-info
- type: custom:mushroom-template-card
+1 -1
View File
@@ -10,7 +10,7 @@ cards:
- camera_entity: camera.frigate_cam03
live_provider: webrtc-card
webrtc_card:
url: rtsp://192.168.1.7:8554/rtsp_cam03_sub
url: rtsp://192.168.1.7:8554/cam03_sub_opus
- frigate:
camera_name: frigate_cam03
label: person
+1 -1
View File
@@ -97,7 +97,7 @@ cards:
go2rtc:
modes:
- webrtc
stream: rtsp_cam03_sub
stream: cam03_sub_opus
frigate:
camera_name: frigate_cam03
zone: great_room
+1 -1
View File
@@ -106,7 +106,7 @@ cards:
layout: vertical
secondary_info: none
- type: custom:mushroom-entity-card
entity: binary_sensor.furnace_room_door_contact
entity: binary_sensor.furnace_room_multisensor_door
name: Furnace
layout: vertical
secondary_info: none
+3 -3
View File
@@ -55,11 +55,11 @@ cards:
title: Water Softener
columns: 3
entities:
- entity: sensor.water_softener_multisensor_salt_level_in_bags
- entity: sensor.furnace_room_multisensor_salt_level_in_bags
name: Salt (cm)
- entity: sensor.water_softener_multisensor_salt_level_in_cm
- entity: sensor.furnace_room_multisensor_salt_level_in_cm
name: From Bottom (cm)
- entity: sensor.water_softener_multisensor_salt_level_from_top_in_cm
- entity: sensor.furnace_room_multisensor_salt_level_from_top_in_cm
name: From Top (cm)
- type: vertical-stack
cards:
+2 -2
View File
@@ -352,8 +352,8 @@ cards:
hold_action:
action: toggle
secondary: |-
{{states('sensor.master_bathroom_thermostat_temperature')}}°F
{{states('sensor.master_bathroom_thermostat_humidity')}}%
{{states('sensor.bathroom_multisensor_air_temperature')}}°F
{{states('sensor.bathroom_multisensor_relative_humidity')}}%
icon_color: "{{iif(is_state('light.master_bathroom_hue','on'),'yellow')}}"
multiline_secondary: true
layout: vertical
+3 -3
View File
@@ -14,7 +14,7 @@ cards:
- hours_to_show: 24
graph: line
type: sensor
entity: sensor.bathroom_multisensor_temperature
entity: sensor.bathroom_multisensor_air_temperature
detail: 1
name: Multisensor
- hours_to_show: 24
@@ -28,14 +28,14 @@ cards:
- hours_to_show: 24
graph: line
type: sensor
entity: sensor.master_bathroom_thermostat_temperature
entity: sensor.bathroom_multisensor_air_temperature
detail: 1
name: Thermostat
- hours_to_show: 24
graph: line
type: sensor
detail: 1
entity: sensor.master_bathroom_thermostat_humidity
entity: sensor.bathroom_multisensor_relative_humidity
name: Thermostat
- type: horizontal-stack
cards:
+1 -1
View File
@@ -14,7 +14,7 @@ cards:
- hours_to_show: 24
graph: line
type: sensor
entity: sensor.utility_room_multisensor_temperature
entity: sensor.utility_room_multisensor_air_temperature
detail: 1
name: Multisensor
- hours_to_show: 24
+1 -1
View File
@@ -5,7 +5,7 @@ cameras:
go2rtc:
modes:
- webrtc
stream: rtsp_cam14_sub
stream: cam14_sub_opus
live:
auto_mute: all
preload: true
+39 -22
View File
@@ -1,27 +1,44 @@
type: custom:advanced-camera-card
cameras:
- camera_entity: camera.frigate_cam01
live_provider: go2rtc
go2rtc:
modes:
- webrtc
stream: rtsp_cam01_sub
live:
auto_mute: all
preload: true
draggable: false
show_image_during_load: true
lazy_load: false
controls:
title:
mode: none
timeline:
mode: none
thumbnails:
mode: none
status_bar:
style: none
menu:
buttons:
frigate:
enabled: false
performance:
profile: low
style: none
cameras:
- camera_entity: camera.frigate_cam01
live_provider: go2rtc
id: frigate-cam01
capabilities:
disable: []
disable_except:
- live
go2rtc:
stream: cam01_sub_opus
modes:
- webrtc
view:
default: live
profiles: []
grid_options:
columns: full
live:
preload: true
draggable: false
show_image_during_load: false
lazy_load: false
controls:
timeline:
mode: none
thumbnails:
mode: none
builtin: false
next_previous:
style: none
zoomable: false
auto_play:
- selected
transition_effect: slide
display:
mode: single
+37 -20
View File
@@ -1,27 +1,44 @@
type: custom:advanced-camera-card
# status_bar:
# style: none
# menu:
# buttons:
# frigate:
# enabled: false
# style: none
cameras:
- camera_entity: camera.frigate_cam03
live_provider: go2rtc
id: frigate-cam03
capabilities:
disable: []
disable_except:
- live
go2rtc:
stream: cam03_opus
modes:
- webrtc
stream: rtsp_cam03_sub
live:
auto_mute: all
preload: true
draggable: false
show_image_during_load: true
lazy_load: false
controls:
title:
mode: none
timeline:
mode: none
thumbnails:
mode: none
menu:
buttons:
frigate:
enabled: false
performance:
profile: low
# view:
# default: live
# profiles: []
# grid_options:
# columns: full
# live:
# preload: true
# draggable: false
# show_image_during_load: false
# lazy_load: false
# controls:
# timeline:
# mode: none
# thumbnails:
# mode: none
# builtin: false
# next_previous:
# style: none
# zoomable: false
# auto_play:
# - selected
# transition_effect: slide
# display:
# mode: single
+39 -22
View File
@@ -1,27 +1,44 @@
type: custom:advanced-camera-card
cameras:
- camera_entity: camera.frigate_cam19
live_provider: go2rtc
go2rtc:
modes:
- webrtc
stream: rtsp_cam19_sub
live:
auto_mute: all
preload: true
draggable: false
show_image_during_load: true
lazy_load: false
controls:
title:
mode: none
timeline:
mode: none
thumbnails:
mode: none
status_bar:
style: none
menu:
buttons:
frigate:
enabled: false
performance:
profile: low
style: none
cameras:
- camera_entity: camera.frigate_cam19
live_provider: go2rtc
id: frigate-cam19
capabilities:
disable: []
disable_except:
- live
go2rtc:
stream: cam19_sub_opus
modes:
- webrtc
view:
default: live
profiles: []
grid_options:
columns: full
live:
preload: true
draggable: false
show_image_during_load: false
lazy_load: false
controls:
timeline:
mode: none
thumbnails:
mode: none
builtin: false
next_previous:
style: none
zoomable: false
auto_play:
- selected
transition_effect: slide
display:
mode: single
+1 -1
View File
@@ -5,7 +5,7 @@ cameras:
go2rtc:
modes:
- webrtc
stream: rtsp_cam13_sub
stream: cam13_sub_opus
live:
auto_mute: all
preload: true
+39 -22
View File
@@ -1,27 +1,44 @@
type: custom:advanced-camera-card
cameras:
- camera_entity: camera.frigate_cam18
live_provider: go2rtc
go2rtc:
modes:
- webrtc
stream: rtsp_cam18_sub
live:
auto_mute: all
preload: true
draggable: false
show_image_during_load: true
lazy_load: false
controls:
title:
mode: none
timeline:
mode: none
thumbnails:
mode: none
status_bar:
style: none
menu:
buttons:
frigate:
enabled: false
performance:
profile: low
style: none
cameras:
- camera_entity: camera.frigate_cam18
live_provider: go2rtc
id: frigate-cam18
capabilities:
disable: []
disable_except:
- live
go2rtc:
stream: cam18_sub_opus
modes:
- webrtc
view:
default: live
profiles: []
grid_options:
columns: full
live:
preload: true
draggable: false
show_image_during_load: false
lazy_load: false
controls:
timeline:
mode: none
thumbnails:
mode: none
builtin: false
next_previous:
style: none
zoomable: false
auto_play:
- selected
transition_effect: slide
display:
mode: single
+39 -22
View File
@@ -1,27 +1,44 @@
type: custom:advanced-camera-card
cameras:
- camera_entity: camera.frigate_cam04
live_provider: go2rtc
go2rtc:
modes:
- webrtc
stream: rtsp_cam04_sub
live:
auto_mute: all
preload: true
draggable: false
show_image_during_load: true
lazy_load: false
controls:
title:
mode: none
timeline:
mode: none
thumbnails:
mode: none
status_bar:
style: none
menu:
buttons:
frigate:
enabled: false
performance:
profile: low
style: none
cameras:
- camera_entity: camera.frigate_cam04
live_provider: go2rtc
id: frigate-cam04
capabilities:
disable: []
disable_except:
- live
go2rtc:
stream: cam04_sub_opus
modes:
- webrtc
view:
default: live
profiles: []
grid_options:
columns: full
live:
preload: true
draggable: false
show_image_during_load: false
lazy_load: false
controls:
timeline:
mode: none
thumbnails:
mode: none
builtin: false
next_previous:
style: none
zoomable: false
auto_play:
- selected
transition_effect: slide
display:
mode: single
+34 -34
View File
@@ -6,7 +6,7 @@ cameras:
go2rtc:
modes:
- webrtc
stream: rtsp_cam08_sub
stream: cam08_sub_opus
triggers:
occupancy: false
motion: false
@@ -19,7 +19,7 @@ cameras:
go2rtc:
modes:
- webrtc
stream: rtsp_cam01_sub
stream: cam01_sub_opus
triggers:
occupancy: false
motion: false
@@ -32,7 +32,7 @@ cameras:
go2rtc:
modes:
- webrtc
stream: rtsp_cam12_sub
stream: cam12_sub_opus
triggers:
occupancy: false
motion: false
@@ -45,7 +45,7 @@ cameras:
go2rtc:
modes:
- webrtc
stream: rtsp_cam13_sub
stream: cam13_sub_opus
triggers:
occupancy: false
motion: false
@@ -57,7 +57,7 @@ cameras:
go2rtc:
modes:
- webrtc
stream: rtsp_cam03_sub
stream: cam03_sub_opus
triggers:
occupancy: false
motion: false
@@ -71,7 +71,7 @@ cameras:
go2rtc:
modes:
- webrtc
stream: rtsp_cam06_sub
stream: cam06_sub_opus
triggers:
occupancy: false
motion: false
@@ -83,36 +83,36 @@ cameras:
go2rtc:
modes:
- webrtc
stream: rtsp_cam07_sub
stream: cam07_sub_opus
triggers:
occupancy: false
motion: false
entities:
- binary_sensor.bed_presence_c175a4_bed_occupied_either
timeline:
media: snapshots
show_recordings: false
view:
scan:
enabled: true
untrigger_seconds: 10
untrigger_reset: true
default: live
camera_select: live
dark_mode: "on"
update_cycle_camera: true
update_seconds: 10
menu:
buttons:
clips:
enabled: false
timeline:
enabled: false
snapshots:
enabled: false
media_player:
enabled: false
live:
lazy_load: true
preload: true
lazy_unload: hidden
# timeline:
# media: snapshots
# show_recordings: false
# view:
# scan:
# enabled: true
# untrigger_seconds: 10
# untrigger_reset: true
# default: live
# camera_select: live
# dark_mode: "on"
# update_cycle_camera: true
# update_seconds: 10
# menu:
# buttons:
# clips:
# enabled: false
# timeline:
# enabled: false
# snapshots:
# enabled: false
# media_player:
# enabled: false
# live:
# lazy_load: true
# preload: true
# lazy_unload: hidden
+39 -22
View File
@@ -1,27 +1,44 @@
type: custom:advanced-camera-card
cameras:
- camera_entity: camera.frigate_cam12
live_provider: go2rtc
go2rtc:
modes:
- webrtc
stream: rtsp_cam12_sub
live:
auto_mute: all
preload: true
draggable: false
show_image_during_load: true
lazy_load: false
controls:
title:
mode: none
timeline:
mode: none
thumbnails:
mode: none
status_bar:
style: none
menu:
buttons:
frigate:
enabled: false
performance:
profile: low
style: none
cameras:
- camera_entity: camera.frigate_cam12
live_provider: go2rtc
id: frigate-cam12
capabilities:
disable: []
disable_except:
- live
go2rtc:
stream: cam12_sub_opus
modes:
- webrtc
view:
default: live
profiles: []
grid_options:
columns: full
live:
preload: true
draggable: false
show_image_during_load: false
lazy_load: false
controls:
timeline:
mode: none
thumbnails:
mode: none
builtin: false
next_previous:
style: none
zoomable: false
auto_play:
- selected
transition_effect: slide
display:
mode: single
@@ -1,27 +1,44 @@
type: custom:advanced-camera-card
cameras:
- camera_entity: camera.frigate_cam06
live_provider: go2rtc
go2rtc:
modes:
- webrtc
stream: rtsp_cam06_sub
live:
auto_mute: all
preload: true
draggable: false
show_image_during_load: true
lazy_load: false
controls:
title:
mode: none
timeline:
mode: none
thumbnails:
mode: none
status_bar:
style: none
menu:
buttons:
frigate:
enabled: false
performance:
profile: low
style: none
cameras:
- camera_entity: camera.frigate_cam06
live_provider: go2rtc
id: frigate-cam06
capabilities:
disable: []
disable_except:
- live
go2rtc:
stream: cam06_sub_opus
modes:
- webrtc
view:
default: live
profiles: []
grid_options:
columns: full
live:
preload: true
draggable: false
show_image_during_load: false
lazy_load: false
controls:
timeline:
mode: none
thumbnails:
mode: none
builtin: false
next_previous:
style: none
zoomable: false
auto_play:
- selected
transition_effect: slide
display:
mode: single
@@ -1,27 +1,44 @@
type: custom:advanced-camera-card
cameras:
- camera_entity: camera.frigate_cam07
live_provider: go2rtc
go2rtc:
modes:
- webrtc
stream: rtsp_cam07_sub
live:
auto_mute: all
preload: true
draggable: false
show_image_during_load: true
lazy_load: false
controls:
title:
mode: none
timeline:
mode: none
thumbnails:
mode: none
status_bar:
style: none
menu:
buttons:
frigate:
enabled: false
performance:
profile: low
style: none
cameras:
- camera_entity: camera.frigate_cam07
live_provider: go2rtc
id: frigate-cam07
capabilities:
disable: []
disable_except:
- live
go2rtc:
stream: cam07_sub_opus
modes:
- webrtc
view:
default: live
profiles: []
grid_options:
columns: full
live:
preload: true
draggable: false
show_image_during_load: false
lazy_load: false
controls:
timeline:
mode: none
thumbnails:
mode: none
builtin: false
next_previous:
style: none
zoomable: false
auto_play:
- selected
transition_effect: slide
display:
mode: single
+39 -22
View File
@@ -1,27 +1,44 @@
type: custom:advanced-camera-card
cameras:
- camera_entity: camera.frigate_cam08
live_provider: go2rtc
go2rtc:
modes:
- webrtc
stream: rtsp_cam08_sub
live:
auto_mute: all
preload: true
draggable: false
show_image_during_load: true
lazy_load: false
controls:
title:
mode: none
timeline:
mode: none
thumbnails:
mode: none
status_bar:
style: none
menu:
buttons:
frigate:
enabled: false
performance:
profile: low
style: none
cameras:
- camera_entity: camera.frigate_cam08
live_provider: go2rtc
id: frigate-cam08
capabilities:
disable: []
disable_except:
- live
go2rtc:
stream: cam08_sub_opus
modes:
- webrtc
view:
default: live
profiles: []
grid_options:
columns: full
live:
preload: true
draggable: false
show_image_during_load: false
lazy_load: false
controls:
timeline:
mode: none
thumbnails:
mode: none
builtin: false
next_previous:
style: none
zoomable: false
auto_play:
- selected
transition_effect: slide
display:
mode: single
+4 -31
View File
@@ -6,52 +6,25 @@ cameras:
go2rtc:
modes:
- webrtc
stream: rtsp_cam04_sub
stream: cam04_sub_opus
# - camera_entity: camera.frigate_cam14
# title: Back Yard
# live_provider: go2rtc
# go2rtc:
# modes:
# - webrtc
# stream: rtsp_cam14_sub
# stream: cam14_sub_opus
- camera_entity: camera.frigate_cam18
title: Front Yard
live_provider: go2rtc
go2rtc:
modes:
- webrtc
stream: rtsp_cam18_sub
stream: cam18_sub_opus
- camera_entity: camera.frigate_cam19
title: Front Porch
live_provider: go2rtc
go2rtc:
modes:
- webrtc
stream: rtsp_cam19_sub
timeline:
media: snapshots
show_recordings: false
view:
scan:
enabled: true
untrigger_seconds: 10
untrigger_reset: true
default: live
camera_select: live
dark_mode: "on"
update_cycle_camera: true
update_seconds: 10
menu:
buttons:
clips:
enabled: false
timeline:
enabled: false
snapshots:
enabled: false
media_player:
enabled: false
live:
lazy_load: false
preload: true
lazy_unload: hidden
stream: cam19_sub_opus
+1 -2
View File
@@ -70,7 +70,7 @@ elements:
top: 9%
#top icon spot #1
- type: state-icon
entity: binary_sensor.furnace_room_door_contact
entity: binary_sensor.furnace_room_multisensor_door
style:
left: 76%
top: 9%
@@ -173,7 +173,6 @@ elements:
action: toggle
hold_action:
action: more-info
# 12,31,50,69,88
# 14,38,62,86
# 25,50,75
+3 -3
View File
@@ -35,7 +35,7 @@ elements:
# left: 76%
# top: 9%
- type: state-icon
entity: binary_sensor.furnace_room_door_contact
entity: binary_sensor.furnace_room_multisensor_door
style:
left: 84%
top: 9%
@@ -94,8 +94,8 @@ elements:
action: more-info
- type: custom:mushroom-template-card
primary: "{{ states('sensor.hvac_multisensor_delta') | float | round(2) }}"
entity: sensor.hvac_multisensor_delta
primary: "{{ states('sensor.hvac_delta_temperature') | float | round(2) }}"
entity: sensor.hvac_delta_temperature
tap_action:
action: more-info
style:
+2 -2
View File
@@ -13,13 +13,13 @@ elements:
top: 88%
- type: state-label
entity: sensor.master_bathroom_thermostat_temperature
entity: sensor.bathroom_multisensor_air_temperature
style:
left: 15%
top: 35%
font-size: 180%
- type: state-label
entity: sensor.master_bathroom_thermostat_humidity
entity: sensor.bathroom_multisensor_relative_humidity
style:
left: 85%
top: 35%
+2 -2
View File
@@ -22,7 +22,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam14_sub
stream: cam14_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -62,4 +62,4 @@ cards:
mode: single
dimensions:
aspect_ratio_mode: static
aspect_ratio: '16:10'
aspect_ratio: "16:10"
+1 -1
View File
@@ -22,7 +22,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam01_sub
stream: cam01_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -22,7 +22,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam03_sub
stream: cam03_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -62,4 +62,4 @@ cards:
mode: single
dimensions:
aspect_ratio_mode: static
aspect_ratio: '16:10'
aspect_ratio: "16:10"
@@ -8,3 +8,5 @@ cards:
cards:
- !include /config/lovelace/stretch-cameras/indoor-camera-cycler.yaml
- !include /config/lovelace/stretch-cameras/outdoor-camera-cycler.yaml
# - !include /config/lovelace/stretch-cameras/indoor-camera-view.yaml
# - !include /config/lovelace/stretch-cameras/outdoor-camera-view.yaml
@@ -22,7 +22,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam19_sub
stream: cam19_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -62,4 +62,4 @@ cards:
mode: single
dimensions:
aspect_ratio_mode: static
aspect_ratio: '16:10'
aspect_ratio: "16:10"
@@ -22,7 +22,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam13_sub
stream: cam13_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -62,4 +62,4 @@ cards:
mode: single
dimensions:
aspect_ratio_mode: static
aspect_ratio: '16:10'
aspect_ratio: "16:10"
@@ -22,7 +22,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam18_sub
stream: cam18_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -62,4 +62,4 @@ cards:
mode: single
dimensions:
aspect_ratio_mode: static
aspect_ratio: '16:10'
aspect_ratio: "16:10"
+2 -2
View File
@@ -22,7 +22,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam04_sub
stream: cam04_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -62,4 +62,4 @@ cards:
mode: single
dimensions:
aspect_ratio_mode: static
aspect_ratio: '16:10'
aspect_ratio: "16:10"
@@ -22,7 +22,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam08_sub
stream: cam08_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -62,4 +62,4 @@ cards:
mode: single
dimensions:
aspect_ratio_mode: static
aspect_ratio: '16:10'
aspect_ratio: "16:10"
@@ -22,7 +22,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam03_sub
stream: cam03_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -38,7 +38,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam04_sub
stream: cam04_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -54,44 +54,44 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam12_sub
stream: cam12_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
triggers:
motion: false
entities: []
view:
default: live
default_reset:
every_seconds: 5
after_interaction: true
interaction_mode: all
default_cycle_camera: true
triggers:
filter_selected_camera: false
profiles: []
grid_options:
columns: full
live:
preload: true
draggable: false
show_image_during_load: false
lazy_load: false
controls:
timeline:
mode: none
thumbnails:
mode: none
builtin: false
next_previous:
style: none
zoomable: false
auto_play:
- selected
transition_effect: slide
display:
mode: single
dimensions:
aspect_ratio_mode: static
aspect_ratio: '16:10'
# view:
# default: live
# default_reset:
# every_seconds: 5
# after_interaction: true
# interaction_mode: all
# default_cycle_camera: true
# triggers:
# filter_selected_camera: false
# profiles: []
# grid_options:
# columns: full
# live:
# preload: true
# draggable: false
# show_image_during_load: false
# lazy_load: false
# controls:
# timeline:
# mode: none
# thumbnails:
# mode: none
# builtin: false
# next_previous:
# style: none
# zoomable: false
# auto_play:
# - selected
# transition_effect: slide
# display:
# mode: single
# dimensions:
# aspect_ratio_mode: static
# aspect_ratio: "16:10"
+1 -1
View File
@@ -23,7 +23,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam12_sub
stream: cam12_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -22,7 +22,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam06_sub
stream: cam06_sub_opus
modes:
- webrtc
title: MBR Left
@@ -40,7 +40,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam07_sub
stream: cam07_sub_opus
modes:
- webrtc
title: MBR Right
@@ -82,4 +82,4 @@ cards:
mode: single
dimensions:
aspect_ratio_mode: static
aspect_ratio: '16:10'
aspect_ratio: "16:10"
@@ -22,7 +22,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam18_sub
stream: cam18_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -38,7 +38,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam04_sub
stream: cam04_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -54,7 +54,7 @@ cards:
disable_except:
- live
go2rtc:
stream: rtsp_cam19_sub
stream: cam19_sub_opus
modes:
- webrtc
always_error_if_entity_unavailable: false
@@ -94,4 +94,4 @@ cards:
mode: single
dimensions:
aspect_ratio_mode: static
aspect_ratio: '16:10'
aspect_ratio: "16:10"
+1
View File
@@ -16,6 +16,7 @@ cards:
entities:
- entity: device_tracker.chevrolet_mylink
- entity: device_tracker.chevrolet_traverse_location
- entity: device_tracker.alpsalpine_co_ltd
- type: entities
title: Bridget's Tablet
+5 -5
View File
@@ -291,6 +291,7 @@ cards:
- media_player.front_room_hub
- media_player.girls_room_hub
- media_player.boys_room_clock
- media_player.ma_home_assistant_voice_097b44_media_player
states:
- state: "playing"
class: "squeezebox-on"
@@ -363,7 +364,7 @@ cards:
- sensor.master_bedroom_multisensor_air_temperature
- sensor.thermostat_temperature
- sensor.utility_room_thermostat_temperature
- sensor.master_bathroom_thermostat_temperature
- sensor.bathroom_multisensor_relative_humidity
- sensor.downstairs_temperature
- sensor.computer_area_multisensor_air_temperature
- sensor.mancave_thermostat_temperature
@@ -475,7 +476,7 @@ cards:
# Bathrooms are expected to be a bit more humid
- entities:
- sensor.master_bathroom_thermostat_humidity
- sensor.bathroom_multisensor_relative_humidity
- sensor.utility_room_thermostat_humidity
text_template: '${entity.state ? Math.ceil(entity.state) : "unknown"} %'
class_template: '
@@ -566,7 +567,7 @@ cards:
'
- entities:
- sensor.water_softener_multisensor_salt_level_in_bags
- sensor.furnace_room_multisensor_salt_level_in_bags
text_template: '${entity.state ? Math.floor(entity.state) : "undefined"}'
class_template: '
var bags = parseFloat(entity.state);
@@ -749,8 +750,7 @@ cards:
- binary_sensor.storage_room_door_contact
- binary_sensor.mancave_door_contact
- binary_sensor.boys_room_door_contact
- binary_sensor.water_softener_multisensor_door
#- binary_sensor.furnace_room_door_contact
- binary_sensor.furnace_room_multisensor_door
- binary_sensor.utility_room_door_contact
states:
- state: "off"
+17 -44
View File
@@ -38,8 +38,7 @@ cards:
type: custom:mini-media-player
group: true
artwork: cover
tts:
platform: google_translate
- entity: media_player.kitchen
name: Kitchen
#type: media-control
@@ -47,8 +46,7 @@ cards:
group: true
artwork: cover
show_source: true
tts:
platform: google_translate
- entity: media_player.bathroom_mini
name: Bathroom
#type: media-control
@@ -56,8 +54,7 @@ cards:
group: true
artwork: cover
show_source: true
tts:
platform: google_translate
- entity: media_player.girls_room_hub
name: Nursery
#type: media-control
@@ -65,8 +62,7 @@ cards:
group: true
artwork: cover
show_source: true
tts:
platform: google_translate
- entity: media_player.master_bedroom_clock
name: Master Bedroom
#type: media-control
@@ -74,8 +70,15 @@ cards:
group: true
artwork: cover
show_source: true
tts:
platform: google_translate
- entity: media_player.ma_home_assistant_voice_097b44_media_player
name: Master Bedroom
#type: media-control
type: custom:mini-media-player
group: true
artwork: cover
show_source: true
- entity: media_player.computer_area_hub
name: Computer Area
#type: media-control
@@ -83,8 +86,7 @@ cards:
group: true
artwork: cover
show_source: true
tts:
platform: google_translate
- entity: media_player.garage
name: Garage
#type: media-control
@@ -92,8 +94,7 @@ cards:
group: true
artwork: cover
show_source: true
tts:
platform: google_translate
- entity: media_player.deck
name: Deck
#type: media-control
@@ -101,8 +102,7 @@ cards:
group: true
artwork: cover
show_source: true
tts:
platform: google_translate
- entity: media_player.great_room
name: Great Room
#type: media-control
@@ -110,8 +110,7 @@ cards:
group: true
artwork: cover
show_source: true
tts:
platform: google_translate
- entity: media_player.boys_room_clock
name: Boys Room
#type: media-control
@@ -119,8 +118,6 @@ cards:
group: true
artwork: cover
show_source: true
tts:
platform: google_translate
- type: vertical-stack
cards:
@@ -140,9 +137,6 @@ cards:
group: true
artwork: material
show_source: true
tts:
platform: google_translate
entity_id: media_player.all_downstairs_speakers
hide:
controls: false
- entity: media_player.all_public_speakers
@@ -152,9 +146,6 @@ cards:
group: true
artwork: material
show_source: true
tts:
platform: google_translate
entity_id: media_player.all_public_speakers
hide:
controls: false
- entity: media_player.all_upstairs_speakers
@@ -164,9 +155,6 @@ cards:
group: true
artwork: material
show_source: true
tts:
platform: google_translate
entity_id: media_player.all_upstairs_speakers
hide:
controls: false
- entity: media_player.downstairs_public
@@ -176,9 +164,6 @@ cards:
group: true
artwork: material
show_source: true
tts:
platform: google_translate
entity_id: media_player.downstairs_public
hide:
controls: false
- entity: media_player.front_yard
@@ -188,9 +173,6 @@ cards:
group: true
artwork: material
show_source: true
tts:
platform: google_translate
entity_id: media_player.front_yard
hide:
controls: false
- entity: media_player.inside_and_outside #All indoors and outdoor speakers
@@ -200,9 +182,6 @@ cards:
group: true
artwork: material
show_source: true
tts:
platform: google_translate
entity_id: media_player.inside_and_outside
hide:
controls: false
- entity: media_player.outside
@@ -212,9 +191,6 @@ cards:
group: true
artwork: material
show_source: true
tts:
platform: google_translate
entity_id: media_player.outside
hide:
controls: false
- entity: media_player.upstairs_public
@@ -224,9 +200,6 @@ cards:
group: true
artwork: material
show_source: true
tts:
platform: google_translate
entity_id: media_player.upstairs_public
hide:
controls: false
+2 -2
View File
@@ -44,7 +44,7 @@ cards:
title: Upstairs Humidity
type: history-graph
- entities:
- entity: sensor.master_bathroom_thermostat_temperature
- entity: sensor.bathroom_multisensor_relative_humidity
name: Master Bathroom
- entity: sensor.utility_room_thermostat_temperature
name: Utility Room
@@ -85,7 +85,7 @@ cards:
title: Downstairs Humidity
type: history-graph
- entities:
- entity: sensor.master_bathroom_thermostat_humidity
- entity: sensor.bathroom_multisensor_relative_humidity
name: Master Bathroom
- entity: sensor.utility_room_thermostat_humidity
name: Utility Room
+2 -8
View File
@@ -433,7 +433,7 @@ badges:
- type: conditional
conditions:
- entity: sensor.watchman_missing_entities
state_not: unavailable
state_not: unavailable, unknowne
- entity: sensor.watchman_missing_entities
state_not: "0"
chip:
@@ -1059,12 +1059,6 @@ cards:
action: toggle
hold_action:
action: more-info
- entity: light.garage_overhead
name: Garage
tap_action:
action: toggle
hold_action:
action: more-info
- entity: light.front_porch_overhead
name: Porch
tap_action:
@@ -1107,7 +1101,7 @@ cards:
- entity: binary_sensor.black_bed_status
state_filter:
- "off"
- entity: binary_sensor.hvac_multisensor_status
- entity: binary_sensor.furnace_room_multisensor_status
state_filter:
- "off"
+1 -1
View File
@@ -3,7 +3,7 @@ sequence:
- action: webrtc.dash_cast
data:
entity_id: media_player.computer_area_hub
url: rtsp_cam03_sub
url: cam03_sub_opus
force: true
extra:
mode: webrtc
+1 -1
View File
@@ -3,6 +3,6 @@ sequence:
- action: webrtc.dash_cast
data:
entity_id: media_player.computer_area_hub
url: rtsp_cam08_sub
url: cam08_sub_opus
extra:
mode: webrtc
+1 -1
View File
@@ -3,7 +3,7 @@ sequence:
- action: webrtc.dash_cast
data:
entity_id: media_player.front_room_hub
url: rtsp_cam08_sub
url: cam08_sub_opus
force: true
extra:
mode: webrtc
+1 -1
View File
@@ -3,7 +3,7 @@ sequence:
- action: webrtc.dash_cast
data:
entity_id: media_player.computer_area_hub
url: rtsp_cam13_sub
url: cam13_sub_opus
force: true
extra:
mode: webrtc
+1 -1
View File
@@ -3,7 +3,7 @@ sequence:
- action: webrtc.dash_cast
data:
entity_id: media_player.front_room_hub
url: rtsp_cam13_sub
url: cam13_sub_opus
force: true
extra:
mode: webrtc
+1 -1
View File
@@ -3,7 +3,7 @@ sequence:
- action: webrtc.dash_cast
data:
entity_id: media_player.computer_area_hub
url: rtsp_cam19_sub
url: cam19_sub_opus
force: true
extra:
mode: webrtc

Some files were not shown because too many files have changed in this diff Show More