diff --git a/AGENTS.md b/AGENTS.md index 1eca575..d6c8d91 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -28,8 +28,8 @@ Don't configure wallbox relays as part of display support. # Working instructions for LLMs and developers -This project drives an ESP32-2432S028 with ILI9341 + XPT2046 (320×240, -LVGL 90°). Read README.md, README_EXTENDED.md and docs/ before installing. The owner can +This project drives two boards: the CYD ESP32-2432S028 with ILI9341 + XPT2046 (320×240, +LVGL 90°) and the Guition above. Read README.md, README_EXTENDED.md and docs/ before installing. The owner can physically tap; an agent cannot replace that with software coordinates. ## Installing a new screen @@ -69,7 +69,7 @@ and screens for lookups and tests. If that file is missing you are not on his ma another header; docs/THEME.md is the recipe, tests/test_theme.py and tests/test_theme.cpp guard it. - Screen settings live in one table: `components/smart_display/settings_screen.h` draws the page on the screen, `SETTING_RULES` in the add-on validates the same keys. Firmware 0.2.49+ - owns them: every writer (the page, the entities in both profiles) goes through + owns them: every writer (the page, the entities in `packages/core.yaml`) goes through `settings_screen::set()`, and the add-on changes them through the entities in `SETTING_ENTITIES`, never through the layout message. docs/SETTINGS.md is the end-to-end recipe for adding one; never widen the eleven-key `settings` block older firmware insists on. @@ -80,8 +80,8 @@ and screens for lookups and tests. If that file is missing you are not on his ma filtered physical ADC values. Don't apply the affine correction twice, in both the driver and the UI. - The calibration wizard assumes swap_xy=false, mirror_x=true, mirror_y=false, and LVGL 90°. A changed orientation also requires a new projection/tests. -- Run `tools/check.sh` on code changes (the Python tests, every C++ test, both generators, the - editor's tests, types and build); on a firmware change also `tools/check.sh --firmware`, which +- Run `tools/check.sh` on code changes (the Python tests, every C++ test, the package check, the icon + generator's check, the editor's tests, types and build); on a firmware change also `tools/check.sh --firmware`, which compiles both boards and applies the CYD's flash budget (docs/RELEASING.md step 2). CI runs the same script. Firmware tests and hardware acceptance are different checks. - `diagnostics/run_ui_test.py` renders without HA actions; don't touch the screen diff --git a/README.md b/README.md index 4e93065..8be50e7 100644 --- a/README.md +++ b/README.md @@ -202,8 +202,9 @@ For Home Assistant OS with Apps/Add-ons on **aarch64 or amd64**:
New screen (step 3) and choosing your tiles (step 5).
-You can install new firmware later from **Firmware & USB → Wi-Fi / OTA** in the sidebar. -For an existing screen, always use the existing profile; creating a new +New firmware goes on over Wi-Fi with the **Update** button of a screen in ESP Screens, or by itself +every night if you turn that on under **Settings**; **Firmware & USB → Wi-Fi / OTA** in the sidebar +installs it by hand. For an existing screen, always use the existing profile; creating a new installation profile generates new keys. The [complete installation guide](docs/EASY_SETUP.md) walks through every step in more detail. diff --git a/README_EXTENDED.md b/README_EXTENDED.md index 59f7d84..258167a 100644 --- a/README_EXTENDED.md +++ b/README_EXTENDED.md @@ -23,13 +23,15 @@ on the screen itself, and how updates work. title; a number that's too long is truncated with an ellipsis, the unit stays visible. - **Pastel backgrounds per tile:** choose red for an all-off script, green for all-on, or any other color. The title and status stay dark and - readable. The color also appears in the screen preview; **Default** restores + readable; in Dark mode the colour turns deep and the text light. The color also + appears in the screen preview; **Default** restores the normal colors. Requires firmware 0.2.10 or newer. **None** drops the card entirely: the content then sits at the same size directly on the screen background (firmware 0.2.16). -- **Clock:** digital or analog. The analog clock has tick marks at 12, 3, 6, and 9 - and, on a single tile, shows a calendar block (weekday, day, month) next to the - dial; double-width shows the digital time with the date beside it. +- **Clock:** digital or analog. The analog clock has a mark for every hour (numerals at 12, 3, 6, + and 9 on the Guition) and a red second hand while the screen is awake. On a single tile it shows + a calendar block next to the dial (weekday, day and month; the CYD the day and month); double-width + shows the digital time with the date beside it, and a full-page clock is the dial alone. - **Light control:** brightness, rainbow color, and white temperature according to the light's capabilities. Open the detailed control with a long touch. - **Effects (firmware 0.2.70+):** a light that offers effects (a WLED, a Hue with @@ -50,8 +52,9 @@ on the screen itself, and how updates work. sunset), a **timer** (`timer.*`, tapping starts or pauses it), and **presence** (`person.*`). Pick them in the library like any other tile, or drag them straight into the screen mockup; **Double-width** is an option for every tile, and so is - **Full page** (firmware 0.2.62+): the tile takes the whole page and is one big button that lights up - in its state colour while on, so a screen by the door switches the light when you push anywhere on it. + **Full page** (firmware 0.2.62+; not for a Go to page tile): the tile takes the whole page and is + one big button that lights up in its state colour while on, so a screen by the door switches the + light when you push anywhere on it. Only something that can be off lights up: a light, switch, airco, fan, blind, speaker, robot, script, timer, camera, person or binary sensor. Sensors, numbers, selects, scenes, the weather and the sun stay plain (firmware 0.2.71+). @@ -71,6 +74,7 @@ on the screen itself, and how updates work.
+
- **Direct control on double-width tiles** (firmware 0.2.19+), like the rows in
Home Assistant: temperature − / + or mode buttons (climate), a toggle (switch,
light, fan), start/stop/dock (vacuum), open/stop/close or a
@@ -101,12 +105,18 @@ on the screen itself, and how updates work.
cleans: **vacuum, vacuum and mop, or mop only** for robots that offer a cleaning mode in
Home Assistant (such as Roborock), then suction and water. Only the rows the chosen mode
uses are shown (app 0.2.46 / firmware 0.2.39).
- Scenes, scripts, and buttons show when they last ran. A tile that's waiting on
- Home Assistant shows a small spinner on a light overlay.
+ Scenes, scripts, and buttons show when they last ran. A tile that waits longer than
+ a moment on Home Assistant shows a small spinner over the tile (see below).
- **Cover card** for blinds, curtains, shutters, and garage doors, like Home Assistant's own:
a tall position slider on which the blind hangs from the top, a tilt slider over slats for
venetian blinds, open, stop, and close, and the battery of a battery-powered blind
(such as Motionblinds). A cover shows only what it supports (app 0.2.58 / firmware 0.2.50).
+- **Media card** like a phone's "now playing" (app 0.2.77 / firmware 0.2.64): the album cover, the
+ title, artist and album, a progress bar with the elapsed and total time, previous, play or pause
+ and next, and a volume row with mute. Keys the player doesn't offer are faded, and a player that is
+ off shows a power key. A Guition fetches the cover through ESP Screens, like a camera picture
+ ([docs/CAMERA.md](docs/CAMERA.md)); the CYD shows the player's icon in its place. A media tile of
+ size **Full page** is the same card on the page, with the keys and the volume working on the tile.
- **History card** for sensors, numbers, binary sensors, people, and switches, the way Home
Assistant shows history: a line with an axis in round steps and clock times for numbers,
with the highest and lowest moment, and a timeline with the time in each state for on/off,
@@ -118,9 +128,10 @@ on the screen itself, and how updates work.
(open/closed), the alarm, who's home, or when something or someone last
changed ("5 min ago", "Yesterday"). See [Top bar](#top-bar).
- **Screen settings:** standby time, normal and dimmed brightness,
- night hours, **Dark mode** (firmware 0.2.54+), 24- or 12-hour clock, return to the home page,
- and optional swiping between pages. Change them in ESP Screens, where they apply at once, or on the screen
- itself. With firmware 0.2.49+ the screen keeps them, and every one of them is also an
+ night hours, **Dark mode** (firmware 0.2.54+), 24- or 12-hour clock, back to page 1 by itself
+ and on standby, optional swiping between pages, and **Page buttons** (firmware 0.2.69+): switched
+ off, the bar under the tiles goes and the tiles take its room. Change them in ESP Screens, where
+ they apply at once, or on the screen itself. With firmware 0.2.49+ the screen keeps them, and every one of them is also an
entity in Home Assistant, so an automation can switch **Night mode** or **Auto standby**
(firmware 0.2.41+), for example to keep a screen on while someone is home, turn **Dark mode**
on at bedtime (firmware 0.2.54+), and
@@ -128,14 +139,16 @@ on the screen itself, and how updates work.
See [Wake and sleep](#wake-and-sleep-from-an-automation).
- **Settings on the screen itself** (firmware 0.2.44+): hold the top bar for about a
second and a half and the screen opens its own settings page — brightness, night,
- the clock, swiping, rotation, and what this screen is (name, IP address, firmware,
- whether Home Assistant is connected, and Restart). Changes show up in ESP Screens
+ the clock, back to page 1, swiping, the page buttons, rotation, and what this screen is
+ (name, IP address, firmware, whether Home Assistant is connected, and Restart). Changes show up in ESP Screens
within a second. See [Settings on the screen](#settings-on-the-screen).
- **Guition rotation:** 0°, 90°, 180°, or 270°, directly from the management page.
Native LVGL rotation turns the display and touch together. The CYD keeps its fixed
orientation and its own calibration.
- **Read current data** (the ··· menu of a screen): what Home Assistant reports for every tile right now,
- and how each tile is set.
+ and how each tile is set. The same menu has **Identify**, which blinks the screen so you know which one
+ it is (firmware 0.2.31+), **Copy layout from…** another screen, and **Export** and **Import** of a
+ layout as JSON (app 0.2.73); nothing reaches the screen before **Save & send**.
- **Override YAML per screen** (app 0.2.61): your own ESPHome YAML for one screen, such as another
display controller, kept through updates. See
[Updates and keeping your settings](#updates-and-keeping-your-settings).
@@ -230,7 +243,9 @@ data:
- **`flash`**: `true` makes the backlight blink four times when the alert arrives.
In ESP Screens, **Alerts** in the sidebar opens a cheatsheet with the exact action name for each screen,
-a ready-to-paste example, and all fields, icons, and colors. Home Assistant asks for all seven fields; leave a field empty (`""`, `0`, `false`) if you
+a ready-to-paste example, and all fields, icons, and colors. It starts with **Try it** (app 0.2.73): fill in
+the same seven fields, choose one screen or all of them, and send a test alert.
+Home Assistant asks for all seven fields; leave a field empty (`""`, `0`, `false`) if you
don't use it. A new alert replaces the current one. Every end is reported as the event
**`esphome.screen_alert`** with `action` (`ok`, `timeout`, `replaced`, or `remote`), `title`,
`screen`, and the `device_id` that Home Assistant adds, so an automation can wait for OK.
@@ -334,9 +349,10 @@ the Wake and Sleep of the same screen included.
## Customizing tiles and colors
-Click a tile in the screen preview. Under **Pastel background**, choose a color,
-such as red or green. Optionally adjust the name, click action, mini-slider, or large
-value. Click **Save & send** to apply the changes.
+Click a tile in the screen preview and its settings open in a drawer beside it. Under
+**Pastel background**, choose a color, such as red or green. Optionally adjust the name, the
+size, what a tap does (**On tap**), the small slider, or a large value. Click **Save & send**
+to apply the changes.
After the first supporting firmware update, this requires no new flash.
@@ -351,8 +367,9 @@ stay separately visible.
## Top bar
-At the top of the editor, each screen has its **Top bar**: the name on the left, up to
-six items on the right. **+ Add** offers the time, an analog clock, and the date (which
+Tap the top bar of any page in the editor's preview and the drawer shows the screen's **Top bar**:
+the name on the left, up to six items on the right. **+ Add** offers the time, an analog clock,
+and the date (which
keep ticking on the screen itself, even without Home Assistant), suggestions from your own
home (temperature and power usage from the screen's room, the weather, how many people are home,
sunrise and sunset), and a search field for any entity, including a phone
@@ -396,7 +413,7 @@ Home Assistant, `esphome.
@@ -474,14 +491,19 @@ See the [release history](screen_manager/CHANGELOG.md) and
**If you publish your own fork:** every push to GitHub is a release. Always also
bump the add-on version in `screen_manager/config.yaml` and log the change in
the CHANGELOG, otherwise the HA App store won't offer an update. A change to the
-screen also gets a new `SCREEN_FIRMWARE_VERSION` in both board profiles.
+screen also gets a new `SCREEN_FIRMWARE_VERSION` in `packages/core.yaml`, the one place both boards
+take it from, and the same `FIRMWARE_VERSION` in `screen_manager/app/core.py`.
## Guides and installation help
- [Complete installation from ESP Screens](docs/EASY_SETUP.md)
+- [ESP Screens with Home Assistant Container (Docker)](docs/DOCKER.md)
- [Guition hardware, mounting, and rotation](docs/GUITION.md)
- [CYD calibration and USB diagnostics](docs/CALIBRATING.md)
-- [Instructions for developers and LLMs](AGENTS.md)
+- [Camera images and album covers](docs/CAMERA.md)
+- [Troubleshooting](docs/TROUBLESHOOTING.md)
+- [Instructions for developers and LLMs](AGENTS.md), with [how a screen's YAML is put together](docs/PROFILES.md),
+ [settings](docs/SETTINGS.md), [colours and Dark mode](docs/THEME.md) and [releases](docs/RELEASING.md)
Give a developer or LLM a clean copy of this repository and, for example:
diff --git a/docs/CALIBRATING.md b/docs/CALIBRATING.md
index d926534..0b57008 100644
--- a/docs/CALIBRATING.md
+++ b/docs/CALIBRATING.md
@@ -17,7 +17,8 @@ panel, a loose connection, unstable power, or random outliers.
```yaml
packages:
- display: ... # what ESP Screens put there
+ display: ... # what ESP Screens put there
+ local_overrides: !include kitchen.local.yaml # idem
calibration: !include calibration.yaml
```
2. Check the data cable and the USB port with `python -m serial.tools.list_ports`.
@@ -122,8 +123,9 @@ No `-s CALIBRATION_ON_BOOT true` is given here; the profile keeps it `false`.
Then check the real thing: the tiles, the navigation and a few taps in the corners.
Most screens never need this. A CYD shows its calibration on the screen itself when
-it first starts, and ESP Screens has **Calibrate touch** for a repeat. This USB route
-is for a panel that stays off after that, or for a measurement report.
+it first starts, and its **Calibrate touch** button in Home Assistant (on the screen's
+ESPHome device) starts it again. This USB route is for a panel that stays off after that,
+or for a measurement report.
If calibration mode was opened only via the API, you can close it:
diff --git a/docs/DOCKER.md b/docs/DOCKER.md
index 75053ad..22b5e86 100644
--- a/docs/DOCKER.md
+++ b/docs/DOCKER.md
@@ -83,8 +83,8 @@ under **Settings → Devices & services** in Home Assistant, and then choose the
ESPHome folder. `data/build` and `data/platformio` are caches.
- **Claude:** **Install for Claude Code** is meant for the Claude Code app on Home Assistant
OS. Use **Download for claude.ai** instead.
-- **Camera images (Guition, app 0.2.66+):** the screens load camera pictures from port **8098**
- of this host, on all its addresses, so keep that port open to the screens. The app uses Home
+- **Camera images (Guition, app 0.2.66+):** the screens load camera pictures, and from app 0.2.77 the
+ album covers of the media card, from port **8098** of this host, on all its addresses, so keep that port open to the screens. The app uses Home
Assistant's own LAN address; when the screens reach this host under another one, set
`SCREEN_CAMERA_URL` (see below). The links are random and short-lived. [docs/CAMERA.md](CAMERA.md)
diff --git a/docs/EASY_SETUP.md b/docs/EASY_SETUP.md
index 752e0b5..a262e85 100644
--- a/docs/EASY_SETUP.md
+++ b/docs/EASY_SETUP.md
@@ -117,7 +117,7 @@ Home Assistant without Wi-Fi sleep delay.
Select your screen, tap the bar at the top of a page to give the screen its name,
and search for entities in the **Library** on the right. It has domain filters with
-colored icons. You can add up to 48 tiles, one for every slot
+colored icons, a room filter, and **Hide placed**. You can add up to 48 tiles, one for every slot
(firmware 0.2.62+; see below for older firmware).
The screen preview shows their placement: two columns, six slots per page,
up to eight pages. Every tile has a fixed slot that only changes if
@@ -125,14 +125,15 @@ you drag it; empty slots stay empty, wherever you leave them. Drag a tile
onto an empty slot and it stays there; drag it onto another tile and the two
swap (the other tile takes the freed-up slot, or otherwise the nearest free
slot); everything else stays put. While dragging, the preview already shows where
-everything will land; an empty page then stands ready below the last page. **Add
-page** creates an empty page that's kept; an empty page gets
-**Remove page**. Click an empty slot to place the next tile from the library
+everything will land; drop a tile on the page after the last one to start a new page.
+The pages stand side by side; **+ Add page** after the last one creates an empty page that's kept,
+and an empty page gets **Remove page**. Click an empty slot to place the next tile from the library
there. Use the arrow keys to move a focused tile.
Click a tile and its settings open in a drawer on the right, with the preview
still in view: a custom name, click behavior, a mini-slider, a large value, a graph
-(sensors), a weather forecast (weather), or the size: **Double-width** or **Full
-page** (firmware 0.2.62+). A double-width tile for a climate, switch, light, fan,
+(sensors), a weather forecast (weather), the size: **Double-width** or **Full
+page** (firmware 0.2.62+), and on a screen with more pages the **Page** it is on, to move it without dragging.
+A double-width tile for a climate, switch, light, fan,
vacuum, cover, media player, number, select, timer, scene, script, or button gets **direct
control** on the right, like the rows in Home Assistant (for example temperature − / +,
open/stop/close, volume with mute, a toggle); under **Direct control
@@ -161,6 +162,9 @@ Click **Save & send** to send your changes.
(firmware 0.2.58+).
- Long press a fan: speed, if the device supports percentages.
- Scene/script: tap to run; button/input_button: tap to press.
+- Media player: tap for the media card with the cover (Guition), the keys, and the volume.
+- Camera or image (Guition): tap for the picture full screen, refreshed every four seconds.
+- A *Go to page* tile: tap to open its page.
- Sensor, number, binary sensor, and person: tap for the history card, for 1 hour,
24 hours, or 1 week. Long press a switch for its history. A sensor's graph on the tile
shows 1, 6, or 24 hours.
@@ -258,7 +262,8 @@ in your own YAML with an earlier release tag, without changing the keys.
automatically imported into the new management page.
HA Container without Supervisor has no App store. This installation guide
-targets Home Assistant OS; the development server is not a production route for
+targets Home Assistant OS; for Home Assistant Container, run the app next to it as in
+[ESP Screens with Docker](DOCKER.md). The development server is not a production route for
a standalone public portal.
HA mechanisms used: [Ingress](https://developers.home-assistant.io/docs/apps/presentation/),
@@ -266,33 +271,33 @@ HA mechanisms used: [Ingress](https://developers.home-assistant.io/docs/apps/pre
[ESPHome packages](https://esphome.io/components/packages/).
-## Adjusting screen settings (from 0.1.2)
+## Adjusting screen settings
-Update ESP Screen Manager to 0.1.2 and install the new firmware once
-via your **existing** ESPHome device → Install → Wirelessly. Keep your own YAML
-with Wi-Fi and keys. Then open the screen in ESP Screen Manager and its
-**Screen settings** tab. A change there applies at once; there is nothing to save.
-After this, changes to these settings don't need a new firmware flash.
+Open the screen in ESP Screens and its **Screen settings** tab. A change there applies at
+once; there is nothing to save, and no firmware flash is needed. The same settings are on the
+screen itself (hold the top bar, firmware 0.2.44+) and, with firmware 0.2.49+, on the screen's
+device in Home Assistant ([SETTINGS.md](SETTINGS.md)).
| Setting | Options | Default |
|---|---|---|
-| Auto standby | On/off | On |
-| Standby after | 1–1440 minutes after the last touch | 10 minutes |
| Normal brightness | 5–100% | 100% |
| Dark mode | On/off: black page, graphite cards, firmware 0.2.54+ | Off |
+| Auto standby | On/off | On |
+| Standby after | 1–1440 minutes after the last touch | 10 minutes |
| Standby brightness | 0–100%, capped at normal brightness | 20% |
| Night mode | On/off; applies during standby | On |
| Night start/end | Hour and minute, can span midnight | 22:00–07:00 |
| Night brightness | 0–100%, capped at normal brightness | 10% |
-| Show clock | On/off | On |
-| Time format | 24 or 12 hour, without AM/PM | 24 hour |
-| Return to page 1 | Also closes detail menus on standby | Off |
+| Clock | 24 or 12 hour; the clock shows no AM/PM | 24 hour |
+| Back to page 1 | Closes an open card and goes back to page 1 after 30 seconds to 60 minutes without a touch, firmware 0.2.44+ | On, 2 minutes |
+| Also on standby | Standby goes back to page 1 too (it always closes an open card) | Off |
| Swipe between pages | Native horizontal swipe, firmware 0.2.7+ | Off |
| Page buttons | Off: no buttons under the tiles, the tiles take their room, firmware 0.2.69+ | On |
| Guition rotation | 0°, 90°, 180°, 270°, firmware 0.2.9+ | 0° |
-Home Assistant shows the same settings on each screen's ESPHome device: the switch
-**Auto standby** (firmware 0.2.41+) and the numbers **Standby after**, **Normal brightness**,
+Home Assistant shows these settings on each screen's ESPHome device, under *Configuration*:
+with firmware 0.2.49+ every one of them, older firmware the switch **Auto standby**
+(firmware 0.2.41+) and the numbers **Standby after**, **Normal brightness**,
**Standby brightness** and **Night brightness**. Changing them there, for example from an
automation, also changes them in ESP Screens and keeps them after a restart. Turning Auto
standby off wakes the screen and keeps it on; turning it on counts the standby time from
@@ -330,18 +335,18 @@ Night hours use the ESPHome device's timezone and the time from HA.
Without a valid time, the screen uses the regular standby brightness; matching
start and end times turn the night window off. At 0%, only the
backlight turns off: this is not deep sleep and not a screensaver.
-The first tap wakes the screen without controlling a device.
+The first tap wakes the screen without controlling a device, except on a page that is
+one full-page switch (firmware 0.2.65+): there the waking push also switches it.
-The add-on stores everything per screen in its persistent data. The screen also
-stores the last received settings in preferences; ESPHome batches those
-write operations (normally up to a minute). So don't unplug the power right after
-saving. Existing CYD calibration, tiles, API, and OTA keys are preserved.
-An offline screen gets the changes as soon as it comes back. Regular HA status
-updates don't wake the screen and don't reset the standby timer.
+With firmware 0.2.49+ the screen owns its settings and keeps them in its preferences;
+an offline screen shows them as unknown in ESP Screens and takes no changes until it is back.
+Older firmware gets them from the add-on's persistent data, also as soon as it comes back.
+ESPHome batches the preference writes (normally up to a minute), so don't unplug the power
+right after a change. Existing CYD calibration, tiles, API, and OTA keys are preserved.
+Regular HA status updates don't wake the screen and don't reset the standby timer.
-With older firmware, the management page shows that an update is needed first.
-The tiles remain usable. Manual YAML profiles keep using their substitutions;
-to manage through this app, use the Easy Setup package.
+A setting that needs newer firmware than the screen has doesn't show in ESP Screens until
+the screen is updated. The tiles remain usable.
The current Guition uses the native ST7701S configuration; see
[the hardware comparison](GUITION_FACTORY_REFERENCE.md). Settings and
diff --git a/docs/GUITION.md b/docs/GUITION.md
index fa94f46..6ac994c 100644
--- a/docs/GUITION.md
+++ b/docs/GUITION.md
@@ -1,6 +1,6 @@
# Guition ESP32-S3 4-inch wallbox — 480 × 480
-This branch adds a separate profile for the **Guition 4848S040** with an
+The **Guition 4848S040** has a board file of its own, next to the CYD's, for its
ST7701S RGB display and **GT911 capacitive touch**, ESP32-S3, 16 MB flash, and
8 MB octal PSRAM. The name/2mm wall plate also describes the enclosure; always
check the electronics. This profile doesn't configure any relay.
@@ -32,7 +32,9 @@ Install Guition firmware 0.2.9 and ESP Screen Manager 0.2.9. Open the screen
in the management page, open the **Screen settings** tab, and choose 0°, 90°,
180°, or 270° (clockwise) under **Rotation**. It applies at once; there is
nothing to save. After that, a firmware flash is no longer needed to change the
-angle. The setting is kept in the app data and on the screen after a restart.
+angle. The screen keeps the angle after a restart; it can also be changed on the
+screen's own settings page (Screen) and, with firmware 0.2.49+, as
+`select.