iobroker.tr-064 4.2.15 → 4.2.16

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015-2021 soef <soef@gmx.net>
3
+ Copyright (c) 2015-2022 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
@@ -133,6 +133,11 @@ To use the call monitor feature it must be first enabled in the AVM Fritz!Box.
133
133
  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
134
 
135
135
  ## Changelog
136
+ ### 4.2.16 (2022-03-21)
137
+ * (Apollon77) Fix info logs on callee/caller
138
+ * (Apollon77) Add special handling for potential broken external image links in phonebook
139
+ * (Apollon77) Prevent some crash cases reported by Sentry
140
+
136
141
  ### 4.2.15 (2021-12-08)
137
142
  * (bluefox) fix crash case (Sentry IOBROKER-TR-064-35)
138
143
 
@@ -255,7 +260,7 @@ To enable the call monitor dial ```#96*5*``` and the TCP/IP Port 1012 will be o
255
260
  ## License
256
261
  The MIT License (MIT)
257
262
 
258
- Copyright (c) 2015-2021 soef <soef@gmx.net>
263
+ Copyright (c) 2015-2022 soef <soef@gmx.net>, ioBroker-Community-Developers
259
264
 
260
265
  Permission is hereby granted, free of charge, to any person obtaining a copy
261
266
  of this software and associated documentation files (the "Software"), to deal
package/admin/words.js CHANGED
@@ -10,7 +10,7 @@ systemDictionary = {
10
10
  "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", "zh-cn": "选择设备"},
11
11
  "Close": { "en": "Close", "de": "Schließen", "ru": "Закрыть", "pt": "Fechar", "nl": "Dichtbij", "fr": "Fermer", "it": "Vicino", "es": "Cerca", "pl": "Blisko", "zh-cn": "关"},
12
12
  "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", "zh-cn": "创建JSON设备列表"},
13
- "Devices": { "en": "Devices", "de": "Geräte", "ru": "Устройства", "pt": "Dispositivos", "nl": "apparaten", "fr": "Dispositifs", "it": "dispositivi", "es": "Dispositivos", "pl": "Pomysłowość", "zh-cn": "设备"},
13
+ "Devices": { "en": "Devices", "de": "Geräte", "ru": "Устройства", "pt": "Dispositivos", "nl": "apparaten", "fr": "Dispositifs", "it": "dispositivi", "es": "Dispositivos", "pl": "Urządzenia", "zh-cn": "设备"},
14
14
  "ERROR": { "en": "Error", "de": "Fehler", "ru": "ОШИБКА", "pt": "ERRO", "nl": "FOUT", "fr": "ERREUR", "it": "ERRORE", "es": "ERROR", "pl": "BŁĄD", "zh-cn": "错误"},
15
15
  "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", "zh-cn": "第一个启用适配器"},
16
16
  "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", "zh-cn": "找到一个设备"},
@@ -24,7 +24,7 @@ systemDictionary = {
24
24
  "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ń", "zh-cn": "列表未接来电"},
25
25
  "Name": { "en": "Name", "de": "Name", "ru": "Имя", "pt": "Nome", "nl": "Naam", "fr": "prénom", "it": "Nome", "es": "Nombre", "pl": "Imię", "zh-cn": "名称"},
26
26
  "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!", "zh-cn": "您必须先启用/启动%s适配器,然后才能使用此功能!"},
27
- "Ok": { "en": "Ok", "de": "Ok", "ru": "Ok", "pt": "Está bem", "nl": "OK", "fr": "D'accord", "it": "Ok", "es": "De acuerdo", "pl": "Dobrze", "zh-cn": "\"确定\""},
27
+ "Ok": { "en": "Ok", "de": "Ok", "ru": "Ok", "pt": "Ok", "nl": "OK", "fr": "D'accord", "it": "Ok", "es": "De acuerdo", "pl": "Dobrze", "zh-cn": "\"确定\""},
28
28
  "Options": { "en": "Options", "de": "Optionen", "ru": "Параметры", "pt": "Opções", "nl": "opties", "fr": "Les options", "it": "Opzioni", "es": "Opciones", "pl": "Opcje", "zh-cn": "选件"},
