An open API service indexing awesome lists of open source software.

https://github.com/doanlong1412/sys-desk

SysDesk โ€” Server Monitor with Live2D Girls' Frontline
https://github.com/doanlong1412/sys-desk

custom-card dashboard home-assistant homeassistant lovelace lovelace-card mornitoring network server

Last synced: about 2 months ago
JSON representation

SysDesk โ€” Server Monitor with Live2D Girls' Frontline

Awesome Lists containing this project

README

          

# ๐Ÿ–ฅ๏ธ SysDesk

[![hacs_badge](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://github.com/hacs/integration)
![version](https://img.shields.io/badge/version-1.0-blue)
![HA](https://img.shields.io/badge/Home%20Assistant-2023.1+-green)
![license](https://img.shields.io/badge/license-MIT-lightgrey)

> ๐Ÿ‡ป๐Ÿ‡ณ **Phiรชn bแบฃn tiแบฟng Viแป‡t:** [README.vi.md](README.vi.md)

**Your server room now has a guardian.** An anime Live2D character lives inside your Home Assistant card, watches your CPU, RAM, disk, and temperatures in real time, alerts you the moment anything spikes โ€” and speaks every warning out loud. Pin her to a corner and she floats above your entire dashboard, always watching, always present.

One card. Zero dependencies. Drops straight into Home Assistant.

> ๐ŸŒ **Currently available in Vietnamese ๐Ÿ‡ป๐Ÿ‡ณ and English ๐Ÿ‡ฌ๐Ÿ‡ง only.**
> If you find SysDesk useful, please โญ **star the repo** or [โ˜• buy me a coffee](https://www.paypal.com/paypalme/doanlong1412) to keep the project going!

---

## ๐Ÿ“ธ Preview

![SysDesk Preview](assets/preview1.png)

![SysDesk Preview](assets/preview2.png)

---

## โœจ What makes this different

Most server dashboards throw raw numbers at you. SysDesk gives those numbers **a voice and a face**. UMP45 warns you the moment CPU crosses 70%. HK416 reports disk is nearly full before your services crash. SOPMOD shouts when a WiFi AP goes offline. The character cycles her speech bubble automatically, and everything โ€” the greeting, the reaction, the voice โ€” is driven by your actual Home Assistant sensors, in real time.

---

## ๐Ÿš€ Features

---

### ๐Ÿ’œ 9 Girls' Frontline Characters โ€” switchable in one tap

Nine hand-picked Live2D characters from Girls' Frontline, each with her own personality and greeting. Switch between them directly on the card โ€” the character loads instantly from a CDN with no local files needed.

| Character | Personality |
|-----------|-------------|
| **UMP45 ๐Ÿ”ซ** | Sharp and vigilant, always on duty |
| **M4A1 ๐Ÿ›ก๏ธ** | Calm, reliable, built to protect |
| **SOPMOD-II ๐Ÿ”ฅ** | Energetic and explosive, catches everything |
| **HK416 ๐ŸŽฏ** | Disciplined and precise, zero tolerance for anomalies |
| **K2 ๐ŸŒธ** | Gentle and reassuring, always here for you |
| **PKP ๐Ÿต** | Laid-back but thorough โ€” servers stable, go have tea |
| **RFB ๐ŸŽ„** | Watchful and steady, nothing slips past her sights |
| **Lewis ๐ŸŒผ** | Warm and dependable, quietly guards everything |
| **DSR-50 ๐Ÿ”ญ** | Hawk-eyed, no anomaly escapes her observation |
| **Gelina โš™๏ธ** | Methodical and precise, all sensors online |

The โ—€ โ–ถ buttons on the card cycle through all characters. The last chosen character is remembered via `localStorage` โ€” she'll be there when you come back.

---

### ๐Ÿ“Œ Mini Mode + Pin โ€” floats above your entire dashboard

Tap **Mini** and the character shrinks into a floating widget anchored to the bottom-right corner of your screen. Tap **Pin** and she stays visible across every Lovelace view, every subpage, every dashboard โ€” she follows you everywhere.

**What Mini / Pin Mode does:**
- Character floats to the bottom-right corner of the browser window
- Persists across all Lovelace views โ€” she follows you everywhere
- Speech bubble still pops up with reactions and alerts
- TTS still speaks โ€” you'll hear her even when she's minimized
- Double-click the floating character to snap back to full card mode

This is the feature that makes SysDesk feel like a real NOC companion rather than just a card.

---

### ๐Ÿšจ Intelligent Alert System โ€” threshold-based, auto-TTS loop

Wire up your server sensors and the character reacts the moment any metric crosses a threshold โ€” with a full spoken alert that **repeats on a loop** until the issue resolves.

| Metric | Warn | Critical |
|--------|------|----------|
| CPU | โ‰ฅ 70% | โ‰ฅ 90% |
| RAM | โ‰ฅ 75% | โ‰ฅ 90% |
| Disk | โ‰ฅ 70% | โ‰ฅ 85% |
| CPU Temp | โ‰ฅ 70ยฐC | โ‰ฅ 85ยฐC |
| Drive Temp | โ‰ฅ 40ยฐC | โ‰ฅ 55ยฐC |

- **Warning** โ€” character explains the issue with actionable advice (check logs, restart services, clean up diskโ€ฆ)
- **Critical** โ€” urgent, emphatic alert, demands immediate action
- **Service down** โ€” instant notification when any monitored service or AP goes offline
- **Auto-TTS loop** โ€” the spoken warning keeps repeating at intervals until the metric returns to safe range โ€” you won't miss it

---

### ๐Ÿ–ฅ๏ธ Multi-Server Monitoring โ€” HA, pfSense, Frigate, NAS

SysDesk monitors sensors across your entire homelab out of the box:

| Server | Metrics |
|--------|---------|
| ๐Ÿ  **Home Assistant** | CPU ยท Disk ยท RAM ยท CPU Temp |
| ๐Ÿ”’ **pfSense** | CPU ยท RAM |
| ๐Ÿ“ท **Frigate (VM)** | CPU ยท RAM |
| ๐Ÿ’ฝ **NAS** | CPU ยท RAM ยท Drive Temp |

Add any custom sensors on top โ€” the sensor list is fully expandable from the visual editor.

---

### ๐Ÿ“ก Service & AP Health Monitoring

Connect any switch, sensor, or binary sensor โ€” AdGuard, WiFi access points, network devices โ€” and the character alerts you the moment state drops to `off` or `unavailable`.

```yaml
adguard: switch.adguard_home_protection
wifi_5: sensor.5_office_state
wifi_6: sensor.6_living_state
nano_hd: sensor.nano_hd_state
```

---

### ๐Ÿ’ฌ Smart Status Bubbles โ€” context-aware, always fresh

The speech bubble doesn't just display raw numbers. It knows what time it is, what's currently wrong, and greets you accordingly.

**Bubble logic:**
- **Time-of-day greeting** โ€” dawn ๐ŸŒ…, morning โ˜€๏ธ, noon ๐Ÿฑ, afternoon โ›…, evening ๐ŸŒ™, night ๐Ÿ˜ด
- **System status summary** โ€” all OK โœ…, or lists active problems
- **Character idle quotes** โ€” each character has 6 unique idle lines, rotated automatically
- **Owner name** โ€” the character calls you by the name you set in config
- **Character nickname** โ€” fully customisable (`{c}` resolves to her name in every message)

---

### ๐Ÿ”Š TTS โ€” 4 engines, fully configurable

The character speaks every alert and greeting out loud. Four TTS engines are supported.

| Engine | Description |
|--------|-------------|
| **Web Speech** | Browser built-in voices โ€” works everywhere, zero setup |
| **Google Translate** | Crisp Google voices via audio tag โ€” no HA addon required |
| **HA Service (tts.speak)** | HA 2023.8+ native โ€” plays on browser or physical speaker |
| **HA Service (legacy)** | `tts.google_translate_say` / `tts.cloud_say` โ€” older setups |
| **None** | Disable TTS completely |

```yaml
tts:
engine: ha_service
service: tts.speak
entity_id: tts.google_translate_vi_com
media_player_entity_id: media_player.living_room_speaker
cache: true
```

---

### ๐ŸŽ›๏ธ Visual Config Editor

Everything configurable without touching YAML. The editor uses accordion sections for a clean layout:

| Section | Contents |
|---------|----------|
| โš™๏ธ **General** | Owner name, character nickname, card height |
| ๐ŸŽจ **Appearance** | Background blur, mini / pin mode dimensions |
| ๐Ÿ–ฅ๏ธ **Server Sensors** | Default + custom sensors with rename and entity picker |
| ๐Ÿ“ก **Services & APs** | Default + custom services with entity picker |
| ๐Ÿ”Š **TTS** | Engine, language, rate, pitch, HA service config |

---

## ๐Ÿ“ฆ Installation

### Option 1 โ€” HACS (recommended, 30 seconds)

**Step 1** โ€” Add this repository to HACS:

[![Open HACS Repository](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=doanlong1412&repository=sys-desk&category=plugin)

> If the button doesn't work, add manually:
> **HACS โ†’ Frontend โ†’ โ‹ฎ โ†’ Custom repositories**
> URL: `https://github.com/doanlong1412/sys-desk` โ†’ Type: **Dashboard** โ†’ Add

**Step 2** โ€” Search **SysDesk** โ†’ **Install**

**Step 3** โ€” Hard-reload your browser (`Ctrl+Shift+R`)

---

### Option 2 โ€” Manual

1. Download [`sysdesk.js`](https://github.com/doanlong1412/sys-desk/releases/latest)
2. Copy to `/config/www/js/sysdesk.js`
3. **Settings โ†’ Dashboards โ†’ Resources โ†’ Add resource:**
```
URL: /local/js/sysdesk.js
Type: JavaScript module
```
4. Hard reload (`Ctrl+Shift+R`)

---

## โš™๏ธ Configuration

Add the card to your dashboard:

```yaml
type: custom:sys-desk
```

Then click **โœ๏ธ Edit** โ€” the visual editor handles the rest.

---

### Full YAML example

```yaml
type: custom:sys-desk
name: Long # your name โ€” the character calls you this
char_nickname: UMP45 # optional: override character's self-name
height: 440 # card height in px
float_height: 600 # mini / pin mode character height
float_width: 380 # mini / pin mode width
card_blur: 0 # background blur (0 = fully transparent)

# โ”€โ”€ Server Sensors (defaults shown โ€” only override if your entities differ) โ”€โ”€
ha_cpu: sensor.system_monitor_processor_use
ha_disk: sensor.system_monitor_disk_usage
ha_ram: sensor.system_monitor_memory_usage
ha_temp: sensor.system_monitor_processor_temperature
pf_cpu: sensor.pfsense_cpu_usage
pf_ram: sensor.pfsense_memory_used
fri_cpu: sensor.frigate_200_cpu_used
fri_ram: sensor.qemu_frigate_200_memory_used_percentage
nas_cpu: sensor.nas_cpu
nas_ram: sensor.nas_memory
nas_disk_temp: sensor.data_drive_1_temperature

# โ”€โ”€ Services / APs โ”€โ”€
adguard: switch.adguard_home_protection
wifi_5: sensor.5_office_state
wifi_6: sensor.6_living_state
wifi_7: sensor.7_kitchen_state
wifi_8: sensor.8_garage_state
wifi_9: sensor.9_outside_state
nano_hd: sensor.nano_hd_state

tts:
engine: webspeech
lang: vi-VN
rate: 1.05
pitch: 1.1
```

---

### Config reference

| Key | Default | Description |
|-----|---------|-------------|
| `name` | `admin` | Owner name โ€” used in every alert and greeting |
| `char_nickname` | *(character default)* | Override character's self-name |
| `height` | `440` | Card height (px) |
| `float_height` | `600` | Mini / Pin mode character height (px) |
| `float_width` | `380` | Mini / Pin mode width (px) |
| `card_blur` | `0` | Background blur (0โ€“30) |
| `ha_cpu` | `sensor.system_monitor_processor_use` | HA CPU sensor |
| `ha_disk` | `sensor.system_monitor_disk_usage` | HA Disk sensor |
| `ha_ram` | `sensor.system_monitor_memory_usage` | HA RAM sensor |
| `ha_temp` | `sensor.system_monitor_processor_temperature` | HA CPU Temp sensor |
| `pf_cpu` | `sensor.pfsense_cpu_usage` | pfSense CPU sensor |
| `pf_ram` | `sensor.pfsense_memory_used` | pfSense RAM sensor |
| `fri_cpu` | `sensor.frigate_200_cpu_used` | Frigate CPU sensor |
| `fri_ram` | `sensor.qemu_frigate_200_memory_used_percentage` | Frigate RAM sensor |
| `nas_cpu` | `sensor.nas_cpu` | NAS CPU sensor |
| `nas_ram` | `sensor.nas_memory` | NAS RAM sensor |
| `nas_disk_temp` | `sensor.data_drive_1_temperature` | NAS Drive Temp sensor |
| `adguard` | `switch.adguard_home_protection` | AdGuard switch |
| `wifi_5โ€“9` | *(office/living/kitchen/garage/outside)* | WiFi AP sensors |
| `nano_hd` | `sensor.nano_hd_state` | Nano HD AP sensor |

---

### TTS engine reference

#### Web Speech (default)
```yaml
tts:
engine: webspeech
lang: vi-VN # optional
rate: 1.05 # 0.5โ€“2.0
pitch: 1.1 # 0โ€“2
```

#### Google Translate
```yaml
tts:
engine: google_translate
lang: vi
```

#### HA Service โ€” tts.speak (HA 2023.8+, recommended)
```yaml
tts:
engine: ha_service
service: tts.speak
entity_id: tts.google_translate_vi_com
media_player_entity_id: media_player.living_room_speaker # optional
cache: true
```

#### HA Service โ€” legacy
```yaml
tts:
engine: ha_service
service: tts.google_translate_say
entity_id: media_player.living_room_speaker
lang: vi
```

#### Disable TTS
```yaml
tts:
engine: none
```

---

## ๐Ÿ–ฅ๏ธ Compatibility

| | |
|---|---|
| Home Assistant | 2023.1+ |
| Lovelace | Default & custom dashboards |
| Devices | Mobile & Desktop |
| Dependencies | **None** |
| Browsers | Chrome, Firefox, Safari, Edge |

---

## ๐Ÿ“‹ Changelog

### v1.0.0
- ๐Ÿ–ฅ๏ธ **9 Girls' Frontline characters** โ€” UMP45, M4A1, SOPMOD-II, HK416, K2, PKP, RFB, Lewis, DSR-50, Gelina โ€” switchable via โ—€ โ–ถ buttons, saved in localStorage
- ๐Ÿ“Œ **Mini Mode + Pin** โ€” character collapses to floating corner widget, persists across all Lovelace views
- ๐Ÿšจ **Threshold-based alert system** โ€” CPU, RAM, Disk, CPU Temp, Drive Temp with warn + critical levels
- ๐Ÿ” **Auto-TTS loop** โ€” spoken alert repeats until metric returns to safe range
- ๐Ÿ–ฅ๏ธ **Multi-server monitoring** โ€” Home Assistant, pfSense, Frigate, NAS out of the box
- ๐Ÿ“ก **Service & AP health monitoring** โ€” AdGuard, WiFi APs, any switch or sensor
- ๐Ÿ’ฌ **Smart status bubbles** โ€” time-aware greetings, system summary, character idle quotes
- ๐Ÿ”Š **4 TTS engines** โ€” Web Speech, Google Translate, HA Service (tts.speak + legacy), or None
- ๐ŸŽ›๏ธ **Visual Config Editor** โ€” accordion sections, add/rename/remove sensors and services, no YAML required
- ๐ŸŒ **i18n** โ€” Vietnamese ๐Ÿ‡ป๐Ÿ‡ณ and English ๐Ÿ‡ฌ๐Ÿ‡ง, switchable in the editor

---

## ๐Ÿ“„ License

MIT โ€” free to use, modify, and distribute.
If SysDesk makes your homelab feel alive, please โญ **star the repo** โ€” it genuinely helps.

---

## ๐Ÿ™ Credits

Built by **[@doanlong1412](https://github.com/doanlong1412)** from ๐Ÿ‡ป๐Ÿ‡ณ Vietnam.

> โ˜• If you enjoy SysDesk, consider [buying me a coffee](https://www.paypal.com/paypalme/doanlong1412) to keep the project going!

Live2D models hosted via [jsdelivr CDN](https://www.jsdelivr.com/) โ€” credits to original model authors.
Live2D rendering powered by [live2d-widget](https://github.com/zenghongtu/live2d-model-assets).