feat: remote commands, systemd units, process observability, broker auth split
- Command intake (reboot/shutdown) on infoscreen/{uuid}/commands with ack lifecycle
- MQTT_USER/MQTT_PASSWORD_BROKER split from identity vars; configure_mqtt_security() updated
- infoscreen-simclient.service: Type=notify, WatchdogSec=60, Restart=on-failure
- infoscreen-notify-failure@.service + script: retained MQTT alert when systemd gives up (Gap 3)
- _sd_notify() watchdog keepalive in simclient main loop (Gap 1)
- broker_connection block in health payload: reconnect_count, last_disconnect_at (Gap 2)
- COMMAND_MOCK_REBOOT_IMMEDIATE_COMPLETE canary flag with safety guard
- SERVER_TEAM_ACTIONS.md: server-side integration action items
- Docs: README, CHANGELOG, src/README, copilot-instructions updated
- 43 tests passing
This commit is contained in:
44
README.md
44
README.md
@@ -51,6 +51,11 @@ LOG_LEVEL=INFO
|
||||
|
||||
MQTT_BROKER=192.168.1.100
|
||||
MQTT_PORT=1883
|
||||
MQTT_USER=<broker-username>
|
||||
MQTT_PASSWORD_BROKER=<broker-password>
|
||||
MQTT_USERNAME=infoscreen-client-<client-uuid-prefix>
|
||||
MQTT_PASSWORD=<per-device-random-password>
|
||||
MQTT_TLS_ENABLED=0
|
||||
|
||||
HEARTBEAT_INTERVAL=60
|
||||
SCREENSHOT_INTERVAL=180
|
||||
@@ -68,8 +73,22 @@ CEC_POWER_ON_WAIT=5
|
||||
CEC_POWER_OFF_WAIT=5
|
||||
|
||||
POWER_CONTROL_MODE=local
|
||||
|
||||
COMMAND_HELPER_PATH=/usr/local/bin/infoscreen-cmd-helper.sh
|
||||
COMMAND_EXEC_TIMEOUT_SEC=15
|
||||
COMMAND_DEDUPE_TTL_HOURS=24
|
||||
COMMAND_DEDUPE_MAX_ENTRIES=5000
|
||||
COMMAND_MOCK_REBOOT_IMMEDIATE_COMPLETE=0
|
||||
```
|
||||
|
||||
MQTT auth/TLS notes:
|
||||
|
||||
- `MQTT_USER` / `MQTT_PASSWORD_BROKER` are the broker credentials used at connection time.
|
||||
- `MQTT_USERNAME` / `MQTT_PASSWORD` are legacy per-device identity fields kept for fallback and identity purposes.
|
||||
- Store real broker credentials only in the local [/.env](.env), which is gitignored.
|
||||
- When TLS is enabled, also set `MQTT_TLS_CA_CERT`, and if client certificates are used, `MQTT_TLS_CERT` and `MQTT_TLS_KEY`.
|
||||
- Keep the local [/.env](.env) readable only by the service user and admins, for example mode `600`.
|
||||
|
||||
Mode summary:
|
||||
|
||||
- `POWER_CONTROL_MODE=local`: local event-time CEC only.
|
||||
@@ -78,21 +97,23 @@ Mode summary:
|
||||
|
||||
### 3. Start Services
|
||||
|
||||
The preferred method on deployed devices is systemd:
|
||||
|
||||
```bash
|
||||
cd ~/infoscreen-dev/src
|
||||
python3 simclient.py
|
||||
sudo systemctl start infoscreen-simclient infoscreen-display
|
||||
sudo systemctl status infoscreen-simclient infoscreen-display
|
||||
sudo journalctl -u infoscreen-simclient -u infoscreen-display -f
|
||||
```
|
||||
|
||||
In a second terminal:
|
||||
For first-time setup, run `src/pi-setup.sh` to install and enable the units. See [src/README.md](src/README.md) for the systemd setup steps.
|
||||
|
||||
For local development without systemd:
|
||||
|
||||
```bash
|
||||
cd ~/infoscreen-dev/src
|
||||
python3 display_manager.py
|
||||
```
|
||||
# Terminal 1
|
||||
./scripts/start-simclient.sh
|
||||
|
||||
Or use the helper script:
|
||||
|
||||
```bash
|
||||
# Terminal 2
|
||||
./scripts/start-display-manager.sh
|
||||
```
|
||||
|
||||
@@ -154,6 +175,7 @@ Use the helper scripts in `scripts/` for focused tests:
|
||||
- `./scripts/test-impressive.sh`: single-play presentation.
|
||||
- `./scripts/test-impressive-loop.sh`: looping presentation.
|
||||
- `./scripts/test-mqtt.sh`: MQTT broker connectivity.
|
||||
- `./scripts/test-reboot-command.sh`: end-to-end reboot/shutdown command lifecycle canary (`accepted -> execution_started -> completed/failed`).
|
||||
- `./scripts/test-screenshot.sh`: screenshot capture.
|
||||
- `./scripts/test-hdmi-cec.sh`: HDMI-CEC diagnostics and runtime state inspection.
|
||||
- `./scripts/test-power-intent.sh`: MQTT power intent publishing, rejection tests, and telemetry checks.
|
||||
@@ -173,7 +195,8 @@ Quick checks:
|
||||
- Follow logs: `tail -f logs/display_manager.log src/simclient.log`
|
||||
- Inspect screenshots: `ls -lh src/screenshots/`
|
||||
- Inspect power state: `cat src/power_intent_state.json` and `cat src/power_state.json`
|
||||
- Restart both services: `./scripts/restart-all.sh`
|
||||
- Restart services (systemd): `sudo systemctl restart infoscreen-simclient infoscreen-display`
|
||||
- Restart services (dev): `./scripts/restart-all.sh`
|
||||
|
||||
## Deployment
|
||||
|
||||
@@ -213,6 +236,7 @@ If running directly on the host, ensure:
|
||||
- [src/IMPLEMENTATION_SUMMARY.md](src/IMPLEMENTATION_SUMMARY.md)
|
||||
- [TV_POWER_COORDINATION_TASKLIST.md](TV_POWER_COORDINATION_TASKLIST.md)
|
||||
- [TV_POWER_HANDOFF_SERVER.md](TV_POWER_HANDOFF_SERVER.md)
|
||||
- [SERVER_TEAM_ACTIONS.md](SERVER_TEAM_ACTIONS.md)
|
||||
|
||||
## Contributing
|
||||
|
||||
|
||||
Reference in New Issue
Block a user