# 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: ESP32 board: wemos_d1_mini32 static_ip: !secret hvac-multisensor-ip sda_pin: GPIO21 scl_pin: GPIO22 door_pin: GPIO19 one_wire_pin: GPIO26 #one_wire_pin: GPIO14 trigger_pin: GPIO16 #trigger_pin: GPIO04 echo_pin: GPIO13 #mdc_pin: GPIO23 #mdio_pin: GPIO18 #clk_mode: GPIO17_OUT #power_pin: GPIO5 packages: # network: !include common/ethernet.yaml network: !include common/wifi.yaml device_base: !include common/device_base.yaml ble_proxy: !include common/ble_proxy.yaml esphome: name: ${devicename} friendly_name: ${friendly_name} name_add_mac_suffix: false esp32: board: ${board} framework: type: esp-idf # Enable logging logger: api: # Using settings from common/device_base.yaml ota: # Using settings from common/device_base.yaml esp32_ble_tracker: globals: - id: oled_enabled type: bool restore_value: yes initial_value: 'false' - id: screen_power type: bool restore_value: yes initial_value: 'false' font: - file: 'fonts/CascadiaMonoPL.ttf' id: font1 size: 17 # - file: "gfonts://Roboto" # id: roboto_20 # size: 20 # - file: "gfonts://Material+Symbols+Outlined" # id: icons_50 # size: 50 # glyphs: ["\U0000e425"] # mdi-timer one_wire: - platform: gpio pin: ${one_wire_pin} 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 icon: mdi:console name: "Display" lambda: |- // if (id(screen_power)) { // id(oled).turn_on(); // } else { // id(oled).turn_off(); // } return id(screen_power); turn_on_action: - lambda: |- id(screen_power) = true; turn_off_action: - lambda: |- id(screen_power) = false;