Files
imperial-command-center/README.md

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