I have just received another TTGO ESP32+st7789v display that I would like to be a remote display to my generic_thermostat please?
I would like it to repeat (display) the current temperature, potentially as reported by a Zigbee temp sensor and the target temperature, as held by the generic_thermostat function on HA.
I have duplicated / tweaked the code from my CO2-sensor that uses the same ESP / Display platform so I can play with it and it’s currently displaying blank for page one (correct as there is no CO2 sensor connected) and the current WiFi setting as page two (so I’m happy the display is working etc).
So I don’t really know where to start, eg, should / could the required code sit on the ESP32 and pull the target and actual temps from generic_thermostat somehow or would I use HA (automation or yaml in config etc) to push the values to the display please?
I would have to get a coding mate to help me with the actual code but I would like to know where best to start as he’s not familiar with HA etc.
FWIW, this is the code I have currently and I’ve left the CO2 stuff in in the hope it helps my mate re-code. eg, I could use the colour functions to indicate ‘heating’ (red) etc?
esphome:
name: lounge-thermostat
platform: ESP32
board: "featheresp32"
# Enable Home Assistant API
api:
ota:
wifi:
ssid: !secret wifi_k_ssid
password: !secret wifi_k_password
# use_address: 192.168.0.202
manual_ip:
static_ip: 192.168.0.195
gateway: 192.168.0.100
subnet: 255.255.255.0
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "lounge thermostat Hotspot"
password: "1234"
captive_portal:
logger:
level: DEBUG
logs:
component: ERROR
# CO2 sensor
uart:
rx_pin: 27
tx_pin: 26
baud_rate: 9600
# Dipslay driver: ST7789
spi:
clk_pin: GPIO18
mosi_pin: GPIO19
font:
- file: "Oswald-Light.ttf"
id: font_70
size: 70
glyphs: 0123456789 # Only used for CO2 level
- file: "Oswald-Light.ttf"
id: font_30
size: 30
color:
- id: color_black
red: 0%
green: 0%
blue: 0%
white: 0%
- id: color_green
red: 0%
green: 100%
blue: 0%
- id: color_yellow
red: 100%
green: 100%
blue: 0%
- id: color_orange
red: 100%
green: 55%
blue: 0%
- id: color_red
red: 100%
green: 0%
blue: 0%
- id: color_white
red: 100%
green: 100%
blue: 100%
display:
- platform: st7789v
model: TTGO TDisplay 135x240 # added bit
id: my_display
backlight_pin: GPIO4
# allow_other_uses: true
cs_pin: GPIO5
dc_pin: GPIO16
reset_pin: GPIO23
# brightness: 100%
rotation: 270
pages:
# Page 1: Current CO2 levels
# 0 - 1000 -> Green
# 1000 - 1600 -> Yellow
# 1600 - 2000 -> Orange
# >2000 -> Red
- id: page1
lambda: |-
if(!id(co2_sensor_3).has_state() ){
it.print(
it.get_width()/2,
it.get_height()/2,
id(font_70),
color_white,
TextAlign::CENTER,
"Starting..."
);
return;
}
auto bg_color = id(color_black);
auto text_color = id(color_green);
auto co2 = id(co2_sensor_3).state;
if(co2 > 1000) text_color = id(color_yellow);
if(co2 > 1600) text_color = id(color_orange);
if(co2 > 2000){
text_color = id(color_white);
bg_color = id(color_red);
}
it.filled_rectangle(0, 0, it.get_width(), it.get_height(), bg_color);
it.printf(
it.get_width()/2,
it.get_height()/2,
id(font_70),
text_color,
TextAlign::CENTER,
"%.0f",
co2
);
# Page 2: WiFi information
- id: page2
lambda: |-
it.print(
0, 0,
id(font_30),
id(color_white),
"WiFi details"
);
it.printf(
0, 30,
id(font_30),
id(color_green),
"%s",
id(wifi_ssid).state.c_str()
);
it.printf(
0, 60,
id(font_30),
id(color_yellow),
"%s",
id(wifi_ip_addr).state.c_str()
);
#switch:
# - platform: gpio
# pin: GPIO4
# allow_other_uses: true
# id: backlight
# internal: true
sensor:
- platform: mhz19
co2:
name: "CO2 Sensor 3"
id: "co2_sensor_3"
temperature:
name: "Lounge thermostat temperature"
internal: true
update_interval: 60s
automatic_baseline_calibration: false
- platform: wifi_signal
name: "Lounge thermostat WiFi"
update_interval: 60s
text_sensor:
- platform: wifi_info
ip_address:
internal: true
id: wifi_ip_addr
ssid:
internal: true
id: wifi_ssid
binary_sensor:
# Button to cycle through pages on the display
- platform: gpio
pin:
number: GPIO35
inverted: true
id: button_1
on_click:
then:
- display.page.show_next: my_display
- component.update: my_display
# Button to toggle the backlight (for use at night)
#- platform: gpio
# pin:
# number: GPIO0
# inverted: true
# id: button_2
# on_click:
# then:
# - switch.toggle: backlight
button:
- platform: restart
name: "Lounge thermostat restart"