Skip to content

Commit af1342c

Browse files
committed
0.8
1 parent 0824a79 commit af1342c

File tree

73 files changed

+7194
-3423
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+7194
-3423
lines changed

README.md

Lines changed: 64 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,36 @@
22

33
**A visual drag-and-drop editor for ESPHome displays (E-Ink, OLED, LCD, Touch), running right inside Home Assistant.**
44

5-
6-
75
<div align="center">
8-
<a href="https://youtu.be/bzCbiUypN_4">
9-
<img src="screenshots/Reterminal_Designer_v05.gif" alt="Watch the video">
6+
<a href="https://youtu.be/3AVGze6F_5o">
7+
<img src="https://img.youtube.com/vi/3AVGze6F_5o/maxresdefault.jpg" alt="Watch the v0.8.0 Feature Walkthrough" width="600">
108
</a>
119
<br>
12-
<small>Click to watch the demo video</small>
10+
<a href="https://youtu.be/3AVGze6F_5o">
11+
<img src="https://img.shields.io/badge/YouTube-Watch%20v0.8.0%20Overview-red?style=for-the-badge&logo=youtube&logoColor=white" alt="Watch Video">
12+
</a>
13+
<br>
14+
<strong>▶️ Click to watch the latest feature walkthrough</strong>
1315
</div>
1416

17+
**No more hand-coding ESPHome display lambdas! 🎉**
1518

19+
---
20+
21+
22+
---
1623

17-
**No more hand-coding ESPHome display lambdas! 🎉**
1824

1925
Building a custom smart display for Home Assistant? Frustrated with manually writing C++ lambdas and guessing coordinates?
2026

2127
Design ESPHome displays right inside Home Assistant. This HACS integration offers a drag-and-drop editor with direct access to your sensor library via an intuitive entity picker.
2228

2329
It enables you to build premium, touch-interactive dashboards for various ESP32-based devices (like the Seeed reTerminal, TRMNL, standard touch screens, and more) without writing a single line of display code.
2430

25-
2631
## What Does It Do?
2732

2833
- **Visual drag-and-drop editor** - Design layouts in your browser, see your actual HA entities update live on the canvas
34+
<p align="center"><img src="screenshots/draganddrop.gif" width="800" alt="Drag & Drop Editor"></p>
2935
- **Multiple pages** - Navigate with hardware buttons, set different refresh rates per page
3036
- **Auto-generates ESPHome config** - Clean, readable YAML that you can paste into your existing ESPHome setup
3137
- **Round-trip editing** - Import existing ESPHome configs back into the editor
@@ -72,7 +78,8 @@ Then create a new ESPHome device:
7278
3. Drag widgets onto the canvas
7379
4. Add your sensors, weather entities, icons, shapes
7480
5. Create multiple pages with different refresh rates
75-
6. Click **"Generate Snippet"**
81+
6. **Live Preview**: Your YAML is generated on the fly as you design! Just look at the YAML snippet box.
82+
<p align="center"><img src="screenshots/modern_canvas.gif" width="800" alt="Modern Canvas Interaction"></p>
7683

7784
### 5. Flash It
7885

@@ -101,57 +108,20 @@ We expose everything (buttons, sensors, battery) back to Home Assistant. Does a
101108

102109
## Widget Types
103110

