98 lines
3.8 KiB
JavaScript
98 lines
3.8 KiB
JavaScript
const Alexa = require('ask-sdk-core');
|
|
|
|
const { makeApplianceIntent, makeSimpleSensorIntent, makeSlotSensorIntent, PERIOD_PHRASES } = require('./factories');
|
|
const {
|
|
LaunchRequestHandler,
|
|
HelpIntentHandler,
|
|
CancelAndStopIntentHandler,
|
|
FallbackIntentHandler,
|
|
SessionEndedRequestHandler,
|
|
ErrorHandler,
|
|
} = require('./static-handlers');
|
|
|
|
// Hinweis: Temperaturabfragen laufen jetzt ueber die native Nabu-Casa-
|
|
// Smart-Home-Integration, nicht mehr ueber diesen Custom Skill.
|
|
|
|
// ---- Einfache Sensor-Werte (kein Slot) ----
|
|
|
|
const GetPowerUsageIntentHandler = makeSimpleSensorIntent({
|
|
intentName: 'GetPowerUsageIntent',
|
|
entityId: 'sensor.kammer_netzbezug_plus_keller_power_calc',
|
|
transformValue: (v) => Math.round(parseFloat(v)),
|
|
template: (value, unit) => `Der aktuelle Stromverbrauch betraegt ${value} ${unit || 'Watt'}.`,
|
|
notFoundMessage: 'Ich konnte den aktuellen Stromverbrauch nicht auslesen.',
|
|
});
|
|
|
|
const GetPowerKammerUsageIntentHandler = makeSimpleSensorIntent({
|
|
intentName: 'GetPowerKammerUsageIntent',
|
|
entityId: 'sensor.kammer_serverschrank_leistung',
|
|
transformValue: (v) => Math.round(parseFloat(v)),
|
|
template: (value, unit) => `Der aktuelle Stromverbrauch in der Kammer betraegt ${value} ${unit || 'Watt'}.`,
|
|
notFoundMessage: 'Ich konnte den aktuellen Stromverbrauch in der Kammer nicht auslesen.',
|
|
});
|
|
|
|
// ---- Stromkosten nach Zeitraum (Slot Period) ----
|
|
|
|
const GetEnergyCostIntentHandler = makeSlotSensorIntent({
|
|
intentName: 'GetEnergyCostIntent',
|
|
slotName: 'Period',
|
|
idToEntityMap: {
|
|
tag: 'sensor.netzbezug_kosten_tag',
|
|
woche: 'sensor.netzbezug_kosten_woche',
|
|
monat: 'sensor.netzbezug_kosten_monat',
|
|
},
|
|
transformValue: (v) => parseFloat(v).toFixed(2).replace('.', ','),
|
|
template: (value, unit, periodSpoken, periodId) =>
|
|
`Die Stromkosten fuer ${PERIOD_PHRASES[periodId] || periodSpoken} betragen ${value} ${unit || 'Euro'}.`,
|
|
unknownSlotMessage: 'Ich habe den Zeitraum leider nicht verstanden. Du kannst zum Beispiel nach Tag, Woche oder Monat fragen.',
|
|
});
|
|
|
|
const GetEnergyCostKammerIntentHandler = makeSlotSensorIntent({
|
|
intentName: 'GetEnergyCostKammerIntent',
|
|
slotName: 'Period',
|
|
idToEntityMap: {
|
|
tag: 'sensor.kammer_serverschrank_kosten_tag',
|
|
woche: 'sensor.kammer_serverschrank_kosten_woche',
|
|
monat: 'sensor.kammer_serverschrank_kosten_monat',
|
|
},
|
|
transformValue: (v) => parseFloat(v).toFixed(2).replace('.', ','),
|
|
template: (value, unit, periodSpoken, periodId) =>
|
|
`Die Stromkosten fuer die Kammer ${PERIOD_PHRASES[periodId] || periodSpoken} betragen ${value} ${unit || 'Euro'}.`,
|
|
unknownSlotMessage: 'Ich habe den Zeitraum leider nicht verstanden. Du kannst zum Beispiel nach Tag, Woche oder Monat fragen.',
|
|
});
|
|
|
|
// ---- Geraete mit Status/Fortschritt/Endzeit ----
|
|
|
|
const GetWashingMachineIntentHandler = makeApplianceIntent({
|
|
intentName: 'GetWashingMachineIntent',
|
|
deviceName: 'Die Waschmaschine',
|
|
statusEntity: 'sensor.waschmaschine_betriebszustand',
|
|
progressEntity: 'sensor.waschmaschine_programm_fortschritt',
|
|
endTimeEntity: 'sensor.waschmaschine_programm_endzeit',
|
|
});
|
|
|
|
const GetDryerIntentHandler = makeApplianceIntent({
|
|
intentName: 'GetDryerIntent',
|
|
deviceName: 'Der Trockner',
|
|
statusEntity: 'sensor.trockner_betriebszustand',
|
|
progressEntity: 'sensor.trockner_programm_fortschritt',
|
|
endTimeEntity: 'sensor.trockner_programm_endzeit',
|
|
});
|
|
|
|
exports.handler = Alexa.SkillBuilders.custom()
|
|
.addRequestHandlers(
|
|
LaunchRequestHandler,
|
|
GetPowerUsageIntentHandler,
|
|
GetPowerKammerUsageIntentHandler,
|
|
GetEnergyCostIntentHandler,
|
|
GetEnergyCostKammerIntentHandler,
|
|
GetWashingMachineIntentHandler,
|
|
GetDryerIntentHandler,
|
|
HelpIntentHandler,
|
|
CancelAndStopIntentHandler,
|
|
FallbackIntentHandler,
|
|
SessionEndedRequestHandler
|
|
)
|
|
.addErrorHandlers(ErrorHandler)
|
|
.lambda();
|