Set default clock alarm time and gate alarm time field by visibility

This commit is contained in:
Jage9
2026-02-27 02:11:08 -05:00
parent 78be266fcf
commit d74937b2dc
4 changed files with 10 additions and 6 deletions

View File

@@ -120,7 +120,7 @@
"use24Hour": false, "use24Hour": false,
"topOfHourAnnounce": true, "topOfHourAnnounce": true,
"alarmEnabled": false, "alarmEnabled": false,
"alarmTime": "" "alarmTime": "12:00 AM"
} }
``` ```
@@ -137,7 +137,8 @@
- `use24Hour`: boolean (or `on/off` in updates), default `false`. - `use24Hour`: boolean (or `on/off` in updates), default `false`.
- `topOfHourAnnounce`: boolean (or `on/off` in updates), default `true`. - `topOfHourAnnounce`: boolean (or `on/off` in updates), default `true`.
- `alarmEnabled`: boolean (or `on/off` in updates), default `false`. - `alarmEnabled`: boolean (or `on/off` in updates), default `false`.
- `alarmTime`: blank when unset; when set, accepts `HH:MM` (24-hour mode) or `H:MM AM/PM` (12-hour mode). - `alarmTime`: default `12:00 AM`; accepts `HH:MM` (24-hour mode) or `H:MM AM/PM` (12-hour mode).
- UI visibility: `alarmTime` is shown only when `alarmEnabled=true` (`visibleWhen` metadata).
- Global defaults: `useSound=none`, `emitSound=sounds/clock.ogg`. - Global defaults: `useSound=none`, `emitSound=sounds/clock.ogg`.
- Clock speech announcement audio is emitted via `item_clock_announce` packets using `/sounds/clock/el640/*.ogg`. - Clock speech announcement audio is emitted via `item_clock_announce` packets using `/sounds/clock/el640/*.ogg`.

View File

@@ -103,7 +103,7 @@ This is behavior-focused documentation for item types and their defaults.
- `use24Hour=false` - `use24Hour=false`
- `topOfHourAnnounce=true` - `topOfHourAnnounce=true`
- `alarmEnabled=false` - `alarmEnabled=false`
- `alarmTime=""` - `alarmTime="12:00 AM"`
- Global: - Global:
- `useSound=none` - `useSound=none`
- `emitSound=sounds/clock.ogg` - `emitSound=sounds/clock.ogg`
@@ -121,6 +121,7 @@ This is behavior-focused documentation for item types and their defaults.
- `topOfHourAnnounce`: boolean or on/off style input - `topOfHourAnnounce`: boolean or on/off style input
- `alarmEnabled`: boolean or on/off style input - `alarmEnabled`: boolean or on/off style input
- `alarmTime`: `HH:MM` when `use24Hour=true`, otherwise `H:MM AM/PM` - `alarmTime`: `HH:MM` when `use24Hour=true`, otherwise `H:MM AM/PM`
- Visible only when `alarmEnabled=true` (`visibleWhen: {"alarmEnabled": true}`)
### Audio ### Audio
- Spoken clock assets live under `client/public/sounds/clock/el640/`. - Spoken clock assets live under `client/public/sounds/clock/el640/`.

View File

@@ -67,7 +67,7 @@ DEFAULT_PARAMS: dict = {
"use24Hour": False, "use24Hour": False,
"topOfHourAnnounce": True, "topOfHourAnnounce": True,
"alarmEnabled": False, "alarmEnabled": False,
"alarmTime": "", "alarmTime": "12:00 AM",
} }
PARAM_KEYS: tuple[str, ...] = ("timeZone", "use24Hour", "topOfHourAnnounce", "alarmEnabled", "alarmTime") PARAM_KEYS: tuple[str, ...] = ("timeZone", "use24Hour", "topOfHourAnnounce", "alarmEnabled", "alarmTime")
@@ -81,5 +81,6 @@ PROPERTY_METADATA: dict[str, dict[str, object]] = {
"valueType": "text", "valueType": "text",
"tooltip": "Alarm time. Uses 24-hour HH:MM when 24 hour format is on, otherwise H:MM AM/PM.", "tooltip": "Alarm time. Uses 24-hour HH:MM when 24 hour format is on, otherwise H:MM AM/PM.",
"maxLength": 8, "maxLength": 8,
"visibleWhen": {"alarmEnabled": True},
}, },
} }

View File

@@ -286,8 +286,9 @@ async def test_clock_timezone_update_validates(monkeypatch: pytest.MonkeyPatch)
client, client,
json.dumps({"type": "item_update", "itemId": item.id, "params": {"alarmEnabled": True}}), json.dumps({"type": "item_update", "itemId": item.id, "params": {"alarmEnabled": True}}),
) )
assert send_payloads[-1].ok is False assert send_payloads[-1].ok is True
assert "alarmtime must be a valid time" in send_payloads[-1].message.lower() assert item.params.get("alarmEnabled") is True
assert item.params.get("alarmTime") == "12:00 AM"
await server._handle_message( await server._handle_message(
client, client,