Skip to content

Instantly share code, notes, and snippets.

@koenvervloesem
Created March 31, 2021 06:32
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save koenvervloesem/8ec32fe0e37e2eda28e069e90ba300ef to your computer and use it in GitHub Desktop.
Save koenvervloesem/8ec32fe0e37e2eda28e069e90ba300ef to your computer and use it in GitHub Desktop.
substitutions:
node_name: esphomepoint
node_platform: ESP32
node_board: m5stack-core-esp32
packages:
base: !include common/base.yaml
# Workaround for https://github.com/esphome/issues/issues/1487
<<: !include common/mqtt.yaml
binary_sensor:
- platform: gpio
id: M5_BtnA
pin:
number: 39
inverted: True
on_click:
then:
- display.page.show_previous: m5stack_display
- component.update: m5stack_display
- platform: gpio
id: M5_BtnB
pin:
number: 38
inverted: True
on_click:
then:
- switch.toggle: backlight
- platform: gpio
id: M5_BtnC
pin:
number: 37
inverted: True
on_click:
then:
- display.page.show_next: m5stack_display
- component.update: m5stack_display
- platform: status
id: connection_status
time:
- platform: sntp
id: sntp_time
sensor:
- platform: mqtt_subscribe
id: sensor_freezer_temperature
topic: rtl433/Oregon-THGR122N/1/218/temperature_C
- platform: mqtt_subscribe
id: sensor_freezer_humidity
topic: rtl433/Oregon-THGR122N/1/218/humidity
- platform: mqtt_subscribe
id: sensor_cooler_temperature
topic: rtl433/Prologue-TH/2/151/temperature_C
- platform: mqtt_subscribe
id: sensor_cooler_humidity
topic: rtl433/Prologue-TH/2/151/humidity
- platform: mqtt_subscribe
id: sensor_fridge_temperature
topic: rtl433/Oregon-THGR122N/1/175/temperature_C
- platform: mqtt_subscribe
id: sensor_fridge_humidity
topic: rtl433/Oregon-THGR122N/1/175/humidity
- platform: mqtt_subscribe
id: sensor_outside_temperature
topic: rtl433/Oregon-THGR122N/1/106/temperature_C
- platform: mqtt_subscribe
id: sensor_outside_humidity
topic: rtl433/Oregon-THGR122N/1/106/humidity
- platform: mqtt_subscribe
id: sensor_bedroom_temperature
topic: rtl433/Prologue-TH/1/159/temperature_C
- platform: mqtt_subscribe
id: sensor_bedroom_humidity
topic: rtl433/Prologue-TH/1/159/humidity
- platform: mqtt_subscribe
id: sensor_storage_room_temperature
topic: rtl433/Prologue-TH/3/128/temperature_C
- platform: mqtt_subscribe
id: sensor_storage_room_humidity
topic: rtl433/Prologue-TH/3/128/humidity
- platform: mqtt_subscribe
id: sensor_office_temperature
topic: rtl433/Prologue-TH/3/83/temperature_C
- platform: mqtt_subscribe
id: sensor_office_humidity
topic: rtl433/Prologue-TH/3/83/humidity
- platform: mqtt_subscribe
id: sensor_gym_temperature
topic: rtl433/Prologue-TH/1/123/temperature_C
- platform: mqtt_subscribe
id: sensor_gym_humidity
topic: rtl433/Prologue-TH/1/123/humidity
- platform: mqtt_subscribe
id: sensor_office_co2
topic: co2_esp8266/sensor/mh-z19_co/state
- platform: mqtt_subscribe
id: sensor_pm1
topic: m5stack_air_quality/sensor/pm1/state
- platform: mqtt_subscribe
id: sensor_pm25
topic: m5stack_air_quality/sensor/pm25/state
- platform: mqtt_subscribe
id: sensor_pm10
topic: m5stack_air_quality/sensor/pm10/state
- platform: mqtt_subscribe
id: sensor_garden_shed_temperature
topic: ttn/koan-temperature-app/devices/dragino-lht65-1/up/TempC_DS
- platform: mqtt_subscribe
id: sensor_garden_shed_humidity
topic: ttn/koan-temperature-app/devices/dragino-lht65-1/up/Hum_SHT
switch:
- platform: gpio
pin: 32
name: "${node_name} Backlight"
id: backlight
restore_mode: ALWAYS_ON
font:
# Download Material Design Icons webfont from https://materialdesignicons.com
- file: 'fonts/materialdesignicons-webfont.ttf'
id: font_mdi12
size: 12
glyphs:
- "\U000F05A9" # mdi-wifi
- "\U000F05AA" # mdi-wifi-off
- "\U000F02DC" # mdi-home
- "\U000F087B" # mdi-home-alert
- file: 'fonts/materialdesignicons-webfont.ttf'
id: font_mdi22
size: 22
glyphs:
- "\U000F050F" # mdi-thermometer
- "\U000F058C" # mdi-water
- "\U000F07E4" # mdi-molecule-co2
- "\U000F03A6" # mdi-numeric-1-box-outline
- "\U000F03A9" # mdi-numeric-2-box-outline
- "\U000F0F7E" # mdi-numeric-10-box-outline
# Download Roboto font from https://fonts.google.com/specimen/Roboto
- file: "fonts/Roboto-Medium.ttf"
id: font_roboto_medium12
size: 12
- file: "fonts/Roboto-Medium.ttf"
id: font_roboto_medium16
size: 16
- file: "fonts/Roboto-Medium.ttf"
id: font_roboto_medium22
size: 22
- file: "fonts/Roboto-Regular.ttf"
id: font_roboto_regular12
size: 12
- file: "fonts/Roboto-Regular.ttf"
id: font_roboto_regular16
size: 16
spi:
clk_pin: 18
mosi_pin: 23
miso_pin: 19
display:
- platform: ili9341
id: m5stack_display
model: M5Stack
cs_pin: 14
dc_pin: 27
led_pin: 32
reset_pin: 33
rotation: 0
pages:
- id: page1
lambda: |-
Color WHITE(0,0,0);
Color RED(0,1,1);
Color BLACK(1,1,1);
it.fill(BLACK);
if(wifi_wificomponent->is_connected()) {
it.print(0, 0, id(font_mdi12), WHITE, "\U000F05A9");
it.strftime(it.get_width()/2, 0, id(font_roboto_medium12), WHITE, TextAlign::TOP_CENTER, "%H:%M", id(sntp_time).now());
} else {
it.print(0, 0, id(font_mdi12), RED, "\U000F05AA");
}
if(id(connection_status).state) {
it.print(it.get_width()-12, 0, id(font_mdi12), WHITE, "\U000F02DC");
} else {
it.print(it.get_width()-12, 0, id(font_mdi12), RED, "\U000F087B");
}
it.line(0, it.get_height()/2, it.get_width(), it.get_height()/2, WHITE);
it.line(it.get_width()/3, 12, it.get_width()/3, it.get_height(), WHITE);
it.line(it.get_width()*2/3, 12, it.get_width()*2/3, it.get_height(), WHITE);
it.print(it.get_width()/6-44, it.get_height()*2/15, id(font_mdi22), WHITE, "\U000F050F");
it.printf(it.get_width()/6-22, it.get_height()*2/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.1f", id(sensor_freezer_temperature).state);
it.print(it.get_width()/6-44, it.get_height()*4/15, id(font_mdi22), WHITE, "\U000F058C");
it.printf(it.get_width()/6-22, it.get_height()*4/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.0f", id(sensor_freezer_humidity).state);
it.print(it.get_width()/6, it.get_height()*6/15+6, id(font_roboto_medium16), WHITE, TextAlign::CENTER, "Freezer");
it.print(it.get_width()*3/6-44, it.get_height()*2/15, id(font_mdi22), WHITE, "\U000F050F");
it.printf(it.get_width()*3/6-22, it.get_height()*2/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.1f", id(sensor_cooler_temperature).state);
it.print(it.get_width()*3/6-44, it.get_height()*4/15, id(font_mdi22), WHITE, "\U000F058C");
it.printf(it.get_width()*3/6-22, it.get_height()*4/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.0f", id(sensor_cooler_humidity).state);
it.print(it.get_width()*3/6, it.get_height()*6/15+6, id(font_roboto_medium16), WHITE, TextAlign::CENTER, "Cooler");
it.print(it.get_width()*5/6-44, it.get_height()*2/15, id(font_mdi22), WHITE, "\U000F050F");
it.printf(it.get_width()*5/6-22, it.get_height()*2/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.1f", id(sensor_fridge_temperature).state);
it.print(it.get_width()*5/6-44, it.get_height()*4/15, id(font_mdi22), WHITE, "\U000F058C");
it.printf(it.get_width()*5/6-22, it.get_height()*4/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.0f", id(sensor_fridge_humidity).state);
it.print(it.get_width()*5/6, it.get_height()*6/15+6, id(font_roboto_medium16), WHITE, TextAlign::CENTER, "Fridge");
it.print(it.get_width()/6-44, it.get_height()*9/15, id(font_mdi22), WHITE, "\U000F050F");
it.printf(it.get_width()/6-22, it.get_height()*9/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.1f", id(sensor_outside_temperature).state);
it.print(it.get_width()/6-44, it.get_height()*11/15, id(font_mdi22), WHITE, "\U000F058C");
it.printf(it.get_width()/6-22, it.get_height()*11/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.0f", id(sensor_outside_humidity).state);
it.print(it.get_width()/6, it.get_height()*13/15+6, id(font_roboto_medium16), WHITE, TextAlign::CENTER, "Outside");
it.print(it.get_width()*3/6-44, it.get_height()*9/15, id(font_mdi22), WHITE, "\U000F050F");
it.printf(it.get_width()*3/6-22, it.get_height()*9/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.1f", id(sensor_bedroom_temperature).state);
it.print(it.get_width()*3/6-44, it.get_height()*11/15, id(font_mdi22), WHITE, "\U000F058C");
it.printf(it.get_width()*3/6-22, it.get_height()*11/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.0f", id(sensor_bedroom_humidity).state);
it.print(it.get_width()*3/6, it.get_height()*13/15+6, id(font_roboto_medium16), WHITE, TextAlign::CENTER, "Bedroom");
it.print(it.get_width()*5/6-44, it.get_height()*9/15, id(font_mdi22), WHITE, "\U000F050F");
it.printf(it.get_width()*5/6-22, it.get_height()*9/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.1f", id(sensor_storage_room_temperature).state);
it.print(it.get_width()*5/6-44, it.get_height()*11/15, id(font_mdi22), WHITE, "\U000F058C");
it.printf(it.get_width()*5/6-22, it.get_height()*11/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.0f", id(sensor_storage_room_humidity).state);
it.print(it.get_width()*5/6, it.get_height()*13/15+6, id(font_roboto_medium16), WHITE, TextAlign::CENTER, "Storage room");
- id: page2
lambda: |-
Color WHITE(0,0,0);
Color RED(0,1,1);
Color BLACK(1,1,1);
it.fill(BLACK);
if(wifi_wificomponent->is_connected()) {
it.print(0, 0, id(font_mdi12), WHITE, "\U000F05A9");
it.strftime(it.get_width()/2, 0, id(font_roboto_medium12), WHITE, TextAlign::TOP_CENTER, "%H:%M", id(sntp_time).now());
} else {
it.print(0, 0, id(font_mdi12), RED, "\U000F05AA");
}
if(id(connection_status).state) {
it.print(it.get_width()-12, 0, id(font_mdi12), WHITE, "\U000F02DC");
} else {
it.print(it.get_width()-12, 0, id(font_mdi12), RED, "\U000F087B");
}
it.line(0, it.get_height()/2, it.get_width(), it.get_height()/2, WHITE);
it.line(it.get_width()/3, 12, it.get_width()/3, it.get_height(), WHITE);
it.line(it.get_width()*2/3, 12, it.get_width()*2/3, it.get_height(), WHITE);
it.print(it.get_width()/6-44, it.get_height()*2/15, id(font_mdi22), WHITE, "\U000F050F");
it.printf(it.get_width()/6-22, it.get_height()*2/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.1f", id(sensor_office_temperature).state);
it.print(it.get_width()/6-44, it.get_height()*4/15, id(font_mdi22), WHITE, "\U000F058C");
it.printf(it.get_width()/6-22, it.get_height()*4/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.0f", id(sensor_office_humidity).state);
it.print(it.get_width()/6, it.get_height()*6/15+6, id(font_roboto_medium16), WHITE, TextAlign::CENTER, "Office");
it.print(it.get_width()*3/6-44, it.get_height()*2/15, id(font_mdi22), WHITE, "\U000F07E4");
it.printf(it.get_width()*3/6-22, it.get_height()*2/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.0f", id(sensor_office_co2).state);
it.print(it.get_width()*3/6-44, it.get_height()*4/15, id(font_mdi22), WHITE, "\U000F03A6");
it.printf(it.get_width()*3/6-22, it.get_height()*4/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.0f", id(sensor_pm1).state);
it.print(it.get_width()*3/6, it.get_height()*6/15+6, id(font_roboto_medium16), WHITE, TextAlign::CENTER, "Air quality");
it.print(it.get_width()*5/6-44, it.get_height()*2/15, id(font_mdi22), WHITE, "\U000F03A9");
it.printf(it.get_width()*5/6-22, it.get_height()*2/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.0f", id(sensor_pm25).state);
it.print(it.get_width()*5/6-44, it.get_height()*4/15, id(font_mdi22), WHITE, "\U000F0F7E");
it.printf(it.get_width()*5/6-22, it.get_height()*4/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.0f", id(sensor_pm10).state);
it.print(it.get_width()*5/6, it.get_height()*6/15+6, id(font_roboto_medium16), WHITE, TextAlign::CENTER, "Air quality");
it.print(it.get_width()/6-44, it.get_height()*9/15, id(font_mdi22), WHITE, "\U000F050F");
it.printf(it.get_width()/6-22, it.get_height()*9/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.1f", id(sensor_gym_temperature).state);
it.print(it.get_width()/6-44, it.get_height()*11/15, id(font_mdi22), WHITE, "\U000F058C");
it.printf(it.get_width()/6-22, it.get_height()*11/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.0f", id(sensor_gym_humidity).state);
it.print(it.get_width()/6, it.get_height()*13/15+6, id(font_roboto_medium16), WHITE, TextAlign::CENTER, "Gym");
it.print(it.get_width()*3/6-44, it.get_height()*9/15, id(font_mdi22), WHITE, "\U000F050F");
it.printf(it.get_width()*3/6-22, it.get_height()*9/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.1f", id(sensor_garden_shed_temperature).state);
it.print(it.get_width()*3/6-44, it.get_height()*11/15, id(font_mdi22), WHITE, "\U000F058C");
it.printf(it.get_width()*3/6-22, it.get_height()*11/15, id(font_roboto_medium22), WHITE, TextAlign::LEFT, "%.0f", id(sensor_garden_shed_humidity).state);
it.print(it.get_width()*3/6, it.get_height()*13/15+6, id(font_roboto_medium16), WHITE, TextAlign::CENTER, "Garden shed");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment