- Hardware (pick one):
- LilyGo T-Display
- LilyGo T-Display T4
- LilyGo T-Display S3
- M5Stack Fire
- M5Stick C
- Generic ESP32 + Supported display
- Software:
- ESPHome (required)
- Home Assistant (required for now, MQTT support is coming soon)
- Spotcast - (optional)
- Install
- Include
- Setup Device
- Setup Home
- Setup Media Player Group
- Setup homeThing
- Upload
- Connect
- Done!
Note: To use fonts and images in this project, you will need to have the python pillow package installed. If you are running this project as a Home Assistant add-on or with the official ESPHome docker image, the package should already be installed. Otherwise, you can install it using the command
pip install "pillow==10.1.0"
. For more information, refer to the ESPHome documentation on images.
external_components:
- source: # homeThing, display setup, and now playing app
type: git
url: https://github.com/landonr/homeThing
ref: main
refresh: 0s
components: [homeThing, homeThingDisplayState, homeThingApp, homeThingAppNowPlaying]
- source:
type: git
url: https://github.com/landonr/esphome-components
ref: main
refresh: 0s
components: [
homeassistant_component,
homeassistant_media_player,
media_player_source,
media_player_source_sonos,
media_player_source_spotify,
media_player_source_custom
]
these packages are for a Lilygo TDisplay with a rotary encoder and battery
packages:
remote_package:
url: https://github.com/landonr/homeThing
ref: main
files: [
common/device_base.yaml, # defines api, ota, free memory and uptime sensor
common/ipod/lilygo_tdisplay_ipod_backlight.yaml, # used for toggling backlight
common/ipod/lilygo_tdisplay_ipod_battery.yaml, # used for battery percent
common/ipod/lilygo_tdisplay_ipod_binary_sensor.yaml, # used for button controls
common/ipod/lilygo_tdisplay_ipod_rotary.yaml, # used for rotary controls
common/ipod/lilygo_tdisplay_ipod_sleep.yaml, # required for device to sleep
common/fonts.yaml, # default font
common/icon_fonts.yaml # material icons
common/images.yaml, # boot screen image
]
refresh: 0s
- detailed information is here https://github.com/landonr/esphome-components
- example
switch:
- platform: homeassistant_component
entity_id: "switch.oven_fan"
name: "Oven Fan"
id: oven_fan_switch
text_sensor:
- platform: homeassistant
entity_id: "sensor.vancouver_forecast"
name: "Weather"
id: sensor_weather
# sonos favorite source
media_player_source_sonos:
id: sonos
media_player:
- platform: homeassistant_media_player
name: Beam
entity_id: "media_player.beam"
id: media_player_beam
type: speaker
sources:
- id: sonos
type: sonos
- platform: homeassistant_media_player
name: TV
entity_id: "media_player.55_tcl_roku_tv"
id: media_player_tv
type: roku
soundbar:
speaker: media_player_beam
# media player menu - replace with your IDs
homeassistant_media_player:
id: media_group_component
media_players:
- id: media_player_beam
type: speaker
- id: media_player_tv
type: roku
commands: # you can add custom commands to the now playing menu
name: "group all"
command:
- homeassistant.service:
service: script.sonos_group_all
homeThingAppNowPlaying:
id: now_playing
media_player_group: media_group_component
display: my_display
display_state: display_state_id
full config documentation here
# homeThing config
homeThingDisplayState:
id: display_state_id
draw_battery_level: true
font_small: small_font
font_medium: medium_font
font_large: large_font
font_large_heavy: large_font
font_material_large: material_font_large
font_material_small: material_font_small
homeThing:
id: homeThingMenu
sleep_switch: sleep_toggle #optional
backlight: backlight #optional
battery: #optional
battery_percent: battery_percent
charging: charging
display_state: display_state_id
apps: # you can have multiple apps
- now_playing
display: my_display # required
on_redraw: # required
then:
component.update: my_display
display_state:
draw_battery_level: true # only needed if you have a battery
# probably leave these alone
font_small: small_font
font_medium: medium_font
font_large: large_font
font_large_heavy: large_heavy_font
font_material_large: material_font_large
font_material_small: material_font_small
screens: # you can have multiple screens
- name: Kitchen Screen
entities:
- id: oven_fan
type: switch
- id: sensor_weather
type: text_sensor
- name: Settings Screen
show_version: True # defaults to false
entities:
- id: backlight
type: light
- id: "restart_switch"
type: switch
- id: wifi_ssid
type: text_sensor
- id: wifi_signal_percent
type: sensor
- id: wifi_ip
type: text_sensor