29
29
  "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", "zh-cn": "列出的电话"},
30
30
  "Password": { "en": "Password", "de": "Passwort", "ru": "Пароль", "pt": "Senha", "nl": "Wachtwoord", "fr": "Mot de passe", "it": "Parola d'ordine", "es": "Contraseña", "pl": "Hasło", "zh-cn": "密码"},
@@ -32,7 +32,7 @@ systemDictionary = {
32
32
  "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ć...", "zh-cn": "请等等..."},
33
33
  "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)", "zh-cn": "投票时间间隔(sec)"},
34
34
  "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", "zh-cn": "选择一个设备"},
35
- "Settings": { "en": "Settings", "de": "Einstellungen", "ru": "Настройки", "pt": "Definições", "nl": "instellingen", "fr": "Réglages", "it": "impostazioni", "es": "Ajustes", "pl": "Ustawienia", "zh-cn": "设置"},
35
+ "Settings": { "en": "Settings", "de": "Einstellungen", "ru": "Настройки", "pt": "Configurações", "nl": "instellingen", "fr": "Réglages", "it": "impostazioni", "es": "Ajustes", "pl": "Ustawienia", "zh-cn": "设置"},
36
36
  "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", "zh-cn": "TR064设置适配器"},
37
37
  "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", "zh-cn": "TR-064设置适配器"},
38
38
  "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ń", "zh-cn": "使用Calllist"},
package/io-package.json CHANGED
@@ -1,8 +1,20 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "tr-064",
4
- "version": "4.2.15",
4
+ "version": "4.2.16",
5
5
  "news": {
6
+ "4.2.16": {
7
+ "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
+ "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",
9
+ "ru": "Исправить журналы информации о вызываемом / вызывающем абоненте\nДобавить специальную обработку для потенциально неработающих ссылок на внешние изображения в телефонной книге.\nПредотвращение некоторых случаев сбоев, о которых сообщает Sentry.",
10
+ "pt": "Corrigir registros de informações no chamador/chamador\nAdicione tratamento especial para possíveis links de imagens externas quebrados na agenda telefônica\nPrevenir alguns casos de travamento relatados pelo Sentinela",
11
+ "nl": "Fix info logs op bellee/beller\nVoeg speciale afhandeling toe voor mogelijk verbroken externe afbeeldingslinks in het telefoonboek\nVoorkom enkele door Sentry gemelde crashgevallen",
12
+ "fr": "Correction des journaux d'informations sur l'appelé/appelant\nAjouter une gestion spéciale pour les liens d'images externes potentiellement rompus dans le répertoire\nEmpêcher certains cas de plantage signalés par Sentry",
13
+ "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
+ "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
+ "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 报告的一些崩溃案例"
17
+ },
6
18
  "4.2.15": {
7
19
  "en": "fix crash case (Sentry IOBROKER-TR-064-35)",
8
20
  "de": "Crashfall beheben (Sentry IOBROKER-TR-064-35)",
@@ -74,18 +86,6 @@
74
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ó",
75
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",
76
88
  "zh-cn": "通过重新启动/固件更新更好地处理呼叫者ID重置,以便还更新列表特定计数器并在发生这种情况时进行记录"
77
- },
78
- "4.2.9": {
79
- "en": "try to better handle calllist resets on FW updates\nMake sure jsonDeviceList do not get deleted on start\nBetter handle not initialized calllist templates",
80
- "de": "Versuchen Sie, das Zurücksetzen der Anrufliste bei FW-Updates besser zu handhaben\nStellen Sie sicher, dass jsonDeviceList beim Start nicht gelöscht wird\nBehandeln Sie nicht initialisierte Anruflistenvorlagen besser",
81
- "ru": "попытаться лучше обрабатывать сбросы списка вызывающих при обновлениях прошивки\nУбедитесь, что jsonDeviceList не удаляется при запуске\nЛучшая обработка неинициализированных шаблонов списков вызовов",
82
- "pt": "tente lidar melhor com as redefinições da lista de chamadas nas atualizações do FW\nCertifique-se de que jsonDeviceList não seja excluído na inicialização\nMelhor lidar com modelos de lista de chamadas não inicializados",
83
- "nl": "probeer calllist-resets op FW-updates beter af te handelen\nZorg ervoor dat jsonDeviceList niet wordt verwijderd bij het starten\nBeter omgaan met niet-geïnitialiseerde oproeplijstsjablonen",
84
- "fr": "essayez de mieux gérer les réinitialisations de la liste d'appels sur les mises à jour du micrologiciel\nAssurez-vous que jsonDeviceList ne soit pas supprimé au démarrage\nMieux gérer les modèles de liste d'appels non initialisés",
85
- "it": "provare a gestire meglio i ripristini delle liste di chiamata sugli aggiornamenti FW\nAssicurati che jsonDeviceList non venga eliminato all'avvio\nGestire meglio i modelli di elenchi di chiamate non inizializzati",
86
- "es": "intente manejar mejor los restablecimientos de la lista de llamadas en las actualizaciones de FW\nAsegúrese de que jsonDeviceList no se elimine al iniciar\nManeje mejor las plantillas de listas de llamadas no inicializadas",
87
- "pl": "spróbuj lepiej radzić sobie z resetowaniem listy wywołań przy aktualizacjach FW\nUpewnij się, że jsonDeviceList nie zostaną usunięte podczas uruchamiania\nLepsza obsługa niezainicjowanych szablonów list wywołań",
88
- "zh-cn": "尝试更好地处理固件更新中的呼叫清单重置\n确保jsonDeviceList不会在启动时被删除\n更好地处理未初始化的呼叫列表模板"
89
89
  }
90
90
  },