104-
- **Text** - Static labels and headers
105-
- Customizable font size (8-260px) - generates fonts automatically
106-
- Color options: black, white, **gray** (renders as dithered pattern)
107-
- **Sensor Text** - Live values from Home Assistant entities
108-
- **Smart Type Detection**: Automatically detects number vs string functionality
109-
- **Manual Override**: "Is Text Sensor" option for forced text handling
110-
- Separate font sizes for label and value
111-
- Multiple display formats (value only, label + value, stacked)
112-
- **Icon** - Material Design Icons with customizable size and color
113-
- Choose from 360+ most-used Material Design Icons
114-
- Adjustable size (8-260px) - generates optimized fonts automatically
115-
- Color options: black, white, gray (limited by e-paper)
116-
- **Weather Icon** - Dynamic weather icons based on Home Assistant state
117-
- Automatically maps standard HA weather states (sunny, rainy, cloudy, etc.) to MDI icons
118-
- Customizable size and color
119-
- **Date & Time** - Display current time and date
120-
- Separate font sizes for time and date
121-
- Multiple format options (time only, date only, both)
122-
- Automatically synced with Home Assistant time
123-
- **Progress Bar** - Visual progress indicators from sensor values
124-
- Links to Home Assistant percentage sensors
125-
- Customizable bar height and border width
126-
- Shows fill based on 0-100% sensor values
127-
- **Battery Icon** - Dynamic battery level display
128-
- Links to battery level sensors
129-
- Icon changes based on battery percentage
130-
- Shows percentage text below icon
131-
- **Shapes** - Rectangles, filled rectangles, circles, filled circles, lines
132-
- Gray color renders as dithered pattern for visual distinction
133-
- **Graph** - Plot sensor history over time
134-
- Configurable duration (1h to 30d)
135-
- Customizable line style (solid, dashed, dotted), thickness, and color
136-
- Optional X/Y grid lines with presets
137-
- Auto-scaling Y-axis based on sensor min/max attributes
138-
- Automatic X/Y axis labeling based on time and value range
139-
- **Image** - Display photos and images with optional color inversion
140-
- Widget frame size sets ESPHome `resize:` parameter automatically
141-
- Images are resized during compilation (quality preserved with FLOYDSTEINBERG dithering)
142-
- **Online Image** - Fetch and display images from URLs
143-
- Useful for weather maps, camera feeds, or dynamic content
144-
- **Quote / RSS Feed** - Display inspirational quotes or RSS feed content
145-
- Configurable RSS feed URL with popular defaults
146-
- Random quote selection, author display, italic styling
147-
- Adjustable refresh interval (15min to 24h)
148-
- **QR Code** - Generate QR codes directly on the display
149-
- Configurable content string (URLs, text, etc.)
150-
- Four error correction levels
151-
- Auto-scaling to fit widget dimensions
152-
- **Weather Forecast** - Multi-day weather forecast display
153-
- Shows upcoming weather conditions with icons
154-
- Integrates with Home Assistant weather entities
111+
- **Text & Sensor Text** - Static labels or live HA entity values with smart type detection and multiple formatting options
112+
<p align="center"><img src="screenshots/text_formatting.gif" width="700" alt="Rich Text Formatting"></p>
113+
- **Icon & Weather Icon** - 360+ Material Design Icons or dynamic weather-state icons with full size/color control
114+
<p align="center"><img src="screenshots/icon_picker.gif" width="700" alt="Icon Picker System"></p>
115+
- **Date, Time & Calendar** - Customizable clock, date, and full monthly calendar views
116+
- **Progress Bar & Battery** - Visual indicators for percentages and dynamic battery level tracking
117+
- **Shapes & Rounded Rects** - Rectangles, circles, lines, and rounded rects with gray/dither support
118+
- **Graph** - Advanced sensor history plotting with auto-scaling, grid lines, and X/Y axis labeling
119+
- **Image & Online Image** - Static photos or dynamic URLs (weather maps, cameras) with auto-dithering
120+
- **Quote / RSS Feed** - Inspirational quotes or external RSS feeds with auto-scaling and refresh logic
121+
- **QR Code** - Dynamic QR generation for URLs or text with adjustable error correction
122+
- **Touch Area** - Invisible or icon-labeled interactive zones to trigger HA actions (supports dual-state feedback)
123+
<p align="center"><img src="screenshots/touch_icons.gif" width="700" alt="Touch Interactive Icons"></p>
124+
- **Weather Forecast** - Multi-day forecast display integrated with HA weather entities
155125

156126
## LVGL Support (Experimental)
157127

