iobroker.tr-064 4.2.16 → 4.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +11 -2
- package/admin/index_m.html +13 -8
- package/admin/words.js +59 -53
- package/io-package.json +41 -32
- package/main.js +19 -11
- package/package.json +13 -12
- package/.releaseconfig.json +0 -3
- package/lib/tools.js +0 -80
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
The MIT License (MIT)
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2015-
|
|
3
|
+
Copyright (c) 2015-2023 soef <soef@gmx.net>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -20,8 +20,10 @@ Based on this [AVM documentations](https://avm.de/service/schnittstellen/)
|
|
|
20
20
|
|
|
21
21
|
## Needed Settings in your Fritzbox:
|
|
22
22
|
* You need to change the Login to "Use Username and password"
|
|
23
|
+
* The maximum relevant password length for FritzBox is 32 characters! FritzBox cuts the password silently in the UI. Please make sure to enter only the 32 relevant characters in the adapter configuration
|
|
23
24
|
* Create a user and allow him to "control the Fritzbox and settings"
|
|
24
25
|
* Enable Application Access (on Network tab). Click flow in german: Netzwerk ->Heimnetzfreigaben -> Zugriff für Anwendungen -> aktiviert
|
|
26
|
+
* If you want to use the "ring" function you need to set additional settings (see below)
|
|
25
27
|
|
|
26
28
|
## Initial Creation
|
|
27
29
|
This adapter was initially created by @soef at https://github.com/soef/ioBroker.tr-064 but not maintained any more, so we moved it to iobroker-community so that bugs could be fixed. thanks @soef for his work.
|
|
@@ -52,7 +54,7 @@ If you move from tr-064-community adapters you can easily copy whole device list
|
|
|
52
54
|
- When using an external number, the ring state will connect you to the external number.
|
|
53
55
|
The Fritz!Box will call the external number and your default phone will ring, when the called phone is picked up.
|
|
54
56
|
The default phone can be configured in the Fritz!Box under:
|
|
55
|
-
Telefonie/Anrufe/[Tab]Wahlhilfe/Wählhilfe verwenden
|
|
57
|
+
Telefonie/Anrufe/[Tab]Wahlhilfe/Wählhilfe verwenden . Please also make sure to choose "Verbindung mit dem Telefon ISDN- und Schnurlostelefone"
|
|
56
58
|
|
|
57
59
|
### toPauseState
|
|
58
60
|
- Values: ring, connect, end
|
|
@@ -133,6 +135,13 @@ To use the call monitor feature it must be first enabled in the AVM Fritz!Box.
|
|
|
133
135
|
To enable the call monitor dial ```#96*5*``` and the TCP/IP Port 1012 will be opened. To close the port dial ```#96*4*```.
|
|
134
136
|
|
|
135
137
|
## Changelog
|
|
138
|
+
### 4.2.18 (2023-01-04)
|
|
139
|
+
* (Apollon77) Prepare for future js-controller verisons
|
|
140
|
+
|
|
141
|
+
### 4.2.17 (2022-09-16)
|
|
142
|
+
* (simatec/Apollon77) Prevent duplication of entries in configuration
|
|
143
|
+
* (Apollon77) Make sure active status of devices in jsonDeviceList is correct
|
|
144
|
+
|
|
136
145
|
### 4.2.16 (2022-03-21)
|
|
137
146
|
* (Apollon77) Fix info logs on callee/caller
|
|
138
147
|
* (Apollon77) Add special handling for potential broken external image links in phonebook
|
|
@@ -260,7 +269,7 @@ To enable the call monitor dial ```#96*5*``` and the TCP/IP Port 1012 will be o
|
|
|
260
269
|
## License
|
|
261
270
|
The MIT License (MIT)
|
|
262
271
|
|
|
263
|
-
Copyright (c) 2015-
|
|
272
|
+
Copyright (c) 2015-2023 soef <soef@gmx.net>, ioBroker-Community-Developers
|
|
264
273
|
|
|
265
274
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
266
275
|
of this software and associated documentation files (the "Software"), to deal
|
package/admin/index_m.html
CHANGED
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
' <p>'+ newIndex +'</p>\n' +
|
|
92
92
|
' </td>\n' +
|
|
93
93
|
' <td>\n' +
|
|
94
|
-
'
|
|
94
|
+
' <input type="text" class="validate">\n' +
|
|
95
95
|
' </td>\n' +
|
|
96
96
|
' <td>\n' +
|
|
97
97
|
' <input type="text" class="validate">\n' +
|
|
@@ -144,10 +144,12 @@
|
|
|
144
144
|
//look for devices on router
|
|
145
145
|
function deviceLookup(onChange) {
|
|
146
146
|
$('.load-wait').show();
|
|
147
|
-
|
|
147
|
+
console.log('deviceLookup started');
|
|
148
148
|
sendTo('tr-064.' + instance, 'discovery', {onlyActive: true, reread: false}, function (result) {
|
|
149
|
+
$('#chooseDevice').empty();
|
|
149
150
|
$('.load-wait').hide();
|
|
150
151
|
let arr = JSON.parse(result);
|
|
152
|
+
console.log('Got ' + arr.length + ' devices');
|
|
151
153
|
|
|
152
154
|
for (let i = 0; i < arr.length; i++) {
|
|
153
155
|
let newRow = '<tr>\n' +
|
|
@@ -226,19 +228,22 @@
|
|
|
226
228
|
}
|
|
227
229
|
}
|
|
228
230
|
|
|
229
|
-
//
|
|
231
|
+
//default sort by name =)
|
|
230
232
|
$('#modalDeviceName').click();
|
|
231
233
|
});
|
|
232
234
|
}
|
|
233
235
|
|
|
234
236
|
// the function loadSettings has to exist ...
|
|
235
237
|
function load(settings, onChange) {
|
|
238
|
+
console.log('load started');
|
|
236
239
|
if (systemConfig) {
|
|
237
240
|
secret = (systemConfig && systemConfig.native && systemConfig.native.secret) || 'Zgfr56gFe87jJOM';
|
|
241
|
+
console.log('load started: system config existing');
|
|
238
242
|
loadHelper(settings, onChange);
|
|
239
243
|
return;
|
|
240
244
|
}
|
|
241
245
|
socket.emit('getObject', 'system.config', function (err, obj) {
|
|
246
|
+
console.log('load started: system config loaded');
|
|
242
247
|
secret = (obj.native ? obj.native.secret : '') || 'Zgfr56gFe87jJOM';
|
|
243
248
|
loadHelper(settings, onChange);
|
|
244
249
|
});
|
|
@@ -300,19 +305,19 @@
|
|
|
300
305
|
|
|
301
306
|
if ($key.attr('type') === 'checkbox') {
|
|
302
307
|
// do not call onChange direct, because onChange could expect some arguments
|
|
303
|
-
$key.prop('checked', sObj).on('change', () => onChange())
|
|
304
|
-
;
|
|
308
|
+
$key.prop('checked', sObj).on('change', () => onChange());
|
|
305
309
|
} else {
|
|
306
310
|
// do not call onChange direct, because onChange could expect some arguments
|
|
307
311
|
$key.val(sObj)
|
|
308
312
|
.on('change', () => onChange())
|
|
309
|
-
.on('keyup', () => onChange())
|
|
310
|
-
;
|
|
313
|
+
.on('keyup', () => onChange());
|
|
311
314
|
}
|
|
312
315
|
});
|
|
313
316
|
|
|
317
|
+
$('#devices').empty();
|
|
314
318
|
//read devices from settings and show in table
|
|
315
319
|
let countDevices = settings.devices.length;
|
|
320
|
+
console.log('countDevices: ' + countDevices);
|
|
316
321
|
if (countDevices > 0) {
|
|
317
322
|
for (let i = 0; i < countDevices; i++) {
|
|
318
323
|
addDeviceRow(onChange, settings.devices[i].name, settings.devices[i].ip, settings.devices[i].mac);
|
|
@@ -499,7 +504,7 @@
|
|
|
499
504
|
<th class="translate" id="deviceName">name</th>
|
|
500
505
|
<th class="translate" id="deviceIP">ip</th>
|
|
501
506
|
<th class="translate" id="deviceMac">MAC</th>
|
|
502
|
-
<th class="translate" id="deviceDelete"
|
|
507
|
+
<th class="translate" id="deviceDelete"> </th>
|
|
503
508
|
</tr>
|
|
504
509
|
</thead>
|
|
505
510
|
<tbody id="devices">
|
package/admin/words.js
CHANGED
|
@@ -1,58 +1,64 @@
|
|
|
1
1
|
/*global systemDictionary:true */
|
|
2
|
+
/*
|
|
3
|
+
+===================== DO NOT MODIFY ======================+
|
|
4
|
+
| This file was generated by translate-adapter, please use |
|
|
5
|
+
| `translate-adapter adminLanguages2words` to update it. |
|
|
6
|
+
+===================== DO NOT MODIFY ======================+
|
|
7
|
+
*/
|
|
2
8
|
'use strict';
|
|
3
9
|
|
|
4
10
|
systemDictionary = {
|
|
5
|
-
"Add device": {
|
|
6
|
-
"AddDevice": {
|
|
7
|
-
"All calls": {
|
|
8
|
-
"Calllists": {
|
|
9
|
-
"Cannot find any device": {
|
|
10
|
-
"Choose Device": {
|
|
11
|
-
"Close": {
|
|
12
|
-
"Create Json device list": {
|
|
13
|
-
"Devices": {
|
|
14
|
-
"ERROR": {
|
|
15
|
-
"Enable adapter first": {
|
|
16
|
-
"Find a device": {
|
|
17
|
-
"Generate HTML": {
|
|
18
|
-
"Generate JSON": {
|
|
19
|
-
"IP": {
|
|
20
|
-
"IP Address": {
|
|
21
|
-
"Inbound": {
|
|
22
|
-
"MAC": {
|
|
23
|
-
"MAC Address": {
|
|
24
|
-
"Missed calls": {
|
|
25
|
-
"Name": {
|
|
26
|
-
"Not enabled": {
|
|
27
|
-
"Ok": {
|
|
28
|
-
"Options": {
|
|
29
|
-
"Outbound": {
|
|
30
|
-
"Password": {
|
|
31
|
-
"Please wait": {
|
|
32
|
-
"Please wait, looking for devices...": {
|
|
33
|
-
"Polling interval (sec)": {
|
|
34
|
-
"Select a device": {
|
|
35
|
-
"Settings": {
|
|
36
|
-
"TR 064 adapter settings": {
|
|
37
|
-
"TR-064 adapter settings": {
|
|
38
|
-
"Use CallList": {
|
|
39
|
-
"Use CallMonitor": {
|
|
40
|
-
"Use MDNS": {
|
|
41
|
-
"Use call forwarding options": {
|
|
42
|
-
"Use phonebook": {
|
|
43
|
-
"User": {
|
|
44
|
-
"Watch devices": {
|
|
45
|
-
"You have to enable/start tr-064 adapter before you can use this function!": {"en": "You have to enable/start tr-064 adapter befor you can use this function!", "de": "Der tr-064-Adapter muss aktiviert/gestartet sein, bevor diese Funktion verwendet werden kann!", "ru": "Вы должны включить / запустить адаптер tr-064, чтобы использовать эту функцию!", "pt": "Você precisa ativar / iniciar o adaptador tr-064 antes de poder usar esta função!", "nl": "U moet de tr-064-adapter inschakelen / starten voordat u deze functie kunt gebruiken!", "fr": "Vous devez activer / démarrer l'adaptateur tr-064 avant de pouvoir utiliser cette fonction!", "it": "Devi abilitare / avviare l'adattatore tr-064 prima di poter usare questa funzione!", "es": "¡Debe habilitar / iniciar el adaptador tr-064 antes de poder usar esta función!", "pl": "Musisz włączyć / uruchomić adapter społeczności TR-064, zanim będziesz mógł korzystać z tej funkcji!", "zh-cn": "您必须启用/启动tr-064-社区适配器,然后才能使用此功能!"},
|
|
46
|
-
"click to insert": {
|
|
47
|
-
"devices": {
|
|
48
|
-
"ip": {
|
|
49
|
-
"looking for device": {
|
|
50
|
-
"max Entries": {
|
|
51
|
-
"name": {
|
|
52
|
-
"pollIntervall": {
|
|
53
|
-
"port": {
|
|
54
|
-
"tooltip_ip": {
|
|
55
|
-
"tooltip_pollingInterval": {
|
|
56
|
-
"tooltip_useMDNS": {
|
|
57
|
-
"type": {
|
|
11
|
+
"Add device": { "en": "Add device", "de": "Gerät hinzufügen", "ru": "Добавить устройство", "pt": "Adicionar dispositivo", "nl": "Voeg toestel toe", "fr": "Ajouter un appareil", "it": "Aggiungi dispositivo", "es": "Añadir dispositivo", "pl": "Dodaj urządzenie", "uk": "Додайте пристрій", "zh-cn": "添加设备"},
|
|
12
|
+
"AddDevice": { "en": "To add a device manually, press +-Button", "de": "Zum manuellen hinzufügen eines Gerätes +-Button nutzen", "ru": "Чтобы добавить прибор вручную, нажмите кнопку +", "pt": "Para adicionar um item manualmente, pressione + -Button", "nl": "Als u handmatig een deluxe wilt toevoegen, drukt u op + + Knop", "fr": "Pour ajouter une division manuellement, appuyez sur les boutons + et -", "it": "Per aggiungere manualmente una divisa, premere + -Button", "es": "Para agregar un dispositivo manualmente, presione + -Botón", "pl": "Aby ręcznie dodać divice, naciśnij + -Button", "uk": "Щоб додати пристрій вручну, натисніть кнопку +", "zh-cn": "添加设备手动按钮"},
|
|
13
|
+
"All calls": { "en": "List of all calls", "de": "Liste aller Anrufe", "ru": "Список всех звонков", "pt": "Listar todas as chamadas", "nl": "Lijst voor alle oproepen", "fr": "Liste pour tous les appels", "it": "Elenco per tutte le chiamate", "es": "Lista para todas las llamadas", "pl": "Lista wszystkich połączeń", "uk": "Список усіх дзвінків", "zh-cn": "列表,对所有呼叫"},
|
|
14
|
+
"Calllists": { "en": "Calllists", "de": "Anruflisten", "ru": "Calllists", "pt": "Listas de chamadas", "nl": "Calllists", "fr": "Listes d'appels", "it": "Calllists", "es": "Calistas", "pl": "Listy połączeń", "uk": "Calllists", "zh-cn": "通话清单"},
|
|
15
|
+
"Cannot find any device": { "en": "Cannot find new devices", "de": "Kein neues Gerät gefunden", "ru": "Ничего не найдено", "pt": "Não é possível encontrar novos dispositivos", "nl": "Kan geen nieuwe apparaten vinden", "fr": "Impossible de trouver de nouveaux appareils", "it": "Non riesci a trovare nuovi dispositivi", "es": "No puedo encontrar nuevos dispositivos", "pl": "Nie można znaleźć nowych urządzeń", "uk": "Не вдається знайти нові пристрої", "zh-cn": "无法找到新的设备"},
|
|
16
|
+
"Choose Device": { "en": "Choose Device", "de": "Gerät auswählen", "ru": "Выберите устройство", "pt": "Escolha o dispositivo", "nl": "Kies apparaat", "fr": "Choisissez un appareil", "it": "Scegli dispositivo", "es": "Elegir dispositivo", "pl": "Wybierz urządzenie", "uk": "Виберіть Пристрій", "zh-cn": "选择设备"},
|
|
17
|
+
"Close": { "en": "Close", "de": "Schließen", "ru": "Закрыть", "pt": "Fechar", "nl": "Dichtbij", "fr": "Fermer", "it": "Vicino", "es": "Cerca", "pl": "Blisko", "uk": "Закрити", "zh-cn": "关闭"},
|
|
18
|
+
"Create Json device list": { "en": "Create JSON device list", "de": "JSON Geräteliste erstellen", "ru": "Создать список устройств JSON", "pt": "Criar lista de dispositivos JSON", "nl": "Maak een JSON-apparatenlijst", "fr": "Créer une liste de périphériques JSON", "it": "Crea un elenco di dispositivi JSON", "es": "Crear lista de dispositivos JSON", "pl": "Utwórz listę urządzeń JSON", "uk": "Створіть список пристроїв JSON", "zh-cn": "创建JSON设备列表"},
|
|
19
|
+
"Devices": { "en": "Devices", "de": "Geräte", "ru": "Устройства", "pt": "Dispositivos", "nl": "Apparaten", "fr": "Dispositifs", "it": "dispositivi", "es": "Dispositivos", "pl": "Urządzenia", "uk": "Пристрої", "zh-cn": "设备"},
|
|
20
|
+
"ERROR": { "en": "Error", "de": "Fehler", "ru": "ОШИБКА", "pt": "ERRO", "nl": "FOUT", "fr": "ERREUR", "it": "ERRORE", "es": "ERROR", "pl": "BŁĄD", "uk": "Помилка", "zh-cn": "错误"},
|
|
21
|
+
"Enable adapter first": { "en": "Please enable the TR-064 instance first", "de": "Bitte die TR-064 Instanz starten", "ru": "Сначала активируйте драйвер", "pt": "Ativar adaptador primeiro", "nl": "Schakel eerst de adapter in", "fr": "Activer d'abord l'adaptateur", "it": "Abilitare prima l'adattatore", "es": "Habilitar primero el adaptador", "pl": "Włącz najpierw adapter", "uk": "Спочатку ввімкніть примірник TR-064", "zh-cn": "第一个启用适配器"},
|
|
22
|
+
"Find a device": { "en": "Search for devices", "de": "Geräte suchen", "ru": "Список устройств", "pt": "Encontre um dispositivo", "nl": "Zoek een apparaat", "fr": "Trouver un appareil", "it": "Trova un dispositivo", "es": "Encontrar un dispositivo", "pl": "Znajdź urządzenie", "uk": "Пошук пристроїв", "zh-cn": "找到一个设备"},
|
|
23
|
+
"Generate HTML": { "en": "HTML", "de": "HTML", "ru": "HTML", "pt": "HTML", "nl": "HTML", "fr": "HTML", "it": "HTML", "es": "HTML", "pl": "HTML", "uk": "HTML", "zh-cn": "HTML"},
|
|
24
|
+
"Generate JSON": { "en": "JSON", "de": "JSON", "ru": "JSON", "pt": "JSON", "nl": "JSON", "fr": "JSON", "it": "JSON", "es": "JSON", "pl": "JSON", "uk": "JSON", "zh-cn": "JSON"},
|
|
25
|
+
"IP": { "en": "IP", "de": "IP-Adresse", "ru": "IP", "pt": "IP", "nl": "IK P", "fr": "IP", "it": "IP", "es": "IP", "pl": "IP", "uk": "IP", "zh-cn": "IP"},
|
|
26
|
+
"IP Address": { "en": "IP Address", "de": "IP Adresse", "ru": "IP адрес", "pt": "Endereço de IP", "nl": "IP adres", "fr": "Adresse IP", "it": "Indirizzo IP", "es": "Dirección IP", "pl": "Adres IP", "uk": "IP-адреса", "zh-cn": "IP地址"},
|
|
27
|
+
"Inbound": { "en": "List of inbound calls", "de": "Liste der eingehenden Anrufe", "ru": "Список для входящих звонков", "pt": "Lista de chamadas de entrada", "nl": "Lijst voor inkomende oproepen", "fr": "Liste des appels entrants", "it": "Elenco per le chiamate in entrata", "es": "Lista para llamadas entrantes", "pl": "Lista połączeń przychodzących", "uk": "Список вхідних дзвінків", "zh-cn": "列入电话"},
|
|
28
|
+
"MAC": { "en": "MAC", "de": "MAC", "ru": "MAC", "pt": "MAC", "nl": "MAC", "fr": "MAC", "it": "MAC", "es": "MAC", "pl": "PROCHOWIEC", "uk": "МАК", "zh-cn": "苹果电脑"},
|
|
29
|
+
"MAC Address": { "en": "MAC Address", "de": "MAC-Adresse", "ru": "MAC адрес", "pt": "Endereço MAC", "nl": "Mac adres", "fr": "Adresse Mac", "it": "Indirizzo MAC", "es": "Dirección MAC", "pl": "Adres MAC", "uk": "MAC-адреса", "zh-cn": "MAC地址"},
|
|
30
|
+
"Missed calls": { "en": "List of missed calls", "de": "Liste der entgangenen Anrufe", "ru": "Список пропущенных звонков", "pt": "Lista de chamadas perdidas", "nl": "Lijst voor gemiste oproepen", "fr": "Liste des appels manqués", "it": "Elenco per chiamate perse", "es": "Lista de llamadas perdidas", "pl": "Lista nieodebranych połączeń", "uk": "Список пропущених дзвінків", "zh-cn": "列表未接来电"},
|
|
31
|
+
"Name": { "en": "Name", "de": "Name", "ru": "Имя", "pt": "Nome", "nl": "Naam", "fr": "prénom", "it": "Nome", "es": "Nombre", "pl": "Imię", "uk": "Ім'я", "zh-cn": "名称"},
|
|
32
|
+
"Not enabled": { "en": "You have to start %s before you can use this function!", "de": "%s muss gestartet sein, bevor diese Funktion verwendet werden kann!", "ru": "Вы должны включить / запустить %s адаптер, прежде чем сможете использовать эту функцию!", "pt": "Você precisa ativar / iniciar o adaptador %s antes de poder usar esta função!", "nl": "U moet %s adapter inschakelen / starten voordat u deze functie kunt gebruiken!", "fr": "Vous devez activer / démarrer l'adaptateur %s avant de pouvoir utiliser cette fonction!", "it": "Devi abilitare / avviare l'adattatore %s prima di poter usare questa funzione!", "es": "¡Debe habilitar / iniciar el adaptador %s antes de poder usar esta función!", "pl": "Musisz włączyć / uruchomić %s adapter, aby móc korzystać z tej funkcji!", "uk": "Вам потрібно запустити %s, перш ніж ви зможете використовувати цю функцію!", "zh-cn": "您必须先启用/启动%s适配器,然后才能使用此功能!"},
|
|
33
|
+
"Ok": { "en": "Ok", "de": "Ok", "ru": "Ok", "pt": "Ok", "nl": "OK", "fr": "D'accord", "it": "Ok", "es": "De acuerdo", "pl": "Dobrze", "uk": "Гаразд", "zh-cn": "确定"},
|
|
34
|
+
"Options": { "en": "Options", "de": "Optionen", "ru": "Параметры", "pt": "Opções", "nl": "opties", "fr": "Les options", "it": "Opzioni", "es": "Opciones", "pl": "Opcje", "uk": "Опції", "zh-cn": "选件"},
|
|
35
|
+
"Outbound": { "en": "List of outbound calls", "de": "Liste der ausgehenden Anrufe", "ru": "Список исходящих звонков", "pt": "Listar para chamadas de saída", "nl": "Lijst voor uitgaande oproepen", "fr": "Liste des appels sortants", "it": "Elenco per le chiamate in uscita", "es": "Lista para llamadas salientes", "pl": "Lista połączeń wychodzących", "uk": "Список вихідних дзвінків", "zh-cn": "列出的电话"},
|
|
36
|
+
"Password": { "en": "Password", "de": "Passwort", "ru": "Пароль", "pt": "Senha", "nl": "Wachtwoord", "fr": "Mot de passe", "it": "Parola d'ordine", "es": "Contraseña", "pl": "Hasło", "uk": "Пароль", "zh-cn": "密码"},
|
|
37
|
+
"Please wait": { "en": "Please wait", "de": "Bitte warten", "ru": "пожалуйста, подождите", "pt": "Por favor, espere", "nl": "Wacht alsjeblieft", "fr": "S'il vous plaît, attendez", "it": "attendere prego", "es": "por favor espera", "pl": "Proszę czekać", "uk": "Будь ласка, зачекайте", "zh-cn": "请耐心等待"},
|
|
38
|
+
"Please wait, looking for devices...": { "en": "Please wait…", "de": "Bitte warten…", "ru": "Подождите...", "pt": "Por favor, espere...", "nl": "Even geduld aub...", "fr": "S'il vous plaît, attendez...", "it": "Attendere prego...", "es": "Por favor espera...", "pl": "Proszę czekać...", "uk": "Будь ласка, зачекайте…", "zh-cn": "请等等..."},
|
|
39
|
+
"Polling interval (sec)": { "en": "Data polling interval (sec)", "de": "Datenabfrage Intervall (Sek.)", "ru": "Интервал опроса (сек)", "pt": "Intervalo de pesquisa (seg)", "nl": "Polling-interval (sec)", "fr": "Intervalle d'interrogation (sec)", "it": "Intervallo di polling (sec)", "es": "Intervalo de sondeo (seg.)", "pl": "Interwał odpytywania (s)", "uk": "Інтервал опитування даних (с)", "zh-cn": "投票时间间隔(sec)"},
|
|
40
|
+
"Select a device": { "en": "Select a device", "de": "Gerät auswählen", "ru": "Выберите устройство", "pt": "Selecione um dispositivo", "nl": "Selecteer een apparaat", "fr": "Sélectionnez un appareil", "it": "Seleziona un dispositivo", "es": "Seleccione un dispositivo", "pl": "Wybierz urządzenie", "uk": "Виберіть пристрій", "zh-cn": "选择一个设备"},
|
|
41
|
+
"Settings": { "en": "Settings", "de": "Einstellungen", "ru": "Настройки", "pt": "Configurações", "nl": "instellingen", "fr": "Réglages", "it": "impostazioni", "es": "Ajustes", "pl": "Ustawienia", "uk": "Налаштування", "zh-cn": "设置"},
|
|
42
|
+
"TR 064 adapter settings": { "en": "TR-064 Instance Settings", "de": "TR-064 Instanz-Einstellungen", "ru": "Список устройств", "pt": "Configurações do adaptador TR-064", "nl": "TR-064 Adapterinstellingen", "fr": "Réglages de l’adaptateur TR-064", "it": "Impostazioni dell'adattatore TR-064", "es": "Ajustes del adaptador TR-064", "pl": "Ustawienia adaptera TR-064", "uk": "Налаштування примірника TR-064", "zh-cn": "TR064设置适配器"},
|
|
43
|
+
"TR-064 adapter settings": { "en": "TR-064 instance settings", "de": "TR-064 Instanz-Einstellungen", "ru": "Настройки драйвера TR-064", "pt": "Configurações do adaptador TR-064", "nl": "TR-064 adapterinstellingen", "fr": "Paramètres de l'adaptateur TR-064", "it": "Impostazioni dell'adattatore TR-064", "es": "Ajustes del adaptador TR-064", "pl": "Ustawienia adaptera TR-064", "uk": "Налаштування екземпляра TR-064", "zh-cn": "TR-064设置适配器"},
|
|
44
|
+
"Use CallList": { "en": "Activate Calllist", "de": "Anrufliste aktivieren", "ru": "Список звонков", "pt": "Use a Lista de Chamada", "nl": "Gebruik oproeplijst", "fr": "Utiliser la liste d'appels", "it": "Usa lista chiamate", "es": "Usar lista de llamadas", "pl": "Użyj listy połączeń", "uk": "Активувати список викликів", "zh-cn": "使用Calllist"},
|
|
45
|
+
"Use CallMonitor": { "en": "Activate Callmonitor", "de": "Anrufmonitor aktivieren", "ru": "Монитор звонков", "pt": "Use o CallMonitor", "nl": "Gebruik CallMonitor", "fr": "Utiliser CallMonitor", "it": "Usa CallMonitor", "es": "Use CallMonitor", "pl": "Użyj CallMonitor", "uk": "Активуйте Callmonitor", "zh-cn": "使用CallMonitor"},
|
|
46
|
+
"Use MDNS": { "en": "Use mDNS to discover new devices", "de": "mDNS zum Erkennen neuer Geräte verwenden", "ru": "Используйте MDNS для запуска обновления списка устройств", "pt": "Use o MDNS para acionar a atualização da lista de dispositivos", "nl": "Gebruik MDNS om apparaatlijstvernieuwing te activeren", "fr": "Utiliser MDNS pour déclencher l'actualisation de la liste des périphériques", "it": "Utilizzare MDNS per attivare l'aggiornamento dell'elenco dei dispositivi", "es": "Usar MDNS para activar la actualización de la lista de dispositivos", "pl": "Użyj MDNS, aby uruchomić odświeżanie listy urządzeń", "uk": "Використовуйте mDNS для виявлення нових пристроїв", "zh-cn": "使用MDN触发装置列表刷新"},
|
|
47
|
+
"Use call forwarding options": { "en": "Activate call forwarding options", "de": "Rufweiterleitungsoptionen aktivieren", "ru": "Используйте параметры переадресации", "pt": "Use as opções de encaminhamento de chamadas", "nl": "Gebruik opties voor doorschakelen", "fr": "Utiliser les options de renvoi d'appel", "it": "Usa le opzioni di inoltro di chiamata", "es": "Utilice las opciones de desvío de llamadas", "pl": "Użyj opcji przekazywania połączeń", "uk": "Увімкніть параметри переадресації", "zh-cn": "使用呼叫转送的选项"},
|
|
48
|
+
"Use phonebook": { "en": "Activate phonebook (name resolution)", "de": "Telefonbuch (Namensauflösung) aktivieren", "ru": "Книга номеров", "pt": "Use a agenda telefônica (resolução de nomes)", "nl": "Gebruik het telefoonboek (naamomzetting)", "fr": "Utiliser le répertoire (résolution de nom)", "it": "Usa rubrica (risoluzione del nome)", "es": "Usar agenda telefónica (resolución de nombres)", "pl": "Użyj książki telefonicznej (rozpoznawanie nazw)", "uk": "Активувати телефонну книгу (розділення імені)", "zh-cn": "使用电话簿(名称号决议)"},
|
|
49
|
+
"User": { "en": "User", "de": "Benutzer", "ru": "Пользователь", "pt": "Do utilizador", "nl": "Gebruiker", "fr": "Utilisateur", "it": "Utente", "es": "Usuario", "pl": "Użytkownik", "uk": "Користувач", "zh-cn": "用户"},
|
|
50
|
+
"Watch devices": { "en": "Monitor connected devices (Presence)", "de": "Verbundene Geräte überwachen (Anwesenheit)", "ru": "Мониторить устройства", "pt": "Assista dispositivos conectados (Presença)", "nl": "Bekijk aangesloten apparaten (aanwezigheid)", "fr": "Regarder les appareils connectés (Présence)", "it": "Guarda i dispositivi collegati (Presenza)", "es": "Ver dispositivos conectados (Presencia)", "pl": "Oglądaj podłączone urządzenia (obecność)", "uk": "Моніторинг підключених пристроїв (присутність)", "zh-cn": "看连接设备(存在)"},
|
|
51
|
+
"You have to enable/start tr-064 adapter before you can use this function!": {"en": "You have to enable/start tr-064 adapter befor you can use this function!", "de": "Der tr-064-Adapter muss aktiviert/gestartet sein, bevor diese Funktion verwendet werden kann!", "ru": "Вы должны включить / запустить адаптер tr-064, чтобы использовать эту функцию!", "pt": "Você precisa ativar / iniciar o adaptador tr-064 antes de poder usar esta função!", "nl": "U moet de tr-064-adapter inschakelen / starten voordat u deze functie kunt gebruiken!", "fr": "Vous devez activer / démarrer l'adaptateur tr-064 avant de pouvoir utiliser cette fonction!", "it": "Devi abilitare / avviare l'adattatore tr-064 prima di poter usare questa funzione!", "es": "¡Debe habilitar / iniciar el adaptador tr-064 antes de poder usar esta función!", "pl": "Musisz włączyć / uruchomić adapter społeczności TR-064, zanim będziesz mógł korzystać z tej funkcji!", "uk": "Ви повинні увімкнути/запустити адаптер tr-064, перш ніж ви зможете використовувати цю функцію!", "zh-cn": "您必须启用/启动tr-064-社区适配器,然后才能使用此功能!"},
|
|
52
|
+
"click to insert": { "en": "Click to add new", "de": "Zum hinzufügen klicken", "ru": "нажмите, чтобы вставить", "pt": "clique para inserir", "nl": "klik om in te voegen", "fr": "cliquez pour insérer", "it": "fai clic per inserire", "es": "haga clic para insertar", "pl": "kliknij, aby wstawić", "uk": "Натисніть, щоб додати новий", "zh-cn": "点击插入"},
|
|
53
|
+
"devices": { "en": "Device list", "de": "Geräteliste", "ru": "Список устройств", "pt": "Lista de dispositivos", "nl": "Apparatenlijst", "fr": "Liste des appareils", "it": "Elenco dei dispositivi", "es": "Lista de dispositivos", "pl": "Lista urządzeń", "uk": "Список пристроїв", "zh-cn": "设备清单"},
|
|
54
|
+
"ip": { "en": "IP", "de": "IP", "ru": "IP", "pt": "IP", "nl": "IK P", "fr": "IP", "it": "IP", "es": "IP", "pl": "IP", "uk": "IP", "zh-cn": "IP"},
|
|
55
|
+
"looking for device": { "en": "Searching for devices", "de": "Suche nach Geräten", "ru": "Поиск устройств", "pt": "Procurando por dispositivos", "nl": "Op zoek naar apparaten", "fr": "À la recherche d'appareils", "it": "Alla ricerca di dispositivi", "es": "Buscando dispositivos", "pl": "Szukam urządzeń", "uk": "Пошук пристроїв", "zh-cn": "在寻找的设备"},
|
|
56
|
+
"max Entries": { "en": "Maximum number of entries", "de": "Maximale Anzahl Einträge", "ru": "макс. кол-во", "pt": "Entradas máximas", "nl": "max Invoer", "fr": "max entrées", "it": "max voci", "es": "Entradas máximas", "pl": "max Wpisy", "uk": "Максимальна кількість записів", "zh-cn": "max项"},
|
|
57
|
+
"name": { "en": "Name", "de": "Name", "ru": "Имя", "pt": "Nome", "nl": "Naam", "fr": "prénom", "it": "Nome", "es": "Nombre", "pl": "Imię", "uk": "Ім'я", "zh-cn": "名称"},
|
|
58
|
+
"pollIntervall": { "en": "Data polling interval", "de": "Datenabfrageintervall", "ru": "Интервал опроса", "pt": "Poll Intervall", "nl": "Poll Intervall", "fr": "Sondage Intervall", "it": "Poll Intervall", "es": "Encuesta Intervall", "pl": "Ankieta Intervall", "uk": "Інтервал опитування даних", "zh-cn": "调查区间"},
|
|
59
|
+
"port": { "en": "Port", "de": "Port", "ru": "Порт", "pt": "Porta", "nl": "Haven", "fr": "Port", "it": "Porta", "es": "Puerto", "pl": "Port", "uk": "Порт", "zh-cn": "口"},
|
|
60
|
+
"tooltip_ip": { "en": "Fritz!Box IP address", "de": "Fritz!Box IP-Adresse", "ru": "IP Адрес Fritz!Box", "pt": "Endereço IP do Fritz!Box", "nl": "Fritz!Box IP-adres", "fr": "Adresse IP Fritz!Box", "it": "Indirizzo IP Fritz!Box", "es": "Dirección IP de Fritz!Box", "pl": "Adres IP Fritz!Box", "uk": "IP-адреса Fritz!Box", "zh-cn": "Firtz的。箱IP地址"},
|
|
61
|
+
"tooltip_pollingInterval": { "en": "Data polling intervall of ??? in seconds", "de": "Datenabfrageintervall von ??? in Sekunden", "ru": "Интервал опроса ??? в секундах", "pt": "Poll Intervall de ??? ", "nl": "Poll Intervall van ??? ", "fr": "Sondage Intervall de ??? ", "it": "Sondaggio Intervall di ??? ", "es": "Encuesta Intervalo de ??? ", "pl": "Ankieta Intervall of ??? ", "uk": "Інтервал опитування даних ??? за секунди", "zh-cn": "调查区间的了吗? 在几秒钟内"},
|
|
62
|
+
"tooltip_useMDNS": { "en": "Multicast Domain Name System (mDNS) resolves host names to IP addresses within small networks that do not include a local name server", "de": "mDNS löst Hostnamen zu IP-Adressen in kleinen Netzwerken ohne lokalem Nameserver auf", "ru": "позволяет устройству выбрать имя в зоне .local", "pt": "O sistema de nome de domínio (mDNS) multicast resolve nomes de host para endereços IP em redes pequenas que não incluem um servidor de nomes local", "nl": "multicast Domain Name System (mDNS) lost hostnamen op IP-adressen op in kleine netwerken die geen lokale naamserver bevatten", "fr": "Le système de nom de domaine multidiffusion (mDNS) résout les noms d'hôte en adresses IP au sein de petits réseaux n'incluant pas de serveur de noms local.", "it": "Il multicast Domain Name System (mDNS) risolve i nomi degli host in indirizzi IP all'interno di piccole reti che non includono un name server locale", "es": "el sistema de nombres de dominio de multidifusión (mDNS) resuelve los nombres de host a direcciones IP dentro de redes pequeñas que no incluyen un servidor de nombres local", "pl": "multicast Domain Name System (mDNS) rozwiązuje nazwy hostów na adresy IP w małych sieciach, które nie zawierają lokalnego serwera nazw", "uk": "Багатоадресна система доменних імен (mDNS) перетворює імена хостів на IP-адреси в невеликих мережах, які не включають локальний сервер імен", "zh-cn": "播域名系统(mdn)解决主机名的IP地址内的小型网络,其中不包括当地的服务器名称"},
|
|
63
|
+
"type": { "en": "Type", "de": "Typ", "ru": "Тип", "pt": "Tipo", "nl": "Type", "fr": "Type", "it": "genere", "es": "Tipo", "pl": "Rodzaj", "uk": "Тип", "zh-cn": "类型"},
|
|
58
64
|
};
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "tr-064",
|
|
4
|
-
"version": "4.2.
|
|
4
|
+
"version": "4.2.18",
|
|
5
5
|
"news": {
|
|
6
|
+
"4.2.18": {
|
|
7
|
+
"en": "Prepare for future js-controller verisons",
|
|
8
|
+
"de": "Vorbereitung auf zukünftige js-controller verisons",
|
|
9
|
+
"ru": "Подготовьтесь к будущим js-controller verisons",
|
|
10
|
+
"pt": "Preparar para futuros verisons js-controller",
|
|
11
|
+
"nl": "Bereid je voor op toekomstige Js-controller verison",
|
|
12
|
+
"fr": "Préparer les futures verisons js-controller",
|
|
13
|
+
"it": "Prepararsi per i futuri js-controller verificasons",
|
|
14
|
+
"es": "Prepárate para futuras verisones js-controller",
|
|
15
|
+
"pl": "Prepare for future js-controller verisons (ang.)",
|
|
16
|
+
"uk": "Підготовка до майбутніх джем-контролерів верісонів",
|
|
17
|
+
"zh-cn": "未来控制障碍的准备"
|
|
18
|
+
},
|
|
19
|
+
"4.2.17": {
|
|
20
|
+
"en": "Prevent duplication of entries in configuration\nMake sure active status of devices in jsonDeviceList is correct",
|
|
21
|
+
"de": "Verhindern Sie die Vervielfältigung von Einträgen in der Konfiguration\nStellen Sie sicher, dass der aktive Status von Geräten in json Gerät Liste ist korrekt",
|
|
22
|
+
"ru": "Предотвратить дублирование записей в конфигурации\nУбедитесь, что активный статус устройств в json Устройства Список правильный",
|
|
23
|
+
"pt": "Impedir a duplicação de entradas na configuração\nCertifique-se de status ativo de dispositivos em json Dispositivo A lista é correta",
|
|
24
|
+
"nl": "Vertaling:\nZorg voor actieve status van apparaten in Json Vernietiging. List is correct",
|
|
25
|
+
"fr": "Prévenir les doubles emplois dans la configuration\nAssurez-vous de l'état actif des appareils en json Dispositif La liste est correcte",
|
|
26
|
+
"it": "Prevenire la duplicazione delle voci nella configurazione\nAssicurarsi lo stato attivo dei dispositivi in json Dispositivo La lista è corretta",
|
|
27
|
+
"es": "Prevenir la duplicación de entradas en configuración\nAsegúrese de que el estado activo de los dispositivos en json Dispositivo La lista es correcta",
|
|
28
|
+
"pl": "Wynalezienie wpisów w konfiguracji\nUmożliwić czynny status urządzeń w jsonie. Device Lista jest prawidłowa",
|
|
29
|
+
"zh-cn": "B. 组合中物品的预防重复\nB. 确保在丛金中确保装置的积极参与 证人 名单正确",
|
|
30
|
+
"uk": "Запобігання дублюванню записів у конфігурації\nПереконайтеся, що активний статус пристроїв у jsonDeviceList правильний"
|
|
31
|
+
},
|
|
6
32
|
"4.2.16": {
|
|
7
33
|
"en": "Fix info logs on callee/caller\nAdd special handling for potential broken external image links in phonebook\nPrevent some crash cases reported by Sentry",
|
|
8
34
|
"de": "Korrigieren Sie Info-Protokolle auf Angerufenem/Anrufer\nFügen Sie eine spezielle Behandlung für potenziell defekte externe Bildlinks im Telefonbuch hinzu\nVerhindern Sie einige von Sentry gemeldete Absturzfälle",
|
|
@@ -13,7 +39,8 @@
|
|
|
13
39
|
"it": "Correggi i registri delle informazioni sul chiamato/chiamante\nAggiungi una gestione speciale per potenziali collegamenti di immagini esterne interrotti nella rubrica\nPrevenire alcuni casi di crash segnalati da Sentry",
|
|
14
40
|
"es": "Arreglar registros de información en el destinatario/persona que llama\nAgregue un manejo especial para posibles enlaces de imágenes externas rotas en la agenda telefónica\nEvitar algunos casos de bloqueo informados por Sentry",
|
|
15
41
|
"pl": "Napraw dzienniki informacji na rozmówcy/rozmówcy\nDodaj specjalną obsługę potencjalnych uszkodzonych linków do obrazów zewnętrznych w książce telefonicznej\nZapobiegaj niektórym przypadkom awarii zgłaszanych przez Sentry",
|
|
16
|
-
"zh-cn": "修复被调用者/调用者的信息日志\n为电话簿中可能损坏的外部图像链接添加特殊处理\n防止 Sentry 报告的一些崩溃案例"
|
|
42
|
+
"zh-cn": "修复被调用者/调用者的信息日志\n为电话簿中可能损坏的外部图像链接添加特殊处理\n防止 Sentry 报告的一些崩溃案例",
|
|
43
|
+
"uk": "Виправити інформаційні журнали про абонента/абонента\nДодайте спеціальну обробку потенційно пошкоджених зовнішніх посилань на зображення в телефонній книзі\nЗапобігайте деяким випадкам збоїв, про які повідомляє Sentry"
|
|
17
44
|
},
|
|
18
45
|
"4.2.15": {
|
|
19
46
|
"en": "fix crash case (Sentry IOBROKER-TR-064-35)",
|
|
@@ -25,7 +52,8 @@
|
|
|
25
52
|
"it": "fix crash case (Sentry IOBROKER-TR-064-35)",
|
|
26
53
|
"es": "reparar caso de bloqueo (Sentry IOBROKER-TR-064-35)",
|
|
27
54
|
"pl": "napraw przypadek awarii (Sentry IOBROKER-TR-064-35)",
|
|
28
|
-
"zh-cn": "修复崩溃案例 (Sentry IOBROKER-TR-064-35)"
|
|
55
|
+
"zh-cn": "修复崩溃案例 (Sentry IOBROKER-TR-064-35)",
|
|
56
|
+
"uk": "виправити випадок збою (Sentry IOBROKER-TR-064-35)"
|
|
29
57
|
},
|
|
30
58
|
"4.2.14": {
|
|
31
59
|
"en": "Further optimizations for js-controller 3.3",
|
|
@@ -37,7 +65,8 @@
|
|
|
37
65
|
"it": "Ulteriori ottimizzazioni per js-controller 3.3",
|
|
38
66
|
"es": "Más optimizaciones para js-controller 3.3",
|
|
39
67
|
"pl": "Dalsze optymalizacje dla kontrolera js 3.3",
|
|
40
|
-
"zh-cn": "js-controller 3.3 进一步优化"
|
|
68
|
+
"zh-cn": "js-controller 3.3 进一步优化",
|
|
69
|
+
"uk": "Подальша оптимізація для js-контролера 3.3"
|
|
41
70
|
},
|
|
42
71
|
"4.2.13": {
|
|
43
72
|
"en": "Optimize for js-controller 3.3 and prevent warnings (you pot. need to delete datapoints if you still see errors, they will be recreated)",
|
|
@@ -49,7 +78,8 @@
|
|
|
49
78
|
"it": "Ottimizza per js-controller 3.3 e previeni gli avvisi (potresti eliminare i punti dati se vedi ancora errori, verranno ricreati)",
|
|
50
79
|
"es": "Optimice para js-controller 3.3 y evite las advertencias (puede que necesite eliminar los puntos de datos si aún ve errores, se volverán a crear)",
|
|
51
80
|
"pl": "Optymalizuj pod kątem js-controller 3.3 i zapobiegaj ostrzeżeniom (pot. musisz usunąć punkty danych, jeśli nadal widzisz błędy, zostaną one odtworzone)",
|
|
52
|
-
"zh-cn": "针对 js-controller 3.3 进行优化并防止警告(您可能会。如果您仍然看到错误,则需要删除数据点,它们将被重新创建)"
|
|
81
|
+
"zh-cn": "针对 js-controller 3.3 进行优化并防止警告(您可能会。如果您仍然看到错误,则需要删除数据点,它们将被重新创建)",
|
|
82
|
+
"uk": "Оптимізуйте для js-controller 3.3 і запобігайте попередженням (вам потрібно видалити точки даних, якщо ви все ще бачите помилки, їх буде створено повторно)"
|
|
53
83
|
},
|
|
54
84
|
"4.2.12": {
|
|
55
85
|
"en": "prevent html template for calllists to be overwritten by default one\nfix crash case (Sentry IOBROKER-TR-064-2M)",
|
|
@@ -61,31 +91,8 @@
|
|
|
61
91
|
"it": "impedisce che il modello html per le liste di chiamata venga sovrascritto per impostazione predefinita\ncorrezione del crash case (Sentry IOBROKER-TR-064-2M)",
|
|
62
92
|
"es": "evitar que la plantilla html para listas de llamadas se sobrescriba por defecto\nreparar caso de bloqueo (Sentry IOBROKER-TR-064-2M)",
|
|
63
93
|
"pl": "zapobiegaj domyślnemu nadpisywaniu szablonu html dla list wywołań\nnaprawa awarii (Sentry IOBROKER-TR-064-2M)",
|
|
64
|
-
"zh-cn": "防止默认情况下覆盖用于呼叫列表的html模板\n修复崩溃案例(Sentry IOBROKER-TR-064-2M)"
|
|
65
|
-
|
|
66
|
-
"4.2.11": {
|
|
67
|
-
"en": "fix id-reset detection for single calls",
|
|
68
|
-
"de": "ID-Reset-Erkennung für einzelne Anrufe korrigiert",
|
|
69
|
-
"ru": "исправить обнаружение сброса идентификатора для одиночных вызовов",
|
|
70
|
-
"pt": "corrigir detecção de redefinição de id para chamadas únicas",
|
|
71
|
-
"nl": "id-reset-detectie voor enkele oproepen repareren",
|
|
72
|
-
"fr": "correction de la détection de réinitialisation d'ID pour les appels uniques",
|
|
73
|
-
"it": "risolto il rilevamento del ripristino dell'ID per singole chiamate",
|
|
74
|
-
"es": "corregir la detección de reinicio de identificación para llamadas individuales",
|
|
75
|
-
"pl": "naprawiono wykrywanie resetowania identyfikatora dla pojedynczych połączeń",
|
|
76
|
-
"zh-cn": "修复单个呼叫的ID重置检测"
|
|
77
|
-
},
|
|
78
|
-
"4.2.10": {
|
|
79
|
-
"en": "better handle caller id resets by reboots/FW updates to also update list specific counter and log when this happened",
|
|
80
|
-
"de": "Besseres Behandeln des Zurücksetzens der Anrufer-ID durch Neustarts / FW-Aktualisierungen, um auch den listenspezifischen Zähler zu aktualisieren und zu protokollieren, wenn dies passiert ist",
|
|
81
|
-
"ru": "лучше обрабатывать сброс идентификатора вызывающего абонента при перезагрузке / обновлении прошивки, чтобы также обновлять счетчик конкретного списка и регистрировать, когда это произошло",
|
|
82
|
-
"pt": "lidar melhor com redefinições de identificador de chamadas por reinicializações / atualizações de FW para também atualizar o contador específico da lista e registrar quando isso aconteceu",
|
|
83
|
-
"nl": "Beller-ID-resets beter afhandelen door reboots / FW-updates om ook de lijstspecifieke teller en het logboek bij te werken wanneer dit gebeurde",
|
|
84
|
-
"fr": "mieux gérer les réinitialisations de l'identifiant de l'appelant par des redémarrages / mises à jour du micrologiciel pour également mettre à jour le compteur spécifique de la liste et le journal lorsque cela s'est produit",
|
|
85
|
-
"it": "gestire meglio i ripristini dell'ID chiamante tramite riavvio / aggiornamenti FW per aggiornare anche il contatore specifico dell'elenco e il registro quando ciò è accaduto",
|
|
86
|
-
"es": "manejar mejor los reinicios del identificador de llamadas mediante reinicios / actualizaciones de FW para actualizar también el contador específico de la lista y el registro cuando esto sucedió",
|
|
87
|
-
"pl": "Lepsza obsługa resetowania identyfikatora dzwoniącego przez ponowne uruchomienie / aktualizacje FW, aby również zaktualizować określony licznik listy i dziennik, kiedy to się stało",
|
|
88
|
-
"zh-cn": "通过重新启动/固件更新更好地处理呼叫者ID重置,以便还更新列表特定计数器并在发生这种情况时进行记录"
|
|
94
|
+
"zh-cn": "防止默认情况下覆盖用于呼叫列表的html模板\n修复崩溃案例(Sentry IOBROKER-TR-064-2M)",
|
|
95
|
+
"uk": "запобігти перезапису шаблону html для списків викликів за замовчуванням\nвиправити випадок збою (Sentry IOBROKER-TR-064-2M)"
|
|
89
96
|
}
|
|
90
97
|
},
|
|
91
98
|
"title": "TR-064",
|
|
@@ -99,7 +106,8 @@
|
|
|
99
106
|
"it": "TR-064",
|
|
100
107
|
"es": "TR-064",
|
|
101
108
|
"pl": "TR-064",
|
|
102
|
-
"zh-cn": "TR-064"
|
|
109
|
+
"zh-cn": "TR-064",
|
|
110
|
+
"uk": "ТР-064"
|
|
103
111
|
},
|
|
104
112
|
"desc": {
|
|
105
113
|
"en": "The TR-064 adapter is used to control AVM FritzBox and get the network status of devices or phone calls",
|
|
@@ -111,7 +119,8 @@
|
|
|
111
119
|
"it": "L'adattatore TR-064 viene utilizzato per controllare AVM FritzBox e ottenere lo stato della rete dei dispositivi o delle telefonate",
|
|
112
120
|
"es": "El adaptador TR-064 se utiliza para controlar AVM FritzBox y obtener el estado de la red de dispositivos o llamadas telefónicas",
|
|
113
121
|
"pl": "Adapter TR-064 służy do sterowania AVM FritzBox i uzyskiwania stanu sieci urządzeń lub połączeń telefonicznych",
|
|
114
|
-
"zh-cn": "TR-064 适配器用于控制 AVM FritzBox 并获取设备或电话的网络状态"
|
|
122
|
+
"zh-cn": "TR-064 适配器用于控制 AVM FritzBox 并获取设备或电话的网络状态",
|
|
123
|
+
"uk": "Адаптер TR-064 використовується для керування AVM FritzBox і отримання стану мережі пристроїв або телефонних дзвінків"
|
|
115
124
|
},
|
|
116
125
|
"license": "MIT",
|
|
117
126
|
"platform": "Javascript/Node.js",
|
package/main.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
'use strict';
|
|
6
6
|
const utils = require('@iobroker/adapter-core'); // Get common adapter utils
|
|
7
|
-
const tools = require(`${utils.controllerDir}/lib/tools`);
|
|
8
7
|
const adapterName = require('./package.json').name.split('.').pop();
|
|
9
8
|
const phonebook = require('./lib/phonebook');
|
|
10
9
|
const CallMonitor = require('./lib/callmonitor');
|
|
@@ -116,7 +115,7 @@ function startAdapter(options) {
|
|
|
116
115
|
devices = new Devices(adapter);
|
|
117
116
|
adapter.getForeignObject('system.config', (err, systemConfig) => {
|
|
118
117
|
if (adapter.config.password && (!adapter.supportsFeature || !adapter.supportsFeature('ADAPTER_AUTO_DECRYPT_NATIVE'))) {
|
|
119
|
-
adapter.config.password =
|
|
118
|
+
adapter.config.password = adapter.decrypt((systemConfig && systemConfig.native && systemConfig.native.secret) || 'Zgfr56gFe87jJOM', adapter.config.password);
|
|
120
119
|
}
|
|
121
120
|
// eslint-disable-next-line no-control-regex
|
|
122
121
|
if (/[\x00-\x08\x0E-\x1F\x80-\xFF]/.test(adapter.config.password)) {
|
|
@@ -152,7 +151,7 @@ const CHANNEL_CALLLISTS = 'calllists';
|
|
|
152
151
|
const CHANNEL_CALLMONITOR = 'callmonitor';
|
|
153
152
|
|
|
154
153
|
let devStates;
|
|
155
|
-
|
|
154
|
+
let allDevices = [];
|
|
156
155
|
const ipActive = {};
|
|
157
156
|
|
|
158
157
|
const states = {
|
|
@@ -249,8 +248,9 @@ function onMessage(obj) {
|
|
|
249
248
|
let onlyActive;
|
|
250
249
|
let reread;
|
|
251
250
|
|
|
251
|
+
adapter.log.debug('onMessage: ' + JSON.stringify(obj));
|
|
252
252
|
switch (obj.command) {
|
|
253
|
-
case 'discovery':
|
|
253
|
+
case 'discovery': {
|
|
254
254
|
if (typeof obj.message === 'object') {
|
|
255
255
|
onlyActive = obj.message.onlyActive;
|
|
256
256
|
reread = obj.message.reread;
|
|
@@ -259,28 +259,36 @@ function onMessage(obj) {
|
|
|
259
259
|
return false;
|
|
260
260
|
}
|
|
261
261
|
if (!reread && allDevices.length > 0 && allDevices.onlyActive === onlyActive) {
|
|
262
|
+
adapter.log.debug('Discovery result: ' + JSON.stringify(allDevices));
|
|
262
263
|
adapter.sendTo(obj.from, obj.command, JSON.stringify(allDevices), obj.callback);
|
|
263
264
|
return true;
|
|
264
265
|
}
|
|
265
|
-
|
|
266
|
+
|
|
267
|
+
const newAllDevices = [];
|
|
268
|
+
newAllDevices.onlyActive = onlyActive;
|
|
269
|
+
let responseSent = false;
|
|
266
270
|
|
|
267
271
|
tr064Client.forEachHostEntry((err, device, cnt, all) => {
|
|
268
272
|
const active = !!(~~device.NewActive);
|
|
269
273
|
|
|
270
274
|
if (!onlyActive || active) {
|
|
271
|
-
|
|
275
|
+
newAllDevices.push({
|
|
272
276
|
name: device.NewHostName,
|
|
273
277
|
ip: device.NewIPAddress,
|
|
274
278
|
mac: device.NewMACAddress,
|
|
275
279
|
active: active
|
|
276
280
|
});
|
|
277
281
|
}
|
|
278
|
-
|
|
279
|
-
|
|
282
|
+
adapter.log.debug('Discovery Add (' + cnt + '/' + all + '): ' + device.NewHostName + ' ' + device.NewIPAddress + ' ' + device.NewMACAddress + ' ' + device.NewActive);
|
|
283
|
+
if (cnt + 1 >= all && !responseSent) {
|
|
284
|
+
responseSent = true;
|
|
285
|
+
allDevices = newAllDevices;
|
|
286
|
+
adapter.log.debug('Discovery result: ' + JSON.stringify(allDevices));
|
|
287
|
+
adapter.sendTo(obj.from, obj.command, JSON.stringify(newAllDevices), obj.callback);
|
|
280
288
|
}
|
|
281
289
|
});
|
|
282
290
|
return true;
|
|
283
|
-
|
|
291
|
+
}
|
|
284
292
|
default:
|
|
285
293
|
adapter.log.warn('Unknown command: ' + obj.command);
|
|
286
294
|
break;
|
|
@@ -1087,7 +1095,7 @@ function createConfiguredDevices(callback) {
|
|
|
1087
1095
|
}
|
|
1088
1096
|
dev.setChannelEx(device.NewHostName, { common: { name: device.NewHostName + ' (' + device.NewIPAddress + ')', role: 'channel' }, native: { mac: device.NewMACAddress }} );
|
|
1089
1097
|
setActive(dev, device.NewActive, device.NewIPAddress, device.NewMACAddress);
|
|
1090
|
-
arr.push( { active: !!device.NewActive, ip: device.NewIPAddress, name: device.NewHostName, mac: device.NewMACAddress } );
|
|
1098
|
+
arr.push( { active: !!(~~device.NewActive), ip: device.NewIPAddress, name: device.NewHostName, mac: device.NewMACAddress } );
|
|
1091
1099
|
});
|
|
1092
1100
|
}
|
|
1093
1101
|
|
|
@@ -1110,7 +1118,7 @@ function updateDevices(callback) {
|
|
|
1110
1118
|
dev.setChannelEx(device.NewHostName);
|
|
1111
1119
|
setActive(dev, device.NewActive, device.NewIPAddress, device.NewMACAddress);
|
|
1112
1120
|
if (adapter.config.jsonDeviceList) {
|
|
1113
|
-
arr.push( { active: !!device.NewActive, ip: device.NewIPAddress, name: device.NewHostName, mac: device.NewMACAddress } );
|
|
1121
|
+
arr.push( { active: !!(~~device.NewActive), ip: device.NewIPAddress, name: device.NewHostName, mac: device.NewMACAddress } );
|
|
1114
1122
|
}
|
|
1115
1123
|
});
|
|
1116
1124
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.tr-064",
|
|
3
|
-
"version": "4.2.
|
|
3
|
+
"version": "4.2.18",
|
|
4
4
|
"description": "ioBroker tr-064 Adapter",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "soef",
|
|
@@ -31,18 +31,18 @@
|
|
|
31
31
|
"mdns-discovery": "^0.2.6",
|
|
32
32
|
"tr-O64": "^0.2.4",
|
|
33
33
|
"xml2js": "^0.4.23",
|
|
34
|
-
"@iobroker/adapter-core": "^2.6.
|
|
34
|
+
"@iobroker/adapter-core": "^2.6.7"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@alcalzone/release-script": "^3.5.
|
|
38
|
-
"@alcalzone/release-script-plugin-iobroker": "^3.5.
|
|
39
|
-
"@alcalzone/release-script-plugin-license": "^3.5.
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"eslint": "^8.
|
|
37
|
+
"@alcalzone/release-script": "^3.5.9",
|
|
38
|
+
"@alcalzone/release-script-plugin-iobroker": "^3.5.9",
|
|
39
|
+
"@alcalzone/release-script-plugin-license": "^3.5.9",
|
|
40
|
+
"@iobroker/adapter-dev": "^1.2.0",
|
|
41
|
+
"@iobroker/dev-server": "^0.6.0",
|
|
42
|
+
"@iobroker/testing": "^4.1.0",
|
|
43
|
+
"mocha": "^10.2.0",
|
|
44
|
+
"chai": "^4.3.7",
|
|
45
|
+
"eslint": "^8.31.0"
|
|
46
46
|
},
|
|
47
47
|
"main": "main.js",
|
|
48
48
|
"scripts": {
|
|
@@ -53,7 +53,8 @@
|
|
|
53
53
|
"release": "release-script",
|
|
54
54
|
"release-patch": "release-script patch --yes",
|
|
55
55
|
"release-minor": "release-script minor --yes",
|
|
56
|
-
"release-major": "release-script major --yes"
|
|
56
|
+
"release-major": "release-script major --yes",
|
|
57
|
+
"translate": "translate-adapter"
|
|
57
58
|
},
|
|
58
59
|
"engines": {
|
|
59
60
|
"node": ">=8.0.0"
|
package/.releaseconfig.json
DELETED
package/lib/tools.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
const axios = require('axios');
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Tests whether the given variable is a real object and not an Array
|
|
5
|
-
* @param {any} it The variable to test
|
|
6
|
-
* @returns {it is Record<string, any>}
|
|
7
|
-
*/
|
|
8
|
-
function isObject(it) {
|
|
9
|
-
// This is necessary because:
|
|
10
|
-
// typeof null === 'object'
|
|
11
|
-
// typeof [] === 'object'
|
|
12
|
-
// [] instanceof Object === true
|
|
13
|
-
return Object.prototype.toString.call(it) === '[object Object]';
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Tests whether the given variable is really an Array
|
|
18
|
-
* @param {any} it The variable to test
|
|
19
|
-
* @returns {it is any[]}
|
|
20
|
-
*/
|
|
21
|
-
function isArray(it) {
|
|
22
|
-
if (Array.isArray != null) {
|
|
23
|
-
return Array.isArray(it);
|
|
24
|
-
}
|
|
25
|
-
return Object.prototype.toString.call(it) === '[object Array]';
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Translates text using the Google Translate API
|
|
30
|
-
* @param {string} text The text to translate
|
|
31
|
-
* @param {string} targetLang The target languate
|
|
32
|
-
* @param {string} yandex api key
|
|
33
|
-
* @returns {Promise<string>}
|
|
34
|
-
*/
|
|
35
|
-
async function translateText(text, targetLang, yandex) {
|
|
36
|
-
if (targetLang === 'en') {
|
|
37
|
-
return text;
|
|
38
|
-
}
|
|
39
|
-
if (yandex) {
|
|
40
|
-
return await translateYandex(text, targetLang, yandex);
|
|
41
|
-
} else {
|
|
42
|
-
return await translateGoogle(text, targetLang);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
async function translateYandex(text, targetLang, yandex) {
|
|
47
|
-
if (targetLang === 'zh-cn') {
|
|
48
|
-
targetLang = 'zh';
|
|
49
|
-
}
|
|
50
|
-
try {
|
|
51
|
-
const url = `https://translate.yandex.net/api/v1.5/tr.json/translate?key=${yandex}&text=${encodeURIComponent(text)}&lang=en-${targetLang}`;
|
|
52
|
-
const response = await axios({url, timeout: 15000});
|
|
53
|
-
if (response.data && response.data['text']) {
|
|
54
|
-
return response.data['text'][0];
|
|
55
|
-
}
|
|
56
|
-
throw new Error('Invalid response for translate request');
|
|
57
|
-
} catch (e) {
|
|
58
|
-
throw new Error(`Could not translate to "${targetLang}": ${e}`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
async function translateGoogle(text, targetLang) {
|
|
63
|
-
try {
|
|
64
|
-
const url = `http://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=${targetLang}&dt=t&q=${encodeURIComponent(text)}&ie=UTF-8&oe=UTF-8`;
|
|
65
|
-
const response = await axios({url, timeout: 15000});
|
|
66
|
-
if (isArray(response.data)) {
|
|
67
|
-
// we got a valid response
|
|
68
|
-
return response.data[0][0][0];
|
|
69
|
-
}
|
|
70
|
-
throw new Error('Invalid response for translate request');
|
|
71
|
-
} catch (e) {
|
|
72
|
-
throw new Error(`Could not translate to "${targetLang}": ${e}`);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
module.exports = {
|
|
77
|
-
isArray,
|
|
78
|
-
isObject,
|
|
79
|
-
translateText
|
|
80
|
-
};
|