diff --git a/ioBroker/Blockly/Alarm_clock.ts b/ioBroker/Blockly/Alarm_clock.ts new file mode 100644 index 00000000..e1a9e6a9 --- /dev/null +++ b/ioBroker/Blockly/Alarm_clock.ts @@ -0,0 +1,45 @@ +const dp_userdata: string = '0_userdata.0.NSPanel'; +const dp_alias: string = 'alias.0.NSPanel'; + +// dpAction wird wenn der Wecker gestellt wird auf false geschaltet +// dpAction wird wenn die Weckzeit erreicht ist auf true geschaltet +// Der nachfolgende Datenpunkt muss manuell erstellt werden... +const dpAction: string = '0_userdata.0.example_boolean'; + +const Debug = true; + +let time: number; +let scheduleAlarmTime: any = null; +on({ id: dp_userdata + '.AlarmTime.State', change: 'ne' }, async (obj) => { + + time = getState(dp_userdata + '.AlarmTime.Time').val; + if (Debug) log('Uhrzeit: ' + time, 'info'); + if ('paused' == obj.state.val) { + await setStateAsync(dpAction, { val: false, ack: true }); + (function () { if (scheduleAlarmTime) { + clearSchedule(scheduleAlarmTime); + scheduleAlarmTime = null; + } + }); + } else if ('active' == obj.state.val) { + let stunde: number = Math.floor(time / 60); + let minute: number = time % 60; + if (Debug) log('Weckzeit: ' + ('0' + stunde).slice(-2) + ':' + ('0' + minute).slice(-2), 'info'); + scheduleAlarmTime = schedule(minute + ' ' + stunde + ' * * *', async () => { + await setStateAsync(dpAction, { val: false, ack: true }); + await setStateAsync(dp_userdata + '.AlarmTime.State', { val: 'paused', ack: true }); + }); + } +}); + +async function Init_Datenpunkte() { + if (existsState(dp_alias + '.AlarmTime.ACTUAL') == false) { + await createStateAsync(dp_userdata + '.AlarmTime.Time', '0', { type: 'number' }); + await createStateAsync(dp_userdata + '.AlarmTime.State', 'paused', { type: 'string' }); + setObject(dp_alias + '.AlarmTime', { type: 'channel', common: { role: 'value.alarmtime', name: 'Alarmtime' }, native: {} }); + await createAliasAsync(dp_alias + '.AlarmTime.ACTUAL', dp_userdata + '.AlarmTime.Time', true, { type: 'number', role: 'state', name: 'ACTUAL' }); + await createAliasAsync(dp_alias + '.AlarmTime.STATE', dp_userdata + '.AlarmTime.State', true, { type: 'string', role: 'state', name: 'STATE' }); + log("{id: '"+ dp_alias + ".AlarmTime', name: 'Wecker', onColor: Red, offColor: Green, useColor: true}", 'info'); + } +} +Init_Datenpunkte();