substitutions: devicename: furnace-room-multisensor entity_name: furnace_room_multisensor friendly_name: Furnace Room MultiSensor platform: ESP32 board: nodemcu-32s static_ip: !secret furnace-room-multisensor-ip packages: #wifi: !include common/wifi.yaml ethernet: !include common/olimex-poe.yaml device_base: !include common/device_base.yaml ble_proxy: !include common/ble_proxy.yaml logger: level: DEBUG logs: dallas.sensor: NONE sensor: NONE globals: - id: screen_power type: bool restore_value: yes initial_value: 'true' font: - file: 'CascadiaMonoPL.ttf' id: font1 size: 17 dallas: - pin: number: GPIO5 #D4 update_interval: 10s i2c: sda: GPIO13 #D1 scl: GPIO15 #D2 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 address: 0xB33C01B607798528 name: "Return Temperature" id: hvac_return filters: - lambda: return x * (9.0/5.0) + 32.0; unit_of_measurement: "°F" state_class: measurement - platform: dallas address: 0x0F3C01B6070C1328 name: "HVAC Temperature" id: hvac filters: - lambda: return x * (9.0/5.0) + 32.0; unit_of_measurement: "°F" state_class: measurement - platform: dallas address: 0xFA3C01B607005B28 name: "Furnace Room Temperature" id: ambient filters: - lambda: return x * (9.0/5.0) + 32.0; unit_of_measurement: "°F" state_class: measurement - platform: template name: "HVAC Delta" id: hvac_delta lambda: |- return (id(hvac).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: GPIO1 #D7 # echo_pin: GPIO5 #D8 # name: "Salt Level in percent" # update_interval: 1s # #update_interval: 10s # filters: # - lambda: return (0.86-x)*(100/0.86); # unit_of_measurement: "%" # - platform: ultrasonic # trigger_pin: GPIO33 #D7 # echo_pin: GPIO35 #D8 # unit_of_measurement: "cm" # id: distance_from_bottom # name: "Salt Level in CM" # # pulse_time: 10us # #update_interval: 3h # #update_interval: 5s # #timeout: 4.0m # update_interval: 5s # filters: # - lambda: return ( 0.86 - x * 100; # - sliding_window_moving_average: # window_size: 5 # send_every: 5 # send_first_at: 1 - platform: ultrasonic trigger_pin: GPIO33 #D7 echo_pin: GPIO35 #D8 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: "Furnace Room Door" device_class: door pin: number: GPIO3 #D5 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: "HVAC Display Switch" 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();