189 lines
4.3 KiB
Markdown
Executable File
189 lines
4.3 KiB
Markdown
Executable File
# Imperial Command Center
|
|
|
|
A full-screen touchscreen kiosk dashboard for Home Assistant control with a Star Wars Imperial/dark theme.
|
|
|
|
## Features
|
|
|
|
- **Google Calendar** - Month view with event details
|
|
- **To-Do List** - HA built-in todo integration
|
|
- **Alarmo** - Arm/disarm panel with numeric keypad
|
|
- **Thermostats** - Temperature display and control (supports 2 thermostats)
|
|
- **Lights** - Grouped by room, individual toggles, master on/off
|
|
- **Door Locks** - Status indicators, lock/unlock with confirmation
|
|
- **Camera Overlay** - All cameras via go2rtc WebRTC
|
|
- **Person Detection Alert** - Full-screen popup on Frigate detection
|
|
- **Package Detection** - Binary sensor status display
|
|
- **Presence Wake** - Screen wakes on approach (TensorFlow.js person detection)
|
|
- **Screen Sleep** - Auto-sleep after idle timeout
|
|
|
|
## Tech Stack
|
|
|
|
- **Electron** - Desktop shell with kiosk mode
|
|
- **React 18** + **TypeScript**
|
|
- **Tailwind CSS** - Imperial dark theme
|
|
- **Zustand** - State management
|
|
- **home-assistant-js-websocket** - HA connection
|
|
- **go2rtc WebRTC** - Camera streaming
|
|
- **TensorFlow.js COCO-SSD** - Presence detection
|
|
|
|
## Quick Start
|
|
|
|
### Prerequisites
|
|
|
|
- Node.js 18+
|
|
- npm or yarn
|
|
- Home Assistant with long-lived access token
|
|
- go2rtc server (for camera feeds)
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
# Clone the repository
|
|
git clone https://github.com/your-repo/imperial-command-center.git
|
|
cd imperial-command-center
|
|
|
|
# Install dependencies
|
|
npm install
|
|
|
|
# Copy environment file
|
|
cp .env.example .env
|
|
|
|
# Edit .env with your settings
|
|
nano .env
|
|
```
|
|
|
|
### Configuration
|
|
|
|
Edit `.env` with your Home Assistant and service URLs:
|
|
|
|
```env
|
|
VITE_HA_URL=http://192.168.1.50:8123
|
|
VITE_HA_WS_URL=ws://192.168.1.50:8123/api/websocket
|
|
VITE_GO2RTC_URL=http://192.168.1.241:1985
|
|
VITE_FRIGATE_URL=http://192.168.1.241:5000
|
|
```
|
|
|
|
Edit `src/config/entities.ts` to configure your Home Assistant entity IDs.
|
|
|
|
### Development
|
|
|
|
```bash
|
|
# Start development server (React only)
|
|
npm run dev
|
|
|
|
# Start with Electron
|
|
npm run electron:dev
|
|
```
|
|
|
|
### Building
|
|
|
|
```bash
|
|
# Build for Linux (AppImage)
|
|
npm run build:linux
|
|
|
|
# Build for Windows (NSIS installer)
|
|
npm run build:win
|
|
|
|
# Build all platforms
|
|
npm run electron:build
|
|
```
|
|
|
|
## Deployment
|
|
|
|
### Linux Kiosk Setup
|
|
|
|
1. Build the application:
|
|
```bash
|
|
npm run build:linux
|
|
```
|
|
|
|
2. Run the deployment script:
|
|
```bash
|
|
sudo ./scripts/deploy-linux.sh
|
|
```
|
|
|
|
3. Configure autologin for the kiosk user (for LightDM):
|
|
```ini
|
|
# /etc/lightdm/lightdm.conf
|
|
[Seat:*]
|
|
autologin-user=kiosk
|
|
autologin-session=openbox
|
|
```
|
|
|
|
4. Start the service:
|
|
```bash
|
|
sudo systemctl start imperial-command-center
|
|
```
|
|
|
|
### Manual Service Setup
|
|
|
|
1. Copy the AppImage to `/opt/imperial-command-center/`
|
|
2. Copy the service file:
|
|
```bash
|
|
sudo cp imperial-command-center.service /etc/systemd/system/
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable imperial-command-center
|
|
```
|
|
|
|
## Home Assistant Setup
|
|
|
|
### Long-Lived Access Token
|
|
|
|
1. Go to your Home Assistant profile
|
|
2. Scroll to "Long-Lived Access Tokens"
|
|
3. Create a new token
|
|
4. Enter it in the dashboard settings
|
|
|
|
### Required Entities
|
|
|
|
Configure these in `src/config/entities.ts`:
|
|
|
|
- 2 climate entities (thermostats)
|
|
- 10 light entities (grouped by room)
|
|
- 3 lock entities
|
|
- 1 alarm_control_panel entity (Alarmo)
|
|
- 1 binary_sensor for package detection
|
|
- 1 todo entity
|
|
|
|
### Alarmo Setup
|
|
|
|
The dashboard expects Alarmo to be installed and configured in Home Assistant.
|
|
|
|
## Camera Integration
|
|
|
|
The dashboard uses go2rtc for camera streaming:
|
|
|
|
1. Ensure go2rtc is running and configured with your cameras
|
|
2. Update camera names in `src/config/entities.ts` to match go2rtc stream names
|
|
3. Camera feeds use WebRTC for low-latency streaming
|
|
|
|
## Keyboard Shortcuts (Development)
|
|
|
|
- `F11` - Toggle fullscreen
|
|
- `Ctrl+Shift+I` - Open DevTools
|
|
- `Escape` - Exit fullscreen (when not in kiosk mode)
|
|
|
|
## Troubleshooting
|
|
|
|
### Connection Issues
|
|
|
|
- Verify Home Assistant URL is correct
|
|
- Check access token is valid
|
|
- Ensure HA allows WebSocket connections from the kiosk IP
|
|
|
|
### Camera Feed Issues
|
|
|
|
- Verify go2rtc is accessible from the kiosk
|
|
- Check stream names match between go2rtc and entity config
|
|
- Ensure WebRTC is not blocked by firewall
|
|
|
|
### Screen Wake/Sleep
|
|
|
|
- Requires X11 (Wayland may not work)
|
|
- Install `xdotool` and `unclutter` for full functionality
|
|
- Check `xset` commands work manually
|
|
|
|
## License
|
|
|
|
MIT
|