91
91
  "title": "TR-064",
@@ -110,7 +110,11 @@ function CallMonitor(adapter, devices, phonebook) {
110
110
  dev.setChannel(name, name);
111
111
  for (const i of Object.keys(message)) {
112
112
  if (i[0] !== '_') {
113
- dev.set(i, message[i]);
113
+ if (i === 'callee' || i === 'caller') {
114
+ dev.set(i, { val: message[i].toString(), common: { name: i, type: 'string', role: 'state' }});
115
+ } else {
116
+ dev.set(i, message[i]);
117
+ }
114
118
  }
115
119
  }
116
120
  dev.set('timestamp', timestamp);
package/lib/devices.js CHANGED
@@ -87,6 +87,9 @@ function valType(val) {
87
87
  return 9;
88
88
  }
89
89
  const sVal = val.toString();
90
+ if (sVal !== '0' && sVal.startsWith('0') && !sVal.startsWith('0.')) {
91
+ return sVal;
92
+ }
90
93
 
91
94
  const number = parseInt(sVal);
92
95
  if (number.toString() === sVal) {
@@ -334,9 +337,15 @@ function Devices(adapter, onReady) {
334
337
  }
335
338
 
336
339
  adapter.getDevices((err, devices) => {
340
+ if (err || !devices) {
341
+ return typeof callback === 'function' && callback(-1);
342
+ }
337
343
  doIt(devices);
338
344
 
339
345
  adapter.getChannels('', (err, channels) => {
346
+ if (err || !channels) {
347
+ return typeof callback === 'function' && callback(-1);
348
+ }
340
349
  doIt(channels);
341
350
  typeof callback === 'function' && callback(0);
342
351
  });
package/lib/phonebook.js CHANGED
@@ -169,17 +169,23 @@ Phonebook.prototype.read = function (bo, cb) {
169
169
  phonebookId: phonebookId
170
170
  };
171
171
  if (contact.person.imageurl && self.ownUrl) {
172
- //newEntry.imageurl = self.ownUrl + contact.person.imageurl.replace(/^.*?path\=/, '');
173
- newEntry.imageurl = self.ownUrl.replace(/{imageurl}/, contact.person.imageurl);
174
- //if (!/^https*:\/\//.test(newEntry.imageurl)) {
175
- // newEntry.imageurl = self.NewPhonebookURL.replace (/\/phonebook.lua\?/, contact.person.imageurl + '&');
176
- //}
177
- // if (contact.person.imageurl.indexOf('://') >= 0) {
178
- // newEntry.imageurl = contact.person.imageurl.replace(/^.*(https*:\/\/.?)/, '$1');
179
- // } else {
180
- // newEntry.imageurl = self.NewPhonebookURL.replace (/\/phonebook.lua\?/, contact.person.imageurl + '&');
181
- // //testLoadInmage(newEntry.imageurl);
182
- // }
172
+
173
+ const ar = /^(.*)\/download.lua\?path=(http[^=&]+)&*.*$/.exec(contact.person.imageurl);
174
+ if (ar && ar[2]) {
175
+ newEntry.imageurl = ar[2];
176
+ } else {
177
+ //newEntry.imageurl = self.ownUrl + contact.person.imageurl.replace(/^.*?path\=/, '');
178
+ newEntry.imageurl = self.ownUrl.replace(/{imageurl}/, contact.person.imageurl);
179
+ //if (!/^https*:\/\//.test(newEntry.imageurl)) {
180
+ // newEntry.imageurl = self.NewPhonebookURL.replace (/\/phonebook.lua\?/, contact.person.imageurl + '&');
181
+ //}
182
+ // if (contact.person.imageurl.indexOf('://') >= 0) {
183
+ // newEntry.imageurl = contact.person.imageurl.replace(/^.*(https*:\/\/.?)/, '$1');
184
+ // } else {
185
+ // newEntry.imageurl = self.NewPhonebookURL.replace (/\/phonebook.lua\?/, contact.person.imageurl + '&');
186
+ // //testLoadInmage(newEntry.imageurl);
187
+ // }
188
+ }
183
189
  }
184
190
  adapter.log.debug('Phonebook ' + phonebookId + ' New Entry: ' + JSON.stringify(newEntry));
185
191
  self.push(newEntry);
package/main.js CHANGED
@@ -820,7 +820,7 @@ TR064.prototype.command = function (command, callback) {
820
820
  } catch(e) {
821
821
  return;
822
822
  } //xxx
823
- if (typeof o.params !== 'object' || o.params === null) {
823
+ if (!o || typeof o.params !== 'object' || o.params === null) {
824
824
  return;
825
825
  }
826
826
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.tr-064",
3
- "version": "4.2.15",
3
+ "version": "4.2.16",
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.5.1"
34
+ "@iobroker/adapter-core": "^2.6.0"
35
35
  },
36
36
  "devDependencies": {
37
- "@alcalzone/release-script": "^3.4.1",
38
- "@alcalzone/release-script-plugin-iobroker": "^3.4.1",
39
- "@alcalzone/release-script-plugin-license": "^3.4.1",
37
+ "@alcalzone/release-script": "^3.5.6",
38
+ "@alcalzone/release-script-plugin-iobroker": "^3.5.7",
39
+ "@alcalzone/release-script-plugin-license": "^3.5.3",
40
40
  "gulp": "^4.0.2",
41
- "mocha": "^9.1.3",
42
- "chai": "^4.3.4",
43
- "axios": "^0.24.0",
44
- "@iobroker/testing": "^2.5.2",
45
- "eslint": "^7.32.0"
41
+ "mocha": "^9.2.2",
42
+ "chai": "^4.3.6",
43
+ "axios": "^0.26.1",
44
+ "@iobroker/testing": "^2.5.6",
45
+ "eslint": "^8.11.0"
46
46
  },
47
47
  "main": "main.js",
48
48
  "scripts": {