355 lines
8.1 KiB
YAML
355 lines
8.1 KiB
YAML
esphome:
|
|
name: thermostat
|
|
|
|
esp32:
|
|
board: esp32-s3-devkitc-1
|
|
variant: esp32s3
|
|
framework:
|
|
type: esp-idf
|
|
sdkconfig_options:
|
|
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: y
|
|
CONFIG_ESP32S3_DATA_CACHE_64KB: y
|
|
CONFIG_SPIRAM_FETCH_INSTRUCTIONS: y
|
|
CONFIG_SPIRAM_RODATA: y
|
|
|
|
psram:
|
|
mode: octal
|
|
speed: 80MHz
|
|
|
|
# Enable logging
|
|
logger:
|
|
|
|
# Enable Home Assistant API
|
|
api:
|
|
password: ""
|
|
|
|
ota:
|
|
- platform: esphome
|
|
password: ""
|
|
|
|
wifi:
|
|
ssid: "Cochrun"
|
|
password: "GreasyChicken784"
|
|
|
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
|
ap:
|
|
ssid: "Thermostat Fallback Hotspot"
|
|
password: "RUfAhbEfZmOU"
|
|
|
|
captive_portal:
|
|
|
|
i2c:
|
|
sda: GPIO08
|
|
scl: GPIO09
|
|
scan: True
|
|
id: bus_a
|
|
|
|
# uart:
|
|
# tx_pin: GPIO27
|
|
# rx_pin: GPIO26
|
|
# baud_rate: 115200
|
|
|
|
sensor:
|
|
- platform: bme280_i2c
|
|
temperature:
|
|
name: "Temperature"
|
|
id: temperature
|
|
pressure:
|
|
name: "Pressure"
|
|
id: pressure
|
|
humidity:
|
|
name: "Humidity"
|
|
id: humidity
|
|
i2c_id: bus_a
|
|
address: 0x76
|
|
|
|
# dfrobot_sen0395:
|
|
|
|
# binary_sensor:
|
|
# # Information coming from uart bus
|
|
# - platform: dfrobot_sen0395
|
|
# id: mmwave_uart
|
|
# name: Mmwave UART
|
|
|
|
# # on_...:
|
|
# # - dfrobot_sen0395.settings:
|
|
# # factory_reset: true
|
|
# # detection_segments:
|
|
# # # Define between one and four segments
|
|
# # - [0cm, 3m]
|
|
# # - [5.1m, 6.6m]
|
|
# # output_latency:
|
|
# # delay_after_detect: 0s
|
|
# # delay_after_disappear: 0s
|
|
# # sensitivity: 7
|
|
|
|
# # Information coming from dedicated gpio (IO2)
|
|
# - platform: gpio
|
|
# name: Mmwave GPIO
|
|
# device_class: motion
|
|
# pin:
|
|
# number: GPIO25
|
|
# mode: INPUT_PULLDOWN
|
|
|
|
switch:
|
|
# # Switch to turn on/off detection
|
|
# - platform: dfrobot_sen0395
|
|
# type: sensor_active
|
|
# name: Mmwave Active
|
|
|
|
# - platform: dfrobot_sen0395
|
|
# type: presence_via_uart
|
|
# name: Mmwave UART active
|
|
# restore_mode: always_on
|
|
|
|
# - platform: dfrobot_sen0395
|
|
# type: turn_on_led
|
|
# name: Mmwave Led
|
|
# restore_mode: always_on
|
|
# icon: "mdi:led-on"
|
|
|
|
# - platform: dfrobot_sen0395
|
|
# type: start_after_boot
|
|
# name: Mmwave Start
|
|
# restore_mode: always_on
|
|
# on_turn_on:
|
|
# then:
|
|
# - number.set:
|
|
# id: sensitivity
|
|
# value: !lambda |-
|
|
# return id(mmwave_uart).state + 1;
|
|
|
|
- platform: gpio
|
|
pin: 16
|
|
id: heater
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
- platform: gpio
|
|
pin: 44
|
|
id: ac
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
- platform: gpio
|
|
pin: 15
|
|
id: fan
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
# button:
|
|
# - platform: template
|
|
# id: inner_button
|
|
# on_press:
|
|
# - dfrobot_sen0395.settings:
|
|
# sensitivity: !lambda |-
|
|
# return id(sensitivity).state - 1;
|
|
|
|
# - platform: template
|
|
# id: inner_distance
|
|
# on_press:
|
|
# - dfrobot_sen0395.settings:
|
|
# detection_segments:
|
|
# - [0cm, 3.3m]
|
|
|
|
# number:
|
|
# - platform: template
|
|
# id: sensitivity
|
|
# name: Mmwave sensitivity
|
|
# optimistic: true
|
|
# min_value: 1
|
|
# max_value: 10
|
|
# step: 1
|
|
# mode: slider
|
|
# set_action:
|
|
# - button.press:
|
|
# id: inner_button
|
|
|
|
# - platform: template
|
|
# id: distance
|
|
# name: Mmwave distance
|
|
# optimistic: true
|
|
# min_value: 0.0
|
|
# max_value: 9.0
|
|
# step: 0.1
|
|
# mode: slider
|
|
# set_action:
|
|
# - button.press:
|
|
# id: inner_distance
|
|
|
|
climate:
|
|
- platform: thermostat
|
|
name: "Thermostat"
|
|
sensor: temperature
|
|
humidity_sensor: humidity
|
|
min_cooling_off_time: 10s
|
|
min_cooling_run_time: 10s
|
|
min_heating_off_time: 10s
|
|
min_heating_run_time: 10s
|
|
min_idle_time: 30s
|
|
cool_action:
|
|
- switch.turn_off: heater
|
|
- switch.turn_on: ac
|
|
- switch.turn_on: fan
|
|
heat_action:
|
|
- switch.turn_off: ac
|
|
- switch.turn_on: heater
|
|
- switch.turn_on: fan
|
|
idle_action:
|
|
- switch.turn_off: ac
|
|
- switch.turn_off: heater
|
|
- switch.turn_off: fan
|
|
default_preset: Home
|
|
preset:
|
|
- name: Home
|
|
default_target_temperature_low: 67 °F
|
|
default_target_temperature_high: 76 °F
|
|
|
|
# Example minimal configuration entry
|
|
display:
|
|
- platform: rpi_dpi_rgb
|
|
id: my_display
|
|
auto_clear_enabled: false
|
|
update_interval: never
|
|
color_order: RGB
|
|
pclk_frequency: 14MHz
|
|
dimensions:
|
|
width: 800
|
|
height: 480
|
|
de_pin:
|
|
number: 5
|
|
hsync_pin:
|
|
number: 46
|
|
ignore_strapping_warning: true
|
|
vsync_pin:
|
|
number: 3
|
|
ignore_strapping_warning: true
|
|
pclk_pin: 7
|
|
pclk_inverted: false
|
|
hsync_back_porch: 10 #30
|
|
hsync_front_porch: 20 #210
|
|
hsync_pulse_width: 10 #30
|
|
vsync_back_porch: 10 #4
|
|
vsync_front_porch: 10 #4
|
|
vsync_pulse_width: 10 #4
|
|
data_pins:
|
|
red:
|
|
- 1 #r3
|
|
- 2 #r4
|
|
- 42 #r5
|
|
- 41 #r6
|
|
- 40 #r7
|
|
blue:
|
|
- 14 #b3
|
|
- 38 #b4
|
|
- 18 #b5
|
|
- 17 #b6
|
|
- 10 #b7
|
|
green:
|
|
- 39 #g2
|
|
- 0 #g3
|
|
- 45 #g4
|
|
- 48 #g5
|
|
- 47 #g6
|
|
- 21 #g7
|
|
|
|
font:
|
|
- file: "gfonts://Roboto"
|
|
id: chu_nano
|
|
size: 12
|
|
|
|
touchscreen:
|
|
platform: gt911
|
|
id: my_touch
|
|
interrupt_pin: GPIO4
|
|
on_touch:
|
|
- lambda: |-
|
|
ESP_LOGI("cal", "x=%d, y=%d, x_raw=%d, y_raw=%0d",
|
|
touch.x,
|
|
touch.y,
|
|
touch.x_raw,
|
|
touch.y_raw
|
|
);
|
|
|
|
lvgl:
|
|
buffer_size: 25%
|
|
pages:
|
|
- id: clock_page
|
|
widgets:
|
|
- obj: # Clock container
|
|
height: size_content
|
|
width: 800 #240
|
|
align: CENTER
|
|
pad_all: 0
|
|
border_width: 0
|
|
bg_color: 0xFFFFFF
|
|
widgets:
|
|
- meter: # Clock face
|
|
height: 400 #220
|
|
width: 400 #220
|
|
align: center
|
|
bg_opa: TRANSP
|
|
text_color: 0x000000
|
|
scales:
|
|
- ticks: # minutes scale
|
|
width: 1
|
|
count: 61
|
|
length: 10
|
|
color: 0x000000
|
|
range_from: 0
|
|
range_to: 60
|
|
angle_range: 360
|
|
rotation: 270
|
|
indicators:
|
|
- line:
|
|
id: minute_hand
|
|
width: 3
|
|
color: 0xa6a6a6
|
|
r_mod: -4
|
|
value: 0
|
|
- ticks: # hours scale
|
|
width: 1
|
|
count: 12
|
|
length: 1
|
|
major:
|
|
stride: 1
|
|
width: 4
|
|
length: 8
|
|
color: 0xC0C0C0
|
|
label_gap: 12
|
|
angle_range: 330
|
|
rotation: 300
|
|
range_from: 1
|
|
range_to: 12
|
|
- indicators:
|
|
- line:
|
|
id: hour_hand
|
|
width: 5
|
|
color: 0xa6a6a6
|
|
r_mod: -30
|
|
value: 0
|
|
angle_range: 360
|
|
rotation: 270
|
|
range_from: 0
|
|
range_to: 720
|
|
|
|
time:
|
|
- platform: homeassistant
|
|
id: time_comp
|
|
|
|
interval:
|
|
- interval: 30s
|
|
then:
|
|
if:
|
|
condition:
|
|
time.has_time:
|
|
then:
|
|
- script.execute: time_update
|
|
|
|
script:
|
|
- id: time_update
|
|
then:
|
|
- lvgl.indicator.update:
|
|
id: minute_hand
|
|
value: !lambda |-
|
|
return id(time_comp).now().minute;
|
|
- lvgl.indicator.update:
|
|
id: hour_hand
|
|
value: !lambda |-
|
|
auto now = id(time_comp).now();
|
|
return std::fmod(now.hour, 12) * 60 + now.minute;
|