- TypeScript 93.3%
- JavaScript 5.8%
- CSS 0.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .openai | ||
| app | ||
| db | ||
| docs/screenshots | ||
| drizzle/meta | ||
| examples/d1 | ||
| lib | ||
| public | ||
| tests | ||
| tools | ||
| worker | ||
| .env.example | ||
| .gitignore | ||
| drizzle.config.ts | ||
| eslint.config.mjs | ||
| LICENSE | ||
| next-env.d.ts | ||
| next.config.ts | ||
| package-lock.json | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| postcss.config.mjs | ||
| README.md | ||
| tsconfig.json | ||
| vite.config.ts | ||
Shelly Wall Display Dashboard
Touch-Dashboard für ShellyElevate ohne Home Assistant.
- Produktionsserver:
10.0.1.125 - Dashboard:
http://10.0.1.125:3000/ - ShellyElevate-Verwaltung:
http://10.0.1.125:3000/admin - Displayprofile:
http://10.0.1.125:3000/admin/displays - Projektverzeichnis:
/home/hubobel/shelly_test
Dashboard
Speedtest
System
Energie
Installation
Voraussetzungen: Node.js ab Version 22.13.0, Corepack und Git.
sudo corepack enable
corepack prepare pnpm@11.19.0 --activate
cd ~
git clone https://git.hintergasse.de/hubobel/shelly_test.git
cd shelly_test
pnpm install --frozen-lockfile
Die nicht versionierte .env.local mit den Zugangsdaten in das Projektverzeichnis kopieren und schützen:
chmod 600 /home/hubobel/shelly_test/.env.local
pnpm build
Für die durch Authentik geschützte Energie-API muss in .env.local dasselbe
Service-Token wie im Energie-Projekt hinterlegt sein:
ENERGY_API_URL=http://10.0.1.125:8321/api/data
ENERGY_API_TOKEN=replace-with-the-same-random-token
Für die Kalenderseite werden URL und derselbe interne API-Schlüssel des
gcalendar-gateway ergänzt:
CALENDAR_GATEWAY_URL=http://127.0.0.1:8340
CALENDAR_GATEWAY_API_KEY=replace-with-the-same-random-key
systemd-Dienst einrichten
sudo tee /etc/systemd/system/shelly-dashboard.service >/dev/null <<'EOF'
[Unit]
Description=Shelly Wall Display Dashboard
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=hubobel
Group=hubobel
WorkingDirectory=/home/hubobel/shelly_test
Environment=NODE_ENV=production
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ExecStart=/usr/bin/pnpm start:lan
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now shelly-dashboard
sudo systemctl status shelly-dashboard --no-pager
In ShellyElevate diese Dashboard-URL eintragen:
http://10.0.1.125:3000/
Mehrere Displays konfigurieren
Unter http://10.0.1.125:3000/admin/displays lassen sich beliebig viele
Wall Displays verwalten. Pro Display werden Geräte-IP, verfügbare Seiten,
deren Reihenfolge und die Startseite festgelegt. Die Verwaltung erzeugt eine
eindeutige URL wie http://10.0.1.125:3000/?display=EG und kann sie direkt an
ShellyElevate übertragen.
Ist die Kalenderseite aktiv, lässt sich zusätzlich pro Display auswählen, welche eigenen und abonnierten Google-Kalender berücksichtigt werden.
Die Profile liegen ausschließlich auf dem Dashboardserver in
data/display-profiles.json. Die Datei bleibt bei git pull erhalten und wird
nicht in Git eingecheckt. Der mit pnpm start:lan gestartete lokale
Konfigurationsdienst ist nur über 127.0.0.1 erreichbar.
Update-Script einmalig erstellen
sudo tee /usr/local/bin/shelly-update >/dev/null <<'EOF'
#!/usr/bin/env bash
set -Eeuo pipefail
PROJECT_DIR="/home/hubobel/shelly_test"
echo "Shelly-Dashboard wird aktualisiert …"
sudo -v
cd "$PROJECT_DIR"
/usr/bin/git pull --ff-only origin main
/usr/bin/pnpm install --frozen-lockfile
/usr/bin/pnpm build
sudo /usr/bin/systemctl restart shelly-dashboard
sudo /usr/bin/systemctl status shelly-dashboard --no-pager
echo "Shelly-Dashboard erfolgreich aktualisiert."
EOF
sudo chmod 755 /usr/local/bin/shelly-update
Update
Auf dem Produktionsserver genügt anschließend:
shelly-update
Danach die Versionsnummer unten rechts auf dem Shelly etwa 1,2 Sekunden gedrückt halten. Das Dashboard lädt den aktuellen Stand neu.


