Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

iobroker.alexa-timer-vis

Package Overview
Dependencies
Maintainers
2
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

iobroker.alexa-timer-vis - npm Package Compare versions

Comparing version 0.1.9 to 0.1.11

4

admin/i18n/de/translations.json
{
"Alexa Timer für die Vis": "Alexa Timer für die Vis",
"Datenpunkt, Alexa": "Datenpunkt, Alexa"
"Datenpunkt, Alexa": "Datenpunkt, Alexa",
"Intervall, Zeit übrig mehr als 60 sek": "Intervall, verbleibende Zeit mehr als 60 Sek",
"Intervall, Zeit übrig weniger als 60 sek": "Intervall, verbleibende Zeit weniger als 60 Sek"
}
{
"Alexa Timer für die Vis": "Alexa Timer for the Vis",
"Datenpunkt, Alexa": "Data Point, Alexa"
"Datenpunkt, Alexa": "Data Point, Alexa",
"Intervall, Zeit übrig mehr als 60 sek": "Interval, time left more than 60 sec",
"Intervall, Zeit übrig weniger als 60 sek": "Interval, time left less than 60 sec"
}
{
"Alexa Timer für die Vis": "Temporizador de Alexa para Vis",
"Datenpunkt, Alexa": "Punto de datos, Alexa"
"Datenpunkt, Alexa": "Punto de datos, Alexa",
"Intervall, Zeit übrig mehr als 60 sek": "Intervalo, tiempo restante más de 60 seg.",
"Intervall, Zeit übrig weniger als 60 sek": "Intervalo, tiempo restante menos de 60 seg."
}
{
"Alexa Timer für die Vis": "Minuterie Alexa pour la Vis",
"Datenpunkt, Alexa": "Point de données, Alexa"
"Datenpunkt, Alexa": "Point de données, Alexa",
"Intervall, Zeit übrig mehr als 60 sek": "Intervalle, temps restant supérieur à 60 sec",
"Intervall, Zeit übrig weniger als 60 sek": "Intervalle, temps restant inférieur à 60 sec"
}
{
"Alexa Timer für die Vis": "Alexa Timer per il Vis",
"Datenpunkt, Alexa": "Punto dati, Alexa"
"Datenpunkt, Alexa": "Punto dati, Alexa",
"Intervall, Zeit übrig mehr als 60 sek": "Intervallo, tempo rimasto più di 60 sec",
"Intervall, Zeit übrig weniger als 60 sek": "Intervallo, tempo rimasto inferiore a 60 sec"
}
{
"Alexa Timer für die Vis": "Alexa Timer voor de Vis",
"Datenpunkt, Alexa": "Datapunt, Alexa"
"Datenpunkt, Alexa": "Datapunt, Alexa",
"Intervall, Zeit übrig mehr als 60 sek": "Interval, resterende tijd meer dan 60 sec",
"Intervall, Zeit übrig weniger als 60 sek": "Interval, resterende tijd minder dan 60 sec"
}
{
"Alexa Timer für die Vis": "Alexa Timer dla Vis",
"Datenpunkt, Alexa": "Punkt danych, Alexa"
"Datenpunkt, Alexa": "Punkt danych, Alexa",
"Intervall, Zeit übrig mehr als 60 sek": "Interwał, pozostało ponad 60 sekund",
"Intervall, Zeit übrig weniger als 60 sek": "Interwał, pozostało mniej niż 60 sekund"
}
{
"Alexa Timer für die Vis": "Alexa Timer para o Vis",
"Datenpunkt, Alexa": "Data Point, Alexa"
"Datenpunkt, Alexa": "Data Point, Alexa",
"Intervall, Zeit übrig mehr als 60 sek": "Intervalo, tempo restante mais de 60 seg",
"Intervall, Zeit übrig weniger als 60 sek": "Intervalo, tempo restante inferior a 60 segundos"
}
{
"Alexa Timer für die Vis": "Таймер Alexa для Vis",
"Datenpunkt, Alexa": "Точка данных, Alexa"
"Datenpunkt, Alexa": "Точка данных, Alexa",
"Intervall, Zeit übrig mehr als 60 sek": "Интервал, осталось более 60 сек.",
"Intervall, Zeit übrig weniger als 60 sek": "Интервал, осталось менее 60 сек."
}
{
"Alexa Timer für die Vis": "用于 Vis 的 Alexa 计时器",
"Datenpunkt, Alexa": "数据点,Alexa"
"Datenpunkt, Alexa": "数据点,Alexa",
"Intervall, Zeit übrig mehr als 60 sek": "间隔,剩余时间超过60秒",
"Intervall, Zeit übrig weniger als 60 sek": "间隔,剩余时间少于 60 秒"
}

@@ -7,2 +7,4 @@ /*global systemDictionary:true */

