packages: - !include common/wifi.yaml - !include common/canbus.yaml - !include common/felicityinverter.yaml substitutions: name: sthome-ut9 friendly_name: "sthome-ut9" esphome: name: "${name}" friendly_name: "${friendly_name}" esp32: # board: nodemcu-32s board: esp32dev framework: #type: arduino type: esp-idf debug: update_interval: 5s # Enable logging logger: level: DEBUG logs: canbus: INFO # Enable Home Assistant API api: encryption: key: "LI7j37zs9HsWNsUZ5c83leThmhHsgIVReAPoc9U6pVU=" ota: - platform: esphome password: "8ebd5bcefbdc833a5f6ddc4e8ba56e39" wifi: power_save_mode: none # stops display flickering manual_ip: static_ip: 10.0.2.9 # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "${name} Fallback Hotspot" password: "iZxjpw7ucRs4" captive_portal: sun: id: sun_sensor latitude: !secret latitude longitude: !secret longitude time: - platform: homeassistant text_sensor: - platform: debug device: name: "Device Info" reset_reason: name: "Reset Reason" # human readable update text sensor from sensor:uptime - platform: template name: Uptime id: uptime_human icon: mdi:clock-start #define OUTPUT_R1 16 #define OUTPUT_R2 17 #define OUTPUT_R3 18 #define OUTPUT_R4 19 switch: - platform: restart name: "${name} Restart" id: "restart_switch" - platform: gpio pin: number: GPIO16 inverted: true id: relay1 name: "Floodlights Backyard" icon: "mdi:light-flood-down" restore_mode: RESTORE_DEFAULT_OFF # the backyard floodlight auto turns off in 4min 14 sec. So we need to switch relay off just before or at this time # TODO: remove or extend auto turn off to >= 10min on_turn_on: - delay: 250s - switch.turn_off: relay1 - platform: gpio pin: number: GPIO17 inverted: true id: relay2 name: "Relay 2" icon: "mdi:run-fast" restore_mode: RESTORE_DEFAULT_OFF on_turn_on: - delay: 1000ms - switch.turn_off: relay2 - platform: gpio pin: number: GPIO18 inverted: true id: relay3 name: "Relay 3" icon: "mdi:run-fast" restore_mode: RESTORE_DEFAULT_OFF on_turn_on: - delay: 1000ms - switch.turn_off: relay3 - platform: gpio pin: number: GPIO19 inverted: true id: relay4 name: "Alarm Zone 4" icon: "mdi:alarm-light-outline" restore_mode: RESTORE_DEFAULT_OFF on_turn_on: - if: condition: - lambda: |- double sun_elevation = id(sun_sensor).elevation(); return (sun_elevation <= -6); // -6° = civil twilight, -12° = nautical twilight, -18° = astronomical twilight #- sun.is_below_horizon: then: - switch.turn_on: relay1 - if: condition: - binary_sensor.is_on: floodlight_test then: - switch.turn_on: relay1 - delay: 30s - switch.turn_off: relay4 # define DIGITAL_D1 04 binary_sensor: - platform: gpio # device_class: light id: floodlight_test pin: number: GPIO04 mode: input: true pullup: true filters: - delayed_off: 100ms name: "Floodlights Test Mode" icon: "mdi:lightbulb-on-outline" #define ANALOG_A1 33 #define ANALOG_A2 32 #define ANALOG_A3 35 #define ANALOG_A4 34 #define ANALOG_A5 39 #define ANALOG_A6 36 sensor: # - platform: adc # pin: 35 # name: "Alarm Signal" # id: alarm_signal # update_interval: 2000ms # attenuation: 12db # sampling_mode: avg # filters: # - lambda: # if (x >= 3.11) { # return x * 1.60256; # } else if (x <= 0.25) { # return 0; # } else { # return x * 1.51; # } # on_value: # then: # # switch on floodlights # lambda: |- # if (id(alarm_signal).state > 1.5) { # id(relay1).turn_on(); # } # human readable uptime sensor output to the text sensor above - platform: uptime name: Uptime in Days id: uptime_sensor_days update_interval: 10s on_raw_value: then: - text_sensor.template.publish: id: uptime_human state: !lambda |- int seconds = round(id(uptime_sensor_days).raw_state); int days = seconds / (24 * 3600); seconds = seconds % (24 * 3600); int hours = seconds / 3600; seconds = seconds % 3600; int minutes = seconds / 60; seconds = seconds % 60; auto days_str = std::to_string(days); auto hours_str = std::to_string(hours); auto minutes_str = std::to_string(minutes); auto seconds_str = std::to_string(seconds); return ( (days ? days_str + "d " : "") + (hours ? hours_str + "h " : "") + (minutes ? minutes_str + "m " : "") + (seconds_str + "s") ).c_str();