Ik vond dit een leuke uitdaging (en handig om zelf te hebben ) en ik heb dit HomeyScript geschreven:
let bSearchAll = false;
let bAlarmFound = false;
let bCreateTags = true;
let AlarmName = "";
let IgnoredAlarms = ["XXXXX","YYYYY"] // Hiermee kan je alarmen uitsluiten
//Moet we naar een specifiek alarm zoeken?
if (args[0] == "" || args[0] == undefined) {
bSearchAll = true;
console.log ('We doorzoeken alle alarmen');
}else{
AlarmName = args[0]
console.log ('We zoeken naar alarm '+AlarmName+"'");
}
let NextAlarmUNIX = 0;
let NextAlarmName = "";
let NextAlarmTime = "";
let NextAlarmDay = "";
let NextAlarmPhrase = "";
//Loop door alle alarmen
let alarms = await Homey.alarms.getAlarms();
for (const alarm of Object.values(alarms)){
if ((bSearchAll && !IgnoredAlarms.includes(alarm.name) && alarm.enabled)||
(!bSearchAll && alarm.name == AlarmName && alarm.enabled)){
bAlarmFound = true;
if (NextAlarmUNIX == 0){
// Allereerste alarm is gevonden
NextAlarmName = alarm.name;
NextAlarmUNIX = DateToUNIXTimeStamp(alarm.nextOccurance)
NextAlarmTime = alarm.time;
NextAlarmDay = getDayName(alarm.nextOccurance,"nl-NL");
} else {
// We hebben nog een alarm gevonden
// Check of dit alarm eerder afgaat dan de vorige
if (DateToUNIXTimeStamp(alarm.nextOccurance) < NextAlarmUNIX){
NextAlarmName = alarm.name;
NextAlarmUNIX = DateToUNIXTimeStamp(alarm.nextOccurance)
NextAlarmTime = alarm.time;
NextAlarmDay = getDayName(alarm.nextOccurance,"nl-NL");
}
}
}
}
if (bAlarmFound){ // We hebben een alarm gevonden
NextAlarmPhrase = "Het eerstvolgende alarm is '"+
NextAlarmName+"', die op "+NextAlarmDay+" afgaat om "+NextAlarmTime+"."
if (bCreateTags){ // Maak tags aan die gebruikt kunnen worden in andere flows
await tag('NextAlarmName', NextAlarmName);
await tag('NextAlarmDay', NextAlarmDay);
await tag('NextAlarmTime', NextAlarmTime);
await tag('NextAlarmPhrase', NextAlarmPhrase);
}
}else{ // We hebben geen alarm gevonden
if (bSearchAll){
NextAlarmPhrase = "Geen alarm gevonden."
}else{
NextAlarmPhrase = "Alarm '"+AlarmName+"' is niet gevonden of het alarm staat niet aan."
}
if (bCreateTags){ // Maak tags aan die gebruikt kunnen worden in andere flows
await tag('NextAlarmName', NextAlarmName);
await tag('NextAlarmDay', NextAlarmDay);
await tag('NextAlarmTime', NextAlarmTime);
await tag('NextAlarmPhrase', NextAlarmPhrase);
}
}
// Debug de NextAlarmPhrase in de output
console.log(NextAlarmPhrase);
// Geef terug of er een alarm is gevonden
return bAlarmFound;
function DateToUNIXTimeStamp (my_date){
const date = new Date(my_date);
return (Math.floor(date.getTime()/1000));
}
function getDayName(dateStr, locale){
var date = new Date(dateStr);
return date.toLocaleDateString(locale, { weekday: 'long' });
}
Je kan alle alarmen doorzoeken, of specifiek naar een alarm zoeken:
En dit zijn de tags die worden gegenereerd: