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