SETUP.md: vollständige Schritt-für-Schritt-Anleitung, ohne Temperatur/RoomList-Reste

This commit is contained in:
2026-08-25 05:07:34 +02:00
parent 3a4b0f897f
commit 70946ffac3
+166
View File
@@ -0,0 +1,166 @@
# Setup-Anleitung: Home Assistant Alexa Skill
## Schritt-für-Schritt-Anleitung
### 1. Skill in der Alexa Developer Console anlegen
1. Auf [developer.amazon.com](https://developer.amazon.com) einloggen → **Alexa****Alexa Skills Kit**
2. **Create Skill**
3. Namen vergeben (z.B. "HomeAssistantSkill")
4. Locale: **German (DE)**
5. Modell: **Custom**
6. Hosting-Methode: **Alexa-hosted (Node.js)**
7. Hosting-Region: **EU (Ireland)**
8. Template: **Start from Scratch**
9. **Create Skill** klicken
### 2. Invocation Name festlegen
- Build-Tab → **Invocations** → Invocation Name setzen, z.B. `home assistant`
- Save klicken
### 3. Slot Type anlegen
**PeriodList** (für Stromkosten-Abfragen, wird von mehreren Intents wiederverwendet):
- Build-Tab → **Slot Types****+ Add** → Namen `PeriodList` → "Create custom slot type"
| Value | ID |
|---|---|
| Tag | tag |
| Woche | woche |
| Monat | monat |
Tipp: Beim Value "Tag" als Synonym z.B. "heute" ergänzen.
Die ID ist wichtig: Der Code liest den sauberen, festen Wert über die Slot-Resolution aus.
- Save klicken
### 4. Intents anlegen
Build-Tab → **Intents**`HelloWorldIntent` löschen. Danach folgende Intents anlegen:
**GetPowerUsageIntent** (kein Slot):
```
wie hoch ist der aktuelle stromverbrauch
was ist die aktuelle leistung
wie viel strom verbrauchen wir gerade
```
**GetPowerKammerUsageIntent** (kein Slot):
```
wie hoch ist der aktuelle stromverbrauch in der kammer
was ist die aktuelle leistung in der kammer
```
**GetEnergyCostIntent** (mit Slot `{Period}`, Slot Type `PeriodList`):
```
wie hoch sind die stromkosten diesen {Period}
wie hoch sind die stromkosten {Period}
was kostet der strom diesen {Period}
```
Beim Eintippen von `{Period}` Popup "Create a new slot" → **Add**. Danach bei Intent Slots `Period` als Slot Type `PeriodList`.
**GetEnergyCostKammerIntent** (mit Slot `{Period}`, Slot Type `PeriodList`):
```
wie hoch sind die stromkosten für die kammer diesen {Period}
was kostet die kammer diesen {Period}
```
**GetWashingMachineIntent** (kein Slot):
```
wie lange läuft die waschmaschine noch
wann ist die waschmaschine fertig
ist die waschmaschine fertig
```
**GetDryerIntent** (kein Slot):
```
wie lange läuft der trockner noch
wann ist der trockner fertig
ist der trockner fertig
```
> Die Standard-Intents (Cancel/Help/Stop/NavigateHome/Fallback) bleiben unverändert.
### 5. Modell bauen
- Oben rechts **Build Skill** klicken
- Nach *jeder* Änderung an Utterances/Intents/Slots muss neu gebaut werden.
### 6. Long-Lived Access Token erstellen
- Home Assistant: Profil → runterscrollen zu **"Long-lived access tokens"** → Token erstellen → sofort kopieren
### 7. Code einrichten
- Skill → Tab **Code**
- `index.js`, `factories.js`, `ha-client.js`, `static-handlers.js` aus diesem Repo übernehmen (per **New File** anlegen)
- `package.json` ersetzen
- Neue Datei `.env` anlegen, Inhalt aus `.env.example` mit echten Werten:
```
HA_URL=https://deine-ha-domain.de
HA_TOKEN=dein-long-lived-access-token
```
- Entity-IDs in `index.js` an deine Installation anpassen
- **Save** → **Deploy**
### 8. Temperaturabfragen (native Integration)
1. Home Assistant → Einstellungen → Sprachassistenten → Alexa → `climate`-Entitäten freigeben
2. Alexa-App: Gerät dem passenden Raum zuweisen
3. Falls nötig: Geräte neu suchen lassen
4. Danach: *"Alexa, wie warm ist es im Wohnzimmer"* — ohne Skill-Namen
### 9. Testen
- Tab **Test** → Development
- Simulator, z.B.: `frag home assistant was ist die aktuelle leistung`
---
## Entity-Referenz
**Stromverbrauch:**
```js
GetPowerUsageIntentHandler: 'sensor.kammer_netzbezug_plus_keller_power_calc'
GetPowerKammerUsageIntentHandler: 'sensor.kammer_serverschrank_leistung'
```
**Stromkosten:**
```js
// GetEnergyCostIntentHandler
tag: 'sensor.netzbezug_kosten_tag',
woche: 'sensor.netzbezug_kosten_woche',
monat: 'sensor.netzbezug_kosten_monat',
// GetEnergyCostKammerIntentHandler
tag: 'sensor.kammer_serverschrank_kosten_tag',
woche: 'sensor.kammer_serverschrank_kosten_woche',
monat: 'sensor.kammer_serverschrank_kosten_monat',
```
**Waschmaschine:**
```js
statusEntity: 'sensor.waschmaschine_betriebszustand'
progressEntity: 'sensor.waschmaschine_programm_fortschritt'
endTimeEntity: 'sensor.waschmaschine_programm_endzeit'
```
**Trockner:**
```js
statusEntity: 'sensor.trockner_betriebszustand'
progressEntity: 'sensor.trockner_programm_fortschritt'
endTimeEntity: 'sensor.trockner_programm_endzeit'
```
---
## Fehlersuche
- **Fehlermeldung im Simulator:** JSON Output rechts prüfen
- **Fallback direkt nach neuem Intent:** "Build Skill" vergessen
- **Keine Verbindung:** `HA_URL` prüfen (kein Pfad, kein Slash am Ende), HA von außen erreichbar?
- **Zahlen falsch vorgelesen:** Werte runden bzw. mit Komma formatieren (bereits umgesetzt)
- **Ausführliche Logs:** Code-Tab → CloudWatch Logs