iobroker.alexa-timer-vis
Advanced tools
Comparing version 0.1.7 to 0.1.8
{ | ||
"common": { | ||
"name": "alexa-timer-vis", | ||
"version": "0.1.7", | ||
"version": "0.1.8", | ||
"news": { | ||
"0.1.7":{ | ||
"en":"New state,'Input Device'" | ||
"0.1.8": { | ||
"en": "Bugfix, Button added to stop the selected Timer", | ||
"de": "Bugfix, Schaltfläche hinzugefügt, um den ausgewählten Timer zu stoppen", | ||
"ru": "Исправление, добавлена кнопка для остановки выбранного таймера.", | ||
"pt": "Bugfix, botão adicionado para parar o temporizador selecionado", | ||
"nl": "Bugfix, knop toegevoegd om de geselecteerde timer te stoppen", | ||
"fr": "Correction de bug, bouton ajouté pour arrêter la minuterie sélectionnée", | ||
"it": "Bugfix, pulsante aggiunto per fermare il timer selezionato", | ||
"es": "Corrección de errores, botón agregado para detener el temporizador seleccionado", | ||
"pl": "Bugfix, przycisk dodany do zatrzymania wybranego timera", | ||
"zh-cn": "错误修复,添加按钮以停止选定的计时器" | ||
}, | ||
"0.1.6":{ | ||
"en": "numbers from 1-9 are always displayed as two digits, 1 => 01" | ||
"0.1.7": { | ||
"en": "New state,'Input Device'", | ||
"de": "Neuer Status „Eingabegerät“", | ||
"ru": "Новое состояние \"Устройство ввода\"", | ||
"pt": "Novo estado, 'Dispositivo de entrada'", | ||
"nl": "Nieuwe staat, 'Invoerapparaat'", | ||
"fr": "Nouvel état, 'Périphérique d'entrée'", | ||
"it": "Nuovo stato, \"Dispositivo di input\"", | ||
"es": "Nuevo estado, 'Dispositivo de entrada'", | ||
"pl": "Nowy stan „Urządzenie wejściowe”", | ||
"zh-cn": "新状态,'输入设备'" | ||
}, | ||
"0.1.6": { | ||
"en": "numbers from 1-9 are always displayed as two digits, 1 => 01", | ||
"de": "Zahlen von 1-9 werden immer zweistellig angezeigt, 1 => 01", | ||
"ru": "числа от 1 до 9 всегда отображаются как две цифры, 1 => 01", | ||
"pt": "números de 1 a 9 são sempre exibidos como dois dígitos, 1 => 01", | ||
"nl": "cijfers van 1-9 worden altijd weergegeven als twee cijfers, 1 => 01", | ||
"fr": "les nombres de 1 à 9 sont toujours affichés sous forme de deux chiffres, 1 => 01", | ||
"it": "i numeri da 1 a 9 vengono sempre visualizzati come due cifre, 1 => 01", | ||
"es": "los números del 1 al 9 siempre se muestran como dos dígitos, 1 => 01", | ||
"pl": "liczby od 1-9 są zawsze wyświetlane jako dwie cyfry, 1 => 01", | ||
"zh-cn": "1-9 的数字始终显示为两位数,1 => 01" | ||
}, | ||
"0.1.5": { | ||
@@ -13,0 +43,0 @@ "en": "New keywords added", |
245
main.js
@@ -52,5 +52,5 @@ "use strict"; | ||
"timer1": { | ||
"hour": 0, | ||
"minute": 0, | ||
"second": 0, | ||
"hour": "0", | ||
"minute": "0", | ||
"second": "0", | ||
"string_Timer": "", | ||
@@ -64,2 +64,4 @@ "onlySec": 0, | ||
"inputDevice":"", | ||
"serialNumber":"", | ||
"timerInput":"" | ||
}, | ||
@@ -147,3 +149,5 @@ }, | ||
this.on("unload", this.onUnload.bind(this)); | ||
} | ||
/** | ||
@@ -154,2 +158,3 @@ * Is called when databases are connected and adapter received configuration. | ||
// Initialize your adapter here | ||
@@ -180,98 +185,104 @@ this.setState("info.connection", false, true); | ||
this.on("stateChange", (id, state) => { | ||
// @ts-ignore | ||
if (state.val !== "" && init == false) { | ||
// Nur wenn die aktualisierung aus der Variable "datapoint" kommt soll der Code ausgeführt werden | ||
if (id == datapoint){ | ||
// @ts-ignore | ||
if (state.val !== "" && init == false) { | ||
// Die Init Variable soll verhindern das innerhalb von der eingestellten Zeit nur ein Befehl verarbeitet wird, Alexa Datenpunkt wird zweimal aktualisiert | ||
init = true; | ||
timeout_1 = setTimeout(() => { | ||
init = false; | ||
clearTimeout(timeout_1); | ||
}, 5000); | ||
// Die Init Variable soll verhindern das innerhalb von der eingestellten Zeit nur ein Befehl verarbeitet wird, Alexa Datenpunkt wird zweimal aktualisiert | ||
init = true; | ||
timeout_1 = setTimeout(() => { | ||
init = false; | ||
clearTimeout(timeout_1); | ||
}, 5000); | ||
// Code Anfang | ||
// Code Anfang | ||
// @ts-ignore | ||
timerObject.timerActiv.data.value = state.val; | ||
const value = timerObject.timerActiv.data.value; | ||
// @ts-ignore | ||
timerObject.timerActiv.data.value = state.val; | ||
const value = timerObject.timerActiv.data.value; | ||
// Überprüfen ob ein Timer Befehl per Sprache an Alexa übergeben wurde | ||
if (value.indexOf("timer") >= 0) { | ||
this.log.info("Command to control the timer function found"); | ||
// Überprüfen ob ein Timer Befehl per Sprache an Alexa übergeben wurde | ||
if (value.indexOf("timer") >= 0) { | ||
this.log.info("Command to control the timer found"); | ||
// Überprüfen ob ein Timer hinzugefügt wird oder gestoppt wird | ||
let i = false; | ||
for (const array in timerObject.timerActiv.condition) { | ||
for (const element of timerObject.timerActiv.condition[array]) { | ||
// Überprüfen ob ein Timer hinzugefügt wird oder gestoppt wird | ||
let i = false; | ||
for (const array in timerObject.timerActiv.condition) { | ||
for (const element of timerObject.timerActiv.condition[array]) { | ||
// Timer soll gestoppt werden | ||
if (value.indexOf(element) >= 0 && array == "deleteTimer") { | ||
this.log.info("Timer is to be stopped!"); | ||
//Eingabe Text loggen | ||
this.log.info("Voice input: " + value); | ||
// Input aus Alexas Spracheingabe zu Array konvertieren | ||
const timerArray = value.split(" "); | ||
// Timer soll gestoppt werden | ||
if (value.indexOf(element) >= 0 && array == "deleteTimer") { | ||
this.log.info("Timer is to be stopped!"); | ||
//Eingabe Text loggen | ||
this.log.info("Voice input: " + value); | ||
// Input aus Alexas Spracheingabe zu Array konvertieren | ||
const timerArray = value.split(" "); | ||
// RückgabeArray erfassen | ||
const returnArray = zeiterfassung(timerArray); | ||
// RückgabeArray erfassen | ||
const returnArray = zeiterfassung(timerArray); | ||
// Name | ||
const name = returnArray[1]; | ||
// Name | ||
const name = returnArray[1]; | ||
// Timer in Sekunden ausgeben lassen, damit der passende Timer abgebrochen werden kann | ||
const timerAbortsec = eval(returnArray[0]); | ||
// Timer in Sekunden ausgeben lassen, damit der passende Timer abgebrochen werden kann | ||
const timerAbortsec = eval(returnArray[0]); | ||
// Index Timer löschen | ||
const deleteTimerIndex = returnArray[2]; | ||
// 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 | ||
// Das gesuchte Element muss vorhanden sein, TimerStop darf nicht aktiv sein | ||
else if (value.indexOf(element) >= 0 && i === false) { | ||
this.log.info("Timer is to be added!"); | ||
//Eingabe Text loggen | ||
this.log.info(`Voice input: ${value}`); | ||
// Input aus Alexas Spracheingabe zu Array machen | ||
const timerArray = value.split(" "); | ||
} // Timer soll erstellt werden | ||
// Das gesuchte Element muss vorhanden sein, TimerStop darf nicht aktiv sein | ||
else if (value.indexOf(element) >= 0 && i === false) { | ||
this.log.info("Timer is to be added!"); | ||
//Eingabe Text loggen | ||
this.log.info(`Voice input: ${value}`); | ||
// Input aus Alexas Spracheingabe zu Array machen | ||
const timerArray = value.split(" "); | ||
// Timer in Sekunden und den Namen ausgeben lassen in einem Array | ||
const returnArray = zeiterfassung(timerArray); | ||
// Timer in Sekunden und den Namen ausgeben lassen in einem Array | ||
const returnArray = zeiterfassung(timerArray); | ||
// Rückgabewert Timer in Sekunden [0] | ||
//this.log.info("Eval: " + returnArray[0]); | ||
const timerSeconds = eval(returnArray[0]); | ||
// Rückgabewert Timer in Sekunden [0] | ||
//this.log.info("Eval: " + returnArray[0]); | ||
const timerSeconds = eval(returnArray[0]); | ||
// Rückgabewert "Name" des Timers [1] | ||
const name = returnArray[1]; | ||
// Rückgabewert "Name" des Timers [1] | ||
const name = returnArray[1]; | ||
// Anzahl Aktiver Timer um eins hochzählen | ||
timerObject.timerActiv.timerCount++; | ||
// Rückgabewert "Input String" des Timers [3] | ||
const inputString = returnArray[3]; | ||
// States erstellen lassen, bei mehr als 4 Timern | ||
createState(timerObject.timerActiv.timerCount); | ||
// Anzahl Aktiver Timer um eins hochzählen | ||
timerObject.timerActiv.timerCount++; | ||
// Ein weiteren Eintrag im Object erzeugen, falls nicht vorhanden | ||
const timer = "timer" + timerObject.timerActiv.timerCount; | ||
// States erstellen lassen, bei mehr als 4 Timern | ||
createState(timerObject.timerActiv.timerCount); | ||
if (timerObject.timerActiv.timer[timer] == undefined) { | ||
// Ein weiteren Eintrag im Object erzeugen, falls nicht vorhanden | ||
const timer = "timer" + timerObject.timerActiv.timerCount; | ||
timerObject.timerActiv.timer[timer] = false; | ||
timerObject.timer[timer] = {}; | ||
} | ||
// Timer starten | ||
startTimer(timerSeconds, name); | ||
// Nur ausführen wenn noch nicht aktiv ist | ||
if (!writeStateActiv){ | ||
// auf aktiv setzen | ||
writeStateActiv = true; | ||
// States schreiben, darf aber nur einmal ausgeführt werden | ||
writeStateIntervall(); | ||
} | ||
if (timerObject.timerActiv.timer[timer] == undefined) { | ||
timerObject.timerActiv.timer[timer] = false; | ||
timerObject.timer[timer] = {}; | ||
} | ||
// Timer starten | ||
startTimer(timerSeconds, name, inputString); | ||
// Nur ausführen wenn noch nicht aktiv ist | ||
if (!writeStateActiv){ | ||
// auf aktiv setzen | ||
writeStateActiv = true; | ||
// States schreiben, darf aber nur einmal ausgeführt werden | ||
writeStateIntervall(); | ||
} | ||
break; | ||
break; | ||
} | ||
} | ||
@@ -281,4 +292,18 @@ } | ||
} | ||
}else if (id != "alexa-timer-vis.0.info.connection"){ | ||
// Akualisierung aus Reset Datenpunkten | ||
this.log.info("ID Reset Button " + JSON.stringify(id)); | ||
// Aus ID den Timer erfassen | ||
const timerArray = id.split("."); | ||
const timer = timerArray[2]; | ||
// Alexa2 Adapter Timer | ||
// alexa2.0.Echo-Devices.G090XG1210960L67.Commands.textCommand | ||
const timerOb = timerObject.timer[timer]; | ||
const alexaCommandState = `alexa2.0.Echo-Devices.${timerOb.serialNumber}.Commands.textCommand`; | ||
let name = ""; | ||
// Wenn der Name ungleich nur "Timer" ist soll dieser mit ausgegeben werden | ||
if (timerOb.name != "Timer") name = timerOb.name; | ||
const alexaTextToCommand = `stoppe ${name} ${timerOb.inputString} Timer`; | ||
this.setForeignState(alexaCommandState, alexaTextToCommand,false); | ||
} | ||
// Code Ende | ||
@@ -288,5 +313,5 @@ | ||
// @ts-ignore | ||
if (!state.ack) { | ||
this.log.info("ack is not set!"); | ||
} | ||
// if (!state.ack) { | ||
// this.log.info("ack is not set!"); | ||
// } | ||
}); | ||
@@ -336,2 +361,3 @@ | ||
* @param {string} name Name des Timers | ||
* @param {string} inputString String der Eingabe per Alexa | ||
* | ||
@@ -341,3 +367,3 @@ * | ||
const startTimer = async (sec, name)=> { | ||
const startTimer = async (sec, name, inputString)=> { | ||
const startTimer = new Date().getTime(); // Startzeit Timer | ||
@@ -362,2 +388,4 @@ const start_Time = time(startTimer); | ||
} | ||
// Input Device ermitteln, und im Objekt speichern | ||
getInputDevice(timerObject.timer[index]); | ||
@@ -405,2 +433,3 @@ | ||
timer.time_end = end_Time; | ||
timer.inputString = inputString; | ||
@@ -479,3 +508,3 @@ | ||
write: true, | ||
def: 0, | ||
def: "0", | ||
}, | ||
@@ -492,3 +521,3 @@ native: {}, | ||
write: true, | ||
def: 0, | ||
def: "0", | ||
}, | ||
@@ -505,3 +534,3 @@ native: {}, | ||
write: true, | ||
def: 0, | ||
def: "0", | ||
}, | ||
@@ -570,2 +599,18 @@ native: {}, | ||
}); | ||
this.setObjectNotExistsAsync("timer" + i + ".Reset", { | ||
type: "state", | ||
common: { | ||
name: "Reset Timer", | ||
type: "boolean", | ||
role: "button", | ||
read: false, | ||
write: true, | ||
def: true, | ||
}, | ||
native: {}, | ||
}); | ||
// id zusammenbauen | ||
const id = `alexa-timer-vis.0.timer${i}.Reset`; | ||
// Subscribe Reset Button | ||
subscribeForeignStates(id); | ||
} | ||
@@ -580,7 +625,7 @@ } catch (e) { | ||
* Eingabegerät ermitteln | ||
* @param path Pfad zum Speicherort im Objekt | ||
* | ||
* | ||
*/ | ||
const getInputDevice = (a)=>{ | ||
const getInputDevice = (path)=>{ | ||
this.getForeignObject("alexa2.0.History.name", async (err, obj) => { | ||
@@ -590,8 +635,10 @@ if (err || obj == null) { | ||
this.log.error(`The State "name" of Alexa was not found!`); | ||
a.inputDevice = "-"; | ||
path.inputDevice = "-"; | ||
} else { | ||
const obj = await this.getForeignStateAsync("alexa2.0.History.name"); | ||
// @ts-ignore | ||
a.inputDevice = obj.val; | ||
path.inputDevice = obj.val; | ||
const serial = await this.getForeignStateAsync("alexa2.0.History.serialNumber"); | ||
// @ts-ignore | ||
path.serialNumber = serial.val; | ||
} | ||
@@ -611,2 +658,3 @@ | ||
let timerString = ""; | ||
let inputString = ""; | ||
let name = ""; | ||
@@ -632,2 +680,3 @@ let deleteVal = 0; // Nummer zum bestimmen der Art Timer zu löschen | ||
timerString += "+"; // Und bildet ein Verbindungsglied welches für die berechung ein "+" ist | ||
inputString += "und "; | ||
} | ||
@@ -638,2 +687,3 @@ } | ||
timerString += ")*3600+"; | ||
inputString += "Stunden "; | ||
} | ||
@@ -643,2 +693,3 @@ // Nach Minuten suchen, um den Fakor einzufügen | ||
timerString += ")*60+"; | ||
inputString += "Minuten "; | ||
} | ||
@@ -648,2 +699,3 @@ // Nach Sekunden suchen, um die Klammern zu schliessen( Wichtig für z.B. 120 Minuten) | ||
timerString += ")"; | ||
inputString += "Sekunden "; | ||
} | ||
@@ -655,7 +707,10 @@ // Überprüfen ob es sich um Zahlen handelt | ||
timerString += "(" + timerObject.zahlen[element]; | ||
inputString += timerObject.zahlen[element] + " "; | ||
// Wenn das Element "Hundert" ist und das letzte Element eine Zahl war soll multipliziert werden( Zwei * hundert + vierzig) | ||
}else if (element == "hundert"){ | ||
timerString +=("*" + timerObject.zahlen[element]); | ||
inputString += timerObject.zahlen[element] + " "; | ||
}else { // Wenn nicht Hundert(eigentlich auch tausend usw.) dann nur addieren | ||
timerString +=("+" + timerObject.zahlen[element]); | ||
inputString += timerObject.zahlen[element] + " "; | ||
} | ||
@@ -671,3 +726,3 @@ } | ||
} | ||
const array = [timerString, name, deleteVal]; | ||
const array = [timerString, name, deleteVal, inputString]; | ||
return array; | ||
@@ -787,8 +842,16 @@ }; | ||
/** | ||
* | ||
* @param {string} id id der Button | ||
*/ | ||
const subscribeForeignStates = (id)=>{ | ||
this.subscribeForeignStates(id); | ||
}; | ||
// 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("*"); | ||
// this.subscribeStates("*"); | ||
@@ -795,0 +858,0 @@ /* |
{ | ||
"name": "iobroker.alexa-timer-vis", | ||
"version": "0.1.7", | ||
"version": "0.1.8", | ||
"description": "Alexa Timer ausgeben um in der Vis anzuzeigen", | ||
@@ -5,0 +5,0 @@ "author": { |
@@ -86,2 +86,3 @@ ![Logo](admin/alexa-timer-vis.png) | ||
* Alexa, lösche 5 Minuten Timer | ||
* Alexa, Timer 5 Minuten beenden | ||
@@ -97,2 +98,5 @@ | ||
## Changelog | ||
### 0.1.8 (28.01.2022) | ||
* Bugfix | ||
* Button added to stop the Timer | ||
### 0.1.7 (22.06.2022) | ||
@@ -102,2 +106,3 @@ * New State, "Input Device" | ||
* numbers from 1-9 are always displayed as two digits, 1 => 01 | ||
* When you update to this or a newer Version, please delete the timer folders or delete the whole adapter, otherwise errors will occur | ||
### 0.1.5 (08.01.2022) | ||
@@ -104,0 +109,0 @@ * New keywords added |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
210524
1051
151