mirror of
https://github.com/CeeWeasel/fresh-home.git
synced 2026-08-09 18:40:14 -04:00
75fb9c2ab8
finally fixing hvac-multisensor. All of this was caused by the display switch referenced the display while it wasn't plugged in. Updated code to check for the existence first.
223 lines
5.4 KiB
YAML
223 lines
5.4 KiB
YAML
# 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
|
|
|
|
sda_pin: GPIO21
|
|
scl_pin: GPIO22
|
|
door_pin: GPIO19
|
|
|
|
|
|
one_wire_pin: GPIO14
|
|
trigger_pin: GPIO04
|
|
echo_pin: GPIO12
|
|
#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), "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);
|
|
|
|
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();
|