iobroker.panasonic-comfort-cloud 3.0.3 → 3.2.1
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 +20 -4
- package/admin/i18n/de/translations.json +4 -3
- package/admin/i18n/en/translations.json +4 -3
- package/admin/i18n/es/translations.json +3 -3
- package/admin/i18n/fr/translations.json +3 -3
- package/admin/i18n/it/translations.json +3 -3
- package/admin/i18n/nl/translations.json +3 -3
- package/admin/i18n/pl/translations.json +3 -3
- package/admin/i18n/pt/translations.json +3 -3
- package/admin/i18n/ru/translations.json +3 -3
- package/admin/i18n/uk/translations.json +3 -3
- package/admin/i18n/zh-cn/translations.json +3 -3
- package/admin/jsonConfig.json +41 -11
- package/build/lib/state-definitions.js +181 -0
- package/build/lib/state-definitions.js.map +7 -0
- package/build/main.js +151 -287
- package/build/main.js.map +2 -2
- package/io-package.json +57 -43
- package/package.json +17 -11
- package/admin/words.js +0 -18
package/build/main.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/main.ts"],
|
|
4
|
-
"sourcesContent": ["/*\n * Created with @iobroker/create-adapter v1.16.0\n */\n\n// The adapter-core module gives you access to the core ioBroker functions\n// you need to create an adapter\nimport * as utils from '@iobroker/adapter-core'\n\nimport {\n Device,\n Group,\n ComfortCloudClient,\n Parameters,\n Power,\n AirSwingLR,\n AirSwingUD,\n FanAutoMode,\n EcoMode,\n OperationMode,\n FanSpeed,\n TokenExpiredError,\n ServiceError,\n NanoeMode\n} from 'panasonic-comfort-cloud-client'\n\nimport * as _ from 'lodash'\nimport axios from 'axios'\n\nconst REFRESH_INTERVAL_IN_MINUTES_DEFAULT = 5\n\nclass PanasonicComfortCloud extends utils.Adapter {\n\n private comfortCloudClient: ComfortCloudClient = new ComfortCloudClient()\n\n private refreshTimeout: NodeJS.Timeout | undefined\n private refreshIntervalInMinutes = REFRESH_INTERVAL_IN_MINUTES_DEFAULT\n\n private readonlyStateNames: string[] = [] \n\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'panasonic-comfort-cloud',\n })\n\n this.on('ready', this.onReady.bind(this))\n this.on('objectChange', this.onObjectChange.bind(this))\n this.on('stateChange', this.onStateChange.bind(this))\n // this.on('message', this.onMessage.bind(this));\n this.on('unload', this.onUnload.bind(this))\n }\n\n /**\n * Is called when databases are connected and adapter received configuration.\n */\n private async onReady(): Promise<void> {\n this.refreshIntervalInMinutes = this.config?.refreshInterval ?? REFRESH_INTERVAL_IN_MINUTES_DEFAULT\n this.subscribeStates('*')\n\n this.setState('info.connection', false, true);\n\n const loadedAppVersion = await this.getCurrentAppVersion()\n this.log.info(`Loaded app version from GitHub: ${loadedAppVersion}`)\n if(loadedAppVersion && this.trimAll(this.config?.appVersionFromGithub) != this.trimAll(loadedAppVersion)) {\n this.updateConfig({ appVersionFromGithub: this.trimAll(loadedAppVersion), password: this.encrypt(this.config?.password) }) \n return\n }\n\n if(!this.config?.username || !this.config?.password) {\n this.log.error('Can not start without username or password. Please open config.')\n } else {\n if(this.config?.appVersionFromGithub != '' && this.config?.useAppVersionFromGithub)\n {\n this.log.debug(`Use AppVersion from Github ${this.config?.appVersionFromGithub}.`)\n this.comfortCloudClient = new ComfortCloudClient(this.config?.appVersionFromGithub)\n }\n else if(this.config?.appVersion != '')\n {\n this.log.debug(`Use configured AppVersion ${this.config?.appVersion}.`)\n this.comfortCloudClient = new ComfortCloudClient(this.config?.appVersion)\n }\n else\n {\n this.log.debug(`Use default AppVersion.`)\n this.comfortCloudClient = new ComfortCloudClient()\n }\n\n try {\n this.log.debug(`Try to login with username ${this.config.username}.`)\n await this.comfortCloudClient.login(\n this.config.username,\n this.config.password\n )\n this.log.info('Login successful.')\n this.setState('info.connection', true, true)\n this.log.debug('Create devices.')\n const groups = await this.comfortCloudClient.getGroups()\n await this.createDevices(groups)\n\n this.log.debug(`Automativ refresh is set to ${this.config?.automaticRefreshEnabled}.`)\n if(this.config?.automaticRefreshEnabled) {\n this.setupRefreshTimeout()\n }\n \n } catch (error) {\n await this.handleClientError(error)\n }\n }\n }\n\n private async refreshDeviceStates(device: Device): Promise<void> {\n this.log.debug(`Refresh device ${device.name} (${device.guid}).`)\n this.log.debug(`${device.name}: guid => ${device.guid}.`)\n \n this.log.debug(`${device.name}: operate => ${device.operate}.`)\n await this.setStateChangedAsync(\n `${device.name}.operate`,\n device.operate,\n true\n )\n this.log.debug(`${device.name}: temperatureSet => ${device.temperatureSet}.`)\n await this.setStateChangedAsync(\n `${device.name}.temperatureSet`,\n device.temperatureSet,\n true\n )\n this.log.debug(`${device.name}: insideTemperature => ${device.insideTemperature}.`)\n await this.setStateChangedAsync(\n `${device.name}.insideTemperature`,\n device.insideTemperature,\n true\n )\n this.log.debug(`${device.name}: outTemperature => ${device.outTemperature}.`)\n await this.setStateChangedAsync(\n `${device.name}.outTemperature`,\n device.outTemperature,\n true\n )\n this.log.debug(`${device.name}: airSwingLR => ${device.airSwingLR}.`)\n await this.setStateChangedAsync(\n `${device.name}.airSwingLR`,\n device.airSwingLR,\n true\n )\n this.log.debug(`${device.name}: airSwingUD => ${device.airSwingUD}.`)\n await this.setStateChangedAsync(\n `${device.name}.airSwingUD`,\n device.airSwingUD,\n true\n )\n this.log.debug(`${device.name}: fanAutoMode => ${device.fanAutoMode}.`)\n await this.setStateChangedAsync(\n `${device.name}.fanAutoMode`,\n device.fanAutoMode,\n true\n )\n this.log.debug(`${device.name}: ecoMode => ${device.ecoMode}.`)\n await this.setStateChangedAsync(\n `${device.name}.ecoMode`,\n device.ecoMode,\n true\n )\n this.log.debug(`${device.name}: operationMode => ${device.operationMode}.`)\n await this.setStateChangedAsync(\n `${device.name}.operationMode`,\n device.operationMode,\n true\n )\n this.log.debug(`${device.name}: fanSpeed => ${device.fanSpeed}.`)\n await this.setStateChangedAsync(\n `${device.name}.fanSpeed`,\n device.fanSpeed,\n true\n )\n this.log.debug(`${device.name}: actualNanoe => ${device.actualNanoe}.`)\n await this.setStateChangedAsync(\n `${device.name}.actualNanoe`,\n device.actualNanoe,\n true\n )\n await this.setStateChangedAsync(\n `${device.name}.connected`,\n true,\n true\n )\n this.log.debug(`Refresh device ${device.name} finished.`)\n }\n\n private async refreshDevice(guid: string, deviceName: string): Promise<void> {\n try {\n const device = await this.comfortCloudClient.getDevice(guid, deviceName)\n if (!device) {\n return\n }\n if (!device.name) {\n device.name = deviceName\n }\n await this.refreshDeviceStates(device)\n } catch (error) {\n await this.handleDeviceError(deviceName, error)\n }\n }\n\n private async refreshDevices(): Promise<void> {\n try {\n this.log.debug('Refresh all devices.')\n const groups = await this.comfortCloudClient.getGroups()\n this.setState('info.connection', true, true);\n const devices = _.flatMap(groups, g => g.devices)\n const deviceInfos = _.map(devices, d => { return{guid: d.guid, name: d.name}})\n await Promise.all(deviceInfos.map(async (deviceInfo) => {\n try {\n const device = await this.comfortCloudClient.getDevice(deviceInfo.guid, deviceInfo.name)\n if(device != null) {\n device.name = deviceInfo.name\n device.guid = deviceInfo.guid\n await this.refreshDeviceStates(device)\n }\n } catch (error) {\n await this.handleDeviceError(deviceInfo.name, error)\n }\n }))\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n\n private async createDevices(groups: Array<Group>): Promise<void> {\n const devicesFromService = _.flatMap(groups, g => g.devices)\n const deviceInfos = _.map(devicesFromService, d => { return {guid: d.guid, name: d.name}})\n await Promise.all(deviceInfos.map(async (deviceInfo) => {\n this.log.debug(`Device info from group ${deviceInfo.guid}, ${deviceInfo.name}.`)\n let device: Device | null = null\n try {\n device = await this.comfortCloudClient.getDevice(deviceInfo.guid, deviceInfo.name)\n } catch(error) {\n await this.handleDeviceError(deviceInfo.name, error)\n return\n }\n \n if(device != null) {\n this.createDevice(deviceInfo.name)\n this.createState(\n deviceInfo.name,\n '',\n 'guid',\n { role: 'info.address', write: false, def: deviceInfo.guid, type: 'string' },\n undefined\n )\n this.readonlyStateNames.push('guid')\n\n this.createState(\n deviceInfo.name,\n '',\n 'operate',\n {\n role: 'switch.power',\n states: { 0: Power[0], 1: Power[1] },\n write: true,\n def: device.operate,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'temperatureSet',\n {\n role: 'level.temperature',\n write: true,\n def: device.temperatureSet,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'insideTemperature',\n {\n role: 'level.temperature',\n write: false,\n def: device.insideTemperature,\n type: 'number',\n },\n undefined\n )\n this.readonlyStateNames.push('insideTemperature')\n\n this.createState(\n deviceInfo.name,\n '',\n 'outTemperature',\n {\n role: 'level.temperature',\n write: false,\n def: device.outTemperature,\n type: 'number',\n },\n undefined\n )\n this.readonlyStateNames.push('outTemperature')\n\n this.createState(\n deviceInfo.name,\n '',\n 'airSwingLR',\n {\n role: 'state',\n states: {\n 0: AirSwingLR[0],\n 1: AirSwingLR[1],\n 2: AirSwingLR[2],\n 3: AirSwingLR[3],\n 4: AirSwingLR[4],\n },\n write: true,\n def: device.airSwingLR,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'airSwingUD',\n {\n role: 'state',\n states: {\n 0: AirSwingUD[0],\n 1: AirSwingUD[1],\n 2: AirSwingUD[2],\n 3: AirSwingUD[3],\n 4: AirSwingUD[4],\n },\n write: true,\n def: device.airSwingUD,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'fanAutoMode',\n {\n role: 'state',\n states: {\n 0: FanAutoMode[0],\n 1: FanAutoMode[1],\n 2: FanAutoMode[2],\n 3: FanAutoMode[3],\n },\n write: true,\n def: device.fanAutoMode,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'ecoMode',\n {\n role: 'state',\n states: { 0: EcoMode[0], 1: EcoMode[1], 2: EcoMode[2] },\n write: true,\n def: device.ecoMode,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'operationMode',\n {\n role: 'state',\n states: {\n 0: OperationMode[0],\n 1: OperationMode[1],\n 2: OperationMode[2],\n 3: OperationMode[3],\n 4: OperationMode[4],\n },\n write: true,\n def: device.operationMode,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'fanSpeed',\n {\n role: 'state',\n states: {\n 0: FanSpeed[0],\n 1: FanSpeed[1],\n 2: FanSpeed[2],\n 3: FanSpeed[3],\n 4: FanSpeed[4],\n 5: FanSpeed[5],\n },\n write: true,\n def: device.fanSpeed,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'actualNanoe',\n {\n role: 'state',\n states: {\n 0: NanoeMode[0],\n 1: NanoeMode[1],\n 2: NanoeMode[2],\n 3: NanoeMode[3],\n 4: NanoeMode[4],\n },\n write: true,\n def: device.actualNanoe,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'connected',\n { role: 'state', read: true, write: false, def: false, type: 'boolean' },\n undefined,\n )\n\n this.log.info(`Device ${deviceInfo.name} created.`)\n }\n }));\n this.log.debug('Device creation completed.')\n }\n\n private async updateDevice(\n deviceName: string,\n stateName: string,\n state: ioBroker.State\n ): Promise<void> {\n if(this.readonlyStateNames.includes(stateName)) {\n return\n }\n if (!state.ack) {\n const stateObj = await this.getObjectAsync(`${deviceName}.${stateName}`)\n const stateCommon = stateObj?.common as ioBroker.StateCommon\n if(stateCommon?.write == false) {\n return\n }\n\n const guidState = await this.getStateAsync(`${deviceName}.guid`)\n \n this.log.debug(\n `Update device guid=${guidState?.val} state=${stateName}`\n )\n const parameters: Parameters = {}\n parameters[stateName] = state.val\n if (!guidState?.val) {\n return\n }\n try {\n this.log.debug(`Set device parameter ${JSON.stringify(parameters)} for device ${guidState?.val}`)\n await this.comfortCloudClient.setParameters(\n guidState?.val as string,\n parameters\n )\n this.log.debug(`Refresh device ${deviceName}`)\n await this.refreshDevice(guidState?.val as string, deviceName)\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n }\n\n /**\n * Is called when adapter shuts down - callback has to be called under any circumstances!\n */\n private onUnload(callback: () => void): void {\n try {\n if(this.refreshTimeout)\n clearTimeout(this.refreshTimeout)\n\n this.log.info('cleaned everything up...')\n callback()\n } catch (e) {\n callback()\n }\n }\n\n /**\n * Is called if a subscribed object changes\n */\n private onObjectChange(\n id: string,\n obj: ioBroker.Object | null | undefined\n ): void {\n if (obj) {\n // The object was changed\n this.log.info(`object ${id} changed: ${JSON.stringify(obj)}`)\n } else {\n // The object was deleted\n this.log.info(`object ${id} deleted`)\n }\n }\n\n /**\n * Is called if a subscribed state changes\n */\n private async onStateChange(\n id: string,\n state: ioBroker.State | null | undefined\n ): Promise<void> {\n if(!state || state.ack) {\n return\n }\n\n if(id.includes('.commands.')) {\n const elements = id.split('.')\n const stateName = elements[elements.length - 1]\n if(stateName == 'manualRefresh' && state.val) {\n try {\n await this.refreshDevices()\n await this.setStateAsync(id, state, true)\n } catch (error) {\n await this.handleClientError(error)\n }\n await this.setStateAsync(id, false, true)\n }\n }\n else if (!id.includes('.info.')) {\n const elements = id.split('.')\n const deviceName = elements[elements.length - 2]\n const stateName = elements[elements.length - 1]\n try {\n await this.updateDevice(deviceName, stateName, state) \n } catch (error) {\n await this.handleClientError(error)\n }\n \n // The state was changed\n this.log.info(\n `state ${id} changed: ${state.val} (ack = ${state.ack})`\n )\n }\n }\n\n private async getCurrentAppVersion() : Promise<string> {\n const response = await axios.get('https://raw.githubusercontent.com/marc2016/ioBroker.panasonic-comfort-cloud/master/.currentAppVersion')\n if(response.status !== 200)\n return ''\n const text = await response.data\n return text\n }\n\n private async handleDeviceError(deviceName: string, error: unknown): Promise<void> {\n this.log.debug(`Try to handle device error for ${deviceName}.`)\n\n await this.setStateChangedAsync(\n `${deviceName}.connected`,\n false,\n true\n )\n \n if (error instanceof ServiceError) {\n this.log.error(\n `Service error when connecting to device ${deviceName}: ${error.message}. Code=${error.code}. Stack: ${error.stack}`\n )\n } else if (error instanceof Error){\n this.log.error(`Unknown error when connecting to device ${deviceName}: ${error}. Stack: ${error.stack}`)\n }\n }\n\n private async handleClientError(error: unknown): Promise<void> {\n this.log.debug('Try to handle error.')\n \n if (error instanceof TokenExpiredError) {\n this.log.info(\n `Token of comfort cloud client expired. Trying to login again. Code=${error.code}. Stack: ${error.stack}`\n )\n this.setState('info.connection', false, true);\n await this.comfortCloudClient.login(\n this.config.username,\n this.config.password\n )\n this.setState('info.connection', true, true);\n this.log.info('Login successful.')\n } else if (error instanceof ServiceError) {\n this.setState('info.connection', false, true);\n this.log.error(\n `Service error: ${error.message}. Code=${error.code}. Stack: ${error.stack}`\n )\n } else if (error instanceof Error){\n this.log.error(`Unknown error: ${error}. Stack: ${error.stack}`)\n }\n }\n\n private setupRefreshTimeout(): void {\n this.log.debug('setupRefreshTimeout')\n const refreshIntervalInMilliseconds = this.refreshIntervalInMinutes * 60 * 1000\n this.log.debug(`refreshIntervalInMilliseconds=${refreshIntervalInMilliseconds}`)\n this.refreshTimeout = setTimeout(this.refreshTimeoutFunc.bind(this), refreshIntervalInMilliseconds);\n }\n\n private async refreshTimeoutFunc(): Promise<void> {\n this.log.debug(`refreshTimeoutFunc started.`)\n try {\n await this.refreshDevices()\n this.setupRefreshTimeout()\n } catch (error) {\n await this.handleClientError(error)\n }\n \n }\n\n private trimAll(text: string): string {\n const newText = text.trim().replace(/(\\r\\n|\\n|\\r)/gm, '');\n return newText\n }\n}\n\nif (module.parent) {\n // Export the constructor in compact mode\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) =>\n new PanasonicComfortCloud(options)\n} else {\n // otherwise start the instance directly\n (() => new PanasonicComfortCloud())()\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/*\n * Created with @iobroker/create-adapter v1.16.0\n */\n\n// The adapter-core module gives you access to the core ioBroker functions\n// you need to create an adapter\nimport * as utils from '@iobroker/adapter-core'\n\nimport {\n Device,\n Group,\n ComfortCloudClient,\n Parameters,\n TokenExpiredError,\n ServiceError,\n DataMode,\n} from 'panasonic-comfort-cloud-client'\n\nimport axios from 'axios'\nimport { deviceStates, readonlyStateNames, getHistoryStates } from './lib/state-definitions'\n\nconst REFRESH_INTERVAL_IN_MINUTES_DEFAULT = 5\n\nclass PanasonicComfortCloud extends utils.Adapter {\n\n private comfortCloudClient: ComfortCloudClient = new ComfortCloudClient()\n\n private refreshTimeout: NodeJS.Timeout | undefined\n private refreshHistoryTimeout: NodeJS.Timeout | undefined\n private refreshIntervalInMinutes = REFRESH_INTERVAL_IN_MINUTES_DEFAULT\n private readonly historyRefreshIntervalInMinutes = 60\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'panasonic-comfort-cloud',\n })\n\n this.on('ready', this.onReady.bind(this))\n this.on('objectChange', this.onObjectChange.bind(this))\n this.on('stateChange', this.onStateChange.bind(this))\n // this.on('message', this.onMessage.bind(this));\n this.on('unload', this.onUnload.bind(this))\n }\n\n /**\n * Is called when databases are connected and adapter received configuration.\n */\n private async onReady(): Promise<void> {\n this.refreshIntervalInMinutes = this.config?.refreshInterval ?? REFRESH_INTERVAL_IN_MINUTES_DEFAULT\n this.subscribeStates('*')\n\n await this.setStateAsync('info.connection', false, true);\n\n const loadedAppVersion = await this.getCurrentAppVersion()\n this.log.info(`Loaded app version from App store: ${loadedAppVersion}`)\n if(loadedAppVersion && this.trimAll(this.config?.appVersionFromAppStore) != this.trimAll(loadedAppVersion)) {\n this.updateConfig({ appVersionFromAppStore: this.trimAll(loadedAppVersion), password: this.encrypt(this.config?.password) }) \n return\n }\n\n if(!this.config?.username || !this.config?.password) {\n this.log.error('Can not start without username or password. Please open config.')\n } else {\n if(this.config?.appVersionFromAppStore != '' && this.config?.useAppVersionFromAppStore)\n {\n this.log.debug(`Use AppVersion from App Store ${this.config?.appVersionFromAppStore}.`)\n this.comfortCloudClient = new ComfortCloudClient(this.config?.appVersionFromAppStore)\n }\n else if(this.config?.appVersion != '')\n {\n this.log.debug(`Use configured AppVersion ${this.config?.appVersion}.`)\n this.comfortCloudClient = new ComfortCloudClient(this.config?.appVersion)\n }\n else\n {\n this.log.debug(`Use default AppVersion.`)\n this.comfortCloudClient = new ComfortCloudClient()\n }\n\n try {\n this.log.debug(`Try to login with username ${this.config.username}.`)\n await this.comfortCloudClient.login(\n this.config.username,\n this.config.password\n )\n this.log.info('Login successful.')\n await this.setStateAsync('info.connection', true, true)\n this.log.debug('Create devices.')\n const groups = await this.comfortCloudClient.getGroups()\n await this.createDevices(groups)\n\n this.log.debug(`Automativ refresh is set to ${this.config?.automaticRefreshEnabled}.`)\n if(this.config?.automaticRefreshEnabled) {\n this.setupRefreshTimeout()\n }\n\n if (this.config?.historyEnabled) {\n this.log.debug(`History enabled. Refreshing history.`)\n await this.refreshHistory(groups)\n this.setupHistoryRefreshTimeout()\n }\n\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n }\n\n private async refreshHistory(groups: Group[]): Promise<void> {\n const devicesFromService = groups.flatMap(g => g.devices)\n const deviceInfos = devicesFromService.map(d => { return {guid: d.guid, name: d.name}})\n\n for (const deviceInfo of deviceInfos) {\n const modes: Record<string, DataMode> = { \n 'day': DataMode.Day\n };\n\n for (const [modeName, dataMode] of Object.entries(modes)) {\n try {\n this.log.debug(`Fetching ${modeName} history for ${deviceInfo.name}`);\n const history = await this.comfortCloudClient.getDeviceHistoryData(deviceInfo.guid, new Date(), dataMode);\n \n if (history && history.historyDataList) {\n for (let i = 0; i < history.historyDataList.length; i++) {\n const data = history.historyDataList[i];\n const index = i.toString().padStart(2, '0');\n const prefix = `${deviceInfo.name}.history.${modeName}.${index}`;\n \n await this.setStateChangedAsync(`${prefix}.dataTime`, data.dataTime, true);\n await this.setStateChangedAsync(`${prefix}.averageSettingTemp`, data.averageSettingTemp, true);\n await this.setStateChangedAsync(`${prefix}.averageInsideTemp`, data.averageInsideTemp, true);\n await this.setStateChangedAsync(`${prefix}.averageOutsideTemp`, data.averageOutsideTemp, true);\n await this.setStateChangedAsync(`${prefix}.consumption`, data.consumption, true);\n await this.setStateChangedAsync(`${prefix}.cost`, data.cost, true);\n await this.setStateChangedAsync(`${prefix}.heatConsumptionRate`, data.heatConsumptionRate, true);\n await this.setStateChangedAsync(`${prefix}.coolConsumptionRate`, data.coolConsumptionRate, true);\n }\n }\n } catch(e) {\n this.log.warn(`Failed to fetch history ${modeName} for ${deviceInfo.name}: ${e}`);\n }\n }\n }\n }\n\n private async refreshDeviceStates(device: Device): Promise<void> {\n this.log.debug(`Refresh device ${device.name} (${device.guid}).`)\n this.log.debug(`${device.name}: guid => ${device.guid}.`)\n \n for (const stateDef of deviceStates) {\n if (stateDef.id === 'guid') continue; // guid is special, not a state on the device object in the same way\n\n const value = (device as any)[stateDef.id];\n this.log.debug(`${device.name}: ${stateDef.id} => ${value}.`)\n \n if (value !== undefined) {\n await this.setStateChangedAsync(\n `${device.name}.${stateDef.id}`,\n value,\n true\n )\n } else if (stateDef.id === 'connected') {\n // Connected is always true when we reached this point\n await this.setStateChangedAsync(\n `${device.name}.connected`,\n true,\n true\n )\n }\n }\n this.log.debug(`Refresh device ${device.name} finished.`)\n }\n\n private async refreshDevice(guid: string, deviceName: string): Promise<void> {\n try {\n const device = await this.comfortCloudClient.getDevice(guid, deviceName)\n if (!device) {\n return\n }\n if (!device.name) {\n device.name = deviceName\n }\n await this.refreshDeviceStates(device)\n } catch (error) {\n await this.handleDeviceError(deviceName, error)\n }\n }\n\n private async refreshDevices(): Promise<void> {\n try {\n this.log.debug('Refresh all devices.')\n const groups = await this.comfortCloudClient.getGroups()\n await this.setStateAsync('info.connection', true, true);\n const devices = groups.flatMap(g => g.devices)\n const deviceInfos = devices.map(d => { return{guid: d.guid, name: d.name}})\n await Promise.all(deviceInfos.map(async (deviceInfo) => {\n try {\n const device = await this.comfortCloudClient.getDevice(deviceInfo.guid, deviceInfo.name)\n if(device != null) {\n device.name = deviceInfo.name\n device.guid = deviceInfo.guid\n await this.refreshDeviceStates(device)\n }\n } catch (error) {\n await this.handleDeviceError(deviceInfo.name, error)\n }\n }))\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n\n private async createDevices(groups: Array<Group>): Promise<void> {\n const devicesFromService = groups.flatMap(g => g.devices)\n const deviceInfos = devicesFromService.map(d => { return {guid: d.guid, name: d.name}})\n await Promise.all(deviceInfos.map(async (deviceInfo) => {\n this.log.debug(`Device info from group ${deviceInfo.guid}, ${deviceInfo.name}.`)\n let device: Device | null = null\n try {\n device = await this.comfortCloudClient.getDevice(deviceInfo.guid, deviceInfo.name)\n } catch(error) {\n await this.handleDeviceError(deviceInfo.name, error)\n return\n }\n \n if(device != null) {\n await this.setObjectNotExistsAsync(deviceInfo.name, {\n type: 'device',\n common: {\n name: deviceInfo.name\n },\n native: {}\n });\n\n for (const stateDef of deviceStates) {\n const common: ioBroker.StateCommon = {\n name: stateDef.id,\n role: stateDef.role,\n write: stateDef.write,\n type: stateDef.type as ioBroker.CommonType,\n read: stateDef.read !== undefined ? stateDef.read : true, // default read to true\n def: stateDef.id === 'guid' ? deviceInfo.guid : (stateDef.def !== undefined ? stateDef.def : (device as any)[stateDef.id]),\n };\n\n if (stateDef.states) {\n common.states = stateDef.states;\n }\n\n await this.setObjectNotExistsAsync(`${deviceInfo.name}.${stateDef.id}`, {\n type: 'state',\n common: common,\n native: {}\n });\n }\n\n this.log.info(`Device ${deviceInfo.name} created.`)\n\n if (this.config?.historyEnabled) {\n await this.setObjectNotExistsAsync(`${deviceInfo.name}.history`, {\n type: 'channel',\n common: { name: 'History Data' },\n native: {}\n });\n\n const historyStates = getHistoryStates();\n for (const [id, def] of Object.entries(historyStates)) {\n await this.setObjectNotExistsAsync(`${deviceInfo.name}.${id}`, {\n type: 'state',\n common: def,\n native: {}\n });\n }\n }\n }\n }));\n this.log.debug('Device creation completed.')\n }\n\n private async updateDevice(\n deviceName: string,\n stateName: string,\n state: ioBroker.State\n ): Promise<void> {\n if(readonlyStateNames.includes(stateName)) {\n return\n }\n if (!state.ack) {\n const stateObj = await this.getObjectAsync(`${deviceName}.${stateName}`)\n const stateCommon = stateObj?.common as ioBroker.StateCommon\n if(stateCommon?.write == false) {\n return\n }\n\n const guidState = await this.getStateAsync(`${deviceName}.guid`)\n \n this.log.debug(\n `Update device guid=${guidState?.val} state=${stateName}`\n )\n const parameters: Parameters = {}\n parameters[stateName] = state.val\n if (!guidState?.val) {\n return\n }\n try {\n this.log.debug(`Set device parameter ${JSON.stringify(parameters)} for device ${guidState?.val}`)\n await this.comfortCloudClient.setParameters(\n guidState?.val as string,\n parameters\n )\n this.log.debug(`Refresh device ${deviceName}`)\n await this.refreshDevice(guidState?.val as string, deviceName)\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n }\n\n /**\n * Is called when adapter shuts down - callback has to be called under any circumstances!\n */\n private onUnload(callback: () => void): void {\n try {\n if(this.refreshTimeout)\n clearTimeout(this.refreshTimeout)\n if(this.refreshHistoryTimeout)\n clearTimeout(this.refreshHistoryTimeout)\n\n this.log.info('cleaned everything up...')\n callback()\n } catch (e) {\n callback()\n }\n }\n\n /**\n * Is called if a subscribed object changes\n */\n private onObjectChange(\n id: string,\n obj: ioBroker.Object | null | undefined\n ): void {\n if (obj) {\n // The object was changed\n this.log.info(`object ${id} changed: ${JSON.stringify(obj)}`)\n } else {\n // The object was deleted\n this.log.info(`object ${id} deleted`)\n }\n }\n\n /**\n * Is called if a subscribed state changes\n */\n private async onStateChange(\n id: string,\n state: ioBroker.State | null | undefined\n ): Promise<void> {\n if(!state || state.ack) {\n return\n }\n\n if(id.includes('.commands.')) {\n const elements = id.split('.')\n const stateName = elements[elements.length - 1]\n if(stateName == 'manualRefresh' && state.val) {\n try {\n await this.refreshDevices()\n await this.setStateAsync(id, state, true)\n } catch (error) {\n await this.handleClientError(error)\n }\n await this.setStateAsync(id, false, true)\n } else if(stateName == 'refreshHistory' && state.val) {\n try {\n const groups = await this.comfortCloudClient.getGroups()\n await this.refreshHistory(groups)\n await this.setStateAsync(id, state, true)\n } catch (error) {\n await this.handleClientError(error)\n }\n await this.setStateAsync(id, false, true)\n }\n }\n else if (!id.includes('.info.')) {\n const elements = id.split('.')\n const deviceName = elements[elements.length - 2]\n const stateName = elements[elements.length - 1]\n try {\n await this.updateDevice(deviceName, stateName, state) \n } catch (error) {\n await this.handleClientError(error)\n }\n \n // The state was changed\n this.log.info(\n `state ${id} changed: ${state.val} (ack = ${state.ack})`\n )\n }\n }\n\n private async getCurrentAppVersion() : Promise<string> {\n const response = await axios.get('https://itunes.apple.com/lookup?id=1348640525')\n if(response.status !== 200)\n return ''\n const version = await response.data.results[0].version\n return version\n }\n\n private async handleDeviceError(deviceName: string, error: unknown): Promise<void> {\n this.log.debug(`Try to handle device error for ${deviceName}.`)\n\n await this.setStateChangedAsync(\n `${deviceName}.connected`,\n false,\n true\n )\n \n if (error instanceof ServiceError) {\n this.log.error(\n `Service error when connecting to device ${deviceName}: ${error.message}. Code=${error.code}. Stack: ${error.stack}`\n )\n } else if (error instanceof Error){\n this.log.error(`Unknown error when connecting to device ${deviceName}: ${error}. Stack: ${error.stack}`)\n }\n }\n\n private async handleClientError(error: unknown): Promise<void> {\n this.log.debug('Try to handle error.')\n \n if (error instanceof TokenExpiredError) {\n this.log.info(\n `Token of comfort cloud client expired. Trying to login again. Code=${error.code}. Stack: ${error.stack}`\n )\n await this.setStateAsync('info.connection', false, true);\n await this.comfortCloudClient.login(\n this.config.username,\n this.config.password\n )\n await this.setStateAsync('info.connection', true, true);\n this.log.info('Login successful.')\n } else if (error instanceof ServiceError) {\n await this.setStateAsync('info.connection', false, true);\n this.log.error(\n `Service error: ${error.message}. Code=${error.code}. Stack: ${error.stack}`\n )\n } else if (error instanceof Error){\n this.log.error(`Unknown error: ${error}. Stack: ${error.stack}`)\n }\n }\n\n private setupRefreshTimeout(): void {\n this.log.debug('setupRefreshTimeout')\n const refreshIntervalInMilliseconds = this.refreshIntervalInMinutes * 60 * 1000\n this.log.debug(`refreshIntervalInMilliseconds=${refreshIntervalInMilliseconds}`)\n this.refreshTimeout = setTimeout(this.refreshTimeoutFunc.bind(this), refreshIntervalInMilliseconds);\n }\n\n private async refreshTimeoutFunc(): Promise<void> {\n this.log.debug(`refreshTimeoutFunc started.`)\n try {\n await this.refreshDevices()\n this.setupRefreshTimeout()\n } catch (error) {\n await this.handleClientError(error)\n }\n \n }\n\n private setupHistoryRefreshTimeout(): void {\n this.log.debug('setupHistoryRefreshTimeout')\n const refreshIntervalInMilliseconds = this.historyRefreshIntervalInMinutes * 60 * 1000\n this.refreshHistoryTimeout = setTimeout(this.refreshHistoryTimeoutFunc.bind(this), refreshIntervalInMilliseconds);\n }\n\n private async refreshHistoryTimeoutFunc(): Promise<void> {\n this.log.debug(`refreshHistoryTimeoutFunc started.`)\n try {\n if (this.config?.historyEnabled) {\n const groups = await this.comfortCloudClient.getGroups()\n await this.refreshHistory(groups)\n }\n this.setupHistoryRefreshTimeout()\n } catch (error) {\n this.log.warn(`Failed to refresh history: ${error}`)\n // Retry later even on error\n this.setupHistoryRefreshTimeout() \n }\n }\n\n private trimAll(text: string): string {\n const newText = text.trim().replace(/(\\r\\n|\\n|\\r)/gm, '');\n return newText\n }\n}\n\nif (module.parent) {\n // Export the constructor in compact mode\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) =>\n new PanasonicComfortCloud(options)\n} else {\n // otherwise start the instance directly\n (() => new PanasonicComfortCloud())()\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["axios"]
|
|
7
7
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,47 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "panasonic-comfort-cloud",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.2.1",
|
|
5
5
|
"news": {
|
|
6
|
+
"3.2.1": {
|
|
7
|
+
"en": "implement history data fetching (day mode)\nadd historyEnabled configuration\nadd manual history refresh command\nfix eslint errors (indentation, unused vars)",
|
|
8
|
+
"de": "durchführung von geschichtsdaten-fetching (tagesmodus)\ngeschichte hinzufügen Ermöglichte Konfiguration\nmanuelle geschichte aktualisieren befehl\neslint-fehler beheben (einfall, ungenutzte vars)",
|
|
9
|
+
"ru": "реализация извлечения исторических данных (дневной режим)\nдобавить историю Включенная конфигурация\nдобавить команду обновления истории вручную\nисправление ошибок эслинта (вмятина, неиспользуемые вары)",
|
|
10
|
+
"pt": "implementar coleta de dados de histórico (modo dia)\nadicionar histórico Configuração habilitada\nadicionar o comando de actualização do histórico manual\ncorrigir erros de eslint (indentação, vars não utilizados)",
|
|
11
|
+
"nl": "history data fetching implementeren (dagmodus)\ngeschiedenis toevoegen Ingeschakelde configuratie\ngeschiedenisverversingsopdracht toevoegen\neslint-fouten oplossen (inspringen, ongebruikte vars)",
|
|
12
|
+
"fr": "implémenter la récupération de données d'historique (mode jour)\najouter l'historique Configuration activée\najouter la commande de rafraîchissement de l'historique manuel\ncorriger les erreurs d'essence (identification, vars inutilisés)",
|
|
13
|
+
"it": "implementare l'acquisizione dati di storia (modalità giorno)\naggiungere la storia Configurazione abilitata\naggiungere comando aggiornamento cronologia manuale\ncorreggere gli errori di eslint (indentazione, vars non utilizzati)",
|
|
14
|
+
"es": "implementar datos de historia (modo de día)\nañadir historia Configuración habilitada\nañadir comando de actualización de historia manual\ncorrige errores de eslinto (indentación, vars no usados)",
|
|
15
|
+
"pl": "zaimplementuj pobieranie danych z historii (tryb dnia)\ndodaj historię Konfiguracja włączona\ndodaj polecenie ręcznego odświeżania historii\nnaprawić błędy eslint (wcięcie, niewykorzystane vars)",
|
|
16
|
+
"uk": "реалізація історичних даних (денного режиму)\nісторія Увімкнути конфігурацію\nдодати ручну історію оновленої команди\nвиправити помилки eslint (зняття, невикористані вари)",
|
|
17
|
+
"zh-cn": "执行历史数据获取(日模式)\n添加历史 启用配置\n添加手动历史更新命令\n修复 eslint 错误(缩进,未使用 vars)"
|
|
18
|
+
},
|
|
19
|
+
"3.2.0": {
|
|
20
|
+
"en": "update library panasonic-comfort-cloud-client to 2.1.4\nmodernize code (remove lodash, use async/await, split state definitions)\nreplace deprecated methods with modern equivalents\nimprove unit tests and remove deprecated test wrapper\nadd mocked client tests to verify connection logic",
|
|
21
|
+
"de": "aktualisierung der bibliothek panasonic-comfort-cloud-client auf 2.1.4\nmodernisieren sie code (entfernen sie lodash, verwenden sie async/await, spaltzustandsdefinitionen)\nabgeschriebene methoden durch moderne äquivalente ersetzen\nverbessern sie unit-tests und entfernen sie deprecierte test-wrapper\nmocked client-tests hinzufügen, um die verbindungslogik zu überprüfen",
|
|
22
|
+
"ru": "обновить библиотеку панасон-комфорт-облако-клиента до 2.1.4\nмодернизировать код (удалить лодаш, использовать асинхронизацию/ожидание, разделять определения состояния)\nзаменить устаревшие методы современными эквивалентами\nулучшить единичные тесты и удалить устаревшую тестовую обертку\nдобавьте издевательские тесты клиентов для проверки логики подключения",
|
|
23
|
+
"pt": "atualizar biblioteca panasonic-comfort-cloud-client para 2.1.4\nmodernizar código (remover lodash, use assync/await, split state definitions)\nsubstituir métodos obsoletos por equivalentes modernos\nmelhorar os testes unitários e remover o invólucro de teste obsoleto\nadicionar os testes simulados do cliente para verificar a lógica da ligação",
|
|
24
|
+
"nl": "bibliotheek panasonic-comfort-cloud-client bijwerken naar 2.1.4\nmodernisering code (verwijder lodash, gebruik async/wacht, split state definities)\nverouderde methoden vervangen door moderne equivalenten\nverbeteren van de eenheidstests en verwijderen van verouderde testwikkel\ntoevoegen van gespot client testen om verbinding logica te verifiëren",
|
|
25
|
+
"fr": "mettre à jour la bibliothèque panasonic-confort-cloud-client au 2.1.4\nmoderniser le code (supprimer lodash, utiliser async/attendu, définitions de l'état fractionné)\nremplacer les méthodes obsolètes par des équivalents modernes\naméliorer les essais unitaires et enlever l'emballage d'essai déprécié\najouter des tests client simulés pour vérifier la logique de connexion",
|
|
26
|
+
"it": "aggiornamento libreria panasonic-comfort-cloud-client a 2.1.4\nmodernizzare il codice (rimuovere lodash, usare asinc/aspettato, definizioni di stato divise)\nsostituire metodi deprecati con equivalenti moderni\nmigliorare i test delle unità e rimuovere l'involucro di prova deprecato\naggiungere test client mocked per verificare la logica di connessione",
|
|
27
|
+
"es": "actualización de la biblioteca panasonic-comfort-cloud-client a 2.1.4\nmodernizar código (remove lodash, use async/await, definiciones de estado divididas)\nsustituir los métodos deprecated con equivalentes modernos\nmejorar las pruebas de unidad y eliminar envoltura de prueba deprecatada\nañadir pruebas de cliente mocked para verificar la lógica de conexión",
|
|
28
|
+
"pl": "aktualizacja biblioteki panasonic- comfort-cloud- cloud- client do 2.1.4\nmodernizować kod (usunąć lodash, użyć async / wait, podzielić definicje stanu)\nzastąpić przestarzałe metody nowoczesnymi odpowiednikami\nulepszenie badań jednostkowych i usunięcie zdepregowanego opakowania testowego\ndodać wyśmiewane testy klientów do weryfikacji logiki połączenia",
|
|
29
|
+
"uk": "javascript licenses api веб-сайт go1.13.8\nмодернізуйте код (видалення lodash, використання async/await, розбити визначення стану)\nзаміну депресованих методів з сучасними еквівалентами\nполіпшення тестів і видалення знезаражених тестових обгортань\nдодавати тести з'єднання, які були залучені",
|
|
30
|
+
"zh-cn": "将全音响-舒适-云客户端更新为2.1.4\n现代化的代码( 移动lodash, 使用 async/await, 分裂状态定义)\n用现代等效方法取代折旧方法\n改进单位测试,并删除贬值的测试包装\n添加模拟客户端测试以验证连接逻辑"
|
|
31
|
+
},
|
|
32
|
+
"3.1.0": {
|
|
33
|
+
"en": "read app version from App Store.",
|
|
34
|
+
"de": "lesen Sie die App-Version von App Store.",
|
|
35
|
+
"ru": "прочитайте версию приложения из App Store.",
|
|
36
|
+
"pt": "leia a versão do aplicativo da App Store.",
|
|
37
|
+
"nl": "appversie lezen uit App Store.",
|
|
38
|
+
"fr": "lire la version de l'application de l'App Store.",
|
|
39
|
+
"it": "leggere la versione app da App Store.",
|
|
40
|
+
"es": "leer versión de App Store.",
|
|
41
|
+
"pl": "czytaj wersję aplikacji z App Store.",
|
|
42
|
+
"uk": "читати версію програми з App Store.",
|
|
43
|
+
"zh-cn": "从 App Store 读取应用程序版本."
|
|
44
|
+
},
|
|
6
45
|
"3.0.3": {
|
|
7
46
|
"en": "panasonic-comfort-cloud-client updated to new version. CFC generator for header added.",
|
|
8
47
|
"de": "panasonic-comfort-cloud-client auf neue Version aktualisiert. CFC-Generator für Header hinzugefügt.",
|
|
@@ -54,45 +93,6 @@
|
|
|
54
93
|
"pl": "Dodano opcję wyłączenia automatycznego odświeżania.\nDodano stan do instrukcji odświeżania urządzenia.\nAktualizacja wersji klienta dla wsparcia OAuth.",
|
|
55
94
|
"uk": "Додана можливість деактивувати автоматичне оновлення.\nДодано стан для ручного оновлення пристрою інформації.\nОновлена версія клієнта для підтримки OAuth.",
|
|
56
95
|
"zh-cn": "添加选项以关闭自动刷新 .\n添加到手动刷新设备信息中的状态 .\n更新了OAuth支持的客户端版本."
|
|
57
|
-
},
|
|
58
|
-
"2.3.0": {
|
|
59
|
-
"en": "Updated packages\nAdded connected state to devices",
|
|
60
|
-
"de": "Aktualisierte Pakete\nVerbindung mit Geräten hinzugefügt",
|
|
61
|
-
"ru": "Обновленные пакеты\nДобавлено подключенное состояние к устройствам",
|
|
62
|
-
"pt": "Pacotes atualizados\nEstado conectado adicionado a dispositivos",
|
|
63
|
-
"nl": "Verouderde pakketten\nVerbonden staat aan apparatuur",
|
|
64
|
-
"fr": "Forfaits mis à jour\nAjout de l'état connecté aux appareils",
|
|
65
|
-
"it": "Pacchetti aggiornati\nAggiunto stato collegato ai dispositivi",
|
|
66
|
-
"es": "Paquetes actualizados\nEstado conectado a dispositivos",
|
|
67
|
-
"pl": "Pakiet upoważniony\nZłączony stan do urządzeń",
|
|
68
|
-
"uk": "Оновлені пакети\nДодано підключений стан до пристроїв",
|
|
69
|
-
"zh-cn": "最新一揽子计划\n增加与装置有关的国家"
|
|
70
|
-
},
|
|
71
|
-
"2.2.4": {
|
|
72
|
-
"en": "Fixed load AppVersion from Github.",
|
|
73
|
-
"de": "Behobene AppVersion von Github.",
|
|
74
|
-
"ru": "Фиксированная нагрузка AppVersion от Github.",
|
|
75
|
-
"pt": "AppVersion de carga fixa do Github.",
|
|
76
|
-
"nl": "Gerepareerde lading van Github.",
|
|
77
|
-
"fr": "Charge fixe AppVersion de Github.",
|
|
78
|
-
"it": "AppVersione di carico fisso da Github.",
|
|
79
|
-
"es": "Carga fija AppVersion de Github.",
|
|
80
|
-
"pl": "Wykorzystywany ładunek z Github.",
|
|
81
|
-
"uk": "Виправлено навантаження AppVersion від Github.",
|
|
82
|
-
"zh-cn": "来自吉特布的固定载荷。."
|
|
83
|
-
},
|
|
84
|
-
"2.2.3": {
|
|
85
|
-
"en": "Added support for admin 5 UI (jsonConfig).\nUpdated packages.\nFixed translation.",
|
|
86
|
-
"de": "Unterstützung für admin 5 UI (jsonConfig.).\nAktualisierte Pakete.\nBehobene Übersetzung.",
|
|
87
|
-
"ru": "Добавлена поддержка admin 5 UI (jsonConfig.).\nОбновленные пакеты.\nФиксированный перевод.",
|
|
88
|
-
"pt": "Adicionado suporte para admin 5 UI (jsonConfig.).\nPacotes atualizados.\nTradução fixa.",
|
|
89
|
-
"nl": "Aangepast voor administratie 5 UI (jsonConfig).\nVerouderde pakketten.\nVertaald.",
|
|
90
|
-
"fr": "Ajout du support pour admin 5 UI (jsonConfig.).\nDes paquets mis à jour.\nTraduction fixe.",
|
|
91
|
-
"it": "Aggiunto supporto per admin 5 UI (jsonConfig.).\nPacchetti aggiornati.\nTraduzione fissa.",
|
|
92
|
-
"es": "Apoyo añadido para admin 5 UI (jsonConfig.).\nPaquetes actualizados.\nTraducción fija.",
|
|
93
|
-
"pl": "Administrowane wsparcie dla admin 5 UI (jsonConfig).\nZmodernizowane pakiety.\nTłumaczenie.",
|
|
94
|
-
"uk": "Додано підтримку admin 5 UI (jsonConfig.).\nОновлені пакети.\nФіксований переклад.",
|
|
95
|
-
"zh-cn": "增援5 UI(json Config).\n最新一揽子计划。.\n固定翻译。."
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
},
|
|
149
149
|
"dependencies": [
|
|
150
150
|
{
|
|
151
|
-
"js-controller": ">=
|
|
151
|
+
"js-controller": ">=5.0.19"
|
|
152
152
|
}
|
|
153
153
|
],
|
|
154
154
|
"globalDependencies": [
|
|
@@ -163,8 +163,9 @@
|
|
|
163
163
|
"refreshInterval": 5,
|
|
164
164
|
"automaticRefreshEnabled": true,
|
|
165
165
|
"appVersion": "",
|
|
166
|
-
"
|
|
167
|
-
"
|
|
166
|
+
"appVersionFromAppStore": "",
|
|
167
|
+
"useAppVersionFromAppStore": true,
|
|
168
|
+
"historyEnabled": true
|
|
168
169
|
},
|
|
169
170
|
"protectedNative": [
|
|
170
171
|
"username",
|
|
@@ -216,6 +217,19 @@
|
|
|
216
217
|
"def": false
|
|
217
218
|
},
|
|
218
219
|
"native": {}
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"_id": "commands.refreshHistory",
|
|
223
|
+
"type": "state",
|
|
224
|
+
"common": {
|
|
225
|
+
"role": "button",
|
|
226
|
+
"name": "Refresh history data manual",
|
|
227
|
+
"type": "boolean",
|
|
228
|
+
"read": true,
|
|
229
|
+
"write": true,
|
|
230
|
+
"def": false
|
|
231
|
+
},
|
|
232
|
+
"native": {}
|
|
219
233
|
}
|
|
220
234
|
]
|
|
221
235
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.panasonic-comfort-cloud",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.1",
|
|
4
4
|
"description": "Adapter for Panasonic Comfort Cloud",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "marc",
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"homepage": "https://github.com/marc2016/ioBroker.panasonic-comfort-cloud",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"keywords": [
|
|
12
|
-
"air condition"
|
|
12
|
+
"air condition",
|
|
13
|
+
"ioBroker"
|
|
13
14
|
],
|
|
14
15
|
"repository": {
|
|
15
16
|
"type": "git",
|
|
@@ -19,17 +20,17 @@
|
|
|
19
20
|
"node": ">=18"
|
|
20
21
|
},
|
|
21
22
|
"dependencies": {
|
|
22
|
-
"@iobroker/adapter-core": "^3.
|
|
23
|
-
"
|
|
24
|
-
"lodash": "^4.17.21",
|
|
25
|
-
"panasonic-comfort-cloud-client": "2.0.3",
|
|
23
|
+
"@iobroker/adapter-core": "^3.2.2",
|
|
24
|
+
"panasonic-comfort-cloud-client": "^2.1.4",
|
|
26
25
|
"ts-enum-util": "^4.0.2"
|
|
27
26
|
},
|
|
28
27
|
"devDependencies": {
|
|
29
|
-
"@alcalzone/release-script": "^
|
|
30
|
-
"@alcalzone/release-script-plugin-iobroker": "^
|
|
31
|
-
"@alcalzone/release-script-plugin-license": "^
|
|
28
|
+
"@alcalzone/release-script": "^5.0.0",
|
|
29
|
+
"@alcalzone/release-script-plugin-iobroker": "^4.0.0",
|
|
30
|
+
"@alcalzone/release-script-plugin-license": "^4.0.0",
|
|
31
|
+
"@alcalzone/release-script-plugin-manual-review": "^4.0.0",
|
|
32
32
|
"@iobroker/adapter-dev": "^1.2.0",
|
|
33
|
+
"@iobroker/dev-server": "^0.8.0",
|
|
33
34
|
"@iobroker/testing": "^4.1.3",
|
|
34
35
|
"@tsconfig/node14": "^14.1.0",
|
|
35
36
|
"@types/chai": "^4.3.11",
|
|
@@ -65,6 +66,11 @@
|
|
|
65
66
|
"LICENSE"
|
|
66
67
|
],
|
|
67
68
|
"scripts": {
|
|
69
|
+
"dev:server": "dev-server run",
|
|
70
|
+
"dev:watch": "dev-server watch",
|
|
71
|
+
"dev:setup": "dev-server setup",
|
|
72
|
+
"dev:debug": "dev-server run --debug",
|
|
73
|
+
"dev:admin": "dev-server watch-admin",
|
|
68
74
|
"translate": "translate-adapter",
|
|
69
75
|
"prebuild": "rimraf ./build",
|
|
70
76
|
"build:ts": "tsc -p tsconfig.build.json",
|
|
@@ -74,11 +80,11 @@
|
|
|
74
80
|
"watch": "npm run watch:ts",
|
|
75
81
|
"test": "npm run test:package && npm run test:unit",
|
|
76
82
|
"test:package": "mocha test/package --exit",
|
|
77
|
-
"test:unit": "mocha test/
|
|
83
|
+
"test:unit": "mocha test/lib --exit",
|
|
78
84
|
"test:integration": "mocha test/integration --exit",
|
|
79
85
|
"test:rule": "mocha test/rule --exit",
|
|
80
86
|
"lint": "eslint --ext .ts src",
|
|
81
|
-
"release": "release-script"
|
|
87
|
+
"release": "release-script --branch-pattern \"main\""
|
|
82
88
|
},
|
|
83
89
|
"bugs": {
|
|
84
90
|
"url": "https://github.com/marc2016/ioBroker.panasonic-comfort-cloud/issues"
|
package/admin/words.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/*global systemDictionary:true */
|
|
2
|
-
/*
|
|
3
|
-
+===================== DO NOT MODIFY ======================+
|
|
4
|
-
| This file was generated by translate-adapter, please use |
|
|
5
|
-
| `translate-adapter adminLanguages2words` to update it. |
|
|
6
|
-
+===================== DO NOT MODIFY ======================+
|
|
7
|
-
*/
|
|
8
|
-
'use strict';
|
|
9
|
-
|
|
10
|
-
systemDictionary = {
|
|
11
|
-
"appVersion": { "en": "New version of the app for API", "de": "Neue Version der App für API", "ru": "Новая версия приложения для API", "pt": "Nova versão do app para API", "nl": "Nieuwe versie van de app voor API", "fr": "Nouvelle version de l'application pour l'API", "it": "Nuova versione dell'app per API", "es": "Nueva versión de la app para API", "pl": "Nowa wersja aplikacji dla API", "uk": "Нова версія програми для API", "zh-cn": "API 应用程序的新版本"},
|
|
12
|
-
"appVersionFromGithub": { "en": "App version for API loaded from GitHub repository", "de": "App-Version für API aus dem GitHub-Repository geladen", "ru": "Версия приложения для API, загруженного из репозитория GitHub", "pt": "Versão do aplicativo para API carregada do repositório GitHub", "nl": "App-versie voor API geladen vanuit GitHub-repository", "fr": "Version de l'application pour l'API chargée à partir du référentiel GitHub", "it": "Versione dell'app per l'API caricata dal repository GitHub", "es": "Versión de la aplicación para la API cargada desde el repositorio de GitHub", "pl": "Wersja aplikacji dla API ładowana z repozytorium GitHub", "uk": "Версія програми для API, завантажена зі сховища GitHub", "zh-cn": "从 GitHub 存储库加载的 API 的应用程序版本"},
|
|
13
|
-
"useAppVersionFromGithub": { "en": "Use the app version loaded from GitHub", "de": "Verwenden Sie die von GitHub geladene App-Version", "ru": "Используйте версию приложения, загруженную с GitHub", "pt": "Use a versão do aplicativo carregada do GitHub", "nl": "Gebruik de app-versie die is geladen vanuit GitHub", "fr": "Utiliser la version de l'application chargée depuis GitHub", "it": "Usa la versione dell'app caricata da GitHub", "es": "Use la versión de la aplicación cargada desde GitHub", "pl": "Użyj wersji aplikacji załadowanej z GitHub", "uk": "Використовуйте версію програми, завантажену з GitHub", "zh-cn": "使用从 GitHub 加载的应用程序版本"},
|
|
14
|
-
"panasonic-comfort-cloud adapter settings": { "en": "Adapter settings for panasonic-comfort-cloud", "de": "Adaptereinstellungen für panasonic-comfort-cloud", "ru": "Настройки адаптера для panasonic-comfort-cloud", "pt": "Configurações do adaptador para panasonic-comfort-cloud", "nl": "Adapterinstellingen voor panasonic-comfort-cloud", "fr": "Paramètres de l'adaptateur pour panasonic-comfort-cloud", "it": "Impostazioni dell'adattatore per panasonic-comfort-cloud", "es": "Configuración del adaptador para panasonic-comfort-cloud", "pl": "Ustawienia adaptera dla panasonic-comfort-cloud", "uk": "Налаштування адаптера для panasonic-comfort-cloud", "zh-cn": "panasonic-comfort-cloud 适配器设置"},
|
|
15
|
-
"password": { "en": "Password", "de": "Passwort", "ru": "Пароль", "pt": "Senha", "nl": "Wachtwoord", "fr": "Mot de passe", "it": "Parola d'ordine", "es": "Contraseña", "pl": "Hasło", "uk": "Пароль", "zh-cn": "密码"},
|
|
16
|
-
"refreshInterval": { "en": "Refresh interval (m)", "de": "Aktualisierungsintervall (m)", "ru": "Интервал обновления (м)", "pt": "Intervalo de atualização (m)", "nl": "Verversingsinterval (m)", "fr": "Intervalle de rafraîchissement (m)", "it": "Intervallo di aggiornamento (m)", "es": "Intervalo de actualización (m)", "pl": "Interwał odświeżania (m)", "uk": "Інтервал оновлення (м)", "zh-cn": "刷新间隔(米)"},
|
|
17
|
-
"username": { "en": "Username", "de": "Nutzername", "ru": "Имя пользователя", "pt": "Nome de usuário", "nl": "Gebruikersnaam", "fr": "Nom d'utilisateur", "it": "Nome utente", "es": "Nombre de usuario", "pl": "Nazwa użytkownika", "uk": "Ім'я користувача", "zh-cn": "用户名"},
|
|
18
|
-
};
|