iobroker.iot 5.0.11 → 5.0.13
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 -10
- package/admin/assets/index-CJ_AWUR4.css +1 -0
- package/admin/assets/index-DCr4hGKK.js +705 -0
- package/admin/index_m.html +2 -2
- package/admin/rules/@mf-types/ActionVisu.d.ts +2 -0
- package/admin/rules/@mf-types/compiled-types/ActionVisu.d.ts +29 -0
- package/admin/rules/@mf-types.d.ts +3 -0
- package/admin/rules/@mf-types.zip +0 -0
- package/admin/rules/assets/ActionVisu-BN0Kjfo9.js +5 -0
- package/admin/rules/assets/ActionVisu__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__.js-D5qEIjqV.js +1 -0
- package/admin/rules/assets/ActionVisu__loadShare__react__loadShare__.js-aa1tDx2C.js +1 -0
- package/admin/rules/assets/ActionVisu__loadShare__react__loadShare__.js_commonjs-proxy-DX6cx281.js +1 -0
- package/admin/rules/assets/ActionVisu__loadShare__react_mf_2_dom__loadShare__.js-uY2qDezJ.js +1 -0
- package/admin/rules/assets/ActionVisu__loadShare__react_mf_2_dom__loadShare__.js_commonjs-proxy-27bLZRGy.js +1 -0
- package/admin/rules/assets/bootstrap-QjsDSZNA.js +1 -0
- package/admin/rules/assets/hostInit-CoWylRge.js +1 -0
- package/admin/rules/assets/index-C1ZEp-2N.js +2 -0
- package/admin/rules/assets/index-Ccpql4vu.js +1 -0
- package/admin/rules/assets/{index-DAfe9TMn.js → index-DiSsXjpZ.js} +4 -20
- package/admin/rules/assets/index-FrXvyqvW.js +1187 -0
- package/admin/rules/assets/jsx-runtime-CnsYFZsa.js +1 -0
- package/admin/rules/assets/localSharedImportMap-8wECk2hR.js +1 -0
- package/admin/rules/assets/virtualExposes-b6CxLzZb.js +1 -0
- package/admin/rules/customRuleBlocks.js +7 -2
- package/admin/rules/mf-stats.json +1 -0
- package/build/lib/AlexaSmartHomeV3/Alexa/AlexaResponse.js +2 -2
- package/build/lib/AlexaSmartHomeV3/Alexa/AlexaResponse.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/EndpointHealth.js +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/EndpointHealth.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/Base.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Controls/Control.js +2 -2
- package/build/lib/AlexaSmartHomeV3/Controls/Control.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Device.js +3 -3
- package/build/lib/AlexaSmartHomeV3/Device.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/DeviceManager.js +2 -1
- package/build/lib/AlexaSmartHomeV3/DeviceManager.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Helpers/RateLimiter.js +2 -2
- package/build/lib/AlexaSmartHomeV3/Helpers/RateLimiter.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Helpers/Utils.js +1 -1
- package/build/lib/AlexaSmartHomeV3/Helpers/Utils.js.map +1 -1
- package/build/lib/alisa.js +4 -4
- package/build/main.js +35 -64
- package/build/main.js.map +1 -1
- package/io-package.json +27 -27
- package/package.json +13 -14
- package/admin/assets/index-Bd3GtHgn.css +0 -1
- package/admin/assets/index-BmnNw2oA.js +0 -759
- package/admin/rules/assets/ActionVisu-BvWg4aqg.js +0 -5
- package/admin/rules/assets/ActionVisu__loadShare__react__loadShare__-5Bv9wGPU.js +0 -1
- package/admin/rules/assets/ActionVisu__loadShare__react_mf_2_dom__loadShare__-DUk47PjY.js +0 -9
- package/admin/rules/assets/ActionVisu__mf_v__runtimeInit__mf_v__-BUkKpfUR.js +0 -1
- package/admin/rules/assets/_commonjsHelpers-Cpj98o6Y.js +0 -1
- package/admin/rules/assets/bootstrap-BPw119x4.js +0 -1
- package/admin/rules/assets/hostInit-Dxp6BaAc.js +0 -2
- package/admin/rules/assets/index-Do-nCdWy.js +0 -9
- package/admin/rules/assets/index-NkHakkqA.js +0 -2
- package/admin/rules/assets/index-aJU5X-xL.js +0 -1152
- package/admin/rules/assets/index.cjs-DyuWoUPi.js +0 -8
- package/admin/rules/assets/virtualExposes-BQXgT6g9.js +0 -2
- package/build/lib/alexaSmartHomeV2.js +0 -2788
package/build/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["import { device as DeviceModule } from 'aws-iot-device-sdk';\nimport { Adapter, type AdapterOptions } from '@iobroker/adapter-core'; // Get common adapter utils\nimport { readFileSync } from 'node:fs';\nimport axios from 'axios';\nimport { deflateSync } from 'node:zlib';\n\n// @ts-expect-error no types\nimport AlexaSH2 from './lib/alexaSmartHomeV2';\nimport AlexaSH3 from './lib/alexaSmartHomeV3';\nimport AlexaCustom, { type AlexaCustomResponse } from './lib/alexaCustom';\n// @ts-expect-error no types\nimport GoogleHome from './lib/googleHome';\n// @ts-expect-error no types\nimport YandexAlisa from './lib/alisa';\nimport Remote, { type SOCKET_MESSAGE, type SOCKET_TRUNK } from './lib/remote';\nimport { handleGeofenceData, handleDevicesData, handleSendToAdapter, handleGetInstances } from './lib/visuApp';\nimport { buildMessageFromNotification } from './lib/notifications';\nimport type { IotAdapterConfig } from './lib/types';\n\nconst NONE = '___none___';\nconst MAX_IOT_MESSAGE_LENGTH = 127 * 1024;\nconst SPECIAL_ADAPTERS = ['netatmo'];\nconst ALLOWED_SERVICES = SPECIAL_ADAPTERS.concat(['text2command']);\n\n// Connection retry delays in milliseconds\n// Progressive backoff strategy: 10s, 15s, 20s, 30s, 45s, then 60s for all subsequent attempts\nconst RETRY_DELAYS_MS = [\n 10_000, // First retry: 10 seconds\n 15_000, // Second retry: 15 seconds\n 20_000, // Third retry: 20 seconds\n 30_000, // Fourth retry: 30 seconds\n 45_000, // Fifth retry: 45 seconds\n];\nconst MAX_RETRY_DELAY_MS = 60_000; // Cap at 60 seconds for all subsequent retries\n\nclass IotAdapter extends Adapter {\n declare public config: IotAdapterConfig;\n private recalcTimeout: NodeJS.Timeout | null = null;\n private lang: ioBroker.Languages = 'de';\n private translate = false;\n private alexaSH2: AlexaSH2 | null = null;\n private alexaSH3: AlexaSH3 | null = null;\n private googleHome: GoogleHome | null = null;\n private alexaCustom: AlexaCustom | null = null;\n private yandexAlisa: YandexAlisa | null = null;\n private remote: Remote | null = null;\n private device: DeviceModule | null = null;\n private urlKey: { key: string } | null = null;\n\n private connectedOwn = false;\n private secret: string = '';\n private connectStarted = 0;\n private caCert: Buffer | null = null;\n private validTill: string | null = null;\n private validTillLastQuery: number = 0;\n private alertReported = false;\n\n public constructor(options: Partial<AdapterOptions> = {}) {\n super({\n ...options,\n name: 'iot',\n objectChange: (id, obj) => {\n if (id === 'system.config' && obj && !this.translate) {\n const systemObj = obj as ioBroker.SystemConfigObject;\n this.lang = systemObj.common.language;\n\n if (this.lang !== 'en' && this.lang !== 'de' && this.lang !== 'ru') {\n this.lang = 'en';\n }\n\n this.alexaSH2?.setLanguage(this.lang);\n this.alexaSH3?.setLanguage(this.lang);\n this.yandexAlisa?.setLanguage(this.lang);\n this.alexaCustom?.setLanguage(this.lang);\n this.googleHome?.setLanguage(this.lang);\n this.remote?.setLanguage(this.lang);\n }\n // if it is an instance\n if (id.startsWith('system.adapter.')) {\n // try to find it in special adapters\n const adpr = SPECIAL_ADAPTERS.find(a => id.startsWith(`system.adapter.${a}.`));\n // if found and it is really instance\n if (adpr && id.match(/\\.\\d+$/)) {\n // update state\n setTimeout(async () => await this.createStateForAdapter(adpr), 1000);\n }\n\n return;\n }\n void this.alexaSH3?.handleObjectChange(id, obj);\n\n if (id) {\n this.remote?.updateObject(id, obj);\n }\n },\n stateChange: async (id, state) => {\n if (id === `${this.namespace}.app.message` && state && !state.ack) {\n try {\n await this.sendMessageToApp(state.val as string);\n } catch (e) {\n this.log.error(`Cannot send message to app: ${e}`);\n }\n }\n\n if (state) {\n void this.googleHome?.updateState(id, state);\n void this.alexaSH3?.handleStateUpdate(id, state);\n void this.yandexAlisa?.updateState?.(id, state);\n }\n\n if (id) {\n this.remote?.updateState(id, state);\n }\n\n if (id === `${this.namespace}.smart.lastResponse` && state && !state.ack) {\n this.alexaCustom?.setResponse(state.val as string);\n }\n },\n unload: async callback => {\n try {\n if (this.device) {\n this.device.end();\n this.device = null;\n }\n if (this.remote) {\n this.remote.destroy();\n this.remote = null;\n }\n\n if (this.alexaSH3) {\n await this.alexaSH3.destroy();\n }\n } catch {\n // ignore\n }\n callback();\n },\n message: async obj => {\n if (obj) {\n switch (obj.command) {\n case 'update':\n if (this.recalcTimeout) {\n clearTimeout(this.recalcTimeout);\n }\n\n this.recalcTimeout = setTimeout(async () => {\n this.recalcTimeout = null;\n this.alexaSH2?.updateDevices(\n obj.message,\n async (analyseAddedId: any): Promise<void> => {\n await this.setStateAsync('smart.updatesResult', analyseAddedId || '', true);\n this.log.debug('Devices updated!');\n await this.setStateAsync('smart.updates', true, true);\n },\n );\n\n // this.alexaSH3 && this.alexaSH3.updateDevices(obj.message, async analyseAddedId => {\n // await this.setStateAsync('smart.updatesResult', analyseAddedId || '', true);\n // await this.setStateAsync('smart.updates3', true, true);\n // });\n if (this.alexaSH3) {\n await this.alexaSH3.updateDevices();\n await this.setStateAsync('smart.updates3', 1, true);\n }\n\n this.googleHome?.updateDevices(async (analyseAddedId: any): Promise<void> => {\n await this.setStateAsync('smart.updatesResult', analyseAddedId || '', true);\n this.log.debug('GH Devices updated!');\n await this.setStateAsync('smart.updatesGH', true, true);\n });\n }, 1000);\n break;\n\n case 'browse':\n if (obj.callback) {\n this.log.info('Request devices');\n if (this.alexaSH2) {\n this.alexaSH2.updateDevices(() => {\n this.sendTo(obj.from, obj.command, this.alexaSH2!.getDevices(), obj.callback);\n void this.setState('smart.updates', false, true);\n });\n } else {\n this.sendTo(obj.from, obj.command, { error: 'not activated' }, obj.callback);\n }\n }\n break;\n\n case 'browse3':\n if (obj.callback) {\n this.log.info(`Request V3 devices: ${obj.message}`);\n if (this.alexaSH3) {\n const devices = await this.alexaSH3.getDevices(obj.message === 'objects');\n this.sendTo(obj.from, obj.command, devices, obj.callback);\n await this.setStateAsync('smart.updates3', 0, true);\n } else {\n this.sendTo(obj.from, obj.command, { error: 'not activated' }, obj.callback);\n }\n }\n break;\n\n case 'browseGH':\n if (obj.callback) {\n this.log.info('Request google home devices');\n if (this.googleHome) {\n this.googleHome.updateDevices(() => {\n this.sendTo(obj.from, obj.command, this.googleHome!.getDevices(), obj.callback);\n void this.setStateAsync('smart.updatesGH', false, true);\n });\n } else {\n this.sendTo(obj.from, obj.command, { error: 'not activated' }, obj.callback);\n }\n }\n break;\n\n case 'browseAlisa':\n if (obj.callback) {\n this.log.info('Request Yandex Alice devices');\n if (this.yandexAlisa) {\n this.yandexAlisa.updateDevices(() => {\n this.sendTo(\n obj.from,\n obj.command,\n this.yandexAlisa!.getDevices(),\n obj.callback,\n );\n void this.setStateAsync('smart.updatesYA', false, true);\n });\n } else {\n this.sendTo(obj.from, obj.command, { error: 'not activated' }, obj.callback);\n }\n }\n break;\n\n case 'alexaCustomKnownDevices':\n // Admin UI can request the known/discoveredAlexa devices used via Custom skill\n // Allow setting the rooms of the devices and store in adapter config\n // Restart adapter after change - or we also add a set message to the config\n if (obj.callback) {\n this.log.info('Request Alexa Custom known devices');\n this.sendTo(\n obj.from,\n obj.command,\n this.alexaCustom ? this.alexaCustom.getKnownDevices() : { error: 'not activated' },\n obj.callback,\n );\n }\n break;\n\n case 'alexaCustomKnownUsers':\n // Admin UI can request the known/discoveredAlexa users used via Custom skill\n // Allow setting the names of the users and store in adapter config\n // Restart adapter after change - or we also add a set message to the config\n if (obj.callback) {\n this.log.info('Request Alexa Custom known users');\n this.sendTo(\n obj.from,\n obj.command,\n this.alexaCustom ? this.alexaCustom.getKnownUsers() : { error: 'not activated' },\n obj.callback,\n );\n }\n break;\n\n case 'private': {\n if (typeof obj.message !== 'object') {\n try {\n obj.message = JSON.parse(obj.message);\n } catch (e) {\n this.log.error(`Cannot parse object: ${e}`);\n if (obj.callback) {\n this.sendTo(\n obj.from,\n obj.command,\n { error: 'Invalid message format: cannot parse object' },\n obj.callback,\n );\n }\n return;\n }\n }\n const response = await this.processMessage(obj.message.type, obj.message.request);\n if (obj.callback) {\n this.sendTo(obj.from, obj.command, response, obj.callback);\n }\n\n break;\n }\n case 'ifttt':\n this.sendDataToIFTTT(obj.message);\n break;\n\n case 'alexaCustomResponse':\n this.alexaCustom?.setResponse(obj.message);\n break;\n\n case 'debug':\n this.alexaSH2?.getDebug((data: any): void =>\n this.sendTo(obj.from, obj.command, data, obj.callback),\n );\n break;\n\n case 'updateValidTill':\n await this.readValidTill(true);\n this.sendTo(obj.from, obj.command, this.validTill, obj.callback);\n break;\n\n case 'getServiceEndpoint':\n if (obj.callback) {\n if (!this.urlKey) {\n try {\n this.urlKey = await this.readUrlKey();\n } catch {\n try {\n this.urlKey = await this.createUrlKey(this.config.login, this.config.pass);\n } catch (err) {\n if (obj.callback) {\n this.sendTo(\n obj.from,\n obj.command,\n { error: `Cannot get urlKey: ${err.toString()}` },\n obj.callback,\n );\n }\n return;\n }\n }\n }\n\n const result: {\n url: string;\n stateID?: string;\n data?: string;\n warning?: string;\n } = {\n url: `https://service.iobroker.in/v1/iotService?key=${this.urlKey.key}&user=${encodeURIComponent(this.config.login)}`,\n };\n const serviceName =\n typeof obj.message === 'string' ? obj.message : obj.message?.serviceName;\n if (serviceName) {\n result.url += `&service=${encodeURIComponent(serviceName)}`;\n result.stateID = `${this.namespace}.services.${serviceName}`;\n }\n if (obj.message?.data) {\n result.data += `&data=${typeof obj.message.data === 'object' ? JSON.stringify(obj.message.data) : obj.message.data}`;\n }\n // check if the service name is in the white list\n if (\n serviceName &&\n this.config.allowedServices[0] !== '*' &&\n !this.config.allowedServices.includes(serviceName.replace(/^custom_/, '')) &&\n !ALLOWED_SERVICES.includes(serviceName)\n ) {\n result.warning = 'Service name is not in white list';\n this.log.warn(`Service \"${serviceName}\" is not in allowed services list`);\n }\n\n if (obj.callback) {\n this.sendTo(obj.from, obj.command, result, obj.callback);\n }\n }\n break;\n case 'sendNotification':\n try {\n const { message, title } = buildMessageFromNotification(obj.message);\n await this.sendMessageToApp(JSON.stringify({ message, title }));\n if (obj.callback) {\n this.sendTo(obj.from, 'sendNotification', { sent: true }, obj.callback);\n }\n } catch {\n if (obj.callback) {\n this.sendTo(obj.from, 'sendNotification', { sent: false }, obj.callback);\n }\n }\n break;\n default:\n this.log.warn(`Unknown command: ${obj.command}`);\n break;\n }\n }\n },\n ready: () =>\n this.main()\n .then(() => {})\n .catch(error => {\n this.log.error(`Error in main: ${error.toString()}`);\n }),\n });\n\n // warning: `this.log = obj => console.log(obj)` does not implemented. Only this.on('log', obj => console.log(obj))\n this.on('log', obj => this.remote?.onLog(obj));\n }\n\n sendDataToIFTTT(obj: {\n event?: string;\n key?: string;\n id?: string;\n val?: ioBroker.StateValue;\n ack?: boolean;\n }): void {\n if (!obj) {\n this.log.warn('No data to send to IFTTT');\n return;\n }\n if (!this.config.iftttKey && (typeof obj !== 'object' || !obj.key)) {\n this.log.warn('No IFTTT key is defined');\n return;\n }\n\n let url;\n let data;\n if (typeof obj !== 'object') {\n url = `https://maker.ifttt.com/trigger/state/with/key/${this.config.iftttKey}`;\n data = {\n value1: `${this.namespace}.services.ifttt`,\n value2: obj,\n };\n } else if (obj.event) {\n const event = obj.event;\n const key = obj.key;\n delete obj.event;\n delete obj.key;\n url = `https://maker.ifttt.com/trigger/${event}/with/key/${key || this.config.iftttKey}`;\n data = obj;\n } else if (obj.val === undefined) {\n return this.log.warn('No value is defined');\n } else {\n obj.id = obj.id || `${this.namespace}.services.ifttt`;\n url = `https://maker.ifttt.com/trigger/state/with/key/${this.config.iftttKey}`;\n data = {\n value1: obj.id,\n value2: obj.val,\n value3: obj.ack,\n };\n }\n\n if (url) {\n axios\n .post(url, data, {\n timeout: 15000,\n validateStatus: status => status < 400,\n })\n .then(response => this.log.debug(`Response from IFTTT: ${JSON.stringify(response.data)}`))\n .catch(error => {\n if (error.response) {\n this.log.warn(\n `Response from IFTTT: ${error.response.data ? JSON.stringify(error.response.data) : error.response.status}`,\n );\n } else {\n this.log.warn(`Response from IFTTT: ${error.code}`);\n }\n });\n } else {\n this.log.warn(`Invalid request to IFTTT: ${JSON.stringify(obj)}`);\n }\n }\n\n /**\n * Send a message to the ioBroker Visu App by using the app-message endpoint (which then forwards it to the app via FCM)\n *\n * @param message either a json string or the message itself, if the message itself the other props will be taken from the adapter states\n */\n async sendMessageToApp(message: string): Promise<void> {\n if (!message) {\n throw new Error('Empty message');\n }\n const trimmedMessage = message.toString().trim();\n let json: {\n message: string;\n title: string;\n priority?: 'high';\n ttlSeconds?: number;\n expire?: number;\n } | null;\n if (trimmedMessage.startsWith('{') && trimmedMessage.endsWith('}')) {\n try {\n json = JSON.parse(trimmedMessage);\n } catch {\n this.log.warn(`Cannot parse message: ${trimmedMessage}`);\n json = null;\n }\n } else {\n json = null;\n }\n\n if (!json) {\n // take expires\n const ttlSecondsState = await this.getStateAsync(`${this.namespace}.app.expire`);\n const priorityState = await this.getStateAsync(`${this.namespace}.app.priority`);\n const titleState = await this.getStateAsync(`${this.namespace}.app.title`);\n const priorityVal = priorityState?.val;\n json = {\n message: message.toString(),\n priority: priorityVal === '1' || priorityVal === 'high' || priorityVal === true ? 'high' : undefined,\n ttlSeconds: parseInt(ttlSecondsState?.val as string, 0) || undefined,\n title: ((titleState?.val as string) || 'ioBroker').toString(),\n };\n } else {\n if (json.expire) {\n json.ttlSeconds = json.expire;\n delete json.expire;\n }\n }\n\n json.ttlSeconds = parseInt(json.ttlSeconds as unknown as string, 0) || undefined;\n\n if (json.ttlSeconds && json.ttlSeconds > 3_600 * 48) {\n json.ttlSeconds = 3_600 * 48;\n }\n\n if (!json.message) {\n throw new Error('Empty message');\n }\n\n const response = await axios.post('https://app-message.iobroker.in/', json, {\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${Buffer.from(`${this.config.login}:${this.config.pass}`).toString('base64')}`,\n },\n timeout: 5_000,\n validateStatus: status => status < 400,\n });\n await this.setState('app.message', message, true);\n this.log.debug(`Message sent: ${JSON.stringify(response.data)}`);\n }\n\n async controlState(\n id: string | null,\n data: string | { id?: string; val?: ioBroker.StateValue; ack?: boolean },\n ): Promise<void> {\n id ||= 'services.ifttt';\n\n if (typeof data === 'object') {\n if (data.id) {\n if (data.id === `${this.namespace}.services.ifttt`) {\n data.ack = true;\n }\n if (data.val === undefined) {\n throw new Error('No value set');\n }\n const obj = await this.getForeignObjectAsync(data.id);\n if (!obj || !obj.common) {\n throw new Error(`Unknown ID: ${data.id}`);\n } else {\n if (typeof data.val === 'string') {\n data.val = data.val.replace(/^@ifttt\\s?/, '');\n }\n if (obj.common.type === 'boolean') {\n data.val =\n data.val === true ||\n data.val === 'true' ||\n data.val === 'on' ||\n data.val === 'ON' ||\n data.val === 1 ||\n data.val === '1';\n } else if (obj.common.type === 'number') {\n data.val = parseFloat(data.val as string);\n }\n\n await this.setForeignStateAsync(data.id, data.val, data.ack);\n }\n } else if (data.val !== undefined) {\n if (typeof data.val === 'string') {\n data.val = data.val.replace(/^@ifttt\\s?/, '');\n }\n await this.setStateAsync(id, data.val, data.ack !== undefined ? data.ack : true);\n } else {\n await this.setStateAsync(id, JSON.stringify(data), true);\n }\n } else {\n if (typeof data === 'string') {\n data = data.replace(/^@ifttt\\s?/, '');\n }\n await this.setStateAsync(id, data, true);\n }\n }\n\n async processIfttt(data: {\n id?: string;\n data?:\n | string\n | {\n id?: string;\n val?: ioBroker.StateValue;\n ack?: boolean;\n data?: { id?: string; val?: ioBroker.StateValue; ack?: boolean } | string;\n };\n }): Promise<void> {\n this.log.debug(`Received IFTTT object: ${JSON.stringify(data)}`);\n let id: string | undefined;\n let dataObj: { id?: string; val?: ioBroker.StateValue; ack?: boolean } | null = null;\n // >If data is object with id and data property\n if (typeof data === 'object' && data.id && data.data !== undefined) {\n id = data.id;\n if (typeof data.data === 'string' && data.data[0] === '{') {\n try {\n dataObj = JSON.parse(data.data);\n } catch {\n this.log.debug(`Cannot parse: ${data.data}`);\n dataObj = data;\n }\n } else {\n dataObj = data.data as { id?: string; val?: ioBroker.StateValue; ack?: boolean };\n }\n } else if (typeof data === 'string' && data[0] === '{') {\n // If data is string and starts with {\n try {\n dataObj = JSON.parse(data) as { id?: string; val?: ioBroker.StateValue; ack?: boolean };\n\n if (typeof dataObj.id === 'string') {\n id = dataObj.id;\n if ((dataObj as any).data) {\n dataObj = (dataObj as any).data as {\n id?: string;\n val?: ioBroker.StateValue;\n ack?: boolean;\n };\n }\n }\n } catch {\n this.log.debug(`Cannot parse: ${JSON.stringify(data)}`);\n }\n } else {\n dataObj = data as { id?: string; val?: ioBroker.StateValue; ack?: boolean };\n }\n\n if (id) {\n let obj = await this.getForeignObjectAsync(id);\n if (!obj) {\n const newId = `${this.namespace}.services.${id}`;\n obj = await this.getForeignObjectAsync(newId);\n if (!obj) {\n // create state\n await this.setObjectNotExistsAsync(`services.${id}`, {\n type: 'state',\n common: {\n name: 'IFTTT value',\n write: false,\n role: 'state',\n read: true,\n type: 'mixed',\n desc: 'Custom state',\n },\n native: {},\n });\n id = newId;\n }\n }\n }\n\n await this.controlState(\n id || null,\n (dataObj as { id?: string; val?: ioBroker.StateValue; ack?: boolean }) || data,\n );\n }\n\n onDisconnect(event?: string): void {\n const now = Date.now();\n if (now - this.connectStarted < 500) {\n this.log.warn(\n 'Looks like your connection certificates are invalid. Please renew them via configuration dialog.',\n );\n }\n\n if (typeof event === 'string') {\n if (event.toLowerCase().includes('duplicate')) {\n // disable adapter\n this.log.error(\n `Two devices are trying to connect with the same iot account. This is not allowed. Stopping`,\n );\n void this.getForeignObjectAsync(`system.adapter.${this.namespace}`).then(obj => {\n if (obj) {\n obj.common.enabled = false;\n return this.setForeignObjectAsync(obj._id, obj);\n }\n });\n }\n this.log.info(`Connection changed: ${event}`);\n } else {\n this.log.info('Connection changed: disconnect');\n }\n\n if (this.connectedOwn) {\n this.log.info('Connection lost');\n this.connectedOwn = false;\n void this.setState('info.connection', false, true);\n }\n\n this.remote?.onCloudDisconnect();\n }\n\n onConnect(clientId: string): void {\n if (!this.connectedOwn) {\n // Make from peter_gmail_com => p***r_g...com\n const parts = clientId.split('_');\n const clientIdSafe: string[] = [];\n if (parts.length > 2) {\n for (let i = 0; i < parts.length - 1; i++) {\n clientIdSafe.push(`${parts[i][0]}***${parts[i][parts[i].length - 1]}`);\n }\n clientIdSafe.push(parts[parts.length - 1]);\n } else {\n clientIdSafe.push(`${clientId[0]}***${clientId[clientId.length - 1]}`);\n }\n\n this.log.info(`Connection changed: connect \"${clientIdSafe.join('_')}\"`);\n this.connectedOwn = true;\n void this.setState('info.connection', this.connectedOwn, true);\n // setTimeout(() => {\n // device.publish(`response/${clientId}/stateChange`, JSON.stringify({alive: true}), {qos: 0}, (error, result) => {\n // console.log(`Published alive: ${result}, ${error}`);\n // });\n // }, 2000);\n } else {\n this.log.info('Connection not changed: was connected');\n }\n }\n\n encryptOwn(secret: string, value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(secret[i % secret.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return `base64:${Buffer.from(result).toString('base64')}`;\n }\n\n decryptOwn(secret: string, value: string): string {\n if (value.startsWith('base64:')) {\n try {\n value = Buffer.from(value.substring(7), 'base64').toString('ascii');\n } catch (e) {\n this.log.error(`Cannot decrypt key: ${e}`);\n }\n }\n\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(secret[i % secret.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n }\n\n async readUrlKey(): Promise<{ key: string }> {\n const key = await this.getStateAsync('certs.urlKey');\n\n if (!key?.val) {\n throw new Error('Not exists');\n } else {\n return { key: key.val as string };\n }\n }\n\n async createUrlKey(login: string, pass: string): Promise<{ key: string }> {\n this.log.debug('Fetching URL key...');\n\n let response;\n try {\n response = await axios.get(\n `https://generate-key.iobroker.in/v1/generateUrlKey?user=${encodeURIComponent(login)}&pass=${encodeURIComponent(pass)}&version=${this.version}`,\n {\n timeout: 15000,\n validateStatus: status => status < 400,\n },\n );\n } catch (error) {\n if (error.response) {\n if (error.response.status === 401) {\n this.log.error(`Cannot create URL key because of invalid user or password`);\n }\n\n throw new Error(error.response.data);\n } else {\n throw error;\n }\n }\n\n if (response.data?.error) {\n this.log.error(`Cannot fetch URL key: ${JSON.stringify(response.data.error)}`);\n throw new Error(response.data);\n } else if (response.data?.key) {\n await this.setStateAsync('certs.urlKey', response.data.key, true);\n return { key: response.data.key };\n } else {\n this.log.error(`Cannot fetch URL key: ${JSON.stringify(response.data)}`);\n throw new Error(response.data);\n }\n }\n\n async readCertificates(): Promise<{\n private: string;\n certificate: string;\n }> {\n let privateKey: ioBroker.State | null | undefined;\n let certificate: ioBroker.State | null | undefined;\n\n try {\n privateKey = await this.getStateAsync('certs.private');\n certificate = await this.getStateAsync('certs.certificate');\n } catch {\n throw new Error('Not exists');\n }\n\n if (!certificate?.val || !privateKey?.val) {\n throw new Error('Not exists');\n } else {\n return {\n private: this.decryptOwn(this.secret, privateKey.val as string),\n certificate: this.decryptOwn(this.secret, certificate.val as string),\n };\n }\n }\n\n async writeKeys(data: {\n certificateId: string;\n certificatePem: string;\n keyPair: { PublicKey: string; PrivateKey: string };\n }): Promise<void> {\n await this.setStateAsync('certs.private', this.encryptOwn(this.secret, data.keyPair.PrivateKey), true);\n await this.setStateAsync('certs.public', this.encryptOwn(this.secret, data.keyPair.PublicKey), true);\n await this.setStateAsync('certs.certificate', this.encryptOwn(this.secret, data.certificatePem), true);\n await this.setStateAsync('certs.id', data.certificateId, true);\n }\n\n async fetchCertificates(\n login: string,\n pass: string,\n _forceUserCreation?: boolean,\n ): Promise<{\n private: string;\n certificate: string;\n }> {\n const state = await this.getStateAsync('certs.forceUserCreate');\n const forceUserCreation = state?.val;\n\n if (forceUserCreation) {\n await this.setStateAsync('certs.forceUserCreate', false, true);\n }\n\n this.log.debug('Fetching certificates...');\n let response;\n try {\n response = await axios.get(\n `https://create-user.iobroker.in/v1/createUser?user=${encodeURIComponent(login)}&pass=${encodeURIComponent(pass)}&forceRecreate=${forceUserCreation}&version=${this.version}`,\n {\n timeout: 15000,\n validateStatus: status => status < 400,\n },\n );\n } catch (error) {\n if (error.response) {\n if (error.response.status === 401) {\n this.log.error(`Cannot fetch connection certificates because of invalid user or password`);\n } else {\n this.log.error(`Cannot fetch connection certificates: ${JSON.stringify(error.response.data)}`);\n }\n throw new Error(error.response.data);\n } else {\n this.log.error(`Cannot fetch connection certificates: ${JSON.stringify(error.code)}`);\n throw error;\n }\n }\n\n if (response?.data?.certificates) {\n const awsCertificates: {\n certificateId: string;\n certificatePem: string;\n keyPair: { PublicKey: string; PrivateKey: string };\n } = response.data.certificates;\n await this.writeKeys(awsCertificates);\n\n return {\n private: awsCertificates.keyPair.PrivateKey,\n certificate: awsCertificates.certificatePem,\n };\n }\n this.log.error(`Cannot fetch connection certificates: ${JSON.stringify(response.data)}`);\n throw new Error(response.data);\n }\n\n async processMessage(\n type: string,\n request: any,\n ): Promise<{ error?: string; result?: string } | string | SOCKET_MESSAGE | SOCKET_TRUNK[] | AlexaCustomResponse> {\n if (request instanceof Buffer) {\n request = request.toString();\n }\n\n if (!request || !type) {\n this.log.debug(`Invalid request: ${JSON.stringify(request)}`);\n return { error: 'invalid request' };\n }\n\n if (type.startsWith('remote')) {\n const start = Date.now();\n\n this.log.debug(`Remote request: ${JSON.stringify(request)}`);\n\n if (this.remote) {\n return this.remote\n .process(request, type as `remote${string}`)\n .then(response => {\n if (response !== NONE) {\n this.log.debug(\n `[REMOTE] Response in: ${Date.now() - start}ms (Length: ${Array.isArray(response) ? `A ${response.length}` : JSON.stringify(response).length}) for ${request}`,\n );\n }\n return response;\n })\n .catch(err => {\n this.log.error(`Error in processing of remote request: ${err.toString()}`);\n return NONE;\n });\n }\n this.log.error(`Received command, but remote already closed.`);\n } else if (type.startsWith('nightscout')) {\n this.log.debug(`Nightscout request: ${JSON.stringify(request)}`);\n if (this.config.nightscout) {\n const state = await this.getForeignStateAsync(\n `system.adapter.nightscout.${this.config.nightscout}.alive`,\n );\n if (state?.val) {\n return this.sendToAsync(`nightscout.${this.config.nightscout}`, 'send', request) as {\n error?: string;\n result?: string;\n };\n }\n return { error: `nightscout.${this.config.nightscout} is offline` };\n }\n return { error: 'Service is disabled' };\n } else if (type.startsWith('alexa')) {\n if (typeof request === 'string') {\n try {\n request = JSON.parse(request);\n } catch {\n this.log.error(`Cannot parse request: ${JSON.stringify(request)}`);\n return { error: 'Cannot parse request' };\n }\n }\n\n const printRequest = JSON.parse(JSON.stringify(request));\n if (printRequest.directive?.header?.correlationToken) {\n printRequest.directive.header.correlationToken = '***';\n }\n if (printRequest.directive?.endpoint?.scope?.token) {\n printRequest.directive.endpoint.scope.token = '***';\n }\n this.log.debug(`${Date.now()} ALEXA: ${JSON.stringify(printRequest)}`);\n\n if (request?.directive) {\n if (this.alexaSH3) {\n try {\n const response = await this.alexaSH3.process(request);\n // Message ID will be used to identify answer in the cloud. In the cloud it will be changed to unique\n if (request.directive.header.messageId !== response.event!.header.messageId) {\n throw new Error('Incoming and outgoing header message IDs are not equal!');\n }\n return response as any;\n } catch {\n this.log.error(`Cannot parse request: ${request}`);\n }\n }\n return { error: 'Service is disabled' };\n } else if (request?.error) {\n // answer from alexa3 events cloud actually just show it in log\n if (request.error.includes('You have no iobroker.iot license')) {\n // pause for 30 minutes send of the events\n this.alexaSH3?.pauseEvents();\n }\n this.log.error(`Error from Alexa events cloud: ${request.error}`);\n } else if (request && !request.header) {\n if (this.alexaCustom) {\n return this.alexaCustom.process(request, this.config.amazonCustom);\n }\n return { error: 'Service is disabled' };\n } else {\n if (this.alexaSH2) {\n return this.alexaSH2.process(request, this.config.amazonAlexa) as any;\n }\n return { error: 'Service is disabled' };\n }\n } else if (type.startsWith('ifttt')) {\n try {\n if (typeof request === 'object') {\n request = JSON.stringify(request);\n } else {\n request = request.toString();\n }\n } catch {\n this.log.error(`Cannot parse request: ${request}`);\n return { error: 'Cannot parse request' };\n }\n this.log.debug(`IFTTT request: ${JSON.stringify(request)}`);\n\n await this.processIfttt(request);\n return NONE;\n } else if (type.startsWith('ghome')) {\n if (typeof request === 'string') {\n try {\n request = JSON.parse(request);\n } catch {\n this.log.error(`Cannot parse request: ${request}`);\n return { error: 'Cannot parse request' };\n }\n }\n this.log.debug(`[GHOME] request: ${JSON.stringify(request)}`);\n\n if (this.googleHome) {\n return this.googleHome.process(request, this.config.googleHome);\n }\n return { error: 'Service is disabled' };\n } else if (type.startsWith('alisa')) {\n if (typeof request === 'string') {\n try {\n request = JSON.parse(request);\n } catch {\n this.log.error(`Cannot parse request: ${request}`);\n return { error: 'Cannot parse request' };\n }\n }\n this.log.debug(`[ALISA] request: ${JSON.stringify(request)}`);\n\n this.log.debug(`${Date.now()} ALISA: ${JSON.stringify(request)}`);\n if (this.yandexAlisa) {\n return this.yandexAlisa.process(request, this.config.yandexAlisa) as any;\n }\n return { error: 'Service is disabled' };\n } else {\n let isCustom = false;\n let _type = type;\n if (_type.startsWith('custom_')) {\n _type = _type.substring(7);\n isCustom = true;\n }\n if (_type === 'visu') {\n this.log.debug(`Received visu command: ${JSON.stringify(request)}`);\n if (typeof request === 'object') {\n request = JSON.stringify(request);\n } else {\n request = request.toString();\n }\n\n try {\n const visuData = JSON.parse(request);\n\n if (visuData.presence) {\n await handleGeofenceData(visuData, this);\n }\n\n if (visuData.devices) {\n await handleDevicesData(visuData, this);\n }\n\n if (visuData.command === 'getInstances') {\n const res = await handleGetInstances(visuData, this);\n return { result: 'Ok', ...res };\n }\n\n if (visuData.command === 'sendToAdapter') {\n return await handleSendToAdapter(visuData, this);\n }\n } catch (e) {\n this.log.error(`Could not handle data \"${request}\" by Visu App: ${e.message}`);\n return { error: e.message };\n }\n\n return { result: 'Ok' };\n } else if (\n this.config.allowedServices[0] === '*' ||\n this.config.allowedServices.includes(_type) ||\n ALLOWED_SERVICES.includes(_type)\n ) {\n if (typeof request === 'object') {\n request = JSON.stringify(request);\n } else {\n request = request.toString();\n }\n this.log.debug(`Custom request: ${JSON.stringify(request)}`);\n\n if (SPECIAL_ADAPTERS.includes(_type)) {\n try {\n await this.setStateAsync(`services.${_type}`, request, true);\n } catch (err) {\n return { result: err };\n }\n\n return { result: 'Ok' };\n } else if (type.startsWith('text2command')) {\n if (this.config.text2command !== undefined && (this.config.text2command as string) !== '') {\n try {\n await this.setForeignStateAsync(`text2command.${this.config.text2command}.text`, request);\n } catch (err) {\n return { result: err };\n }\n return { result: 'Ok' };\n }\n this.log.warn('Received service text2command, but instance is not defined');\n return { result: 'but instance is not defined' };\n } else if (type.startsWith('simpleApi')) {\n return { result: 'not implemented' };\n } else if (isCustom) {\n let obj;\n try {\n obj = await this.getObjectAsync(`services.custom_${_type}`);\n } catch (e) {\n this.log.error(`Cannot get object services.custom_${_type}: ${e}`);\n }\n\n if (!obj) {\n try {\n await this.setObjectNotExistsAsync(`services.custom_${_type}`, {\n _id: `${this.namespace}.services.custom_${_type}`,\n type: 'state',\n common: {\n name: `Service for ${_type}`,\n write: false,\n read: true,\n type: 'mixed',\n role: 'value',\n },\n native: {},\n });\n await this.setStateAsync(`services.custom_${_type}`, request, true);\n } catch (err) {\n this.log.error(`Cannot control .services.custom_${_type}: ${JSON.stringify(err)}`);\n return { error: err };\n }\n } else {\n await this.setStateAsync(`services.custom_${_type}`, request, true);\n return { result: 'Ok' };\n }\n } else {\n this.log.warn(`Received service \"${type}\", but it is not allowed`);\n return { error: 'not allowed' };\n }\n } else {\n this.log.warn(`Received service \"${type}\", but it is not found in whitelist`);\n return { error: 'Unknown service' };\n }\n }\n\n this.log.warn(`Received message of unknown type: ${type}`);\n return { error: 'Unknown message type' };\n }\n\n closeDevice(): Promise<void> {\n return new Promise<void>(resolve => {\n if (this.device) {\n try {\n this.device.end(true, () => {\n this.device = null;\n resolve();\n });\n } catch {\n this.device = null;\n resolve();\n }\n } else {\n resolve();\n }\n });\n }\n\n /**\n * Calculate retry delay based on retry attempt number\n * Implements progressive backoff: 0s, 5s, 10s, 20s, 30s, then 60s\n *\n * @param retry - The retry attempt number (0-based)\n * @returns Delay in milliseconds\n */\n private getRetryDelay(retry: number): number {\n if (retry < RETRY_DELAYS_MS.length) {\n return RETRY_DELAYS_MS[retry];\n }\n return MAX_RETRY_DELAY_MS;\n }\n\n /**\n * Log retry information with appropriate log level and formatted message\n *\n * @param retryDelay - Delay in milliseconds\n * @param errorType - Type of error (e.g., 'DNS resolution', 'Connection timeout')\n * @param isError - Whether to log as error (true) or info (false)\n */\n private logRetryAttempt(retryDelay: number, errorType: string, isError: boolean = true): void {\n const retrySeconds = retryDelay / 1000;\n const logMethod = isError ? this.log.error.bind(this.log) : this.log.info.bind(this.log);\n\n if (retryDelay === 0) {\n logMethod(`${errorType}: retrying immediately.`);\n } else {\n logMethod(`${errorType}: retrying in ${retrySeconds} seconds.`);\n }\n }\n\n async readValidTill(forceUpdate?: boolean): Promise<Date | null> {\n if (\n !forceUpdate &&\n this.validTill &&\n this.validTillLastQuery &&\n Date.now() - this.validTillLastQuery < 24 * 3_600_000\n ) {\n const validTill = new Date(this.validTill);\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n if (validTill > tomorrow) {\n return new Date(this.validTill);\n }\n }\n try {\n const response = await fetch('https://iobroker.pro:3001/api/v1/validTill', {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${Buffer.from(`${this.config.login}:${this.config.pass}`).toString('base64')}`,\n },\n });\n if (response.ok) {\n this.validTillLastQuery = Date.now();\n const data = (await response.json()) as { validTill: string };\n this.validTill = data.validTill;\n await this.setStateAsync('info.validTill', this.validTill, true);\n // If license will expire in less than 7 days, show warning every time adapter starts\n const validTillDate = new Date(data.validTill);\n const now = new Date();\n const diff = validTillDate.getTime() - now.getTime();\n const days = Math.ceil(diff / (1000 * 3600 * 24));\n if (days <= 7 && !this.alertReported) {\n this.alertReported = true;\n await this.registerNotification('iot', 'subscription', validTillDate.toLocaleString());\n this.log.warn(\n `Your ioBroker IoT license will expire in ${days} day(s) on ${validTillDate.toDateString()}. Please renew your license to continue using all features without interruption.`,\n );\n }\n\n return new Date(data.validTill);\n }\n this.log.error(`Cannot fetch validTill: ${response.status} ${response.statusText}`);\n } catch (error) {\n this.log.error(`Cannot fetch validTill: ${error}`);\n }\n\n return null;\n }\n\n async startDevice(clientId: string, login: string, password: string, retry?: number): Promise<void> {\n retry ||= 0;\n let certs:\n | {\n private: string;\n certificate: string;\n }\n | undefined;\n\n try {\n certs = await this.readCertificates();\n } catch (error) {\n if (error.message === 'Not exists') {\n try {\n certs = await this.fetchCertificates(login, password);\n } catch {\n // ignore\n }\n } else {\n throw error;\n }\n }\n\n await this.readValidTill();\n // Additionally, the cloud checks the \"valid till\" for alexaSH3\n // this.alexaSH3?.setValidTill(this.validTill ? new Date(this.validTill).getTime() : Date.now() - 1000);\n this.alexaSH3?.setValidTill(Date.now() - 1000);\n\n // destroy the old device\n await this.closeDevice();\n\n if (!certs) {\n return this.log.error(`Cannot read connection certificates`);\n }\n this.caCert ||= readFileSync(`${__dirname}/../keys/root-CA.crt`);\n\n try {\n this.connectStarted = Date.now();\n this.device = new DeviceModule({\n privateKey: Buffer.from(certs.private),\n clientCert: Buffer.from(certs.certificate),\n caCert: this.caCert,\n clientId,\n username: 'ioBroker',\n host: this.config.cloudUrl,\n debug: !!this.config.debug,\n baseReconnectTimeMs: 5000,\n keepalive: 60,\n });\n this.remote?.registerDevice(this.device);\n\n this.device.subscribe(`command/${clientId}/#`);\n this.device.on('connect', () => this.onConnect(clientId));\n this.device.on('close', (): void => this.onDisconnect());\n this.device.on('reconnect', () => this.log.debug('reconnect'));\n this.device.on('offline', () => this.log.debug('offline'));\n this.device.on('error', error => {\n const errorTxt =\n ((error as Error)?.message && JSON.stringify((error as Error).message)) || JSON.stringify(error);\n this.log.error(`Error by device connection: ${errorTxt}`);\n\n // restart the iot device if DNS cannot be resolved\n if (errorTxt.includes('EAI_AGAIN')) {\n const retryDelay = this.getRetryDelay(retry);\n this.logRetryAttempt(retryDelay, `DNS name of ${this.config.cloudUrl} cannot be resolved`, true);\n setTimeout(() => this.startDevice(clientId, login, password, retry + 1), retryDelay);\n }\n });\n\n this.device.on('message', async (topic: string, request: string | Buffer): Promise<void> => {\n this.log.debug(`Request ${topic}`);\n if (topic.startsWith(`command/${clientId}/`)) {\n const type = topic.substring(clientId.length + 9); // 9 === 'command//'.length\n\n try {\n const response = await this.processMessage(type, request);\n\n if (this.common!.loglevel === 'debug' && !type.startsWith('remote')) {\n this.log.debug(`Response: ${JSON.stringify(response)}`);\n }\n\n if (this.device && response !== NONE) {\n // It is a big file - send in trunks\n if (Array.isArray(response)) {\n try {\n for (let m = 0; m < response.length; m++) {\n const trunk = response[m];\n await new Promise<void>((resolve, reject) =>\n this.device!.publish(\n `response/${clientId}/${type}`,\n typeof trunk !== 'string' ? JSON.stringify(trunk) : trunk,\n { qos: 1 },\n error => {\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n },\n ),\n );\n }\n } catch (err) {\n this.log.error(`[REMOTE] Cannot send packet: ${err}`);\n }\n } else {\n const printResponse = JSON.parse(JSON.stringify(response));\n if (printResponse?.event?.header?.correlationToken) {\n printResponse.event.header.correlationToken = '***';\n }\n if (printResponse?.event?.endpoint?.scope?.token) {\n printResponse.event.endpoint.scope.token = '***';\n }\n this.log.debug(\n `[REMOTE] Response to 'response/${clientId}/${type}: ${JSON.stringify(\n printResponse,\n )}`,\n );\n\n const msg = JSON.stringify(response);\n if (msg && msg.length > MAX_IOT_MESSAGE_LENGTH) {\n const packed = deflateSync(msg).toString('base64');\n this.log.debug(\n `[REMOTE] Content was packed from ${msg.length} bytes to ${packed.length} bytes`,\n );\n if (packed.length > MAX_IOT_MESSAGE_LENGTH) {\n this.log.warn(\n `[REMOTE] Content was packed to ${packed.length} bytes which is still near/over the message limit!`,\n );\n }\n this.device.publish(`response/${clientId}/${type}`, packed);\n } else {\n // console.log(`Publish to \"response/${clientId}/${type}\": ${msg}`);\n this.device.publish(`response/${clientId}/${type}`, msg);\n }\n }\n }\n } catch (error) {\n this.log.debug(`Error processing request ${topic}`);\n this.log.debug(`${error}`);\n }\n }\n });\n } catch (error) {\n const errorText = error instanceof Error ? error.message : JSON.stringify(error);\n if (errorText.includes('PEM routines')) {\n this.log.error(`Cannot start IoT communication because of invalid certificates: ${error.message}`);\n this.log.error(`Certs: ${JSON.stringify(certs)}`);\n return;\n }\n if (error && typeof error === 'object' && error.message) {\n this.log.error(`Cannot start IoT communication: ${error.message}`);\n } else {\n this.log.error(`Cannot start IoT communication: ${JSON.stringify(error)} / ${error?.toString()}`);\n }\n\n if ((error === 'timeout' || error.message?.includes('timeout')) && retry < 10) {\n const retryDelay = this.getRetryDelay(retry);\n this.logRetryAttempt(retryDelay, 'Connection timeout', false);\n setTimeout(() => this.startDevice(clientId, login, password, retry + 1), retryDelay);\n }\n }\n }\n\n async updateNightscoutSecret(): Promise<void> {\n if (!this.config.nightscout) {\n return;\n }\n\n const email = this.config.login.replace(/[^\\w\\d-_]/g, '_');\n const secret = this.config.nightscoutPass;\n const apiSecret = email + (secret ? `-${secret}` : '');\n const URL = `https://generate-key.iobroker.in/v1/generateUrlKey?user=${encodeURIComponent(this.config.login)}&pass=${encodeURIComponent(this.config.pass)}&apisecret=${encodeURIComponent(apiSecret)}`;\n let response;\n\n try {\n response = await axios.get(URL, {\n timeout: 15000,\n validateStatus: status => status < 400,\n });\n if (response.data.error) {\n this.log.error(`Api-Secret cannot be updated: ${response.data.error}`);\n } else {\n this.log.debug(`Api-Secret updated: ${JSON.stringify(response.data)}`);\n }\n } catch (error) {\n if (error.response) {\n this.log.warn(\n `Cannot update api-secret: ${error.response.data ? JSON.stringify(error.response.data) : error.response.status}`,\n );\n } else {\n this.log.warn(`Cannot update api-secret: ${error.code}`);\n }\n }\n }\n\n async createStateForAdapter(adapterName: string): Promise<void> {\n // find any instance of this adapter\n const instances = await this.getObjectViewAsync('system', 'instance', {\n startkey: `system.adapter.${adapterName}.`,\n endkey: `system.adapter.${adapterName}.\\u9999`,\n });\n if (instances?.rows?.length) {\n let obj;\n try {\n obj = await this.getObjectAsync(`service.${adapterName}`);\n } catch {\n // ignore\n }\n if (!obj) {\n try {\n await this.setForeignObjectAsync(`${this.namespace}.services.${adapterName}`, {\n type: 'state',\n common: {\n name: `Service for ${adapterName}`,\n write: false,\n read: true,\n type: 'mixed',\n role: 'value',\n },\n native: {},\n });\n } catch {\n // ignore\n }\n }\n } else {\n try {\n // delete if object exists\n const obj = await this.getObjectAsync(`service.${adapterName}`);\n if (obj) {\n await this.delObjectAsync(`service.${adapterName}`);\n }\n } catch {\n // ignore\n }\n }\n }\n\n async syncServiceStates(): Promise<void> {\n const states = await this.getObjectViewAsync('system', 'state', {\n startkey: `${this.namespace}.services.`,\n endkey: `${this.namespace}.services.\\u9999`,\n });\n // Create new states\n for (let s = 0; s < this.config.allowedServices.length; s++) {\n const type = this.config.allowedServices[s];\n if (type !== '*' && !states.rows.find(st => st.id === `${this.namespace}.services.custom_${type}`)) {\n await this.setObjectNotExistsAsync(`services.custom_${type}`, {\n _id: `${this.namespace}.services.custom_${type}`,\n type: 'state',\n common: {\n name: `Service for ${type}`,\n write: false,\n read: true,\n type: 'mixed',\n role: 'value',\n },\n native: {},\n });\n }\n }\n\n // delete all service states\n for (let s = 0; s < (states?.rows?.length || 0); s++) {\n const id = states.rows[s].id;\n if (id.startsWith(`${this.namespace}.services.custom_`)) {\n const stateId = id.substring(`${this.namespace}.services.custom_`.length);\n if (!this.config.allowedServices.includes(stateId)) {\n await this.delStateAsync(id);\n }\n }\n }\n }\n\n async main(): Promise<void> {\n if (this.config.googleHome === undefined) {\n this.config.googleHome = false;\n }\n\n if (this.config.amazonAlexa === undefined) {\n this.config.amazonAlexa = true;\n }\n\n if (this.config.yandexAlisa === undefined) {\n this.config.yandexAlisa = false;\n }\n\n // Workaround for amazonCustom\n if (this.config.amazonCustom === undefined) {\n // get current config\n const obj = await this.getForeignObjectAsync(`system.adapter.${this.namespace}`);\n if (obj) {\n this.log.info(\n `Migrating amazonCustom configuration to ${this.config.amazonAlexa || this.config.amazonAlexaV3}`,\n );\n obj.native.amazonCustom = !!(this.config.amazonAlexa || this.config.amazonAlexaV3);\n await this.setForeignObjectAsync(`system.adapter.${this.namespace}`, obj);\n return;\n }\n }\n\n this.config.pingTimeout = parseInt(this.config.pingTimeout as string, 10) || 5000;\n\n if (this.config.pingTimeout < 3000) {\n this.config.pingTimeout = 3000;\n }\n\n if (this.config.deviceOffLevel === undefined) {\n this.config.deviceOffLevel = 30;\n }\n\n if (this.config.login !== (this.config.login || '').trim().toLowerCase()) {\n this.log.error('Please write your login only in lowercase!');\n }\n if (!this.config.login || !this.config.pass) {\n return this.log.error('No cloud credentials found. Please get one on https://iobroker.pro');\n }\n\n let systemConfig = await this.getForeignObjectAsync('system.config');\n if (!systemConfig) {\n this.log.warn('Object system.config not found. Please check your installation!');\n systemConfig = { common: {} } as ioBroker.SystemConfigObject;\n }\n\n // create service state for netatmo if any instance exists\n for (let a = 0; a < SPECIAL_ADAPTERS.length; a++) {\n await this.createStateForAdapter(SPECIAL_ADAPTERS[a]);\n }\n\n this.secret = systemConfig?.native?.secret || 'Zgfr56gFe87jJOM';\n\n this.config.pass = this.decryptOwn(this.secret, this.config.pass);\n this.config.deviceOffLevel = parseFloat(this.config.deviceOffLevel as string) || 0;\n this.config.concatWord = (this.config.concatWord || '').toString().trim();\n this.config.apikey = (this.config.apikey || '').trim();\n this.config.replaces = this.config.replaces ? (this.config.replaces as string).split(',') : null;\n this.config.cloudUrl = (this.config.cloudUrl || '').toString();\n this.config.nightscout = this.config.nightscout || '';\n\n if (this.config.replaces) {\n const text: string[] = [];\n for (let r = 0; r < this.config.replaces.length; r++) {\n text.push(`\"${this.config.replaces[r]}\"`);\n }\n this.log.debug(`Following strings will be replaced in names: ${text.join(', ')}`);\n }\n if (this.config.yandexAlisa) {\n this.yandexAlisa = new YandexAlisa(this);\n }\n\n this.remote = new Remote(this, this.config.login.replace(/[^-_:a-zA-Z1-9]/g, '_'));\n\n this.config.allowedServices = ((this.config.allowedServices as string) || '')\n .split(/[,\\s]+/)\n .map(s => s.trim())\n .filter(s => s);\n\n await this.syncServiceStates();\n\n await this.setStateAsync('info.connection', false, true);\n this.config.cloudUrl = this.config.cloudUrl || 'a18wym7vjdl22g.iot.eu-west-1.amazonaws.com';\n\n if (!this.config.login || !this.config.pass) {\n return this.log.error('No cloud credentials found. Please get one on https://iobroker.pro');\n }\n\n if (this.config.iftttKey) {\n await this.subscribeStatesAsync('services.ifttt');\n // create ifttt object\n const iftttObj = await this.getObjectAsync('.services.ifttt');\n if (!iftttObj) {\n await this.setObjectNotExistsAsync('services.ifttt', {\n _id: `${this.namespace}.services.ifttt`,\n type: 'state',\n common: {\n name: 'IFTTT value',\n write: true,\n role: 'state',\n read: true,\n type: 'mixed',\n desc: 'All written data will be sent to IFTTT. If no state specified all requests from IFTTT will be saved here',\n },\n native: {},\n });\n }\n }\n\n // detect netatmo creation\n await this.subscribeForeignObjectsAsync('system.adapter.*');\n\n await this.subscribeStatesAsync('smart.*');\n\n this.log.info(`Connecting with ${this.config.cloudUrl}`);\n\n if (this.config.language) {\n this.translate = true;\n this.lang = this.config.language;\n } else {\n this.lang = systemConfig.common.language;\n }\n\n if (this.lang !== 'en' && this.lang !== 'de' && this.lang !== 'ru') {\n this.lang = 'en';\n }\n\n if (this.config.amazonAlexa) {\n this.alexaSH2 = new AlexaSH2(this);\n this.alexaSH2.setLanguage(this.lang, this.translate);\n this.alexaSH2.updateDevices();\n } else {\n // Check that update result is empty\n const state = await this.getStateAsync('smart.updatesResult');\n if (state?.val) {\n await this.setStateAsync('smart.updatesResult', '', true);\n }\n }\n\n this.remote?.setLanguage(this.lang);\n // check password\n if (\n this.config.pass.length < 8 ||\n !this.config.pass.match(/[a-z]/) ||\n !this.config.pass.match(/[A-Z]/) ||\n !this.config.pass.match(/\\d/)\n ) {\n return this.log.error(\n 'The password must be at least 8 characters long and have numbers, upper and lower case letters. Please change the password in the profile https://iobroker.pro/accountProfile.',\n );\n }\n\n await this.updateNightscoutSecret();\n\n const iotClientId = this.config.login.replace(/[^-_:a-zA-Z1-9]/g, '_');\n // user will be created here\n await this.startDevice(iotClientId, this.config.login, this.config.pass);\n\n // after the user created, we can try to generate URL key\n // read URL keys from server\n try {\n this.urlKey = await this.readUrlKey();\n } catch {\n if (\n this.config.googleHome ||\n this.config.yandexAlisa ||\n this.config.allowedServices.length ||\n this.config.iftttKey\n ) {\n try {\n this.urlKey = await this.createUrlKey(this.config.login, this.config.pass);\n } catch (err) {\n return this.log.error(\n `Cannot read URL key: ${typeof err === 'object' ? JSON.stringify(err) : err}`,\n );\n }\n }\n }\n\n if (this.config.amazonAlexaV3) {\n // Change type of smart.updates3 to number\n const obj = await this.getObjectAsync('smart.updates3');\n if (obj && obj.common.type !== 'number') {\n this.log.info('Upgrading smart.updates3 state to type \"number\"');\n obj.common.type = 'number';\n obj.common.states = {\n 0: 'No update',\n 1: 'objects',\n 2: 'states',\n };\n await this.setObjectAsync('smart.updates3', obj);\n }\n\n this.alexaSH3 = new AlexaSH3({\n adapter: this,\n iotClientId,\n iotDevice: this.device!,\n });\n this.alexaSH3.setLanguage(this.lang);\n // this.alexaSH3.setValidTill(this.validTill ? new Date(this.validTill).getTime() : Date.now() - 1000);\n this.alexaSH3.setValidTill(Date.now() - 1000);\n await this.alexaSH3.updateDevices();\n } else {\n // Check that update result is empty\n const state = await this.getStateAsync('smart.updates3');\n if (state?.val) {\n await this.setStateAsync('smart.updates3', 0, true);\n }\n }\n\n if (this.config.amazonCustom) {\n this.alexaCustom = new AlexaCustom(this);\n this.alexaCustom.setLanguage(this.lang);\n }\n\n if (this.config.googleHome) {\n this.googleHome = new GoogleHome(this, this.urlKey);\n } else {\n // Check that update result is empty\n const state = await this.getStateAsync('smart.updatesGH');\n if (state?.val) {\n await this.setStateAsync('smart.updatesGH', '', true);\n }\n }\n if (this.config.yandexAlisa) {\n this.yandexAlisa = new YandexAlisa(this, this.urlKey);\n } else {\n // Check that update result is empty\n const state = await this.getStateAsync('smart.updatesYA');\n if (state?.val) {\n await this.setStateAsync('smart.updatesYA', '', true);\n }\n }\n\n this.googleHome?.setLanguage(this.lang);\n this.googleHome?.updateDevices();\n\n this.yandexAlisa?.setLanguage(this.lang);\n this.yandexAlisa?.updateDevices();\n\n await this.subscribeStatesAsync('app.message');\n }\n}\n\nexport default IotAdapter;\n\nif (require.main !== module) {\n // Export the constructor in compact mode\n module.exports = (options: Partial<AdapterOptions> | undefined) => new IotAdapter(options);\n} else {\n // otherwise start the instance directly\n (() => new IotAdapter())();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["import { device as DeviceModule } from 'aws-iot-device-sdk';\nimport { Adapter, type AdapterOptions } from '@iobroker/adapter-core'; // Get common adapter utils\nimport { readFileSync } from 'node:fs';\nimport axios from 'axios';\nimport { deflateSync } from 'node:zlib';\n\nimport AlexaSH3 from './lib/alexaSmartHomeV3';\nimport AlexaCustom, { type AlexaCustomResponse } from './lib/alexaCustom';\n// @ts-expect-error no types\nimport GoogleHome from './lib/googleHome';\n// @ts-expect-error no types\nimport YandexAlisa from './lib/alisa';\nimport Remote, { type SOCKET_MESSAGE, type SOCKET_TRUNK } from './lib/remote';\nimport { handleGeofenceData, handleDevicesData, handleSendToAdapter, handleGetInstances } from './lib/visuApp';\nimport { buildMessageFromNotification } from './lib/notifications';\nimport type { IotAdapterConfig } from './lib/types';\n\nconst NONE = '___none___';\nconst MAX_IOT_MESSAGE_LENGTH = 127 * 1024;\nconst SPECIAL_ADAPTERS = ['netatmo'];\nconst ALLOWED_SERVICES = SPECIAL_ADAPTERS.concat(['text2command']);\n\n// Connection retry delays in milliseconds\n// Progressive backoff strategy: 10s, 15s, 20s, 30s, 45s, then 60s for all subsequent attempts\nconst RETRY_DELAYS_MS = [\n 10_000, // First retry: 10 seconds\n 15_000, // Second retry: 15 seconds\n 20_000, // Third retry: 20 seconds\n 30_000, // Fourth retry: 30 seconds\n 45_000, // Fifth retry: 45 seconds\n];\nconst MAX_RETRY_DELAY_MS = 60_000; // Cap at 60 seconds for all subsequent retries\n\nclass IotAdapter extends Adapter {\n declare public config: IotAdapterConfig;\n private recalcTimeout: NodeJS.Timeout | null = null;\n private lang: ioBroker.Languages = 'de';\n private translate = false;\n private alexaSH3: AlexaSH3 | null = null;\n private googleHome: GoogleHome | null = null;\n private alexaCustom: AlexaCustom | null = null;\n private yandexAlisa: YandexAlisa | null = null;\n private remote: Remote | null = null;\n private device: DeviceModule | null = null;\n private urlKey: { key: string } | null = null;\n\n private connectedOwn = false;\n private secret: string = '';\n private connectStarted = 0;\n private caCert: Buffer | null = null;\n private validTill: string | null = null; // null - never read, \"--\" - user has no license, ISO date string - valid till\n private validTillLastQuery: number = 0;\n private alertReported = false;\n\n public constructor(options: Partial<AdapterOptions> = {}) {\n super({\n ...options,\n name: 'iot',\n objectChange: (id, obj) => {\n if (id === 'system.config' && obj && !this.translate) {\n const systemObj = obj as ioBroker.SystemConfigObject;\n this.lang = systemObj.common.language;\n\n if (this.lang !== 'en' && this.lang !== 'de' && this.lang !== 'ru') {\n this.lang = 'en';\n }\n\n this.alexaSH3?.setLanguage(this.lang);\n this.yandexAlisa?.setLanguage(this.lang);\n this.alexaCustom?.setLanguage(this.lang);\n this.googleHome?.setLanguage(this.lang);\n this.remote?.setLanguage(this.lang);\n }\n // if it is an instance\n if (id.startsWith('system.adapter.')) {\n // try to find it in special adapters\n const adpr = SPECIAL_ADAPTERS.find(a => id.startsWith(`system.adapter.${a}.`));\n // if found and it is really instance\n if (adpr && id.match(/\\.\\d+$/)) {\n // update state\n setTimeout(async () => await this.createStateForAdapter(adpr), 1000);\n }\n\n return;\n }\n void this.alexaSH3?.handleObjectChange(id, obj);\n\n if (id) {\n this.remote?.updateObject(id, obj);\n }\n },\n stateChange: async (id, state) => {\n if (id === `${this.namespace}.app.message` && state && !state.ack) {\n try {\n await this.sendMessageToApp(state.val as string);\n } catch (e) {\n this.log.error(`Cannot send message to app: ${e}`);\n }\n }\n\n if (state) {\n void this.googleHome?.updateState(id, state);\n void this.alexaSH3?.handleStateUpdate(id, state);\n void this.yandexAlisa?.updateState?.(id, state);\n }\n\n if (id) {\n this.remote?.updateState(id, state);\n }\n\n if (id === `${this.namespace}.smart.lastResponse` && state && !state.ack) {\n this.alexaCustom?.setResponse(state.val as string);\n }\n },\n unload: async callback => {\n try {\n if (this.device) {\n this.device.end();\n this.device = null;\n }\n if (this.remote) {\n this.remote.destroy();\n this.remote = null;\n }\n\n if (this.alexaSH3) {\n await this.alexaSH3.destroy();\n }\n } catch {\n // ignore\n }\n callback();\n },\n message: async obj => {\n if (obj) {\n switch (obj.command) {\n case 'update':\n if (this.recalcTimeout) {\n clearTimeout(this.recalcTimeout);\n }\n\n this.recalcTimeout = setTimeout(async () => {\n this.recalcTimeout = null;\n if (this.alexaSH3) {\n await this.alexaSH3.updateDevices();\n await this.setStateAsync('smart.updates3', 1, true);\n }\n\n this.googleHome?.updateDevices(async (analyseAddedId: any): Promise<void> => {\n await this.setStateAsync('smart.updatesResult', analyseAddedId || '', true);\n this.log.debug('GH Devices updated!');\n await this.setStateAsync('smart.updatesGH', true, true);\n });\n }, 1000);\n break;\n\n case 'browse3':\n if (obj.callback) {\n this.log.info(`Request V3 devices: ${obj.message}`);\n if (this.alexaSH3) {\n const devices = await this.alexaSH3.getDevices(obj.message === 'objects');\n this.sendTo(obj.from, obj.command, devices, obj.callback);\n await this.setStateAsync('smart.updates3', 0, true);\n } else {\n this.sendTo(obj.from, obj.command, { error: 'not activated' }, obj.callback);\n }\n }\n break;\n\n case 'browseGH':\n if (obj.callback) {\n this.log.info('Request google home devices');\n if (this.googleHome) {\n this.googleHome.updateDevices(() => {\n this.sendTo(obj.from, obj.command, this.googleHome!.getDevices(), obj.callback);\n void this.setStateAsync('smart.updatesGH', false, true);\n });\n } else {\n this.sendTo(obj.from, obj.command, { error: 'not activated' }, obj.callback);\n }\n }\n break;\n\n case 'browseAlisa':\n if (obj.callback) {\n this.log.info('Request Yandex Alice devices');\n if (this.yandexAlisa) {\n this.yandexAlisa.updateDevices(() => {\n this.sendTo(\n obj.from,\n obj.command,\n this.yandexAlisa!.getDevices(),\n obj.callback,\n );\n void this.setStateAsync('smart.updatesYA', false, true);\n });\n } else {\n this.sendTo(obj.from, obj.command, { error: 'not activated' }, obj.callback);\n }\n }\n break;\n\n case 'alexaCustomKnownDevices':\n // Admin UI can request the known/discoveredAlexa devices used via Custom skill\n // Allow setting the rooms of the devices and store in adapter config\n // Restart adapter after change - or we also add a set message to the config\n if (obj.callback) {\n this.log.info('Request Alexa Custom known devices');\n this.sendTo(\n obj.from,\n obj.command,\n this.alexaCustom ? this.alexaCustom.getKnownDevices() : { error: 'not activated' },\n obj.callback,\n );\n }\n break;\n\n case 'alexaCustomKnownUsers':\n // Admin UI can request the known/discoveredAlexa users used via Custom skill\n // Allow setting the names of the users and store in adapter config\n // Restart adapter after change - or we also add a set message to the config\n if (obj.callback) {\n this.log.info('Request Alexa Custom known users');\n this.sendTo(\n obj.from,\n obj.command,\n this.alexaCustom ? this.alexaCustom.getKnownUsers() : { error: 'not activated' },\n obj.callback,\n );\n }\n break;\n\n case 'private': {\n if (typeof obj.message !== 'object') {\n try {\n obj.message = JSON.parse(obj.message);\n } catch (e) {\n this.log.error(`Cannot parse object: ${e}`);\n if (obj.callback) {\n this.sendTo(\n obj.from,\n obj.command,\n { error: 'Invalid message format: cannot parse object' },\n obj.callback,\n );\n }\n return;\n }\n }\n const response = await this.processMessage(obj.message.type, obj.message.request);\n if (obj.callback) {\n this.sendTo(obj.from, obj.command, response, obj.callback);\n }\n\n break;\n }\n case 'ifttt':\n this.sendDataToIFTTT(obj.message);\n break;\n\n case 'alexaCustomResponse':\n this.alexaCustom?.setResponse(obj.message);\n break;\n\n case 'updateValidTill':\n await this.readValidTill(true);\n this.sendTo(obj.from, obj.command, this.validTill, obj.callback);\n break;\n\n case 'getServiceEndpoint':\n if (obj.callback) {\n if (!this.urlKey) {\n try {\n this.urlKey = await this.readUrlKey();\n } catch {\n try {\n this.urlKey = await this.createUrlKey(this.config.login, this.config.pass);\n } catch (err) {\n if (obj.callback) {\n this.sendTo(\n obj.from,\n obj.command,\n { error: `Cannot get urlKey: ${err.toString()}` },\n obj.callback,\n );\n }\n return;\n }\n }\n }\n\n const result: {\n url: string;\n stateID?: string;\n data?: string;\n warning?: string;\n } = {\n url: `https://service.iobroker.in/v1/iotService?key=${this.urlKey.key}&user=${encodeURIComponent(this.config.login)}`,\n };\n const serviceName =\n typeof obj.message === 'string' ? obj.message : obj.message?.serviceName;\n if (serviceName) {\n result.url += `&service=${encodeURIComponent(serviceName)}`;\n result.stateID = `${this.namespace}.services.${serviceName}`;\n }\n if (obj.message?.data) {\n result.data += `&data=${typeof obj.message.data === 'object' ? JSON.stringify(obj.message.data) : obj.message.data}`;\n }\n // check if the service name is in the white list\n if (\n serviceName &&\n this.config.allowedServices[0] !== '*' &&\n !this.config.allowedServices.includes(serviceName.replace(/^custom_/, '')) &&\n !ALLOWED_SERVICES.includes(serviceName)\n ) {\n result.warning = 'Service name is not in white list';\n this.log.warn(`Service \"${serviceName}\" is not in allowed services list`);\n }\n\n if (obj.callback) {\n this.sendTo(obj.from, obj.command, result, obj.callback);\n }\n }\n break;\n case 'sendNotification':\n try {\n const { message, title } = buildMessageFromNotification(obj.message);\n await this.sendMessageToApp(JSON.stringify({ message, title }));\n if (obj.callback) {\n this.sendTo(obj.from, 'sendNotification', { sent: true }, obj.callback);\n }\n } catch {\n if (obj.callback) {\n this.sendTo(obj.from, 'sendNotification', { sent: false }, obj.callback);\n }\n }\n break;\n default:\n this.log.warn(`Unknown command: ${obj.command}`);\n break;\n }\n }\n },\n ready: () =>\n this.main()\n .then(() => {})\n .catch(error => {\n this.log.error(`Error in main: ${error.toString()}`);\n }),\n });\n\n // warning: `this.log = obj => console.log(obj)` does not implemented. Only this.on('log', obj => console.log(obj))\n this.on('log', obj => this.remote?.onLog(obj));\n }\n\n sendDataToIFTTT(obj: {\n event?: string;\n key?: string;\n id?: string;\n val?: ioBroker.StateValue;\n ack?: boolean;\n }): void {\n if (!obj) {\n this.log.warn('No data to send to IFTTT');\n return;\n }\n if (!this.config.iftttKey && (typeof obj !== 'object' || !obj.key)) {\n this.log.warn('No IFTTT key is defined');\n return;\n }\n\n let url;\n let data;\n if (typeof obj !== 'object') {\n url = `https://maker.ifttt.com/trigger/state/with/key/${this.config.iftttKey}`;\n data = {\n value1: `${this.namespace}.services.ifttt`,\n value2: obj,\n };\n } else if (obj.event) {\n const event = obj.event;\n const key = obj.key;\n delete obj.event;\n delete obj.key;\n url = `https://maker.ifttt.com/trigger/${event}/with/key/${key || this.config.iftttKey}`;\n data = obj;\n } else if (obj.val === undefined) {\n return this.log.warn('No value is defined');\n } else {\n obj.id = obj.id || `${this.namespace}.services.ifttt`;\n url = `https://maker.ifttt.com/trigger/state/with/key/${this.config.iftttKey}`;\n data = {\n value1: obj.id,\n value2: obj.val,\n value3: obj.ack,\n };\n }\n\n if (url) {\n axios\n .post(url, data, {\n timeout: 15000,\n validateStatus: status => status < 400,\n })\n .then(response => this.log.debug(`Response from IFTTT: ${JSON.stringify(response.data)}`))\n .catch(error => {\n if (error.response) {\n this.log.warn(\n `Response from IFTTT: ${error.response.data ? JSON.stringify(error.response.data) : error.response.status}`,\n );\n } else {\n this.log.warn(`Response from IFTTT: ${error.code}`);\n }\n });\n } else {\n this.log.warn(`Invalid request to IFTTT: ${JSON.stringify(obj)}`);\n }\n }\n\n /**\n * Send a message to the ioBroker Visu App by using the app-message endpoint (which then forwards it to the app via FCM)\n *\n * @param message either a json string or the message itself, if the message itself the other props will be taken from the adapter states\n */\n async sendMessageToApp(message: string): Promise<void> {\n if (!message) {\n throw new Error('Empty message');\n }\n const trimmedMessage = message.toString().trim();\n let json: {\n message: string;\n title: string;\n priority?: 'high';\n ttlSeconds?: number;\n expire?: number;\n } | null;\n if (trimmedMessage.startsWith('{') && trimmedMessage.endsWith('}')) {\n try {\n json = JSON.parse(trimmedMessage);\n } catch {\n this.log.warn(`Cannot parse message: ${trimmedMessage}`);\n json = null;\n }\n } else {\n json = null;\n }\n\n if (!json) {\n // take expires\n const ttlSecondsState = await this.getStateAsync(`${this.namespace}.app.expire`);\n const priorityState = await this.getStateAsync(`${this.namespace}.app.priority`);\n const titleState = await this.getStateAsync(`${this.namespace}.app.title`);\n const priorityVal = priorityState?.val;\n json = {\n message: message.toString(),\n priority: priorityVal === '1' || priorityVal === 'high' || priorityVal === true ? 'high' : undefined,\n ttlSeconds: parseInt(ttlSecondsState?.val as string, 0) || undefined,\n title: ((titleState?.val as string) || 'ioBroker').toString(),\n };\n } else {\n if (json.expire) {\n json.ttlSeconds = json.expire;\n delete json.expire;\n }\n }\n\n json.ttlSeconds = parseInt(json.ttlSeconds as unknown as string, 0) || undefined;\n\n if (json.ttlSeconds && json.ttlSeconds > 3_600 * 48) {\n json.ttlSeconds = 3_600 * 48;\n }\n\n if (!json.message) {\n throw new Error('Empty message');\n }\n\n const response = await axios.post('https://app-message.iobroker.in/', json, {\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${Buffer.from(`${this.config.login}:${this.config.pass}`).toString('base64')}`,\n },\n timeout: 5_000,\n validateStatus: status => status < 400,\n });\n await this.setState('app.message', message, true);\n this.log.debug(`Message sent: ${JSON.stringify(response.data)}`);\n }\n\n async controlState(\n id: string | null,\n data: string | { id?: string; val?: ioBroker.StateValue; ack?: boolean },\n ): Promise<void> {\n id ||= 'services.ifttt';\n\n if (typeof data === 'object') {\n if (data.id) {\n if (data.id === `${this.namespace}.services.ifttt`) {\n data.ack = true;\n }\n if (data.val === undefined) {\n throw new Error('No value set');\n }\n const obj = await this.getForeignObjectAsync(data.id);\n if (!obj || !obj.common) {\n throw new Error(`Unknown ID: ${data.id}`);\n } else {\n if (typeof data.val === 'string') {\n data.val = data.val.replace(/^@ifttt\\s?/, '');\n }\n if (obj.common.type === 'boolean') {\n data.val =\n data.val === true ||\n data.val === 'true' ||\n data.val === 'on' ||\n data.val === 'ON' ||\n data.val === 1 ||\n data.val === '1';\n } else if (obj.common.type === 'number') {\n data.val = parseFloat(data.val as string);\n }\n\n await this.setForeignStateAsync(data.id, data.val, data.ack);\n }\n } else if (data.val !== undefined) {\n if (typeof data.val === 'string') {\n data.val = data.val.replace(/^@ifttt\\s?/, '');\n }\n await this.setStateAsync(id, data.val, data.ack !== undefined ? data.ack : true);\n } else {\n await this.setStateAsync(id, JSON.stringify(data), true);\n }\n } else {\n if (typeof data === 'string') {\n data = data.replace(/^@ifttt\\s?/, '');\n }\n await this.setStateAsync(id, data, true);\n }\n }\n\n async processIfttt(data: {\n id?: string;\n data?:\n | string\n | {\n id?: string;\n val?: ioBroker.StateValue;\n ack?: boolean;\n data?: { id?: string; val?: ioBroker.StateValue; ack?: boolean } | string;\n };\n }): Promise<void> {\n this.log.debug(`Received IFTTT object: ${JSON.stringify(data)}`);\n let id: string | undefined;\n let dataObj: { id?: string; val?: ioBroker.StateValue; ack?: boolean } | null = null;\n // >If data is object with id and data property\n if (typeof data === 'object' && data.id && data.data !== undefined) {\n id = data.id;\n if (typeof data.data === 'string' && data.data[0] === '{') {\n try {\n dataObj = JSON.parse(data.data);\n } catch {\n this.log.debug(`Cannot parse: ${data.data}`);\n dataObj = data;\n }\n } else {\n dataObj = data.data as { id?: string; val?: ioBroker.StateValue; ack?: boolean };\n }\n } else if (typeof data === 'string' && data[0] === '{') {\n // If data is string and starts with {\n try {\n dataObj = JSON.parse(data) as { id?: string; val?: ioBroker.StateValue; ack?: boolean };\n\n if (typeof dataObj.id === 'string') {\n id = dataObj.id;\n if ((dataObj as any).data) {\n dataObj = (dataObj as any).data as {\n id?: string;\n val?: ioBroker.StateValue;\n ack?: boolean;\n };\n }\n }\n } catch {\n this.log.debug(`Cannot parse: ${JSON.stringify(data)}`);\n }\n } else {\n dataObj = data as { id?: string; val?: ioBroker.StateValue; ack?: boolean };\n }\n\n if (id) {\n let obj = await this.getForeignObjectAsync(id);\n if (!obj) {\n const newId = `${this.namespace}.services.${id}`;\n obj = await this.getForeignObjectAsync(newId);\n if (!obj) {\n // create state\n await this.setObjectNotExistsAsync(`services.${id}`, {\n type: 'state',\n common: {\n name: 'IFTTT value',\n write: false,\n role: 'state',\n read: true,\n type: 'mixed',\n desc: 'Custom state',\n },\n native: {},\n });\n id = newId;\n }\n }\n }\n\n await this.controlState(\n id || null,\n (dataObj as { id?: string; val?: ioBroker.StateValue; ack?: boolean }) || data,\n );\n }\n\n onDisconnect(event?: string): void {\n const now = Date.now();\n if (now - this.connectStarted < 500) {\n this.log.warn(\n 'Looks like your connection certificates are invalid. Please renew them via configuration dialog.',\n );\n }\n\n if (typeof event === 'string') {\n if (event.toLowerCase().includes('duplicate')) {\n // disable adapter\n this.log.error(\n `Two devices are trying to connect with the same iot account. This is not allowed. Stopping`,\n );\n void this.getForeignObjectAsync(`system.adapter.${this.namespace}`).then(obj => {\n if (obj) {\n obj.common.enabled = false;\n return this.setForeignObjectAsync(obj._id, obj);\n }\n });\n }\n this.log.info(`Connection changed: ${event}`);\n } else {\n this.log.info('Connection changed: disconnect');\n }\n\n if (this.connectedOwn) {\n this.log.info('Connection lost');\n this.connectedOwn = false;\n void this.setState('info.connection', false, true);\n }\n\n this.remote?.onCloudDisconnect();\n }\n\n onConnect(clientId: string): void {\n if (!this.connectedOwn) {\n // Make from peter_gmail_com => p***r_g...com\n const parts = clientId.split('_');\n const clientIdSafe: string[] = [];\n if (parts.length > 2) {\n for (let i = 0; i < parts.length - 1; i++) {\n clientIdSafe.push(`${parts[i][0]}***${parts[i][parts[i].length - 1]}`);\n }\n clientIdSafe.push(parts[parts.length - 1]);\n } else {\n clientIdSafe.push(`${clientId[0]}***${clientId[clientId.length - 1]}`);\n }\n\n this.log.info(`Connection changed: connect \"${clientIdSafe.join('_')}\"`);\n this.connectedOwn = true;\n void this.setState('info.connection', this.connectedOwn, true);\n // setTimeout(() => {\n // device.publish(`response/${clientId}/stateChange`, JSON.stringify({alive: true}), {qos: 0}, (error, result) => {\n // console.log(`Published alive: ${result}, ${error}`);\n // });\n // }, 2000);\n } else {\n this.log.info('Connection not changed: was connected');\n }\n }\n\n encryptOwn(secret: string, value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(secret[i % secret.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return `base64:${Buffer.from(result).toString('base64')}`;\n }\n\n decryptOwn(secret: string, value: string): string {\n if (value.startsWith('base64:')) {\n try {\n value = Buffer.from(value.substring(7), 'base64').toString('ascii');\n } catch (e) {\n this.log.error(`Cannot decrypt key: ${e}`);\n }\n }\n\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(secret[i % secret.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n }\n\n async readUrlKey(): Promise<{ key: string }> {\n const key = await this.getStateAsync('certs.urlKey');\n\n if (!key?.val) {\n throw new Error('Not exists');\n } else {\n return { key: key.val as string };\n }\n }\n\n async createUrlKey(login: string, pass: string): Promise<{ key: string }> {\n this.log.debug('Fetching URL key...');\n\n let response;\n try {\n response = await axios.get(\n `https://generate-key.iobroker.in/v1/generateUrlKey?user=${encodeURIComponent(login)}&pass=${encodeURIComponent(pass)}&version=${this.version}`,\n {\n timeout: 15000,\n validateStatus: status => status < 400,\n },\n );\n } catch (error) {\n if (error.response) {\n if (error.response.status === 401) {\n this.log.error(`Cannot create URL key because of invalid user or password`);\n }\n\n throw new Error(error.response.data);\n } else {\n throw error;\n }\n }\n\n if (response.data?.error) {\n this.log.error(`Cannot fetch URL key: ${JSON.stringify(response.data.error)}`);\n throw new Error(response.data);\n } else if (response.data?.key) {\n await this.setStateAsync('certs.urlKey', response.data.key, true);\n return { key: response.data.key };\n } else {\n this.log.error(`Cannot fetch URL key: ${JSON.stringify(response.data)}`);\n throw new Error(response.data);\n }\n }\n\n async readCertificates(): Promise<{\n private: string;\n certificate: string;\n }> {\n let privateKey: ioBroker.State | null | undefined;\n let certificate: ioBroker.State | null | undefined;\n\n try {\n privateKey = await this.getStateAsync('certs.private');\n certificate = await this.getStateAsync('certs.certificate');\n } catch {\n throw new Error('Not exists');\n }\n\n if (!certificate?.val || !privateKey?.val) {\n throw new Error('Not exists');\n } else {\n return {\n private: this.decryptOwn(this.secret, privateKey.val as string),\n certificate: this.decryptOwn(this.secret, certificate.val as string),\n };\n }\n }\n\n async writeKeys(data: {\n certificateId: string;\n certificatePem: string;\n keyPair: { PublicKey: string; PrivateKey: string };\n }): Promise<void> {\n await this.setStateAsync('certs.private', this.encryptOwn(this.secret, data.keyPair.PrivateKey), true);\n await this.setStateAsync('certs.public', this.encryptOwn(this.secret, data.keyPair.PublicKey), true);\n await this.setStateAsync('certs.certificate', this.encryptOwn(this.secret, data.certificatePem), true);\n await this.setStateAsync('certs.id', data.certificateId, true);\n }\n\n async fetchCertificates(\n login: string,\n pass: string,\n _forceUserCreation?: boolean,\n ): Promise<{\n private: string;\n certificate: string;\n }> {\n const state = await this.getStateAsync('certs.forceUserCreate');\n const forceUserCreation = state?.val;\n\n if (forceUserCreation) {\n await this.setStateAsync('certs.forceUserCreate', false, true);\n }\n\n this.log.debug('Fetching certificates...');\n let response;\n try {\n response = await axios.get(\n `https://create-user.iobroker.in/v1/createUser?user=${encodeURIComponent(login)}&pass=${encodeURIComponent(pass)}&forceRecreate=${forceUserCreation}&version=${this.version}`,\n {\n timeout: 15000,\n validateStatus: status => status < 400,\n },\n );\n } catch (error) {\n if (error.response) {\n if (error.response.status === 401) {\n this.log.error(`Cannot fetch connection certificates because of invalid user or password`);\n } else {\n this.log.error(`Cannot fetch connection certificates: ${JSON.stringify(error.response.data)}`);\n }\n throw new Error(error.response.data);\n } else {\n this.log.error(`Cannot fetch connection certificates: ${JSON.stringify(error.code)}`);\n throw error;\n }\n }\n\n if (response?.data?.certificates) {\n const awsCertificates: {\n certificateId: string;\n certificatePem: string;\n keyPair: { PublicKey: string; PrivateKey: string };\n } = response.data.certificates;\n await this.writeKeys(awsCertificates);\n\n return {\n private: awsCertificates.keyPair.PrivateKey,\n certificate: awsCertificates.certificatePem,\n };\n }\n this.log.error(`Cannot fetch connection certificates: ${JSON.stringify(response.data)}`);\n throw new Error(response.data);\n }\n\n async processMessage(\n type: string,\n request: any,\n ): Promise<{ error?: string; result?: string } | string | SOCKET_MESSAGE | SOCKET_TRUNK[] | AlexaCustomResponse> {\n if (request instanceof Buffer) {\n request = request.toString();\n }\n\n if (!request || !type) {\n this.log.debug(`Invalid request: ${JSON.stringify(request)}`);\n return { error: 'invalid request' };\n }\n\n if (type.startsWith('remote')) {\n const start = Date.now();\n\n this.log.debug(`Remote request: ${JSON.stringify(request)}`);\n\n if (this.remote) {\n return this.remote\n .process(request, type as `remote${string}`)\n .then(response => {\n if (response !== NONE) {\n this.log.debug(\n `[REMOTE] Response in: ${Date.now() - start}ms (Length: ${Array.isArray(response) ? `A ${response.length}` : JSON.stringify(response).length}) for ${request}`,\n );\n }\n return response;\n })\n .catch(err => {\n this.log.error(`Error in processing of remote request: ${err.toString()}`);\n return NONE;\n });\n }\n this.log.error(`Received command, but remote already closed.`);\n } else if (type.startsWith('nightscout')) {\n this.log.debug(`Nightscout request: ${JSON.stringify(request)}`);\n if (this.config.nightscout) {\n const state = await this.getForeignStateAsync(\n `system.adapter.nightscout.${this.config.nightscout}.alive`,\n );\n if (state?.val) {\n return this.sendToAsync(`nightscout.${this.config.nightscout}`, 'send', request) as {\n error?: string;\n result?: string;\n };\n }\n return { error: `nightscout.${this.config.nightscout} is offline` };\n }\n return { error: 'Service is disabled' };\n } else if (type.startsWith('alexa')) {\n if (typeof request === 'string') {\n try {\n request = JSON.parse(request);\n } catch {\n this.log.error(`Cannot parse request: ${JSON.stringify(request)}`);\n return { error: 'Cannot parse request' };\n }\n }\n\n const printRequest = JSON.parse(JSON.stringify(request));\n if (printRequest.directive?.header?.correlationToken) {\n printRequest.directive.header.correlationToken = '***';\n }\n if (printRequest.directive?.endpoint?.scope?.token) {\n printRequest.directive.endpoint.scope.token = '***';\n }\n this.log.debug(`${Date.now()} ALEXA: ${JSON.stringify(printRequest)}`);\n\n if (request?.directive) {\n if (this.alexaSH3) {\n try {\n const response = await this.alexaSH3.process(request);\n // Message ID will be used to identify answer in the cloud. In the cloud it will be changed to unique\n if (request.directive.header.messageId !== response.event!.header.messageId) {\n throw new Error('Incoming and outgoing header message IDs are not equal!');\n }\n return response as any;\n } catch {\n this.log.error(`Cannot parse request: ${request}`);\n }\n }\n return { error: 'Service is disabled' };\n } else if (request?.error) {\n // answer from alexa3 events cloud actually just show it in log\n if (request.error.includes('You have no iobroker.iot license')) {\n // pause for 30 minutes send of the events\n this.alexaSH3?.pauseEvents();\n }\n this.log.error(`Error from Alexa events cloud: ${request.error}`);\n } else if (request && !request.header) {\n if (this.alexaCustom) {\n return this.alexaCustom.process(request, this.config.amazonCustom);\n }\n return { error: 'Service is disabled' };\n } else {\n return { error: 'Service is disabled' };\n }\n } else if (type.startsWith('ifttt')) {\n try {\n if (typeof request === 'object') {\n request = JSON.stringify(request);\n } else {\n request = request.toString();\n }\n } catch {\n this.log.error(`Cannot parse request: ${request}`);\n return { error: 'Cannot parse request' };\n }\n this.log.debug(`IFTTT request: ${JSON.stringify(request)}`);\n\n await this.processIfttt(request);\n return NONE;\n } else if (type.startsWith('ghome')) {\n if (typeof request === 'string') {\n try {\n request = JSON.parse(request);\n } catch {\n this.log.error(`Cannot parse request: ${request}`);\n return { error: 'Cannot parse request' };\n }\n }\n this.log.debug(`[GHOME] request: ${JSON.stringify(request)}`);\n\n if (this.googleHome) {\n return this.googleHome.process(request, this.config.googleHome);\n }\n return { error: 'Service is disabled' };\n } else if (type.startsWith('alisa')) {\n if (typeof request === 'string') {\n try {\n request = JSON.parse(request);\n } catch {\n this.log.error(`Cannot parse request: ${request}`);\n return { error: 'Cannot parse request' };\n }\n }\n this.log.debug(`[ALISA] request: ${JSON.stringify(request)}`);\n\n this.log.debug(`${Date.now()} ALISA: ${JSON.stringify(request)}`);\n if (this.yandexAlisa) {\n return this.yandexAlisa.process(request, this.config.yandexAlisa) as any;\n }\n return { error: 'Service is disabled' };\n } else {\n let isCustom = false;\n let _type = type;\n if (_type.startsWith('custom_')) {\n _type = _type.substring(7);\n isCustom = true;\n }\n if (_type === 'visu') {\n this.log.debug(`Received visu command: ${JSON.stringify(request)}`);\n if (typeof request === 'object') {\n request = JSON.stringify(request);\n } else {\n request = request.toString();\n }\n\n try {\n const visuData = JSON.parse(request);\n\n if (visuData.presence) {\n await handleGeofenceData(visuData, this);\n }\n\n if (visuData.devices) {\n await handleDevicesData(visuData, this);\n }\n\n if (visuData.command === 'getInstances') {\n const res = await handleGetInstances(visuData, this);\n return { result: 'Ok', ...res };\n }\n\n if (visuData.command === 'sendToAdapter') {\n return await handleSendToAdapter(visuData, this);\n }\n } catch (e) {\n this.log.error(`Could not handle data \"${request}\" by Visu App: ${e.message}`);\n return { error: e.message };\n }\n\n return { result: 'Ok' };\n } else if (\n this.config.allowedServices[0] === '*' ||\n this.config.allowedServices.includes(_type) ||\n ALLOWED_SERVICES.includes(_type)\n ) {\n if (typeof request === 'object') {\n request = JSON.stringify(request);\n } else {\n request = request.toString();\n }\n this.log.debug(`Custom request: ${JSON.stringify(request)}`);\n\n if (SPECIAL_ADAPTERS.includes(_type)) {\n try {\n await this.setStateAsync(`services.${_type}`, request, true);\n } catch (err) {\n return { result: err };\n }\n\n return { result: 'Ok' };\n } else if (type.startsWith('text2command')) {\n if (this.config.text2command !== undefined && (this.config.text2command as string) !== '') {\n try {\n await this.setForeignStateAsync(`text2command.${this.config.text2command}.text`, request);\n } catch (err) {\n return { result: err };\n }\n return { result: 'Ok' };\n }\n this.log.warn('Received service text2command, but instance is not defined');\n return { result: 'but instance is not defined' };\n } else if (type.startsWith('simpleApi')) {\n return { result: 'not implemented' };\n } else if (isCustom) {\n let obj;\n try {\n obj = await this.getObjectAsync(`services.custom_${_type}`);\n } catch (e) {\n this.log.error(`Cannot get object services.custom_${_type}: ${e}`);\n }\n\n if (!obj) {\n try {\n await this.setObjectNotExistsAsync(`services.custom_${_type}`, {\n _id: `${this.namespace}.services.custom_${_type}`,\n type: 'state',\n common: {\n name: `Service for ${_type}`,\n write: false,\n read: true,\n type: 'mixed',\n role: 'value',\n },\n native: {},\n });\n await this.setStateAsync(`services.custom_${_type}`, request, true);\n } catch (err) {\n this.log.error(`Cannot control .services.custom_${_type}: ${JSON.stringify(err)}`);\n return { error: err };\n }\n } else {\n await this.setStateAsync(`services.custom_${_type}`, request, true);\n return { result: 'Ok' };\n }\n } else {\n this.log.warn(`Received service \"${type}\", but it is not allowed`);\n return { error: 'not allowed' };\n }\n } else {\n this.log.warn(`Received service \"${type}\", but it is not found in whitelist`);\n return { error: 'Unknown service' };\n }\n }\n\n this.log.warn(`Received message of unknown type: ${type}`);\n return { error: 'Unknown message type' };\n }\n\n closeDevice(): Promise<void> {\n return new Promise<void>(resolve => {\n if (this.device) {\n try {\n this.device.end(true, () => {\n this.device = null;\n resolve();\n });\n } catch {\n this.device = null;\n resolve();\n }\n } else {\n resolve();\n }\n });\n }\n\n /**\n * Calculate retry delay based on retry attempt number\n * Implements progressive backoff: 0s, 5s, 10s, 20s, 30s, then 60s\n *\n * @param retry - The retry attempt number (0-based)\n * @returns Delay in milliseconds\n */\n private getRetryDelay(retry: number): number {\n if (retry < RETRY_DELAYS_MS.length) {\n return RETRY_DELAYS_MS[retry];\n }\n return MAX_RETRY_DELAY_MS;\n }\n\n /**\n * Log retry information with appropriate log level and formatted message\n *\n * @param retryDelay - Delay in milliseconds\n * @param errorType - Type of error (e.g., 'DNS resolution', 'Connection timeout')\n * @param isError - Whether to log as error (true) or info (false)\n */\n private logRetryAttempt(retryDelay: number, errorType: string, isError: boolean = true): void {\n const retrySeconds = retryDelay / 1000;\n const logMethod = isError ? this.log.error.bind(this.log) : this.log.info.bind(this.log);\n\n if (retryDelay === 0) {\n logMethod(`${errorType}: retrying immediately.`);\n } else {\n logMethod(`${errorType}: retrying in ${retrySeconds} seconds.`);\n }\n }\n\n async readValidTill(forceUpdate?: boolean): Promise<void> {\n if (\n !forceUpdate &&\n this.validTill &&\n this.validTillLastQuery &&\n Date.now() - this.validTillLastQuery < 24 * 3_600_000\n ) {\n if (this.validTill !== '--') {\n const validTill = new Date(this.validTill);\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n if (validTill > tomorrow) {\n // use cached value\n return;\n }\n }\n return;\n }\n try {\n const response = await fetch('https://iobroker.pro:3001/api/v1/validTill', {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${Buffer.from(`${this.config.login}:${this.config.pass}`).toString('base64')}`,\n },\n });\n if (response.ok) {\n this.validTillLastQuery = Date.now();\n const data = (await response.json()) as { validTill: string };\n this.validTill = data.validTill;\n if (Math.abs(Date.now() - new Date(data.validTill).getTime()) < 120_000) {\n // User has no valid license and never had\n this.log.debug('You do not have any licenses.');\n this.validTill = '--';\n } else {\n // If license expires in less than 7 days, show warning every time adapter starts\n const validTillDate = new Date(data.validTill);\n const now = new Date();\n const diff = validTillDate.getTime() - now.getTime();\n const days = Math.ceil(diff / (1000 * 3600 * 24));\n if (days <= 7 && !this.alertReported) {\n this.alertReported = true;\n await this.registerNotification('iot', 'subscription', validTillDate.toLocaleString());\n this.log.warn(\n `Your ioBroker IoT license will expire in ${days} day(s) on ${validTillDate.toDateString()}. Please renew your license to continue using all features without interruption.`,\n );\n }\n }\n await this.setStateAsync('info.validTill', this.validTill, true);\n } else {\n this.log.error(`Cannot fetch validTill: ${response.status} ${response.statusText}`);\n }\n } catch (error) {\n this.log.error(`Cannot fetch validTill: ${error}`);\n }\n }\n\n async startDevice(clientId: string, login: string, password: string, retry?: number): Promise<void> {\n retry ||= 0;\n let certs:\n | {\n private: string;\n certificate: string;\n }\n | undefined;\n\n try {\n certs = await this.readCertificates();\n } catch (error) {\n if (error.message === 'Not exists') {\n try {\n certs = await this.fetchCertificates(login, password);\n } catch {\n // ignore\n }\n } else {\n throw error;\n }\n }\n\n await this.readValidTill();\n // Additionally, the cloud checks the \"valid till\" for alexaSH3\n // this.alexaSH3?.setValidTill(this.validTill ? new Date(this.validTill).getTime() : Date.now() - 1000);\n this.alexaSH3?.setValidTill(Date.now() - 1000);\n\n // destroy the old device\n await this.closeDevice();\n\n if (!certs) {\n return this.log.error(`Cannot read connection certificates`);\n }\n this.caCert ||= readFileSync(`${__dirname}/../keys/root-CA.crt`);\n\n try {\n this.connectStarted = Date.now();\n this.device = new DeviceModule({\n privateKey: Buffer.from(certs.private),\n clientCert: Buffer.from(certs.certificate),\n caCert: this.caCert,\n clientId,\n username: 'ioBroker',\n host: this.config.cloudUrl,\n debug: !!this.config.debug,\n baseReconnectTimeMs: 5000,\n keepalive: 60,\n });\n this.remote?.registerDevice(this.device);\n\n this.device.subscribe(`command/${clientId}/#`);\n this.device.on('connect', () => this.onConnect(clientId));\n this.device.on('close', (): void => this.onDisconnect());\n this.device.on('reconnect', () => this.log.debug('reconnect'));\n this.device.on('offline', () => this.log.debug('offline'));\n this.device.on('error', error => {\n const errorTxt =\n ((error as Error)?.message && JSON.stringify((error as Error).message)) || JSON.stringify(error);\n this.log.error(`Error by device connection: ${errorTxt}`);\n\n // restart the iot device if DNS cannot be resolved\n if (errorTxt.includes('EAI_AGAIN')) {\n const retryDelay = this.getRetryDelay(retry);\n this.logRetryAttempt(retryDelay, `DNS name of ${this.config.cloudUrl} cannot be resolved`, true);\n setTimeout(() => this.startDevice(clientId, login, password, retry + 1), retryDelay);\n }\n });\n\n this.device.on('message', async (topic: string, request: string | Buffer): Promise<void> => {\n this.log.debug(`Request ${topic}`);\n if (topic.startsWith(`command/${clientId}/`)) {\n const type = topic.substring(clientId.length + 9); // 9 === 'command//'.length\n\n try {\n const response = await this.processMessage(type, request);\n\n if (this.common!.loglevel === 'debug' && !type.startsWith('remote')) {\n this.log.debug(`Response: ${JSON.stringify(response)}`);\n }\n\n if (this.device && response !== NONE) {\n // It is a big file - send in trunks\n if (Array.isArray(response)) {\n try {\n for (let m = 0; m < response.length; m++) {\n const trunk = response[m];\n await new Promise<void>((resolve, reject) =>\n this.device!.publish(\n `response/${clientId}/${type}`,\n typeof trunk !== 'string' ? JSON.stringify(trunk) : trunk,\n { qos: 1 },\n error => {\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n },\n ),\n );\n }\n } catch (err) {\n this.log.error(`[REMOTE] Cannot send packet: ${err}`);\n }\n } else {\n const printResponse = JSON.parse(JSON.stringify(response));\n if (printResponse?.event?.header?.correlationToken) {\n printResponse.event.header.correlationToken = '***';\n }\n if (printResponse?.event?.endpoint?.scope?.token) {\n printResponse.event.endpoint.scope.token = '***';\n }\n this.log.debug(\n `[REMOTE] Response to 'response/${clientId}/${type}: ${JSON.stringify(\n printResponse,\n )}`,\n );\n\n const msg = JSON.stringify(response);\n if (msg && msg.length > MAX_IOT_MESSAGE_LENGTH) {\n const packed = deflateSync(msg).toString('base64');\n this.log.debug(\n `[REMOTE] Content was packed from ${msg.length} bytes to ${packed.length} bytes`,\n );\n if (packed.length > MAX_IOT_MESSAGE_LENGTH) {\n this.log.warn(\n `[REMOTE] Content was packed to ${packed.length} bytes which is still near/over the message limit!`,\n );\n }\n this.device.publish(`response/${clientId}/${type}`, packed);\n } else {\n // console.log(`Publish to \"response/${clientId}/${type}\": ${msg}`);\n this.device.publish(`response/${clientId}/${type}`, msg);\n }\n }\n }\n } catch (error) {\n this.log.debug(`Error processing request ${topic}`);\n this.log.debug(`${error}`);\n }\n }\n });\n } catch (error) {\n const errorText = error instanceof Error ? error.message : JSON.stringify(error);\n if (errorText.includes('PEM routines')) {\n this.log.error(`Cannot start IoT communication because of invalid certificates: ${error.message}`);\n this.log.error(`Certs: ${JSON.stringify(certs)}`);\n return;\n }\n if (error && typeof error === 'object' && error.message) {\n this.log.error(`Cannot start IoT communication: ${error.message}`);\n } else {\n this.log.error(`Cannot start IoT communication: ${JSON.stringify(error)} / ${error?.toString()}`);\n }\n\n if ((error === 'timeout' || error.message?.includes('timeout')) && retry < 10) {\n const retryDelay = this.getRetryDelay(retry);\n this.logRetryAttempt(retryDelay, 'Connection timeout', false);\n setTimeout(() => this.startDevice(clientId, login, password, retry + 1), retryDelay);\n }\n }\n }\n\n async updateNightscoutSecret(): Promise<void> {\n if (!this.config.nightscout) {\n return;\n }\n\n const email = this.config.login.replace(/[^\\w\\d-_]/g, '_');\n const secret = this.config.nightscoutPass;\n const apiSecret = email + (secret ? `-${secret}` : '');\n const URL = `https://generate-key.iobroker.in/v1/generateUrlKey?user=${encodeURIComponent(this.config.login)}&pass=${encodeURIComponent(this.config.pass)}&apisecret=${encodeURIComponent(apiSecret)}`;\n let response;\n\n try {\n response = await axios.get(URL, {\n timeout: 15000,\n validateStatus: status => status < 400,\n });\n if (response.data.error) {\n this.log.error(`Api-Secret cannot be updated: ${response.data.error}`);\n } else {\n this.log.debug(`Api-Secret updated: ${JSON.stringify(response.data)}`);\n }\n } catch (error) {\n if (error.response) {\n this.log.warn(\n `Cannot update api-secret: ${error.response.data ? JSON.stringify(error.response.data) : error.response.status}`,\n );\n } else {\n this.log.warn(`Cannot update api-secret: ${error.code}`);\n }\n }\n }\n\n async createStateForAdapter(adapterName: string): Promise<void> {\n // find any instance of this adapter\n const instances = await this.getObjectViewAsync('system', 'instance', {\n startkey: `system.adapter.${adapterName}.`,\n endkey: `system.adapter.${adapterName}.\\u9999`,\n });\n if (instances?.rows?.length) {\n let obj;\n try {\n obj = await this.getObjectAsync(`service.${adapterName}`);\n } catch {\n // ignore\n }\n if (!obj) {\n try {\n await this.setForeignObjectAsync(`${this.namespace}.services.${adapterName}`, {\n type: 'state',\n common: {\n name: `Service for ${adapterName}`,\n write: false,\n read: true,\n type: 'mixed',\n role: 'value',\n },\n native: {},\n });\n } catch {\n // ignore\n }\n }\n } else {\n try {\n // delete if object exists\n const obj = await this.getObjectAsync(`service.${adapterName}`);\n if (obj) {\n await this.delObjectAsync(`service.${adapterName}`);\n }\n } catch {\n // ignore\n }\n }\n }\n\n async syncServiceStates(): Promise<void> {\n const states = await this.getObjectViewAsync('system', 'state', {\n startkey: `${this.namespace}.services.`,\n endkey: `${this.namespace}.services.\\u9999`,\n });\n // Create new states\n for (let s = 0; s < this.config.allowedServices.length; s++) {\n const type = this.config.allowedServices[s];\n if (type !== '*' && !states.rows.find(st => st.id === `${this.namespace}.services.custom_${type}`)) {\n await this.setObjectNotExistsAsync(`services.custom_${type}`, {\n _id: `${this.namespace}.services.custom_${type}`,\n type: 'state',\n common: {\n name: `Service for ${type}`,\n write: false,\n read: true,\n type: 'mixed',\n role: 'value',\n },\n native: {},\n });\n }\n }\n\n // delete all service states\n for (let s = 0; s < (states?.rows?.length || 0); s++) {\n const id = states.rows[s].id;\n if (id.startsWith(`${this.namespace}.services.custom_`)) {\n const stateId = id.substring(`${this.namespace}.services.custom_`.length);\n if (!this.config.allowedServices.includes(stateId)) {\n await this.delStateAsync(id);\n }\n }\n }\n }\n\n async main(): Promise<void> {\n if (this.config.googleHome === undefined) {\n this.config.googleHome = false;\n }\n\n if (this.config.amazonAlexa === undefined) {\n this.config.amazonAlexa = true;\n }\n\n if (this.config.yandexAlisa === undefined) {\n this.config.yandexAlisa = false;\n }\n\n // Workaround for amazonCustom\n if (this.config.amazonCustom === undefined) {\n // get current config\n const obj = await this.getForeignObjectAsync(`system.adapter.${this.namespace}`);\n if (obj) {\n this.log.info(\n `Migrating amazonCustom configuration to ${this.config.amazonAlexa || this.config.amazonAlexaV3}`,\n );\n obj.native.amazonCustom = !!(this.config.amazonAlexa || this.config.amazonAlexaV3);\n await this.setForeignObjectAsync(`system.adapter.${this.namespace}`, obj);\n return;\n }\n }\n\n this.config.pingTimeout = parseInt(this.config.pingTimeout as string, 10) || 5000;\n\n if (this.config.pingTimeout < 3000) {\n this.config.pingTimeout = 3000;\n }\n\n if (this.config.deviceOffLevel === undefined) {\n this.config.deviceOffLevel = 30;\n }\n\n if (this.config.login !== (this.config.login || '').trim().toLowerCase()) {\n this.log.error('Please write your login only in lowercase!');\n }\n if (!this.config.login || !this.config.pass) {\n return this.log.error('No cloud credentials found. Please get one on https://iobroker.pro');\n }\n\n let systemConfig = await this.getForeignObjectAsync('system.config');\n if (!systemConfig) {\n this.log.warn('Object system.config not found. Please check your installation!');\n systemConfig = { common: {} } as ioBroker.SystemConfigObject;\n }\n\n // create service state for netatmo if any instance exists\n for (let a = 0; a < SPECIAL_ADAPTERS.length; a++) {\n await this.createStateForAdapter(SPECIAL_ADAPTERS[a]);\n }\n\n this.secret = systemConfig?.native?.secret || 'Zgfr56gFe87jJOM';\n\n this.config.pass = this.decryptOwn(this.secret, this.config.pass);\n this.config.deviceOffLevel = parseFloat(this.config.deviceOffLevel as string) || 0;\n this.config.concatWord = (this.config.concatWord || '').toString().trim();\n this.config.apikey = (this.config.apikey || '').trim();\n this.config.replaces = this.config.replaces ? (this.config.replaces as string).split(',') : null;\n this.config.cloudUrl = (this.config.cloudUrl || '').toString();\n this.config.nightscout = this.config.nightscout || '';\n\n if (this.config.replaces) {\n const text: string[] = [];\n for (let r = 0; r < this.config.replaces.length; r++) {\n text.push(`\"${this.config.replaces[r]}\"`);\n }\n this.log.debug(`Following strings will be replaced in names: ${text.join(', ')}`);\n }\n if (this.config.yandexAlisa) {\n this.yandexAlisa = new YandexAlisa(this);\n }\n\n this.remote = new Remote(this, this.config.login.replace(/[^-_:a-zA-Z1-9]/g, '_'));\n\n this.config.allowedServices = ((this.config.allowedServices as string) || '')\n .split(/[,\\s]+/)\n .map(s => s.trim())\n .filter(s => s);\n\n await this.syncServiceStates();\n\n await this.setStateAsync('info.connection', false, true);\n this.config.cloudUrl = this.config.cloudUrl || 'a18wym7vjdl22g.iot.eu-west-1.amazonaws.com';\n\n if (!this.config.login || !this.config.pass) {\n return this.log.error('No cloud credentials found. Please get one on https://iobroker.pro');\n }\n\n if (this.config.iftttKey) {\n await this.subscribeStatesAsync('services.ifttt');\n // create ifttt object\n const iftttObj = await this.getObjectAsync('.services.ifttt');\n if (!iftttObj) {\n await this.setObjectNotExistsAsync('services.ifttt', {\n _id: `${this.namespace}.services.ifttt`,\n type: 'state',\n common: {\n name: 'IFTTT value',\n write: true,\n role: 'state',\n read: true,\n type: 'mixed',\n desc: 'All written data will be sent to IFTTT. If no state specified all requests from IFTTT will be saved here',\n },\n native: {},\n });\n }\n }\n\n // detect netatmo creation\n await this.subscribeForeignObjectsAsync('system.adapter.*');\n\n await this.subscribeStatesAsync('smart.*');\n\n this.log.info(`Connecting with ${this.config.cloudUrl}`);\n\n if (this.config.language) {\n this.translate = true;\n this.lang = this.config.language;\n } else {\n this.lang = systemConfig.common.language;\n }\n\n if (this.lang !== 'en' && this.lang !== 'de' && this.lang !== 'ru') {\n this.lang = 'en';\n }\n\n // Check that update result is empty\n const state = await this.getStateAsync('smart.updatesResult');\n if (state?.val) {\n await this.setStateAsync('smart.updatesResult', '', true);\n }\n\n this.remote?.setLanguage(this.lang);\n // check password\n if (\n this.config.pass.length < 8 ||\n !this.config.pass.match(/[a-z]/) ||\n !this.config.pass.match(/[A-Z]/) ||\n !this.config.pass.match(/\\d/)\n ) {\n return this.log.error(\n 'The password must be at least 8 characters long and have numbers, upper and lower case letters. Please change the password in the profile https://iobroker.pro/accountProfile.',\n );\n }\n\n await this.updateNightscoutSecret();\n\n const iotClientId = this.config.login.replace(/[^-_:a-zA-Z1-9]/g, '_');\n // user will be created here\n await this.startDevice(iotClientId, this.config.login, this.config.pass);\n\n // after the user created, we can try to generate URL key\n // read URL keys from server\n try {\n this.urlKey = await this.readUrlKey();\n } catch {\n if (\n this.config.googleHome ||\n this.config.yandexAlisa ||\n this.config.allowedServices.length ||\n this.config.iftttKey\n ) {\n try {\n this.urlKey = await this.createUrlKey(this.config.login, this.config.pass);\n } catch (err) {\n return this.log.error(\n `Cannot read URL key: ${typeof err === 'object' ? JSON.stringify(err) : err}`,\n );\n }\n }\n }\n\n if (this.config.amazonAlexaV3) {\n // Change type of smart.updates3 to number\n const obj = await this.getObjectAsync('smart.updates3');\n if (obj && obj.common.type !== 'number') {\n this.log.info('Upgrading smart.updates3 state to type \"number\"');\n obj.common.type = 'number';\n obj.common.states = {\n 0: 'No update',\n 1: 'objects',\n 2: 'states',\n };\n await this.setObjectAsync('smart.updates3', obj);\n }\n\n this.alexaSH3 = new AlexaSH3({\n adapter: this,\n iotClientId,\n iotDevice: this.device!,\n });\n this.alexaSH3.setLanguage(this.lang);\n // this.alexaSH3.setValidTill(this.validTill ? new Date(this.validTill).getTime() : Date.now() - 1000);\n this.alexaSH3.setValidTill(Date.now() - 1000);\n await this.alexaSH3.updateDevices();\n } else {\n // Check that update result is empty\n const state = await this.getStateAsync('smart.updates3');\n if (state?.val) {\n await this.setStateAsync('smart.updates3', 0, true);\n }\n }\n\n if (this.config.amazonCustom) {\n this.alexaCustom = new AlexaCustom(this);\n this.alexaCustom.setLanguage(this.lang);\n }\n\n if (this.config.googleHome) {\n this.googleHome = new GoogleHome(this, this.urlKey);\n } else {\n // Check that update result is empty\n const state = await this.getStateAsync('smart.updatesGH');\n if (state?.val) {\n await this.setStateAsync('smart.updatesGH', '', true);\n }\n }\n if (this.config.yandexAlisa) {\n this.yandexAlisa = new YandexAlisa(this, this.urlKey);\n } else {\n // Check that an update result is empty\n const state = await this.getStateAsync('smart.updatesYA');\n if (state?.val) {\n await this.setStateAsync('smart.updatesYA', '', true);\n }\n }\n\n this.googleHome?.setLanguage(this.lang);\n this.googleHome?.updateDevices();\n\n this.yandexAlisa?.setLanguage(this.lang);\n this.yandexAlisa?.updateDevices();\n\n await this.subscribeStatesAsync('app.message');\n }\n}\n\nexport default IotAdapter;\n\nif (require.main !== module) {\n // Export the constructor in compact mode\n module.exports = (options: Partial<AdapterOptions> | undefined) => new IotAdapter(options);\n} else {\n // otherwise start the instance directly\n (() => new IotAdapter())();\n}\n"]}
|