Files

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();