Progressive Web App für die Steuerung der Arena-Beleuchtung über Gira HomeServer 4.13.
GitHub Repository: https://github.com/Jan-Geiger-Networking/pca.git
Live-URL: https://jan-geiger-networking.github.io/pca/
# 1. Repository klonen
git clone https://github.com/Jan-Geiger-Networking/pca.git
cd pca
# 2. Object-IDs in app.js eintragen (Zeile 10-14)
# 3. Grundriss ersetzen: arena-grundriss.jpg
# 4. Pushen
git add .
git commit -m "Config: Object-IDs und Grundriss"
git push
# 5. GitHub Pages aktivieren (Settings → Pages)
# 6. iPad: Safari → URL → "Zum Home-Bildschirm"Fertig! 🎉
- 🎨 Dunkles Design mit cyan Akzenten (#00bcd4)
- 📱 PWA - Installierbar auf 4 iPads als Kiosk-App
- 🔄 Auto-Update - Git Push → 30s später alle Geräte aktualisiert
- 🎛️ 3 Haupt-Dimmer - Spielfeld, Tribüne, Sonstige
- 🗺️ Grundriss-Integration mit 6 klickbaren Raum-Kacheln
- 📴 Offline-fähig - Funktioniert auch ohne Internet
- 🔐 Basic Auth - Sichere Verbindung zum Homeserver
# Repository klonen
git clone https://github.com/Jan-Geiger-Networking/pca.git
cd pca
# Dateien hinzufügen
git add .
git commit -m "Initial PWA setup"
git push origin mainGitHub Settings:
- Repository → Settings → Pages
- Source:
mainbranch,/(root) - Save
- URL:
https://jan-geiger-networking.github.io/pca/
Wichtig: Vor dem ersten Start anpassen!
Öffne app.js und ersetze die Platzhalter:
this.objectIDs = {
spielfeld: 'SPIELFELD-ID', // ← Echte Object-ID vom Gira Experten
tribuene: 'TRIBUENE-ID', // ← Echte Object-ID
sonstige: 'SONSTIGES-ID' // ← Echte Object-ID
};Beispiel:
this.objectIDs = {
spielfeld: '12345',
tribuene: '12346',
sonstige: '12347'
};- Datei:
arena-grundriss.jpg(1920x1080 empfohlen) - Ersetzen mit Ihrem Arena-Grundriss
- Commit & Push:
git add arena-grundriss.jpg
git commit -m "Update Grundriss"
git pushIn index.html die Kachel-Positionen ändern:
<button class="room-tile" style="top: 20%; left: 15%;" data-room="1">
💡 Raum 1
</button>Anpassen: top und left Werte (0-100%)
- URL eingeben:
https://jan-geiger-networking.github.io/pca/ - Warten bis Seite geladen ist
- Teilen-Button tippen (Quadrat mit Pfeil)
- "Zum Home-Bildschirm" wählen
- Name: "Arena Licht" (oder anpassen)
- Hinzufügen tippen
- App öffnen vom Home-Bildschirm
- ⚙️ Button oben links tippen
- Eingeben:
- Homeserver IP:
192.168.1.100(Ihre IP) - Benutzername:
admin - Passwort:
[IHR-PASSWORT]
- Homeserver IP:
- 💾 Speichern
Verhindert versehentliches Verlassen der App
- Einstellungen → Bedienungshilfen
- Geführter Zugriff aktivieren
- Code festlegen (z.B. 1234)
- Arena-App öffnen
- Home-Button 3x drücken
- Geführter Zugriff starten
Beenden: Home-Button 3x drücken → Code eingeben
Die App nutzt folgende Endpoints:
POST https://[HS-IP]:443/api/objects/[OBJECT-ID]/value
Body: {"value": 50}
Auth: Basic admin:[PASSWORT]
Über Gira Experten:
- Projekt öffnen in Gira Experten
- Objekt auswählen (z.B. Spielfeld-Dimmer)
- Eigenschaften → Object-ID notieren
- In
app.jseintragen
Wichtig: Homeserver muss HTTPS unterstützen!
Falls selbstsigniertes Zertifikat:
- Safari öffnen:
https://[HS-IP]:443 - Zertifikat akzeptieren
- Dann PWA installieren
# Änderungen machen (z.B. in app.js)
git add .
git commit -m "Update: Neue Raum-Kachel hinzugefügt"
git push origin main- GitHub Pages baut die Seite neu (ca. 30 Sekunden)
- Service Worker erkennt neue Version
- iPads laden automatisch neu beim nächsten Öffnen
- Notification "Update verfügbar" → Auto-Reload
Auf iPad:
- App schließen (Wischen nach oben)
- Neu öffnen
- Update wird geladen
In style.css:
/* Hauptfarben */
background-color: #222; /* Hintergrund */
color: #fff; /* Text */
background: #00bcd4; /* Akzentfarbe (Cyan) */
border: 3px solid #00bcd4; /* Rahmen */In index.html:
<button class="room-tile" style="top: 30%; left: 50%;" data-room="7">
💡 Raum 7
</button>In index.html (Sidebar):
<div class="slider-group">
<label class="slider-label">🎪 VIP-Bereich</label>
<div class="slider-container">
<div class="slider-progress" id="progress-vip"></div>
<input type="range" min="0" max="100" value="0"
class="slider" id="slider-vip"
data-object-id="VIP-OBJECT-ID">
</div>
<span class="slider-value" id="value-vip">0%</span>
</div>In app.js Object-ID hinzufügen:
this.objectIDs = {
spielfeld: 'SPIELFELD-ID',
tribuene: 'TRIBUENE-ID',
sonstige: 'SONSTIGES-ID',
vip: 'VIP-OBJECT-ID' // ← Neu
};- Grundriss: 80% links
- Sidebar: 20% rechts
- Grundriss: 100% oben (60vh)
- Sidebar: 100% unten (40vh)
- Grundriss: 75%
- Sidebar: 25%
Prüfen:
- ✅ Homeserver erreichbar? (Ping-Test)
- ✅ IP-Adresse korrekt?
- ✅ HTTPS aktiviert?
- ✅ Passwort richtig?
- ✅ Zertifikat akzeptiert?
Lösung:
- Settings öffnen (⚙️)
- IP/Passwort prüfen
- Safari:
https://[IP]:443→ Zertifikat akzeptieren
Prüfen:
- ✅ Object-IDs korrekt in
app.js? - ✅ Verbindung aktiv? (Status: Verbunden)
- ✅ Browser-Konsole öffnen (Safari → Entwickler)
Lösung:
- Object-IDs vom Gira Experten prüfen
- API-Endpunkt testen:
POST /api/objects/[ID]/value
Lösung:
- App schließen (komplett)
- Safari öffnen → Cache leeren
- App neu installieren (vom Home-Bildschirm löschen)
- Neu hinzufügen (Schritt 2 wiederholen)
Funktioniert:
- ✅ UI wird angezeigt
- ✅ Slider können bewegt werden
- ✅ Werte werden lokal gespeichert
Nicht funktioniert:
- ❌ Echte Lichtsteuerung (kein Homeserver)
- ❌ Status-Updates
Sync: Sobald online → Werte werden automatisch gesendet
pca/
├── index.html # Haupt-HTML
├── style.css # Styles
├── app.js # JavaScript-Logik
├── sw.js # Service Worker (Auto-Update)
├── manifest.json # PWA-Manifest
├── netlify.toml # Netlify-Config (optional)
├── arena-grundriss.jpg # Grundriss (1920x1080)
├── icons/
│ ├── icon-192.png # App-Icon 192x192
│ └── icon-512.png # App-Icon 512x512
└── README.md # Diese Datei
- ✅ HTTPS-only in Produktion
- ✅ Basic Auth für Homeserver
- ✅ Passwort wird lokal gespeichert (localStorage)
- ✅ Kein Cloud-Service - alles lokal
⚠️ Wichtig: Passwort nicht in Git committen!
MIT License - Freie Nutzung und Anpassung.
GitHub Issues: https://github.com/Jan-Geiger-Networking/pca/issues
Kontakt: Jan Geiger Networking
🎯 Bereit für 4 iPads im Kiosk-Modus!
Git Push → 30s → Alle Geräte aktualisiert! 🚀