@@ -184,32 +154,31 @@ For stable results, stick to **Native Mode** (standard widgets without LVGL pref
184154
- **Productivity Tools** - Copy/Paste (Ctrl+C/V), Undo/Redo (Ctrl+Z/Y), and Z-Index layering support
185155
- **Canvas Controls** - Zoom in/out and recenter for precise editing
186156
- **Dark Mode Option** - Toggle "Dark Mode" in device settings for black backgrounds
187-
- **Hardware Integration** - Buttons, buzzer, temperature/humidity sensors exposed to HA
157+
- **Hardware Integration** - Buttons, buzzer, temperature, humidity sensors exposed to HA
188158
- **Smart Generator** - Produces clean, additive YAML that doesn't conflict with your base config
189159
- **Template-Free Workflow** - No more manual template merging, just paste and go
190-
- **Live YAML Preview** - Select any widget to instantly highlight its corresponding code in the generated YAML snippet
191-
- **Round-Trip Editing** - Import existing ESPHome display code back into the editor
192-
- **Battery Management** - Voltage monitoring, battery level percentage, icon indicators
193-
- **Power Saving** - Configurable refresh rates, deep sleep support for night hours
194-
- **Experimental LVGL Support** - (Beta) Support for LVGL widgets like Arc and Button on capable devices
160+
- **Live YAML Generation** - Your YAML is generated on the fly as you design; no more "Generate" buttons
161+
- **RGB Color Picker** - Precise color control for e-paper and LCD widgets
162+
<p align="center"><img src="screenshots/rgb_picker.gif" width="700" alt="RGB Color Picker"></p>
163+
- **Round-Trip Editing** - Import existing ESPHome code back into the editor (now supports LVGL widgets!)
164+
<p align="center"><img src="screenshots/yaml_parsing.gif" width="700" alt="YAML Round-Trip Import"></p>
165+
- **Power & Battery Management** - Monitoring, deep sleep support, and configurable refresh intervals
166+
- **Modern Canvas Interaction** - Zoom with the mouse wheel and pan with the middle mouse button
167+
- **Drag & Drop Workflow** - Drag widgets directly from the sidebar onto the canvas
168+
- **Modular Hardware Profiles** - Support for loading hardware profiles from external YAML packages
169+
- **Experimental LVGL Support** - (Beta) Support for interactive LVGL widgets on capable devices
170+
- **Mobile Support** - Responsive UI designed to work on smaller screens and touch devices
195171

196172
## Technical Details
197173

198174
The generator produces **complete, standalone YAML** - no templates needed!
199175

200176
**What it generates (everything you need):**
201-
- Hardware configuration: `esphome:`, `esp32:`, `psram:`, `i2c:`, `spi:`
202-
- Display driver and settings
203-
- `globals:` - Display page tracking, refresh intervals
204-
- `font:` - Dynamic font generation based on your widget sizes + Material Design Icons
205-
- `image:` - Image definitions for photo/image widgets
206-
- `online_image:` - Definitions for online image widgets
207-
- `text_sensor:` - Home Assistant entities used in your widgets
208-
- `graph:` - Graph widget configurations
209-
- `button:` - Page navigation and refresh controls (exposed to HA)
210-
- `script:` - Smart refresh logic with per-page interval support
211-
- `deep_sleep:` - Power saving logic (if enabled)
212-
- `display:` - Lambda code that renders your layout
177+
- **Hardware Config**: `psram`, `i2c`, `spi`, `external_components`, and device-specific sections (`m5paper`, `axp2101`)
178+
- **Core Components**: `http_request`, `time` (Home Assistant), `globals` (page tracking), and `deep_sleep`
179+
- **Widgets & Assets**: `font` (MDI icons), `image` (deduplicated), `online_image`, `graph`, and `qr_code`
180+
- **HA Integration**: `sensor`, `text_sensor`, `binary_sensor`, `button`, and `switch` entities
181+
- **Logic & Display**: `script` (smart refresh), `display` (lambda code), and `lvgl` (if enabled)
213182

214183
**What ESPHome provides** (auto-generated when you create a device):
215184
- `wifi:`, `api:`, `ota:`, `logger:`
@@ -220,11 +189,10 @@ The workflow is safe and deterministic - same layout always produces the same YA
220189
## Hardware Support
221190

222191
**Currently Supported:**
223-
- Seeed Studio reTerminal E1001 (ESP32-S3, 800x480 e-paper, black/white)
224-
- Seeed Studio reTerminal E1002 (ESP32-S3, 800x480 e-paper, color)
225-
- Waveshare PhotoPainter (ESP32-S3, 7-Color e-paper)
226-
- TRMNL (ESP32-C3 e-paper device)
227-
- *More coming soon!* (Experimental devices marked as "untested" in editor)
192+
- **Seeed Studio**: reTerminal E1001 (BW), reTerminal E1002 (Color), Trmnl DIY Kit (S3)
193+
- **Waveshare**: PhotoPainter (7-Color), Touch LCD 4.3" & 7.0" (S3)
194+
- **M5Stack**: M5Paper (Touch), M5Stack CoreInk
195+
- **TRMNL**: Original ESP32-C3 e-paper device
228196

229197
**Hardware Features Exposed:**
230198
- 3 physical buttons (GPIO 3/4/5)
@@ -235,6 +203,7 @@ The workflow is safe and deterministic - same layout always produces the same YA
235203

236204
All exposed as Home Assistant entities for use in automations.
237205

206+
238207
## Repository Structure
239208

240209
- `custom_components/reterminal_dashboard/` - Home Assistant integration
@@ -273,10 +242,21 @@ Add `compile_process_limit: 1` to your `esphome:` section in the YAML. This redu
273242
4. **Compile**: Run this command:
274243
```powershell
275244
python -m esphome compile C:\esphome_build\reterminal.yaml
276-
```
277-
5. **Upload**: Take the generated `.bin` file and upload it via the Home Assistant ESPHome dashboard (Install → Manual Download).
245+
Upload: Take the generated .bin file and upload it via the Home Assistant ESPHome dashboard (Install → Manual Download).
246+
247+
248+
## Video Overview (Legacy)
249+
250+
Looking for a deep dive? While some UI elements have evolved, you can watch an **[explanation video of an older version here](https://youtu.be/bzCbiUypN_4)** to understand the core concepts.
278251
279252
## License
280253
281254
Made with love ❤️ - free and Open Source under the GPL 3.0 license. Share the love!
282255
256+
<div align="center">
257+
258+
☕ **If you find this project useful, consider supporting its development!**
259+
260+
[![Sponsor](https://img.shields.io/badge/Sponsor-❤️-ff69b4?style=for-the-badge&logo=github-sponsors)](https://github.com/sponsors/koosoli)
261+
262+
</div>

custom_components/reterminal_dashboard/ARCHITECTURE.md

Lines changed: 0 additions & 47 deletions
This file was deleted.

custom_components/reterminal_dashboard/CONTRIBUTING_AGENTS.md

Lines changed: 0 additions & 40 deletions
This file was deleted.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Developer Guide: Hardware Profiles
2+
3+
We use a **Hybrid Hardware Strategy**:
4+
1. **Legacy Devices (E-Ink):** Defined in `devices.js`. Work 100% Offline.
5+
2. **New Devices (LCD/YAML):** Defined in `frontend/hardware/*.yaml`. **Online Only**.
6+
7+
## adding a New Device (LCD)
8+
9+
### 1. Create YAML Package
10+
Create a new file in `frontend/hardware/my-device.yaml`.
11+
This should be a standard ESPHome package file.
12+
13+
### 2. Register Device
14+
Edit `frontend/js/io/devices.js` and add an entry:
15+
16+
```javascript
17+
my_device_key: {
18+
name: "My Device Name",
19+
isPackageBased: true,
20+
hardwarePackage: "hardware/my-device.yaml", // URL path relative to index.html
21+
features: { psram: true, ... }
22+
},
23+
```
24+
25+
### 3. Verify
26+
* **Locally (`file://`):** You will see a warning message in the YAML box ("Only available when deployed..."). This confirms the app is trying to load your file.
27+
* **Online (Home Assistant):** The full YAML including your package will be generated.
28+
29+
## Why Online Only?
30+
Browsers block access to local files (`file://`) for security. To load a YAML file dynamically, it must be served by a web server (like Home Assistant or a local Python server). We chose this trade-off to keep the development workflow simple (no build scripts required).

0 commit comments

Comments
 (0)