"Datenpunkt, Alexa": { "en": "Data Point, Alexa", "de": "Datenpunkt, Alexa", "ru": "Точка данных, Alexa", "pt": "Data Point, Alexa", "nl": "Datapunt, Alexa", "fr": "Point de données, Alexa", "it": "Punto dati, Alexa", "es": "Punto de datos, Alexa", "pl": "Punkt danych, Alexa", "zh-cn": "数据点,Alexa"},
"Intervall, Zeit übrig mehr als 60 sek": { "en": "Interval, time left more than 60 sec", "de": "Intervall, verbleibende Zeit mehr als 60 Sek", "ru": "Интервал, осталось более 60 сек.", "pt": "Intervalo, tempo restante mais de 60 seg", "nl": "Interval, resterende tijd meer dan 60 sec", "fr": "Intervalle, temps restant supérieur à 60 sec", "it": "Intervallo, tempo rimasto più di 60 sec", "es": "Intervalo, tiempo restante más de 60 seg.", "pl": "Interwał, pozostało ponad 60 sekund", "zh-cn": "间隔,剩余时间超过60秒"},
"Intervall, Zeit übrig weniger als 60 sek": { "en": "Interval, time left less than 60 sec", "de": "Intervall, verbleibende Zeit weniger als 60 Sek", "ru": "Интервал, осталось менее 60 сек.", "pt": "Intervalo, tempo restante inferior a 60 segundos", "nl": "Interval, resterende tijd minder dan 60 sec", "fr": "Intervalle, temps restant inférieur à 60 sec", "it": "Intervallo, tempo rimasto inferiore a 60 sec", "es": "Intervalo, tiempo restante menos de 60 seg.", "pl": "Interwał, pozostało mniej niż 60 sekund", "zh-cn": "间隔,剩余时间少于 60 秒"},
};
{
"common": {
"name": "alexa-timer-vis",
"version": "0.1.9",
"version": "0.1.11",
"news": {
"0.1.9":{
"en":"Bugfix"
"0.1.11":{
"en": "Delete of Timer with same Inputvalue, fixed"
},
"0.1.10": {
"en": "Possibility to set intervals manually",
"de": "Möglichkeit, Intervalle manuell einzustellen",
"ru": "Возможность установить интервалы вручную",
"pt": "Possibilidade de definir intervalos manualmente",
"nl": "Mogelijkheid om intervallen handmatig in te stellen",
"fr": "Possibilité de définir des intervalles manuellement",
"it": "Possibilità di impostare manualmente gli intervalli",
"es": "Posibilidad de establecer intervalos manualmente",
"pl": "Możliwość ręcznego ustawienia interwałów",
"zh-cn": "可以手动设置间隔"
},
"0.1.9": {
"en": "Bugfix",
"de": "Bug-Fix",
"ru": "Исправлена ​​ошибка",
"pt": "Correção de bug",
"nl": "Bugfix",
"fr": "Correction d'un bug",
"it": "Risoluzione del problema",
"es": "Arreglo del fallo",
"pl": "Naprawa błędów",
"zh-cn": "错误修复"
},
"0.1.8": {

@@ -116,50 +140,2 @@ "en": "Bugfix, Button added to stop the selected Timer",

"zh-cn": "错误,在关机后删除间隔和超时时,已修复"
},
"0.0.4": {
"en": "Adjustments for voice input and fixes",
"de": "Anpassungen für die Spracheingabe und Korrekturen",
"ru": "Корректировки голосового ввода и исправления",
"pt": "Ajustes para entrada de voz e correções",
"nl": "Aanpassingen voor spraakinvoer en reparaties",
"fr": "Ajustements pour la saisie vocale et correctifs",
"it": "Regolazioni per l'input vocale e correzioni",
"es": "Ajustes para entrada de voz y correcciones.",
"pl": "Korekty wprowadzania głosowego i poprawki",
"zh-cn": "语音输入的调整和修复"
},
"0.0.3": {
"en": "Adjustments for vis",
"de": "Anpassungen für vis",
"ru": "Корректировки для vis",
"pt": "Ajustes para vis",
"nl": "Aanpassingen voor vis",
"fr": "Ajustements pour vis",
"it": "Adeguamenti per vis",
"es": "Ajustes para vis",
"pl": "Korekty vis",
"zh-cn": "可见性调整"
},
"0.0.2": {
"en": "Adjustment",
"de": "Einstellung",
"ru": "Корректирование",
"pt": "Ajustamento",
"nl": "Aanpassing",
"fr": "Ajustement",
"it": "Regolazione",
"es": "Ajustamiento",
"pl": "Dostosowanie",
"zh-cn": "调整"
},
"0.0.1": {
"en": "Initial Release",
"de": "Erstveröffentlichung",
"ru": "Начальная версия",
"pt": "lançamento inicial",
"nl": "Eerste uitgave",
"fr": "Première version",
"it": "Versione iniziale",
"es": "Versión inicial",
"pl": "Pierwsze wydanie",
"zh-cn": "初始发行"
}

@@ -169,24 +145,24 @@ },

"titleLang": {
"en": "Alexa Timer für Vis",
"de": "Alexa Timer für Vis",
"ru": "Alexa Timer für Vis",
"en": "Alexa Timer for Vis",
"de": "Alexa-Timer für Vis",
"ru": "Алекса Таймер для Вис",
"pt": "Alexa Timer para Vis",
"nl": "Alexa Timer voor Vis",
"fr": "Alexa Timer pour Vis",
"it": "Alexa Timer per la visualizzazione",
"es": "Temporizador de Alexa für Vis",
"pl": "Alexa Timer dla wizy",
"zh-cn": "Alexa Timer für Vis"
"fr": "Minuterie Alexa pour Vis",
"it": "Timer Alexa per Vis",
"es": "Temporizador de Alexa para Vis",
"pl": "Alexa Timer dla Vis",
"zh-cn": "用于 Vis 的 Alexa 计时器"
},
"desc": {
"en": "Alexa Timer ausgeben um in der Vis anzuzeigen",
"de": "Alexa Timer ausgeben um in der Vis anzuzeigen",
"ru": "Алекса Таймер ausgeben um in der Vis anzuzeigen",
"pt": "Alexa Timer ausgeben um in der Vis anzuzeigen",
"nl": "Alexa Timer ausgeben um in der Vis anzuzeigen",
"fr": "Alexa Timer ausgeben um in der Vis anzuzeigen",
"it": "Alexa Timer ausgeben um in der Vis anzuzeigen",
"es": "Alexa Timer ausgeben um in der Vis anzuzeigen",
"pl": "Alexa Timer ausgeben um in der Vis anzuzeigen",
"zh-cn": "Alexa Timer ausgeben um in der Vis anzuzeigen"
"en": "Output Alexa timer to display timers in the VIS",
"de": "Alexa-Timer ausgeben, um Timer im VIS anzuzeigen",
"ru": "Вывод таймера Alexa для отображения таймеров в VIS",
"pt": "Saída do temporizador Alexa para exibir temporizadores no VIS",
"nl": "Voer Alexa-timer uit om timers in het VIS . weer te geven",
"fr": "Sortir la minuterie Alexa pour afficher les minuteries dans le VIS",
"it": "Emetti il ​​timer di Alexa per visualizzare i timer nel VIS",
"es": "Salida del temporizador de Alexa para mostrar los temporizadores en el VIS",
"pl": "Wyjście zegara Alexa, aby wyświetlić zegary w VIS",
"zh-cn": "输出 Alexa 计时器以在 VIS 中显示计时器"
},

@@ -219,9 +195,9 @@ "authors": [

"materialize": true,
"supportCustoms": true,
"supportCustoms": false,
"dependencies": [
{
"js-controller": ">=2.0.0"
}
}
],
"globalDependencies": [
"globalDependency": [
{

@@ -233,3 +209,5 @@ "alexa2": ">=3.11.2"

"native": {
"state": "alexa2.0.History.summary"
"state": "alexa2.0.History.summary",
"intervall1": 1,
"intervall2": 1
},

@@ -258,4 +236,147 @@ "objects": [],

"native": {}
},
{
"_id": "all_Timer.alive",
"type": "state",
"common": {
"name": "Ist ein Timer activ?",
"type": "boolean",
"role": "indicator",
"read": true,
"write": true,
" def": false
},
"native": {}
},
{
"_id":"timer1.alive",
"type": "state",
"common": {
"name": "Timer activ",
"type": "boolean",
"role": "indicator",
"read": true,
"write": true,
"def": false
},
"native": {}
},
{
"_id":"timer1.hour",
"type": "state",
"common": {
"name": "Hours",
"type": "string",
"role": "value",
"read": true,
"write": true,
"def": "0"
},
"native": {}
},
{
"_id":"timer1.minute",
"type": "state",
"common": {
"name": "Minutes",
"type": "string",
"role": "value",
"read": true,
"write": true,
"def": "0"
},
"native": {}
},
{
"_id":"timer1.second",
"type": "state",
"common": {
"name": "Seconds",
"type": "string",
"role": "value",
"read": true,
"write": true,
"def": "0"
},
"native": {}
},
{
"_id":"timer1.string",
"type": "state",
"common": {
"name": "String",
"type": "string",
"role": "value",
"read": true,
"write": true,
"def": "00 : 00 : 00 Std"
},
"native": {}
},
{
"_id":"timer1.name",
"type": "state",
"common": {
"name": "Name des Timers",
"type": "string",
"role": "value",
"read": true,
"write": true,
"def": "Timer"
},
"native": {}
},
{
"_id":"timer1.TimeStart",
"type": "state",
"common": {
"name": "Start Time",
"type": "string",
"role": "value",
"read": true,
"write": true,
"def": "00:00:00"
},
"native": {}
},
{
"_id":"timer1.TimeEnd",
"type": "state",
"common": {
"name": "End Time",
"type": "string",
"role": "value",
"read": true,
"write": true,
"def": "00:00:00"
},
"native": {}
},
{
"_id":"timer1.InputDeviceName",
"type": "state",
"common": {
"name": "Input of Device",
"type": "string",
"role": "value",
"read": true,
"write": true,
"def": ""
},
"native": {}
},
{
"_id":"timer1.Reset",
"type": "state",
"common": {
"name": "Reset Timer",
"type": "boolean",
"role": "button",
"read": false,
"write": true,
"def": false
},
"native": {}
}
]
}

@@ -20,2 +20,4 @@ "use strict";

let idInstanze;
// Variablen für Timeouts und Intervalle

@@ -28,2 +30,4 @@ let setStates;

let datapoint;
let intervallMore60 = 0;
let intervallLess60 = 0;
// Variable Funktion

@@ -36,3 +40,3 @@ let writeState;

"condition": {
"deleteTimer": ["stopp", "stoppe", "anhalten","abbrechen","beenden","reset","resete","löschen", "lösche", "lösch","stop","delete"], // Vorselektion stoppen oder löschen
"deleteTimer": ["stopp", "stoppe", "anhalten","abbrechen","beenden","beende","reset","resete","löschen", "lösche", "lösch","stop","delete"], // Vorselektion stoppen oder löschen
"activateTimer": ["stunde", "minute", "sekunde","hour","minute", "second"], // Vorselektion hinzufügen

@@ -42,3 +46,3 @@ },

"interval": 1000,// Aktualisierungsinterval
"notNoted": ["timer","auf","auf,", "setze","setz","stell","stelle","den","einen","set","the","a","for"], // Wörter die nicht beachtet werden sollen
"notNoted": ["timer","auf","auf,","erstelle","mit","ein", "setze","setz","stell","stelle","den","einen","set","the","a","for"], // Wörter die nicht beachtet werden sollen
"stopAll": ["alle","all"], // Spezielle Definition zum löschen aller Timer

@@ -68,3 +72,4 @@ "connecter": ["und","and"], // Verbindungsglied im Text, für das ein + eingesetzt werden soll

"serialNumber":"",
"timerInput":""
"timerInput":"",
"timerInterval":0
},

@@ -77,2 +82,3 @@ },

"zwei": 2,
"zwo": 2,
"two": 2,

@@ -105,3 +111,3 @@ "drei": 3,

"fifteen": 15,
"sechszehn": 16,
"sechzehn": 16,
"sixteen": 16,

@@ -122,3 +128,3 @@ "siebzehn": 17,

"fifty": 50,
"sechszig": 60,
"sechzig": 60,
"sixty": 60,

@@ -135,2 +141,14 @@ "siebzig": 70,

"ziffern":["0", "1", "2", "3", "4", "5", "6","7", "8", "9"],
"zuweisung":{
"erster" : 1,
"eins": 1,
"zweiter" : 2,
"zwei": 2,
"dritter": 3,
"drei":3,
"vierter": 4,
"vier":4,
"fünfter": 5,
"fünf": 5
},
"interval":{

@@ -168,2 +186,10 @@ "1" : "leer",

datapoint = this.config.state;
const datapointArray = datapoint.split(".");
idInstanze = {
"adapter" : datapointArray[0],
"instanz": datapointArray[1],
"channel_history": datapointArray[2]
};
intervallMore60 = this.config.intervall1;
intervallLess60 = this.config.intervall2;
// Suchen nach dem Alexa Datenpunkt, und schaltet den Adapter auf grün

@@ -192,4 +218,3 @@ this.getForeignObject(datapoint, (err, obj) => {

// Nur wenn die aktualisierung aus der Variable "datapoint" kommt soll der Code ausgeführt werden
if (id == datapoint){
// @ts-ignore
if (state && id == datapoint){
if (state.val !== "" && init == false) {

@@ -206,3 +231,2 @@

// @ts-ignore
timerObject.timerActiv.data.value = state.val;

@@ -213,3 +237,3 @@ const value = timerObject.timerActiv.data.value;

if (value.indexOf("timer") >= 0) {
this.log.info("Command to control the timer found");
this.log.info("Command to control the timer, found");

@@ -223,2 +247,3 @@ // Überprüfen ob ein Timer hinzugefügt wird oder gestoppt wird

if (value.indexOf(element) >= 0 && array == "deleteTimer") {
this.log.info("Timer is to be stopped!");

@@ -228,3 +253,4 @@ //Eingabe Text loggen

// Input aus Alexas Spracheingabe zu Array konvertieren
const timerArray = value.split(" ");
let timerArray = value.split(",");
timerArray = timerArray[0].split(" ");

@@ -238,16 +264,28 @@ // RückgabeArray erfassen

// Timer in Sekunden ausgeben lassen, damit der passende Timer abgebrochen werden kann
const timerAbortsec = eval(returnArray[0]);
let timerAbortsec;
try {
timerAbortsec = eval(returnArray[0]);
}
catch(e){
this.log.debug("Input is invalid. Call the Developer");
}
// Index Timer löschen
const deleteTimerIndex = returnArray[2];
if(value.indexOf(element) >= 0 && i === false && value.indexOf(",") != -1){
// Funktion die den bestimmten Timer herausfiltert und löscht, aufrufen
oneOfMultiTimerDelete(value, timerAbortsec);
break;
}else {
// Index Timer löschen
const deleteTimerIndex = returnArray[2];
// Timer anhalten
deleteTimer(timerAbortsec, name, deleteTimerIndex);
// Timer anhalten
deleteTimer(timerAbortsec, name, deleteTimerIndex);
i = true;
break;
i = true;
break;
}
} // Timer soll erstellt werden
}// Timer soll erstellt werden
// Das gesuchte Element muss vorhanden sein, TimerStop darf nicht aktiv sein
else if (value.indexOf(element) >= 0 && i === false) {
else if (value.indexOf(element) >= 0 && i === false && value.indexOf(",") == -1) { // Frage nach Benennung von doppeltem Timer, Erstellung von Timer unterbinden
this.log.info("Timer is to be added!");

@@ -263,5 +301,10 @@ //Eingabe Text loggen

// Rückgabewert Timer in Sekunden [0]
//this.log.info("Eval: " + returnArray[0]);
const timerSeconds = eval(returnArray[0]);
//this.log.info("Eval: " + returnArray[0]);// LogEval
let timerSeconds;
try {
timerSeconds = eval(returnArray[0]);
}
catch(e){
this.log.debug("Input is invalid. Call the Developer");
}
// Rückgabewert "Name" des Timers [1]

@@ -299,3 +342,4 @@ const name = returnArray[1];

break;
}
}// ein bestimmter Timer, von mehreren gleichen soll gelöscht werden
}

@@ -306,3 +350,3 @@ }

// @ts-ignore
}else if (id != "alexa-timer-vis.0.info.connection" && state.val !== false){
}else if (id != `alexa-timer-vis.${this.instance}.info.connection` && state.val !== false){
// Akualisierung aus Reset Datenpunkten

@@ -316,3 +360,3 @@ this.log.info("ID Reset Button " + JSON.stringify(id));

const timerOb = timerObject.timer[timer];
const alexaCommandState = `alexa2.0.Echo-Devices.${timerOb.serialNumber}.Commands.textCommand`;
const alexaCommandState = `alexa2.${idInstanze.instanz}.Echo-Devices.${timerOb.serialNumber}.Commands.textCommand`;
let name = "";

@@ -326,21 +370,47 @@ // Wenn der Name ungleich nur "Timer" ist soll dieser mit ausgegeben werden

// you can use the ack flag to detect if state is command(false) or status(true)
// @ts-ignore
// if (!state.ack) {
// this.log.info("ack is not set!");
// }
});
// The adapters config (in the instance object everything under the attribute "native") is accessible via
// this.config:
//this.log.info("Intervall: " + this.config.interval);
//this.log.info("config option2: " + this.config.option5);
/*
For every state in the system there has to be also an object of type state
Here a simple template for a boolean variable named "testVariable"
Because every adapter instance uses its own unique namespace variable names can't collide with other adapters variables
*/
// -------------------------------------------------------------------------------------------------------------------------------------------------
// Funktionen
//----------------------------------------------------------------------------------------------------------------------------------------------------
/**
*
* @param {string} input
*/
const oneOfMultiTimerDelete =(input, timerAbortsec)=>{
// Teil hinter dem Komma separieren
const seperateInput = input.slice(input.indexOf(",")+2, input.length);
// Falls mehrere Wörter hinter dem Komma stehen, soll eine Array erzeugt werden um ein bestimmtes Wort zu finden
const seperateInputArray = seperateInput.split(" ");
let timerNumber;
for (const element of seperateInputArray){
if (timerObject.zuweisung[element] > 0){
timerNumber = timerObject.zuweisung[element];
// this.log.info("Timer Number " + timerNumber);
}
}
// Liste die sortierbar ist erstellen
const sortable = [];
for (const element in timerObject.timer){
sortable.push([element, timerObject.timer[element].onlySec, timerObject.timer[element].timeLeftSec]);
}
// Das Array in dem die Timer sind nach der Größe sortieren und dann das entsprechende Element stoppen
sortable.sort(function(a,b){
return a[2] - b[2];
});
let i = 1;
// ---------------------Funktionen----------------------
for(const element of sortable){
if (element[1] == timerAbortsec && timerNumber == i){
timerObject.timerActiv.timer[element[0]] = false;
}else{
i++;
}
}
};
/**

@@ -359,2 +429,3 @@ * Ersetzt den ersten Buchstaben des eingegebenen Wortes durch den selbigen Großbuchstaben

//----------------------------------------------------------------------------------------------------------------------------------------------------
/**

@@ -372,2 +443,4 @@ * // Aus millisekunden nur die Zeit herausziehen

};
//----------------------------------------------------------------------------------------------------------------------------------------------------
/**

@@ -389,5 +462,2 @@ * Timer

const end_Time = time(endTime);
let hour;
let minutes;
let seconds;

@@ -407,6 +477,41 @@ // Index für Timer bestimmen

getInputDevice(timerObject.timer[index]);
let int;
// Intervall erzeugen
// @ts-ignore
timerObject.interval[index.slice(5)] = setInterval(() => {
let onlyOneTimer;
const timer = timerObject.timer[index];
// Wenn der eingegebene Timer unter 60 Sekunden ist, soll er direkt mit dem kleinen Intervall starten
if (sec > 60){
int = intervallMore60 * 1000;
onlyOneTimer = false;
}else{ // sonst mit dem großen Intervall
timerObject.timer.timer1.timerInterval = intervallLess60 *1000;
int = intervallLess60 * 1000;
onlyOneTimer = true;
}
// Funktion aufrufen, die das Intervall erzeugt
interval(endTime, sec, index, start_Time, end_Time, inputString, name, timer,int,onlyOneTimer);
};
//----------------------------------------------------------------------------------------------------------------------------------------------------
/**
* Funktion die ein Intervall erzeugt, und die Werte in einer seperaten Funktion
* @param {number} endTime
* @param {number} sec eingegebene Zeit in Sekunden
* @param {*} index Index, für den Ort wo gespeichert werden soll
* @param {string} start_Time Startzeit
* @param {string} end_Time berechnete Endzeit
* @param {string} inputString
* @param {string} name
* @param {*} timer
* @param {*} int
* @param {boolean} onlyOneTimer
*/
const interval = (endTime, sec, index, start_Time, end_Time, inputString, name, timer,int,onlyOneTimer)=>{
// Funktion um die Werte zu erzeugen
const generateValues = () =>{
let hour;
let minutes;
let seconds;
const timeLeft = endTime - new Date().getTime(); // Restlaufzeit errechnen in millisec

@@ -439,3 +544,2 @@

const timer = timerObject.timer[index];
// Timer Werte zum Objekt hinzufügen

@@ -447,2 +551,3 @@ timer.hour = hour;

timer.onlySec = sec;
timer.timeLeftSec = timeLeftSec;
timer.index = index;

@@ -459,4 +564,18 @@ timer.time_start = start_Time;

timerObject.timer[index].name = name;
return timeLeftSec;
};
// generate Values vor dem Intervall aufrufen, damit die Zahlen direkt erzeugt werden, und nicht erst nach z.b. 5 sek
generateValues();
// Intervall erzeugen
timerObject.interval[index.slice(5)] = setInterval(() => {
// Funktion im Intervall aufrufen
const timeLeftSec = generateValues();
// Timer anhalten
if (timeLeftSec <= 60 && onlyOneTimer == false){
onlyOneTimer = true;
clearTimeout(timerObject.interval[index.slice(5)]);
interval(endTime, sec, index, start_Time, end_Time, inputString, name, timer,timerObject.timer[index].timerInterval,true);
}
// Falls die Zeit abgelaufen ist, oder der Timer deaktiviert wurde

@@ -474,2 +593,3 @@ if (timeLeftSec <= 0 || timerObject.timerActiv.timer[index] == false) {

timer.onlySec = 0;
timer.timeLeftSec = 0;
timer.index = 0;

@@ -480,2 +600,4 @@ timer.name = "Timer";

timer.inputDevice ="";
timer.timerInterval = 0;
this.log.info("timer stopped");

@@ -485,5 +607,6 @@ clearInterval(timerObject.interval[index.slice(5)]);

}
}, timerObject.timerActiv.data.interval); // Aktualisierungszeit
}, int); // Aktualisierungszeit
};
//----------------------------------------------------------------------------------------------------------------------------------------------------
/**

@@ -493,7 +616,7 @@ * States erstellen

*/
const createState = (value) => {
const createState = async (value) => {
try {
for(let i = 1; i <= value; i++){
// Datenpunkt für allgemeine Anzeige das ein Timer aktiv ist
this.setObjectNotExistsAsync("all_Timer.alive", {
await this.setObjectNotExistsAsync("all_Timer.alive", {
type: "state",

@@ -510,3 +633,3 @@ common: {

});
this.setObjectNotExistsAsync("timer" + i + ".alive", {
await this.setObjectNotExistsAsync("timer" + i + ".alive", {
type: "state",

@@ -523,3 +646,3 @@ common: {

});
this.setObjectNotExistsAsync("timer" + i + ".hour", {
await this.setObjectNotExistsAsync("timer" + i + ".hour", {
type: "state",

@@ -536,3 +659,3 @@ common: {

});
this.setObjectNotExistsAsync("timer" + i + ".minute", {
await this.setObjectNotExistsAsync("timer" + i + ".minute", {
type: "state",

@@ -549,3 +672,3 @@ common: {

});
this.setObjectNotExistsAsync("timer" + i + ".second", {
await this.setObjectNotExistsAsync("timer" + i + ".second", {
type: "state",

@@ -562,3 +685,3 @@ common: {

});
this.setObjectNotExistsAsync("timer" + i + ".string", {
await this.setObjectNotExistsAsync("timer" + i + ".string", {
type: "state",

@@ -575,3 +698,3 @@ common: {

});
this.setObjectNotExistsAsync("timer" + i + ".name", {
await this.setObjectNotExistsAsync("timer" + i + ".name", {
type: "state",

@@ -588,3 +711,3 @@ common: {

});
this.setObjectNotExistsAsync("timer" + i + ".TimeStart", {
await this.setObjectNotExistsAsync("timer" + i + ".TimeStart", {
type: "state",

@@ -601,3 +724,3 @@ common: {

});
this.setObjectNotExistsAsync("timer" + i + ".TimeEnd", {
await this.setObjectNotExistsAsync("timer" + i + ".TimeEnd", {
type: "state",

@@ -614,3 +737,3 @@ common: {

});
this.setObjectNotExistsAsync("timer" + i + ".InputDeviceName", {
await this.setObjectNotExistsAsync("timer" + i + ".InputDeviceName", {
type: "state",

@@ -627,3 +750,3 @@ common: {

});
this.setObjectNotExistsAsync("timer" + i + ".Reset", {
await this.setObjectNotExistsAsync("timer" + i + ".Reset", {
type: "state",

@@ -641,3 +764,3 @@ common: {

// id zusammenbauen
const id = `alexa-timer-vis.0.timer${i}.Reset`;
const id = `alexa-timer-vis.${this.instance}.timer${i}.Reset`;
// Subscribe Reset Button

@@ -652,2 +775,3 @@ subscribeForeignStates(id);

//----------------------------------------------------------------------------------------------------------------------------------------------------
/**

@@ -660,3 +784,3 @@ * Eingabegerät ermitteln

const getInputDevice = (path)=>{
this.getForeignObject("alexa2.0.History.name", async (err, obj) => {
this.getForeignObject(`alexa2.${idInstanze.instanz}.History.name`, async (err, obj) => {
if (err || obj == null) {

@@ -667,6 +791,6 @@ // Error

} else {
const obj = await this.getForeignStateAsync("alexa2.0.History.name");
const obj = await this.getForeignStateAsync(`alexa2.${idInstanze.instanz}.History.name`);
// @ts-ignore
path.inputDevice = obj.val;
const serial = await this.getForeignStateAsync("alexa2.0.History.serialNumber");
const serial = await this.getForeignStateAsync(`alexa2.${idInstanze.instanz}.History.serialNumber`);
// @ts-ignore

@@ -678,2 +802,4 @@ path.serialNumber = serial.val;

};
//----------------------------------------------------------------------------------------------------------------------------------------------------
/**

@@ -732,3 +858,9 @@ * Funktion der Erfassung der gewünschten Zeit und des Namen

if (timerObject.ziffern.indexOf(timerString.charAt(timerString.length - 1)) == -1){
timerString += "(" + timerObject.zahlen[element];
// Wenn als letztes ein "faktor für stunde oder minute und +" ist darf keine zusätzliche klammer eingefügt werden
if ((timerString.charAt(timerString.length - 1) != "*3600+" || timerString.charAt(timerString.length - 1) != "*60+") && timerString.charAt(timerString.length - 3) != "("){
//this.log.info(JSON.stringify(timerString.charAt(timerString.length - 3)));
timerString += "(" + timerObject.zahlen[element];
}else {
timerString += timerObject.zahlen[element];
}
inputString += timerObject.zahlen[element] + " ";

@@ -756,2 +888,3 @@ // Wenn das Element "Hundert" ist und das letzte Element eine Zahl war soll multipliziert werden( Zwei * hundert + vierzig)

//----------------------------------------------------------------------------------------------------------------------------------------------------
/**

@@ -764,18 +897,32 @@ * Löschen eines Timers

*/
const deleteTimer = (sec, name, deleteTimerIndex) => {
for (const element in timerObject.timer)
// Sekunden müssen übereinstimmen, dürfen aber nicht 0 sein und der Name muss überein stimmen, darf aber nicht leer sein
if ((timerObject.timer[element]["onlySec"] == sec && sec !== 0) || (timerObject.timer[element]["name"] == name && name !== "")) {
timerObject.timerActiv.timer[element] = false;
const deleteTimer = async(sec, name, deleteTimerIndex) => {
let count = 0;
// Die Schleife ermittelt wie oft Timer mit dem eingegebenen Wert vorhanden sind, falls mehrmals darf nicht gelöscht werden, da nicht genau definiert ist welcher
// Timer gemeint ist
for(const element in timerObject.timer){
if (timerObject.timer[element].onlySec == sec){
count++;
}
// Wenn Index 1 ist und wirklich nur ein Timer aktiv ist wird dieser dann auch gestoppt
// Oder wenn Index 2 ist werden alle gestoppt
if ((deleteTimerIndex == 1 && timerObject.timerActiv.timerCount == 1) || deleteTimerIndex == 2) {
for (const element in timerObject.timerActiv.timer) {
timerObject.timerActiv.timer[element] = false;
}
// Wenn mehr als ein Timer die gleiche Eingabegröße hat darf nichts gemacht werden
if (count == 1 || deleteTimerIndex == 2){
for (const element in timerObject.timer)
// Sekunden müssen übereinstimmen, dürfen aber nicht 0 sein und der Name muss überein stimmen, darf aber nicht leer sein
if ((timerObject.timer[element]["onlySec"] == sec && sec !== 0) || (timerObject.timer[element]["name"] == name && name !== "")) {
timerObject.timerActiv.timer[element] = false;
}
// Wenn Index 1 ist und wirklich nur ein Timer aktiv ist wird dieser dann auch gestoppt
// Oder wenn Index 2 ist werden alle gestoppt
if ((deleteTimerIndex == 1 && timerObject.timerActiv.timerCount == 1) || deleteTimerIndex == 2) {
for (const element in timerObject.timerActiv.timer) {
timerObject.timerActiv.timer[element] = false;
}
}
}else {
this.log.info("More than one timer with the same value found");
}
};
//----------------------------------------------------------------------------------------------------------------------------------------------------
/**

@@ -788,4 +935,2 @@ * States in Datenpunkten schreiben

writeState(false);
// this.log.info(JSON.stringify(timerObject.timer.timer1));
//this.log.info(JSON.stringify(timerObject.timerActiv.timerCount));
// Aktualisierungs Intervall stoppen

@@ -805,2 +950,3 @@ if (timerObject.timerActiv.timerCount == 0) {

//----------------------------------------------------------------------------------------------------------------------------------------------------
/**

@@ -834,11 +980,15 @@ * Werte setzen

if (timer.hour !== undefined) {
this.setStateChanged(element + ".alive", timerObject.timerActiv.timer[element], true);
this.setStateChanged(element + ".hour", timer.hour, true);
this.setStateChanged(element + ".minute", timer.minute, true);
this.setStateChanged(element + ".second", timer.second, true);
this.setStateChanged(element + ".string", timer.string_Timer, true);
this.setStateChanged(element + ".TimeStart", timer.time_start, true);
this.setStateChanged(element + ".TimeEnd", timer.time_end, true);
this.setStateChanged(element + ".InputDeviceName", timer.inputDevice, true);
this.setStateChanged("all_Timer.alive", alive, true);
try{
this.setStateChanged(element + ".alive", timerObject.timerActiv.timer[element], true);
this.setStateChanged(element + ".hour", timer.hour, true);
this.setStateChanged(element + ".minute", timer.minute, true);
this.setStateChanged(element + ".second", timer.second, true);
this.setStateChanged(element + ".string", timer.string_Timer, true);
this.setStateChanged(element + ".TimeStart", timer.time_start, true);
this.setStateChanged(element + ".TimeEnd", timer.time_end, true);
this.setStateChanged(element + ".InputDeviceName", timer.inputDevice, true);
this.setStateChanged("all_Timer.alive", alive, true);
}catch(e){
this.log.info(e);
}
// Wenn der Name des Timers nicht definiert ist soll einfach nur Timer ausgegeben werden

@@ -855,15 +1005,3 @@ const name = timer.name;

// await this.setObjectNotExistsAsync(timer, {
// type: "state",
// common: {
// name: "Stunden",
// type: "number",
// role: "value",
// read: true,
// write: true,
// },
// native: {},
// });
// In order to get state updates, you need to subscribe to them. The following line adds a subscription for our variable we have created above.
// Um Statusupdates zu erhalten, müssen Sie diese abonnieren. Die folgende Zeile fügt ein Abonnement für unsere oben erstellte Variable hinzu

@@ -881,31 +1019,5 @@ //this.subscribeStates("testVariable");

// You can also add a subscription for multiple states. The following line watches all states starting with "lights."
// this.subscribeStates("lights.*");
// Or, if you really must, you can also watch all states. Don't do this if you don't need to. Otherwise this will cause a lot of unnecessary load on the system:
// this.subscribeStates("*");
/*
setState examples
you will notice that each setState will cause the stateChange event to fire (because of above subscribeStates cmd)
*/
// the variable testVariable is set to true as command (ack=false)
//await this.setStateAsync("testVariable", true);
// same thing, but the value is flagged "ack"
// ack should be always set to true if the value is received from or acknowledged from the target system
//await this.setStateAsync("testVariable", { val: true, ack: true });
// same thing, but the state is deleted after 30s (getState will return null afterwards)
//await this.setStateAsync("testVariable", { val: true, ack: true, expire: 30 });
// examples for the checkPassword/checkGroup functions
//let result = await this.checkPasswordAsync("admin", "iobroker");
//this.log.info("check user admin pw iobroker: " + result);
//result = await this.checkGroupAsync("admin", "admin");
//this.log.info("check group user admin group admin: " + result);
}
//----------------------------------------------------------------------------------------------------------------------------------------------------
/**

@@ -929,13 +1041,8 @@ * Is called when adapter shuts down - callback has to be called under any circumstances!

clearInterval(timerObject.interval[element]);
// if (timerObject.interval[element] != "leer"){
// }else{
// continue;
// }
}
this.log.info("Intervals and timeouts cleared!");
// 2 Sekunden Puffer um timeout und intervalle zu stoppen
const unload = setTimeout(() => {
callback();
clearTimeout(unload);
}, 2000);
callback();
} catch (e) {

@@ -942,0 +1049,0 @@ callback();

{
"name": "iobroker.alexa-timer-vis",
"version": "0.1.9",
"version": "0.1.11",
"description": "Alexa Timer ausgeben um in der Vis anzuzeigen",

@@ -27,3 +27,3 @@ "author": {

"@alcalzone/release-script": "^2.2.1",
"@iobroker/testing": "^2.5.2",
"@iobroker/testing": "^2.5.4",
"@types/chai": "^4.3.0",

@@ -42,3 +42,3 @@ "@types/chai-as-promised": "^7.1.4",

"gulp": "^4.0.2",
"mocha": "^9.1.3",
"mocha": "^9.2.0",
"proxyquire": "^2.1.3",

@@ -45,0 +45,0 @@ "sinon": "^12.0.1",

@@ -55,46 +55,7 @@ ![Logo](admin/alexa-timer-vis.png)

## ---- Deutsch ----
## alexa-timer-vis adapter für den ioBroker
Alexa Timer ausgeben um in der Vis anzuzeigen
## Funktionsweise
Hierbei wird über Alexa ein Timer, oder mehrere per Spracheingabe erstellt, dieser wird von dem Adapter ausgewertet und in States geschrieben, um diese dann in der Vis sichtbar zu machen. So behält man einen besseren Überblick wenn man mehrere Timer gleichzeitig aktiv hat.
* ---- Alexa2 Adapter wird gebraucht --
* Das Vis Widget ist noch nicht eingebunden
* Jeder einzelne Timer kann per Button gestoppt werden, stoppt den Timer in Alexa und im Adapter
* Es können unbegrenzt Timer mit Alexa per Sprachbefehl erstellt werden.
* Bei Start des Adapters werden 4 Ordner erstellt, mit den ganzen States.
* Zusätzliche Ordner werden erstellt sobald ein 5. und mehr Timer per Alexas Spracheingabe erstellt werden.
* konfiguriert für deutsche Spracheingabe, Englisch (experimentell)
### Timer hinzufügen ( Beispiele )
* Alexa, Timer 5 Minuten
* Alexa, Pommes Timer 9 Minuten
* Alexa, stelle einen Timer auf 1 Stunde und 30 Minuten,
* Alexa, setzte Timer auf 2 Stunden
* Alexa, Timer auf 120 Minuten
* Alexa, Timer 9 Minuten Spaghetti
### Timer löschen ( Beispiele )
* Alexa, lösche alle Timer
* Alexa, lösche Pommes Timer
* Alexa, lösche 5 Minuten Timer
* Alexa, Timer 5 Minuten beenden
#### Wenn ihr Anregungen habt, um etwas besser zu machen, oder andere Funktionen hinzu zu fügen immer gerne melden
## Changelog
### 0.1.11 (12.02.2022)
* Delete of Timer with same Inputvalue, fixed
* User can set the Intervall in admin
### 0.1.9 (30.1.2022)

@@ -101,0 +62,0 @@ * Bugfix

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc