pipish/m5paper.yaml

289 lines
7.3 KiB
YAML

esphome:
name: ${device_id}
name_add_mac_suffix: true
project:
name: "${project_name}"
version: "${project_version}"
includes:
- render.h
# on_boot:
# - priority: -100.0
# then:
# - delay: ${default_update_interval}
# - component.update: m5paper_display
# - delay: 1s
# - bm8563.apply_sleep_duration
# - m5paper.shutdown_main_power
# - deep_sleep.enter:
# sleep_duration: 30s
esp32:
board: m5stack-grey
framework:
type: arduino
external_components:
- source:
type: local
path: components
logger:
level: DEBUG
baud_rate: 921600
psram:
api:
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
power_save_mode: "HIGH"
fast_connect: true
globals:
- id: material_icons_map
type: std::map<std::string, std::string>
restore_value: no
initial_value: |
{
{"mdi-weather-night", "󰖔"},
{"mdi-weather-cloudy", "󰖐"},
{"mdi-weather-cloudy-alert", "󰼯"},
{"mdi-weather-fog", "󰖑"},
{"mdi-weather-hail", "󰖒"},
{"mdi-weather-lightning-rainy", "󰙾"},
{"mdi-weather-lightning", "󰖓"},
{"mdi-weather-partly-cloudy", "󰖕"},
{"mdi-weather-night-partly-cloudy", "󰼱"},
{"mdi-weather-pouring", "󰖖"},
{"mdi-weather-rainy", "󰖗"},
{"mdi-weather-snowy-rainy", "󰙿"},
{"mdi-weather-snowy", "󰖘"},
{"mdi-weather-sunny", "󰖙"},
{"mdi-weather-windy-variant", "󰖞"},
{"mdi-weather-windy", "󰖝"},
{"mdi-cloud-question", "󰨹"},
{"mdi-thermometer", "󰔏"},
{"mdi-water-percent", "󰖎"},
{"mdi-molecule-co2", "󰟤"},
{"mdi-wind-power-outline", "󱪉"},
{"mdi-home-outline", "󰚡"},
{"mdi-tree-outline", "󰹩"},
{"mdi-gauge", "󰊚"},
{"mdi-battery-high", "󱊣"},
{"mdi-battery-medium", "󱊢"},
{"mdi-battery-low", "󱊡"},
{"mdi-battery-alert-variant-outline", "󱃍"},
{"mdi-battery-charging-high", "󱊦"},
{"mdi-battery-unknown", "󰂑"},
{"mdi-shield-outline", "󰒙"},
{"mdi-shield-home-outline", "󰳋"},
{"mdi-shield-lock-outline", "󰳌"},
{"mdi-shield-moon-outline", "󱠩"},
{"mdi-shield-alert-outline", "󰻍"},
{"mdi-molecule-co2", "󰟤"},
{"mdi-radioactive", "󰐼"},
{"mdi-numeric-0-circle-outline", "󰲟"},
{"mdi-numeric-1-circle-outline", "󰲡"},
{"mdi-numeric-2-circle-outline", "󰲣"},
{"mdi-numeric-3-circle-outline", "󰲥"},
{"mdi-numeric-4-circle-outline", "󰲧"},
{"mdi-numeric-5-circle-outline", "󰲩"},
{"mdi-numeric-6-circle-outline", "󰲫"},
{"mdi-numeric-7-circle-outline", "󰲭"},
{"mdi-numeric-8-circle-outline", "󰲯"},
{"mdi-numeric-9-plus-circle-outline", "󰲳"},
}
font:
- file: 'gfonts://Roboto'
id: normal_font
size: 120
- file: 'gfonts://Roboto'
id: small_font
size: 50
- file: 'gfonts://Roboto'
id: clock_font
size: 260
glyphs: "0123456789:"
- file: "fonts/materialdesignicons-webfont.ttf"
id: battery_font
size: 40
glyphs: [
'󱊢', #mdi-battery-medium
'󱊡', #mdi-battery-low
'󱊣', # mdi-battery-high
'󱃍', #mdi-battery-alert-variant-outline
'󱊦', #mdi-battery-charging-high
'󰂑', #mdi-battery-unknown
]
spi:
clk_pin: GPIO14
mosi_pin: GPIO12
miso_pin: GPIO13
i2c:
sda: GPIO21
scl: GPIO22
display:
- platform: it8951e
id: m5paper_display
cs_pin: GPIO15
reset_pin: GPIO23
reset_duration: 5ms
busy_pin: GPIO27
rotation: 0
reversed: False
update_interval: never
lambda: |-
render(it);
touchscreen:
- platform: gt911
display: m5paper_display
id: gt911_touchscreen
interrupt_pin: GPIO36
switch:
- platform: restart
id: restart_switch
name: ${device_name} restart
- platform: gpio
pin: 32
name: "led"
inverted: true
time:
- platform: homeassistant
id: homeassistant_time
on_time_sync:
- bm8563.write_time
- platform: bm8563
id: rtc_time
sleep_duration: 250s
# on_time:
# - seconds: /6
# then:
# - component.update: m5paper_display
script:
- id: suspend
then:
- component.update: m5paper_display
- delay: 2s
- bm8563.apply_sleep_duration
- m5paper.shutdown_main_power
- delay: 30s
- deep_sleep.enter:
sleep_duration: ${sleep_duration}
interval:
- interval: 1s
then:
- if:
condition:
and:
# - lambda: "return !std::isnan(id(m5paper_battery_level).state);"
- lambda: "return id(rtc_time).now().is_valid();"
- lambda: "return !std::isnan(id(outside_temperature).state);"
- lambda: "return !std::isnan(id(lounge_temperature).state);"
then:
- script.execute: suspend
- interval: 3s
then:
- delay: 30s
- script.execute: suspend
m5paper:
battery_power_pin: GPIO5
main_power_pin: GPIO2
sensor:
- platform: adc
disabled_by_default: true
pin: GPIO35
name: ${device_name} battery voltage
id: m5paper_battery_voltage
update_interval: ${default_update_interval}
attenuation: 11db
filters:
- multiply: 2 #1,27272727
- platform: sht3xd
address: 0x44
temperature:
name: ${device_name} temperature
id: m5paper_temperature
device_class: "temperature"
state_class: "measurement"
icon: mdi:thermometer
humidity:
name: ${device_name} humidity
id: m5paper_humidity
device_class: "humidity"
state_class: "measurement"
icon: mdi:water-percent
update_interval: ${default_update_interval}
- platform: template
name: ${device_name} battery level
id: m5paper_battery_level
unit_of_measurement: '%'
device_class: "battery"
state_class: "measurement"
icon: mdi:battery-high
update_interval: 20s
lambda: |-
constexpr float min_level = 3.52;
constexpr float max_level = 4.15;
return ((id(m5paper_battery_voltage).state - min_level) / (max_level - min_level)) * 100.00;
filters:
- clamp:
min_value: 0
max_value: 100
- platform: homeassistant
name: Outside temperature
id: outside_temperature
entity_id: sensor.ruuvitag_1a2d_temperature
- platform: homeassistant
name: Lounge temperature
id: lounge_temperature
entity_id: sensor.ruuvitag_963b_temperature
- platform: homeassistant
name: solar power
id: solar_power
entity_id: sensor.solax_pv1_power
- platform: uptime
id: uptime_sensor
name: Uptime
update_interval: 3s
binary_sensor:
- platform: gpio
name: ${device_name} right button
id: right_button
icon: mdi:gesture-tap-button
pin:
number: GPIO37
inverted: true
- platform: gpio
name: ${device_name} left button
icon: mdi:gesture-tap-button
pin:
number: GPIO39
inverted: true
- platform: gpio
name: ${device_name} BTN/PWR button
icon: mdi:gesture-tap-button
pin:
number: GPIO38
inverted: true
deep_sleep:
run_duration: 120s
sleep_duration: ${sleep_duration}