iobroker.panasonic-comfort-cloud 2.2.4 → 2.3.0
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/README.md +5 -0
- package/build/main.js +39 -14
- package/build/main.js.map +2 -2
- package/io-package.json +14 -14
- package/package.json +24 -21
package/README.md
CHANGED
|
@@ -24,6 +24,11 @@ With the method used, only one client can be logged on with the account at a tim
|
|
|
24
24
|
It is recommended that a second account, for which the devices have been shared, is used.
|
|
25
25
|
|
|
26
26
|
## Changelog
|
|
27
|
+
### 2.3.0 (2023-12-21)
|
|
28
|
+
|
|
29
|
+
* Updated packages
|
|
30
|
+
* Added connected state to devices
|
|
31
|
+
|
|
27
32
|
### 2.2.4 (2023-10-18)
|
|
28
33
|
|
|
29
34
|
* Fixed load AppVersion from Github.
|
package/build/main.js
CHANGED
|
@@ -146,6 +146,11 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
146
146
|
device.actualNanoe,
|
|
147
147
|
true
|
|
148
148
|
);
|
|
149
|
+
await this.setStateChangedAsync(
|
|
150
|
+
`${device.name}.connected`,
|
|
151
|
+
true,
|
|
152
|
+
true
|
|
153
|
+
);
|
|
149
154
|
this.log.debug(`Refresh device ${device.name} finished.`);
|
|
150
155
|
}
|
|
151
156
|
async refreshDevice(guid, deviceName) {
|
|
@@ -159,7 +164,7 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
159
164
|
}
|
|
160
165
|
await this.refreshDeviceStates(device);
|
|
161
166
|
} catch (error) {
|
|
162
|
-
await this.
|
|
167
|
+
await this.handleDeviceError(deviceName, error);
|
|
163
168
|
}
|
|
164
169
|
}
|
|
165
170
|
async refreshDevices() {
|
|
@@ -172,11 +177,15 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
172
177
|
return { guid: d.guid, name: d.name };
|
|
173
178
|
});
|
|
174
179
|
await Promise.all(deviceInfos.map(async (deviceInfo) => {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
device
|
|
178
|
-
|
|
179
|
-
|
|
180
|
+
try {
|
|
181
|
+
const device = await this.comfortCloudClient.getDevice(deviceInfo.guid, deviceInfo.name);
|
|
182
|
+
if (device != null) {
|
|
183
|
+
device.name = deviceInfo.name;
|
|
184
|
+
device.guid = deviceInfo.guid;
|
|
185
|
+
await this.refreshDeviceStates(device);
|
|
186
|
+
}
|
|
187
|
+
} catch (error) {
|
|
188
|
+
await this.handleDeviceError(deviceInfo.name, error);
|
|
180
189
|
}
|
|
181
190
|
}));
|
|
182
191
|
} catch (error) {
|
|
@@ -184,10 +193,6 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
184
193
|
}
|
|
185
194
|
}
|
|
186
195
|
async createDevices(groups) {
|
|
187
|
-
const devices = await this.getDevicesAsync();
|
|
188
|
-
const names = _.map(devices, (value) => {
|
|
189
|
-
return value.common.name;
|
|
190
|
-
});
|
|
191
196
|
const devicesFromService = _.flatMap(groups, (g) => g.devices);
|
|
192
197
|
const deviceInfos = _.map(devicesFromService, (d) => {
|
|
193
198
|
return { guid: d.guid, name: d.name };
|
|
@@ -198,12 +203,10 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
198
203
|
try {
|
|
199
204
|
device = await this.comfortCloudClient.getDevice(deviceInfo.guid, deviceInfo.name);
|
|
200
205
|
} catch (error) {
|
|
201
|
-
await this.
|
|
206
|
+
await this.handleDeviceError(deviceInfo.name, error);
|
|
207
|
+
return;
|
|
202
208
|
}
|
|
203
209
|
if (device != null) {
|
|
204
|
-
if (_.includes(names, deviceInfo.name)) {
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
210
|
this.createDevice(deviceInfo.name);
|
|
208
211
|
this.createState(
|
|
209
212
|
deviceInfo.name,
|
|
@@ -391,6 +394,13 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
391
394
|
},
|
|
392
395
|
void 0
|
|
393
396
|
);
|
|
397
|
+
this.createState(
|
|
398
|
+
deviceInfo.name,
|
|
399
|
+
"",
|
|
400
|
+
"connected",
|
|
401
|
+
{ role: "state", read: true, write: false, def: false, type: "boolean" },
|
|
402
|
+
void 0
|
|
403
|
+
);
|
|
394
404
|
this.log.info(`Device ${deviceInfo.name} created.`);
|
|
395
405
|
}
|
|
396
406
|
}));
|
|
@@ -469,6 +479,21 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
469
479
|
const text = await response.data;
|
|
470
480
|
return text;
|
|
471
481
|
}
|
|
482
|
+
async handleDeviceError(deviceName, error) {
|
|
483
|
+
this.log.debug(`Try to handle device error for ${deviceName}.`);
|
|
484
|
+
await this.setStateChangedAsync(
|
|
485
|
+
`${deviceName}.connected`,
|
|
486
|
+
false,
|
|
487
|
+
true
|
|
488
|
+
);
|
|
489
|
+
if (error instanceof import_panasonic_comfort_cloud_client.ServiceError) {
|
|
490
|
+
this.log.error(
|
|
491
|
+
`Service error when connecting to device ${deviceName}: ${error.message}. Code=${error.code}. Stack: ${error.stack}`
|
|
492
|
+
);
|
|
493
|
+
} else if (error instanceof Error) {
|
|
494
|
+
this.log.error(`Unknown error when connecting to device ${deviceName}: ${error}. Stack: ${error.stack}`);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
472
497
|
async handleClientError(error) {
|
|
473
498
|
this.log.debug("Try to handle error.");
|
|
474
499
|
if (error instanceof import_panasonic_comfort_cloud_client.TokenExpiredError) {
|
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.setupRefreshTimeout()\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 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.handleClientError(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 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 }));\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n\n private async createDevices(groups: Array<Group>): Promise<void> {\n const devices = await this.getDevicesAsync()\n const names = _.map(devices, (value) => {\n return value.common.name\n })\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.handleClientError(error)\n }\n \n if(device != null) {\n if (_.includes(names, deviceInfo.name)) {\n return\n }\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\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) {\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 } else {\n // The state was deleted\n this.log.info(`state ${id} deleted`)\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 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 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.setupRefreshTimeout()\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) {\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 } else {\n // The state was deleted\n this.log.info(`state ${id} deleted`)\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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",
|
|
6
6
|
"names": ["axios"]
|
|
7
7
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "panasonic-comfort-cloud",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.3.0",
|
|
5
5
|
"news": {
|
|
6
|
+
"2.3.0": {
|
|
7
|
+
"en": "Updated packages\nAdded connected state to devices",
|
|
8
|
+
"de": "Aktualisierte Pakete\nVerbindung mit Geräten hinzugefügt",
|
|
9
|
+
"ru": "Обновленные пакеты\nДобавлено подключенное состояние к устройствам",
|
|
10
|
+
"pt": "Pacotes atualizados\nEstado conectado adicionado a dispositivos",
|
|
11
|
+
"nl": "Verouderde pakketten\nVerbonden staat aan apparatuur",
|
|
12
|
+
"fr": "Forfaits mis à jour\nAjout de l'état connecté aux appareils",
|
|
13
|
+
"it": "Pacchetti aggiornati\nAggiunto stato collegato ai dispositivi",
|
|
14
|
+
"es": "Paquetes actualizados\nEstado conectado a dispositivos",
|
|
15
|
+
"pl": "Pakiet upoważniony\nZłączony stan do urządzeń",
|
|
16
|
+
"uk": "Оновлені пакети\nДодано підключений стан до пристроїв",
|
|
17
|
+
"zh-cn": "最新一揽子计划\n增加与装置有关的国家"
|
|
18
|
+
},
|
|
6
19
|
"2.2.4": {
|
|
7
20
|
"en": "Fixed load AppVersion from Github.",
|
|
8
21
|
"de": "Behobene AppVersion von Github.",
|
|
@@ -80,19 +93,6 @@
|
|
|
80
93
|
"pl": "Dodano wersję aplikacji do ustawień.",
|
|
81
94
|
"uk": "Версію програми додано в налаштування.",
|
|
82
95
|
"zh-cn": "在设置中添加了应用程序版本。"
|
|
83
|
-
},
|
|
84
|
-
"2.0.6": {
|
|
85
|
-
"en": "panasonic-comfort-cloud-client updated to new version. (appVersion changed again)",
|
|
86
|
-
"de": "panasonic-comfort-cloud-client auf neue version aktualisiert. (appVersion erneut geändert)",
|
|
87
|
-
"ru": "Panasonic-comfort-cloud-client обновлен до новой версии. (версия приложения снова изменилась)",
|
|
88
|
-
"pt": "panasonic-comfort-cloud-client atualizado para a nova versão. (appVersion alterado novamente)",
|
|
89
|
-
"nl": "panasonic-comfort-cloud-client bijgewerkt naar nieuwe versie. (appVersie opnieuw gewijzigd)",
|
|
90
|
-
"fr": "panasonic-comfort-cloud-client mis à jour vers la nouvelle version. (appVersion changé à nouveau)",
|
|
91
|
-
"it": "panasonic-comfort-cloud-client aggiornato alla nuova versione. (appVersion cambiata di nuovo)",
|
|
92
|
-
"es": "panasonic-comfort-cloud-client actualizado a la nueva versión. (appVersion cambió de nuevo)",
|
|
93
|
-
"pl": "panasonic-comfort-cloud-client zaktualizowany do nowej wersji. (ponowna zmiana wersji aplikacji)",
|
|
94
|
-
"zh-cn": "panasonic-comfort-cloud-client 更新到新版本。 (appVersion又变了)",
|
|
95
|
-
"uk": "panasonic-comfort-cloud-client оновлено до нової версії. (AppVersion знову змінено)"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.panasonic-comfort-cloud",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Adapter for Panasonic Comfort Cloud",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "marc",
|
|
@@ -15,43 +15,46 @@
|
|
|
15
15
|
"type": "git",
|
|
16
16
|
"url": "https://github.com/marc2016/ioBroker.panasonic-comfort-cloud"
|
|
17
17
|
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=16"
|
|
20
|
+
},
|
|
18
21
|
"dependencies": {
|
|
19
|
-
"@iobroker/adapter-core": "^3.0.
|
|
20
|
-
"@types/lodash": "^4.14.
|
|
22
|
+
"@iobroker/adapter-core": "^3.0.4",
|
|
23
|
+
"@types/lodash": "^4.14.202",
|
|
21
24
|
"lodash": "^4.17.21",
|
|
22
25
|
"panasonic-comfort-cloud-client": "1.2.6",
|
|
23
26
|
"ts-enum-util": "^4.0.2"
|
|
24
27
|
},
|
|
25
28
|
"devDependencies": {
|
|
26
|
-
"@alcalzone/release-script": "^3.
|
|
27
|
-
"@alcalzone/release-script-plugin-iobroker": "^3.
|
|
28
|
-
"@alcalzone/release-script-plugin-license": "^3.
|
|
29
|
+
"@alcalzone/release-script": "^3.7.0",
|
|
30
|
+
"@alcalzone/release-script-plugin-iobroker": "^3.7.0",
|
|
31
|
+
"@alcalzone/release-script-plugin-license": "^3.7.0",
|
|
29
32
|
"@iobroker/adapter-dev": "^1.2.0",
|
|
30
33
|
"@iobroker/testing": "^4.1.0",
|
|
31
34
|
"@tsconfig/node14": "^14.1.0",
|
|
32
|
-
"@types/chai": "^4.3.
|
|
33
|
-
"@types/chai-as-promised": "^7.1.
|
|
34
|
-
"@types/gulp": "^4.0.
|
|
35
|
-
"@types/mocha": "^10.0.
|
|
36
|
-
"@types/node": "^20.
|
|
37
|
-
"@types/proxyquire": "^1.3.
|
|
38
|
-
"@types/sinon": "^
|
|
39
|
-
"@types/sinon-chai": "^3.2.
|
|
40
|
-
"@typescript-eslint/eslint-plugin": "^6.
|
|
41
|
-
"@typescript-eslint/parser": "^6.
|
|
42
|
-
"axios": "^1.
|
|
35
|
+
"@types/chai": "^4.3.11",
|
|
36
|
+
"@types/chai-as-promised": "^7.1.8",
|
|
37
|
+
"@types/gulp": "^4.0.17",
|
|
38
|
+
"@types/mocha": "^10.0.6",
|
|
39
|
+
"@types/node": "^20.10.5",
|
|
40
|
+
"@types/proxyquire": "^1.3.31",
|
|
41
|
+
"@types/sinon": "^17.0.2",
|
|
42
|
+
"@types/sinon-chai": "^3.2.12",
|
|
43
|
+
"@typescript-eslint/eslint-plugin": "^6.15.0",
|
|
44
|
+
"@typescript-eslint/parser": "^6.15.0",
|
|
45
|
+
"axios": "^1.6.2",
|
|
43
46
|
"chai": "^4.3.10",
|
|
44
47
|
"chai-as-promised": "^7.1.1",
|
|
45
|
-
"eslint": "^8.
|
|
48
|
+
"eslint": "^8.56.0",
|
|
46
49
|
"gulp": "^4.0.2",
|
|
47
50
|
"mocha": "^10.2.0",
|
|
48
51
|
"proxyquire": "^2.1.3",
|
|
49
52
|
"rimraf": "^5.0.5",
|
|
50
|
-
"sinon": "^
|
|
53
|
+
"sinon": "^17.0.1",
|
|
51
54
|
"sinon-chai": "^3.7.0",
|
|
52
55
|
"source-map-support": "^0.5.21",
|
|
53
|
-
"ts-node": "^10.9.
|
|
54
|
-
"typescript": "^5.
|
|
56
|
+
"ts-node": "^10.9.2",
|
|
57
|
+
"typescript": "^5.3.3"
|
|
55
58
|
},
|
|
56
59
|
"main": "build/main.js",
|
|
57
60
|
"files": [
|