# 3v3 en svp sun 34 35 32 33 25 26 27 14 12 gnd 13 sd2 sd3 gnd 5v substitutions: devicename: hvac-multisensor-425f4f entity_name: hvac_multisensor friendly_name: HVAC MultiSensor comment: Clever MultiSensor platform: ESP32 board: wemos_d1_mini32 static_ip: !secret hvac-multisensor-ip sda_pin: GPIO21 scl_pin: GPIO22 door_pin: GPIO19 one_wire_pin: GPIO14 trigger_pin: GPIO04 echo_pin: GPIO13 #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} name_add_mac_suffix: false on_boot: - priority: -100 then: - lambda: |- if (id(oled)) { id(oled_enabled) = true; } else { id(oled_enabled) = false; } esp32: board: ${board} framework: type: esp-idf # web_server: # port: 80 # version: 3 # include_internal: true # Enable logging logger: level: DEBUG logs: sensor: INFO component: INFO ultrasonic: INFO ethernet: DEBUG api: # Using settings from common/device_base.yaml ota: # Using settings from common/device_base.yaml esp32_ble_tracker: globals: - id: oled_enabled type: bool restore_value: yes initial_value: 'false' - 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 sensor: - platform: dallas_temp address: 0xB33C01B607798528 name: "Return" id: hvac_return icon: mdi:home-thermometer-outline 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" id: hvac_supply icon: mdi:thermostat 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" id: ambient icon: mdi:home-thermometer update_interval: 10s filters: - lambda: return x * (9.0/5.0) + 32.0; unit_of_measurement: "°F" state_class: measurement - platform: template name: "Delta" id: hvac_delta icon: mdi:thermometer-lines 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" icon: mdi:arrow-collapse-up disabled_by_default: true #update_interval: 5s filters: - lambda: 'return (0.94 - (id(ultrasonic_source).state)) * 100;' on_value: then: - sensor.template.publish: id: level_in_bags state: !lambda 'return id(distance_from_bottom).state;' - platform: template unit_of_measurement: "cm" state_class: measurement id: distance_from_top name: "Salt Level From Top in CM" icon: mdi:arrow-collapse-down disabled_by_default: true #update_interval: 5s filters: - lambda: 'return (id(ultrasonic_source).state) * 100;' - platform: template unit_of_measurement: "bags" state_class: measurement id: level_in_bags name: "Salt Level in Bags" icon: mdi:counter disabled_by_default: true #update_interval: 5s filters: - lambda: 'return (id(distance_from_bottom).state) / 17.5;' display: - platform: ssd1306_i2c id: oled model: "SSD1306 128x64" #reset_pin: GPIO14 #D0 address: 0x3C lambda: |- it.print(0, 0, id(font1), "Delta:"); it.printf(128, 0, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(hvac_delta).state); it.print(0, 16, id(font1), "Supply:"); it.printf(128, 16, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(hvac_supply).state); it.print(0, 32, id(font1), "Return:"); it.printf(128, 32, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(hvac_return).state); it.print(0, 48, id(font1), "Ambient:"); it.printf(128, 48, id(font1), TextAlign::TOP_RIGHT, "%.1f°F", id(ambient).state); binary_sensor: - platform: gpio name: "Door" device_class: door pin: ${door_pin} filters: - invert: # switch: # - platform: template # id: display_switch # name: "Display" # lambda: |- # if (id(oled_enabled)) { # if (id(screen_power)) { # id(oled).turn_on(); # } else { # id(oled).turn_off(); # } # } # return id(screen_power); # turn_on_action: # - lambda: |- # id(screen_power) = true; # // id(oled).turn_on(); # turn_off_action: # - lambda: |- # id(screen_power) = false; # // id(oled).turn_off();