Add /notify endpoint for Home Assistant integration
- New /notify endpoint: simple {"message": "", "duration": 5} API
- Uses Priority 3 (Notify) with auto-expiring TTL
- Updated CLAUDE.md with HA integration examples
- Updated README.md with new features and endpoints
- Added Docker detector to documentation
- Removed completed TODO items
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
85
README.md
85
README.md
@@ -8,18 +8,14 @@ A minimalist system status monitor that uses ASCII emotes to display server heal
|
||||
|
||||
Turn an old phone (with its OLED screen) into a glanceable ambient display for your home server. Instead of graphs and numbers, see a happy face `( ^_^)` when things are good, and a worried face `( o_o)` when they're not.
|
||||
|
||||
## TODO
|
||||
|
||||
- Figure out way to update installation in /opt/kao when git updates. Maybe run a git pull on service startup?
|
||||
- Think about ways of implementing noises.
|
||||
|
||||
## Features
|
||||
|
||||
- **OLED-optimized** — Pure black background, saves battery
|
||||
- **Glanceable** — Know your server's status from across the room
|
||||
- **Extensible** — Add custom detectors for any metric
|
||||
- **Personality** — Rotating expressions, celebration animations, sleep mode
|
||||
- **Home Assistant ready** — Webhook endpoints for automation
|
||||
- **Sound effects** — Optional audio cues for state changes (tap to enable)
|
||||
- **Home Assistant ready** — Webhook endpoints for notifications and automation
|
||||
|
||||
## Quick Start
|
||||
|
||||
@@ -50,13 +46,14 @@ Open http://localhost:5100 on your phone (use Fully Kiosk Browser for best resul
|
||||
|
||||
## Built-in Detectors
|
||||
|
||||
| Detector | Monitors |
|
||||
| -------------- | ----------------------------- |
|
||||
| **disk_space** | Disk usage on all drives |
|
||||
| **cpu** | CPU utilization |
|
||||
| **memory** | RAM usage |
|
||||
| **service** | Whether processes are running |
|
||||
| **network** | Host reachability (ping) |
|
||||
| Detector | Monitors |
|
||||
| -------------- | ------------------------------------- |
|
||||
| **disk_space** | Disk usage on all drives |
|
||||
| **cpu** | CPU utilization |
|
||||
| **memory** | RAM usage |
|
||||
| **service** | Whether processes are running |
|
||||
| **network** | Host reachability (ping) |
|
||||
| **docker** | Container health and restart loops |
|
||||
|
||||
## Configuration
|
||||
|
||||
@@ -104,57 +101,83 @@ curl -X POST http://localhost:5100/clear \
|
||||
|
||||
## Home Assistant Integration
|
||||
|
||||
Add webhook commands to your Home Assistant config:
|
||||
Add REST commands to your `configuration.yaml`:
|
||||
|
||||
```yaml
|
||||
rest_command:
|
||||
sentry_sleep:
|
||||
kao_notify:
|
||||
url: "http://YOUR_SERVER:5100/notify"
|
||||
method: POST
|
||||
content_type: "application/json"
|
||||
payload: '{"message": "{{ message }}", "duration": {{ duration | default(5) }}}'
|
||||
|
||||
kao_sleep:
|
||||
url: "http://YOUR_SERVER:5100/sleep"
|
||||
method: POST
|
||||
sentry_wake:
|
||||
|
||||
kao_wake:
|
||||
url: "http://YOUR_SERVER:5100/wake"
|
||||
method: POST
|
||||
```
|
||||
|
||||
Trigger from automations:
|
||||
Use in automations:
|
||||
|
||||
```yaml
|
||||
automation:
|
||||
- alias: "Sentry Sleep at Bedtime"
|
||||
- alias: "Doorbell Notification"
|
||||
trigger:
|
||||
platform: state
|
||||
entity_id: binary_sensor.doorbell
|
||||
to: "on"
|
||||
action:
|
||||
service: rest_command.kao_notify
|
||||
data:
|
||||
message: "Someone at the door"
|
||||
duration: 10
|
||||
|
||||
- alias: "Kao Sleep at Bedtime"
|
||||
trigger:
|
||||
platform: time
|
||||
at: "23:00:00"
|
||||
action:
|
||||
service: rest_command.sentry_sleep
|
||||
service: rest_command.kao_sleep
|
||||
|
||||
- alias: "Sentry Wake in Morning"
|
||||
- alias: "Kao Wake in Morning"
|
||||
trigger:
|
||||
platform: time
|
||||
at: "07:00:00"
|
||||
action:
|
||||
service: rest_command.sentry_wake
|
||||
service: rest_command.kao_wake
|
||||
```
|
||||
|
||||
## API Reference
|
||||
|
||||
| Endpoint | Method | Description |
|
||||
| --------- | ------ | ---------------------- |
|
||||
| `/` | GET | Web UI |
|
||||
| `/status` | GET | Current state as JSON |
|
||||
| `/events` | GET | List all active events |
|
||||
| `/event` | POST | Register an event |
|
||||
| `/clear` | POST | Clear an event by ID |
|
||||
| `/sleep` | POST | Enter sleep mode |
|
||||
| `/wake` | POST | Exit sleep mode |
|
||||
| Endpoint | Method | Description |
|
||||
| --------- | ------ | ------------------------------------------------ |
|
||||
| `/` | GET | Web UI |
|
||||
| `/status` | GET | Current state as JSON |
|
||||
| `/events` | GET | List all active events |
|
||||
| `/event` | POST | Register an event |
|
||||
| `/clear` | POST | Clear an event by ID |
|
||||
| `/notify` | POST | Simple notification `{"message": "", "duration": 5}` |
|
||||
| `/sleep` | POST | Enter sleep mode |
|
||||
| `/wake` | POST | Exit sleep mode |
|
||||
|
||||
## Personality
|
||||
|
||||
The emote has personality! In optimal state it:
|
||||
|
||||
- Rotates through happy faces every 5 minutes
|
||||
- Occasionally winks `( -_^)` or blinks `( ᵕ.ᵕ)`
|
||||
- Occasionally winks `( -_^)` or blinks `( ᵕ.ᵕ)` for a second or two
|
||||
- Celebrates `\(^o^)/` when recovering from warnings
|
||||
- Each face has its own animation (floating, bouncing, swaying)
|
||||
- Reacts when tapped `( °o°)` and shows version info
|
||||
|
||||
**Sound effects** (tap screen to enable, or use `?sound=on`):
|
||||
- Warning: soft double-beep
|
||||
- Critical: urgent descending tone
|
||||
- Notify: gentle ping
|
||||
- Recovery: happy ascending chirp
|
||||
|
||||
## License
|
||||
|
||||
|
||||
Reference in New Issue
Block a user