Initial commit: Electron + React touchscreen kiosk dashboard for Home Assistant
This commit is contained in:
188
README.md
Executable file
188
README.md
Executable file
@@ -0,0 +1,188 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user