iobroker.panasonic-comfort-cloud 3.1.0 → 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/README.md +13 -0
- package/admin/i18n/de/translations.json +2 -1
- package/admin/i18n/en/translations.json +2 -1
- package/admin/jsonConfig.json +9 -0
- package/build/lib/state-definitions.js +181 -0
- package/build/lib/state-definitions.js.map +7 -0
- package/build/main.js +142 -278
- package/build/main.js.map +2 -2
- package/io-package.json +42 -28
- package/package.json +14 -10
package/README.md
CHANGED
|
@@ -23,6 +23,19 @@ With the method used, only one client can be logged on with the account at a tim
|
|
|
23
23
|
It is recommended that a second account, for which the devices have been shared, is used.
|
|
24
24
|
|
|
25
25
|
## Changelog
|
|
26
|
+
### 3.2.1 (2025-12-21)
|
|
27
|
+
* implement history data fetching (day mode)
|
|
28
|
+
* add historyEnabled configuration
|
|
29
|
+
* add manual history refresh command
|
|
30
|
+
* fix eslint errors (indentation, unused vars)
|
|
31
|
+
|
|
32
|
+
### 3.2.0 (2025-12-21)
|
|
33
|
+
* update library panasonic-comfort-cloud-client to 2.1.4
|
|
34
|
+
* modernize code (remove lodash, use async/await, split state definitions)
|
|
35
|
+
* replace deprecated methods with modern equivalents
|
|
36
|
+
* improve unit tests and remove deprecated test wrapper
|
|
37
|
+
* add mocked client tests to verify connection logic
|
|
38
|
+
|
|
26
39
|
### 3.1.0 (2025-08-09)
|
|
27
40
|
|
|
28
41
|
* read app version from App Store.
|
|
@@ -8,5 +8,6 @@
|
|
|
8
8
|
"adapterCommands": "Befehle zur Steuerung des Adapters",
|
|
9
9
|
"manualRefresh": "Gerätehandbuch aktualisieren",
|
|
10
10
|
"appVersionFromAppStore": "App -Version für API aus dem App Store geladen",
|
|
11
|
-
"useAppVersionFromAppStore": "Verwenden Sie die App -Version, die aus dem App Store geladen wurde"
|
|
11
|
+
"useAppVersionFromAppStore": "Verwenden Sie die App -Version, die aus dem App Store geladen wurde",
|
|
12
|
+
"historyEnabled": "Historische Daten abrufen (Verbrauch, Temperatur)"
|
|
12
13
|
}
|
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
"password": "Password",
|
|
7
7
|
"refreshInterval": "Refresh interval (minutes)",
|
|
8
8
|
"username": "Username",
|
|
9
|
-
"automaticRefreshEnabled": "Automatic refresh enabled"
|
|
9
|
+
"automaticRefreshEnabled": "Automatic refresh enabled",
|
|
10
|
+
"historyEnabled": "Fetch history data (consumption, temperature)"
|
|
10
11
|
}
|
package/admin/jsonConfig.json
CHANGED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var state_definitions_exports = {};
|
|
20
|
+
__export(state_definitions_exports, {
|
|
21
|
+
deviceStates: () => deviceStates,
|
|
22
|
+
getHistoryStates: () => getHistoryStates,
|
|
23
|
+
readonlyStateNames: () => readonlyStateNames
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(state_definitions_exports);
|
|
26
|
+
var import_panasonic_comfort_cloud_client = require("panasonic-comfort-cloud-client");
|
|
27
|
+
const deviceStates = [
|
|
28
|
+
{
|
|
29
|
+
id: "guid",
|
|
30
|
+
role: "info.address",
|
|
31
|
+
write: false,
|
|
32
|
+
type: "string",
|
|
33
|
+
def: void 0
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: "operate",
|
|
37
|
+
role: "switch.power",
|
|
38
|
+
write: true,
|
|
39
|
+
type: "number",
|
|
40
|
+
states: { 0: import_panasonic_comfort_cloud_client.Power[0], 1: import_panasonic_comfort_cloud_client.Power[1] }
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: "temperatureSet",
|
|
44
|
+
role: "level.temperature",
|
|
45
|
+
write: true,
|
|
46
|
+
type: "number"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: "insideTemperature",
|
|
50
|
+
role: "level.temperature",
|
|
51
|
+
write: false,
|
|
52
|
+
type: "number"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: "outTemperature",
|
|
56
|
+
role: "level.temperature",
|
|
57
|
+
write: false,
|
|
58
|
+
type: "number"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: "airSwingLR",
|
|
62
|
+
role: "state",
|
|
63
|
+
write: true,
|
|
64
|
+
type: "number",
|
|
65
|
+
states: {
|
|
66
|
+
0: import_panasonic_comfort_cloud_client.AirSwingLR[0],
|
|
67
|
+
1: import_panasonic_comfort_cloud_client.AirSwingLR[1],
|
|
68
|
+
2: import_panasonic_comfort_cloud_client.AirSwingLR[2],
|
|
69
|
+
3: import_panasonic_comfort_cloud_client.AirSwingLR[3],
|
|
70
|
+
4: import_panasonic_comfort_cloud_client.AirSwingLR[4]
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
id: "airSwingUD",
|
|
75
|
+
role: "state",
|
|
76
|
+
write: true,
|
|
77
|
+
type: "number",
|
|
78
|
+
states: {
|
|
79
|
+
0: import_panasonic_comfort_cloud_client.AirSwingUD[0],
|
|
80
|
+
1: import_panasonic_comfort_cloud_client.AirSwingUD[1],
|
|
81
|
+
2: import_panasonic_comfort_cloud_client.AirSwingUD[2],
|
|
82
|
+
3: import_panasonic_comfort_cloud_client.AirSwingUD[3],
|
|
83
|
+
4: import_panasonic_comfort_cloud_client.AirSwingUD[4]
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
id: "fanAutoMode",
|
|
88
|
+
role: "state",
|
|
89
|
+
write: true,
|
|
90
|
+
type: "number",
|
|
91
|
+
states: {
|
|
92
|
+
0: import_panasonic_comfort_cloud_client.FanAutoMode[0],
|
|
93
|
+
1: import_panasonic_comfort_cloud_client.FanAutoMode[1],
|
|
94
|
+
2: import_panasonic_comfort_cloud_client.FanAutoMode[2],
|
|
95
|
+
3: import_panasonic_comfort_cloud_client.FanAutoMode[3]
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: "ecoMode",
|
|
100
|
+
role: "state",
|
|
101
|
+
write: true,
|
|
102
|
+
type: "number",
|
|
103
|
+
states: { 0: import_panasonic_comfort_cloud_client.EcoMode[0], 1: import_panasonic_comfort_cloud_client.EcoMode[1], 2: import_panasonic_comfort_cloud_client.EcoMode[2] }
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
id: "operationMode",
|
|
107
|
+
role: "state",
|
|
108
|
+
write: true,
|
|
109
|
+
type: "number",
|
|
110
|
+
states: {
|
|
111
|
+
0: import_panasonic_comfort_cloud_client.OperationMode[0],
|
|
112
|
+
1: import_panasonic_comfort_cloud_client.OperationMode[1],
|
|
113
|
+
2: import_panasonic_comfort_cloud_client.OperationMode[2],
|
|
114
|
+
3: import_panasonic_comfort_cloud_client.OperationMode[3],
|
|
115
|
+
4: import_panasonic_comfort_cloud_client.OperationMode[4]
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: "fanSpeed",
|
|
120
|
+
role: "state",
|
|
121
|
+
write: true,
|
|
122
|
+
type: "number",
|
|
123
|
+
states: {
|
|
124
|
+
0: import_panasonic_comfort_cloud_client.FanSpeed[0],
|
|
125
|
+
1: import_panasonic_comfort_cloud_client.FanSpeed[1],
|
|
126
|
+
2: import_panasonic_comfort_cloud_client.FanSpeed[2],
|
|
127
|
+
3: import_panasonic_comfort_cloud_client.FanSpeed[3],
|
|
128
|
+
4: import_panasonic_comfort_cloud_client.FanSpeed[4],
|
|
129
|
+
5: import_panasonic_comfort_cloud_client.FanSpeed[5]
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
id: "actualNanoe",
|
|
134
|
+
role: "state",
|
|
135
|
+
write: true,
|
|
136
|
+
type: "number",
|
|
137
|
+
states: {
|
|
138
|
+
0: import_panasonic_comfort_cloud_client.NanoeMode[0],
|
|
139
|
+
1: import_panasonic_comfort_cloud_client.NanoeMode[1],
|
|
140
|
+
2: import_panasonic_comfort_cloud_client.NanoeMode[2],
|
|
141
|
+
3: import_panasonic_comfort_cloud_client.NanoeMode[3],
|
|
142
|
+
4: import_panasonic_comfort_cloud_client.NanoeMode[4]
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
id: "connected",
|
|
147
|
+
role: "state",
|
|
148
|
+
write: false,
|
|
149
|
+
read: true,
|
|
150
|
+
type: "boolean",
|
|
151
|
+
def: false
|
|
152
|
+
}
|
|
153
|
+
];
|
|
154
|
+
const readonlyStateNames = deviceStates.filter((s) => !s.write).map((s) => s.id);
|
|
155
|
+
function getHistoryStates() {
|
|
156
|
+
const states = {};
|
|
157
|
+
const modes = ["day"];
|
|
158
|
+
const limit = { day: 24 };
|
|
159
|
+
for (const mode of modes) {
|
|
160
|
+
for (let i = 0; i <= limit[mode]; i++) {
|
|
161
|
+
const index = i.toString().padStart(2, "0");
|
|
162
|
+
const prefix = `history.${mode}.${index}`;
|
|
163
|
+
states[`${prefix}.dataTime`] = { role: "value.time", name: "Data Time", type: "string", read: true, write: false, def: "" };
|
|
164
|
+
states[`${prefix}.averageSettingTemp`] = { role: "value.temperature", name: "Average Setting Temp", type: "number", unit: "\xB0C", read: true, write: false, def: 0 };
|
|
165
|
+
states[`${prefix}.averageInsideTemp`] = { role: "value.temperature", name: "Average Inside Temp", type: "number", unit: "\xB0C", read: true, write: false, def: 0 };
|
|
166
|
+
states[`${prefix}.averageOutsideTemp`] = { role: "value.temperature", name: "Average Outside Temp", type: "number", unit: "\xB0C", read: true, write: false, def: 0 };
|
|
167
|
+
states[`${prefix}.consumption`] = { role: "value.power.consumption", name: "Consumption", type: "number", unit: "kWh", read: true, write: false, def: 0 };
|
|
168
|
+
states[`${prefix}.cost`] = { role: "value.cost", name: "Cost", type: "number", read: true, write: false, def: 0 };
|
|
169
|
+
states[`${prefix}.heatConsumptionRate`] = { role: "value", name: "Heat Consumption Rate", type: "number", read: true, write: false, def: 0 };
|
|
170
|
+
states[`${prefix}.coolConsumptionRate`] = { role: "value", name: "Cool Consumption Rate", type: "number", read: true, write: false, def: 0 };
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return states;
|
|
174
|
+
}
|
|
175
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
176
|
+
0 && (module.exports = {
|
|
177
|
+
deviceStates,
|
|
178
|
+
getHistoryStates,
|
|
179
|
+
readonlyStateNames
|
|
180
|
+
});
|
|
181
|
+
//# sourceMappingURL=state-definitions.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/lib/state-definitions.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n Power,\n AirSwingLR,\n AirSwingUD,\n FanAutoMode,\n EcoMode,\n OperationMode,\n FanSpeed,\n NanoeMode\n} from 'panasonic-comfort-cloud-client'\n\nexport interface StateDefinition {\n id: string;\n role: string;\n write: boolean;\n type: 'number' | 'string' | 'boolean' | 'array' | 'object' | 'mixed' | 'file';\n read?: boolean;\n def?: any;\n states?: Record<number, string>;\n}\n\nexport const deviceStates: StateDefinition[] = [\n {\n id: 'guid',\n role: 'info.address',\n write: false,\n type: 'string',\n def: undefined // Will be set dynamically from device info\n },\n {\n id: 'operate',\n role: 'switch.power',\n write: true,\n type: 'number',\n states: { 0: Power[0], 1: Power[1] }\n },\n {\n id: 'temperatureSet',\n role: 'level.temperature',\n write: true,\n type: 'number'\n },\n {\n id: 'insideTemperature',\n role: 'level.temperature',\n write: false,\n type: 'number'\n },\n {\n id: 'outTemperature',\n role: 'level.temperature',\n write: false,\n type: 'number'\n },\n {\n id: 'airSwingLR',\n role: 'state',\n write: true,\n type: 'number',\n states: {\n 0: AirSwingLR[0],\n 1: AirSwingLR[1],\n 2: AirSwingLR[2],\n 3: AirSwingLR[3],\n 4: AirSwingLR[4],\n }\n },\n {\n id: 'airSwingUD',\n role: 'state',\n write: true,\n type: 'number',\n states: {\n 0: AirSwingUD[0],\n 1: AirSwingUD[1],\n 2: AirSwingUD[2],\n 3: AirSwingUD[3],\n 4: AirSwingUD[4],\n }\n },\n {\n id: 'fanAutoMode',\n role: 'state',\n write: true,\n type: 'number',\n states: {\n 0: FanAutoMode[0],\n 1: FanAutoMode[1],\n 2: FanAutoMode[2],\n 3: FanAutoMode[3],\n }\n },\n {\n id: 'ecoMode',\n role: 'state',\n write: true,\n type: 'number',\n states: { 0: EcoMode[0], 1: EcoMode[1], 2: EcoMode[2] }\n },\n {\n id: 'operationMode',\n role: 'state',\n write: true,\n type: 'number',\n states: {\n 0: OperationMode[0],\n 1: OperationMode[1],\n 2: OperationMode[2],\n 3: OperationMode[3],\n 4: OperationMode[4],\n }\n },\n {\n id: 'fanSpeed',\n role: 'state',\n write: true,\n type: 'number',\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 },\n {\n id: 'actualNanoe',\n role: 'state',\n write: true,\n type: 'number',\n states: {\n 0: NanoeMode[0],\n 1: NanoeMode[1],\n 2: NanoeMode[2],\n 3: NanoeMode[3],\n 4: NanoeMode[4],\n }\n },\n {\n id: 'connected',\n role: 'state',\n write: false,\n read: true,\n type: 'boolean',\n def: false\n }\n];\n\nexport const readonlyStateNames = deviceStates\n .filter(s => !s.write)\n .map(s => s.id);\n\nexport function getHistoryStates(): Record<string, any> {\n const states: Record<string, any> = {};\n const modes = ['day'];\n const limit: Record<string, number> = { day: 24 };\n\n for (const mode of modes) {\n for (let i = 0; i <= limit[mode]; i++) {\n const index = i.toString().padStart(2, '0');\n const prefix = `history.${mode}.${index}`;\n\n states[`${prefix}.dataTime`] = { role: 'value.time', name: 'Data Time', type: 'string', read: true, write: false, def: '' };\n states[`${prefix}.averageSettingTemp`] = { role: 'value.temperature', name: 'Average Setting Temp', type: 'number', unit: '\u00B0C', read: true, write: false, def: 0 };\n states[`${prefix}.averageInsideTemp`] = { role: 'value.temperature', name: 'Average Inside Temp', type: 'number', unit: '\u00B0C', read: true, write: false, def: 0 };\n states[`${prefix}.averageOutsideTemp`] = { role: 'value.temperature', name: 'Average Outside Temp', type: 'number', unit: '\u00B0C', read: true, write: false, def: 0 };\n states[`${prefix}.consumption`] = { role: 'value.power.consumption', name: 'Consumption', type: 'number', unit: 'kWh', read: true, write: false, def: 0 };\n states[`${prefix}.cost`] = { role: 'value.cost', name: 'Cost', type: 'number', read: true, write: false, def: 0 };\n states[`${prefix}.heatConsumptionRate`] = { role: 'value', name: 'Heat Consumption Rate', type: 'number', read: true, write: false, def: 0 };\n states[`${prefix}.coolConsumptionRate`] = { role: 'value', name: 'Cool Consumption Rate', type: 'number', read: true, write: false, def: 0 };\n }\n }\n return states;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/build/main.js
CHANGED
|
@@ -19,8 +19,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
19
19
|
));
|
|
20
20
|
var utils = __toESM(require("@iobroker/adapter-core"));
|
|
21
21
|
var import_panasonic_comfort_cloud_client = require("panasonic-comfort-cloud-client");
|
|
22
|
-
var _ = __toESM(require("lodash"));
|
|
23
22
|
var import_axios = __toESM(require("axios"));
|
|
23
|
+
var import_state_definitions = require("./lib/state-definitions");
|
|
24
24
|
const REFRESH_INTERVAL_IN_MINUTES_DEFAULT = 5;
|
|
25
25
|
class PanasonicComfortCloud extends utils.Adapter {
|
|
26
26
|
constructor(options = {}) {
|
|
@@ -30,17 +30,17 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
30
30
|
});
|
|
31
31
|
this.comfortCloudClient = new import_panasonic_comfort_cloud_client.ComfortCloudClient();
|
|
32
32
|
this.refreshIntervalInMinutes = REFRESH_INTERVAL_IN_MINUTES_DEFAULT;
|
|
33
|
-
this.
|
|
33
|
+
this.historyRefreshIntervalInMinutes = 60;
|
|
34
34
|
this.on("ready", this.onReady.bind(this));
|
|
35
35
|
this.on("objectChange", this.onObjectChange.bind(this));
|
|
36
36
|
this.on("stateChange", this.onStateChange.bind(this));
|
|
37
37
|
this.on("unload", this.onUnload.bind(this));
|
|
38
38
|
}
|
|
39
39
|
async onReady() {
|
|
40
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
|
|
40
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;
|
|
41
41
|
this.refreshIntervalInMinutes = (_b = (_a = this.config) == null ? void 0 : _a.refreshInterval) != null ? _b : REFRESH_INTERVAL_IN_MINUTES_DEFAULT;
|
|
42
42
|
this.subscribeStates("*");
|
|
43
|
-
this.
|
|
43
|
+
await this.setStateAsync("info.connection", false, true);
|
|
44
44
|
const loadedAppVersion = await this.getCurrentAppVersion();
|
|
45
45
|
this.log.info(`Loaded app version from App store: ${loadedAppVersion}`);
|
|
46
46
|
if (loadedAppVersion && this.trimAll((_c = this.config) == null ? void 0 : _c.appVersionFromAppStore) != this.trimAll(loadedAppVersion)) {
|
|
@@ -67,7 +67,7 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
67
67
|
this.config.password
|
|
68
68
|
);
|
|
69
69
|
this.log.info("Login successful.");
|
|
70
|
-
this.
|
|
70
|
+
await this.setStateAsync("info.connection", true, true);
|
|
71
71
|
this.log.debug("Create devices.");
|
|
72
72
|
const groups = await this.comfortCloudClient.getGroups();
|
|
73
73
|
await this.createDevices(groups);
|
|
@@ -75,85 +75,72 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
75
75
|
if ((_o = this.config) == null ? void 0 : _o.automaticRefreshEnabled) {
|
|
76
76
|
this.setupRefreshTimeout();
|
|
77
77
|
}
|
|
78
|
+
if ((_p = this.config) == null ? void 0 : _p.historyEnabled) {
|
|
79
|
+
this.log.debug(`History enabled. Refreshing history.`);
|
|
80
|
+
await this.refreshHistory(groups);
|
|
81
|
+
this.setupHistoryRefreshTimeout();
|
|
82
|
+
}
|
|
78
83
|
} catch (error) {
|
|
79
84
|
await this.handleClientError(error);
|
|
80
85
|
}
|
|
81
86
|
}
|
|
82
87
|
}
|
|
88
|
+
async refreshHistory(groups) {
|
|
89
|
+
const devicesFromService = groups.flatMap((g) => g.devices);
|
|
90
|
+
const deviceInfos = devicesFromService.map((d) => {
|
|
91
|
+
return { guid: d.guid, name: d.name };
|
|
92
|
+
});
|
|
93
|
+
for (const deviceInfo of deviceInfos) {
|
|
94
|
+
const modes = {
|
|
95
|
+
"day": import_panasonic_comfort_cloud_client.DataMode.Day
|
|
96
|
+
};
|
|
97
|
+
for (const [modeName, dataMode] of Object.entries(modes)) {
|
|
98
|
+
try {
|
|
99
|
+
this.log.debug(`Fetching ${modeName} history for ${deviceInfo.name}`);
|
|
100
|
+
const history = await this.comfortCloudClient.getDeviceHistoryData(deviceInfo.guid, new Date(), dataMode);
|
|
101
|
+
if (history && history.historyDataList) {
|
|
102
|
+
for (let i = 0; i < history.historyDataList.length; i++) {
|
|
103
|
+
const data = history.historyDataList[i];
|
|
104
|
+
const index = i.toString().padStart(2, "0");
|
|
105
|
+
const prefix = `${deviceInfo.name}.history.${modeName}.${index}`;
|
|
106
|
+
await this.setStateChangedAsync(`${prefix}.dataTime`, data.dataTime, true);
|
|
107
|
+
await this.setStateChangedAsync(`${prefix}.averageSettingTemp`, data.averageSettingTemp, true);
|
|
108
|
+
await this.setStateChangedAsync(`${prefix}.averageInsideTemp`, data.averageInsideTemp, true);
|
|
109
|
+
await this.setStateChangedAsync(`${prefix}.averageOutsideTemp`, data.averageOutsideTemp, true);
|
|
110
|
+
await this.setStateChangedAsync(`${prefix}.consumption`, data.consumption, true);
|
|
111
|
+
await this.setStateChangedAsync(`${prefix}.cost`, data.cost, true);
|
|
112
|
+
await this.setStateChangedAsync(`${prefix}.heatConsumptionRate`, data.heatConsumptionRate, true);
|
|
113
|
+
await this.setStateChangedAsync(`${prefix}.coolConsumptionRate`, data.coolConsumptionRate, true);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
} catch (e) {
|
|
117
|
+
this.log.warn(`Failed to fetch history ${modeName} for ${deviceInfo.name}: ${e}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
83
122
|
async refreshDeviceStates(device) {
|
|
84
123
|
this.log.debug(`Refresh device ${device.name} (${device.guid}).`);
|
|
85
124
|
this.log.debug(`${device.name}: guid => ${device.guid}.`);
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
device.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
await this.setStateChangedAsync(
|
|
106
|
-
`${device.name}.outTemperature`,
|
|
107
|
-
device.outTemperature,
|
|
108
|
-
true
|
|
109
|
-
);
|
|
110
|
-
this.log.debug(`${device.name}: airSwingLR => ${device.airSwingLR}.`);
|
|
111
|
-
await this.setStateChangedAsync(
|
|
112
|
-
`${device.name}.airSwingLR`,
|
|
113
|
-
device.airSwingLR,
|
|
114
|
-
true
|
|
115
|
-
);
|
|
116
|
-
this.log.debug(`${device.name}: airSwingUD => ${device.airSwingUD}.`);
|
|
117
|
-
await this.setStateChangedAsync(
|
|
118
|
-
`${device.name}.airSwingUD`,
|
|
119
|
-
device.airSwingUD,
|
|
120
|
-
true
|
|
121
|
-
);
|
|
122
|
-
this.log.debug(`${device.name}: fanAutoMode => ${device.fanAutoMode}.`);
|
|
123
|
-
await this.setStateChangedAsync(
|
|
124
|
-
`${device.name}.fanAutoMode`,
|
|
125
|
-
device.fanAutoMode,
|
|
126
|
-
true
|
|
127
|
-
);
|
|
128
|
-
this.log.debug(`${device.name}: ecoMode => ${device.ecoMode}.`);
|
|
129
|
-
await this.setStateChangedAsync(
|
|
130
|
-
`${device.name}.ecoMode`,
|
|
131
|
-
device.ecoMode,
|
|
132
|
-
true
|
|
133
|
-
);
|
|
134
|
-
this.log.debug(`${device.name}: operationMode => ${device.operationMode}.`);
|
|
135
|
-
await this.setStateChangedAsync(
|
|
136
|
-
`${device.name}.operationMode`,
|
|
137
|
-
device.operationMode,
|
|
138
|
-
true
|
|
139
|
-
);
|
|
140
|
-
this.log.debug(`${device.name}: fanSpeed => ${device.fanSpeed}.`);
|
|
141
|
-
await this.setStateChangedAsync(
|
|
142
|
-
`${device.name}.fanSpeed`,
|
|
143
|
-
device.fanSpeed,
|
|
144
|
-
true
|
|
145
|
-
);
|
|
146
|
-
this.log.debug(`${device.name}: actualNanoe => ${device.actualNanoe}.`);
|
|
147
|
-
await this.setStateChangedAsync(
|
|
148
|
-
`${device.name}.actualNanoe`,
|
|
149
|
-
device.actualNanoe,
|
|
150
|
-
true
|
|
151
|
-
);
|
|
152
|
-
await this.setStateChangedAsync(
|
|
153
|
-
`${device.name}.connected`,
|
|
154
|
-
true,
|
|
155
|
-
true
|
|
156
|
-
);
|
|
125
|
+
for (const stateDef of import_state_definitions.deviceStates) {
|
|
126
|
+
if (stateDef.id === "guid")
|
|
127
|
+
continue;
|
|
128
|
+
const value = device[stateDef.id];
|
|
129
|
+
this.log.debug(`${device.name}: ${stateDef.id} => ${value}.`);
|
|
130
|
+
if (value !== void 0) {
|
|
131
|
+
await this.setStateChangedAsync(
|
|
132
|
+
`${device.name}.${stateDef.id}`,
|
|
133
|
+
value,
|
|
134
|
+
true
|
|
135
|
+
);
|
|
136
|
+
} else if (stateDef.id === "connected") {
|
|
137
|
+
await this.setStateChangedAsync(
|
|
138
|
+
`${device.name}.connected`,
|
|
139
|
+
true,
|
|
140
|
+
true
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
157
144
|
this.log.debug(`Refresh device ${device.name} finished.`);
|
|
158
145
|
}
|
|
159
146
|
async refreshDevice(guid, deviceName) {
|
|
@@ -174,9 +161,9 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
174
161
|
try {
|
|
175
162
|
this.log.debug("Refresh all devices.");
|
|
176
163
|
const groups = await this.comfortCloudClient.getGroups();
|
|
177
|
-
this.
|
|
178
|
-
const devices =
|
|
179
|
-
const deviceInfos =
|
|
164
|
+
await this.setStateAsync("info.connection", true, true);
|
|
165
|
+
const devices = groups.flatMap((g) => g.devices);
|
|
166
|
+
const deviceInfos = devices.map((d) => {
|
|
180
167
|
return { guid: d.guid, name: d.name };
|
|
181
168
|
});
|
|
182
169
|
await Promise.all(deviceInfos.map(async (deviceInfo) => {
|
|
@@ -196,11 +183,12 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
196
183
|
}
|
|
197
184
|
}
|
|
198
185
|
async createDevices(groups) {
|
|
199
|
-
const devicesFromService =
|
|
200
|
-
const deviceInfos =
|
|
186
|
+
const devicesFromService = groups.flatMap((g) => g.devices);
|
|
187
|
+
const deviceInfos = devicesFromService.map((d) => {
|
|
201
188
|
return { guid: d.guid, name: d.name };
|
|
202
189
|
});
|
|
203
190
|
await Promise.all(deviceInfos.map(async (deviceInfo) => {
|
|
191
|
+
var _a;
|
|
204
192
|
this.log.debug(`Device info from group ${deviceInfo.guid}, ${deviceInfo.name}.`);
|
|
205
193
|
let device = null;
|
|
206
194
|
try {
|
|
@@ -210,207 +198,53 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
210
198
|
return;
|
|
211
199
|
}
|
|
212
200
|
if (device != null) {
|
|
213
|
-
this.
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
"guid",
|
|
218
|
-
{ role: "info.address", write: false, def: deviceInfo.guid, type: "string" },
|
|
219
|
-
void 0
|
|
220
|
-
);
|
|
221
|
-
this.readonlyStateNames.push("guid");
|
|
222
|
-
this.createState(
|
|
223
|
-
deviceInfo.name,
|
|
224
|
-
"",
|
|
225
|
-
"operate",
|
|
226
|
-
{
|
|
227
|
-
role: "switch.power",
|
|
228
|
-
states: { 0: import_panasonic_comfort_cloud_client.Power[0], 1: import_panasonic_comfort_cloud_client.Power[1] },
|
|
229
|
-
write: true,
|
|
230
|
-
def: device.operate,
|
|
231
|
-
type: "number"
|
|
232
|
-
},
|
|
233
|
-
void 0
|
|
234
|
-
);
|
|
235
|
-
this.createState(
|
|
236
|
-
deviceInfo.name,
|
|
237
|
-
"",
|
|
238
|
-
"temperatureSet",
|
|
239
|
-
{
|
|
240
|
-
role: "level.temperature",
|
|
241
|
-
write: true,
|
|
242
|
-
def: device.temperatureSet,
|
|
243
|
-
type: "number"
|
|
244
|
-
},
|
|
245
|
-
void 0
|
|
246
|
-
);
|
|
247
|
-
this.createState(
|
|
248
|
-
deviceInfo.name,
|
|
249
|
-
"",
|
|
250
|
-
"insideTemperature",
|
|
251
|
-
{
|
|
252
|
-
role: "level.temperature",
|
|
253
|
-
write: false,
|
|
254
|
-
def: device.insideTemperature,
|
|
255
|
-
type: "number"
|
|
256
|
-
},
|
|
257
|
-
void 0
|
|
258
|
-
);
|
|
259
|
-
this.readonlyStateNames.push("insideTemperature");
|
|
260
|
-
this.createState(
|
|
261
|
-
deviceInfo.name,
|
|
262
|
-
"",
|
|
263
|
-
"outTemperature",
|
|
264
|
-
{
|
|
265
|
-
role: "level.temperature",
|
|
266
|
-
write: false,
|
|
267
|
-
def: device.outTemperature,
|
|
268
|
-
type: "number"
|
|
269
|
-
},
|
|
270
|
-
void 0
|
|
271
|
-
);
|
|
272
|
-
this.readonlyStateNames.push("outTemperature");
|
|
273
|
-
this.createState(
|
|
274
|
-
deviceInfo.name,
|
|
275
|
-
"",
|
|
276
|
-
"airSwingLR",
|
|
277
|
-
{
|
|
278
|
-
role: "state",
|
|
279
|
-
states: {
|
|
280
|
-
0: import_panasonic_comfort_cloud_client.AirSwingLR[0],
|
|
281
|
-
1: import_panasonic_comfort_cloud_client.AirSwingLR[1],
|
|
282
|
-
2: import_panasonic_comfort_cloud_client.AirSwingLR[2],
|
|
283
|
-
3: import_panasonic_comfort_cloud_client.AirSwingLR[3],
|
|
284
|
-
4: import_panasonic_comfort_cloud_client.AirSwingLR[4]
|
|
285
|
-
},
|
|
286
|
-
write: true,
|
|
287
|
-
def: device.airSwingLR,
|
|
288
|
-
type: "number"
|
|
289
|
-
},
|
|
290
|
-
void 0
|
|
291
|
-
);
|
|
292
|
-
this.createState(
|
|
293
|
-
deviceInfo.name,
|
|
294
|
-
"",
|
|
295
|
-
"airSwingUD",
|
|
296
|
-
{
|
|
297
|
-
role: "state",
|
|
298
|
-
states: {
|
|
299
|
-
0: import_panasonic_comfort_cloud_client.AirSwingUD[0],
|
|
300
|
-
1: import_panasonic_comfort_cloud_client.AirSwingUD[1],
|
|
301
|
-
2: import_panasonic_comfort_cloud_client.AirSwingUD[2],
|
|
302
|
-
3: import_panasonic_comfort_cloud_client.AirSwingUD[3],
|
|
303
|
-
4: import_panasonic_comfort_cloud_client.AirSwingUD[4]
|
|
304
|
-
},
|
|
305
|
-
write: true,
|
|
306
|
-
def: device.airSwingUD,
|
|
307
|
-
type: "number"
|
|
308
|
-
},
|
|
309
|
-
void 0
|
|
310
|
-
);
|
|
311
|
-
this.createState(
|
|
312
|
-
deviceInfo.name,
|
|
313
|
-
"",
|
|
314
|
-
"fanAutoMode",
|
|
315
|
-
{
|
|
316
|
-
role: "state",
|
|
317
|
-
states: {
|
|
318
|
-
0: import_panasonic_comfort_cloud_client.FanAutoMode[0],
|
|
319
|
-
1: import_panasonic_comfort_cloud_client.FanAutoMode[1],
|
|
320
|
-
2: import_panasonic_comfort_cloud_client.FanAutoMode[2],
|
|
321
|
-
3: import_panasonic_comfort_cloud_client.FanAutoMode[3]
|
|
322
|
-
},
|
|
323
|
-
write: true,
|
|
324
|
-
def: device.fanAutoMode,
|
|
325
|
-
type: "number"
|
|
326
|
-
},
|
|
327
|
-
void 0
|
|
328
|
-
);
|
|
329
|
-
this.createState(
|
|
330
|
-
deviceInfo.name,
|
|
331
|
-
"",
|
|
332
|
-
"ecoMode",
|
|
333
|
-
{
|
|
334
|
-
role: "state",
|
|
335
|
-
states: { 0: import_panasonic_comfort_cloud_client.EcoMode[0], 1: import_panasonic_comfort_cloud_client.EcoMode[1], 2: import_panasonic_comfort_cloud_client.EcoMode[2] },
|
|
336
|
-
write: true,
|
|
337
|
-
def: device.ecoMode,
|
|
338
|
-
type: "number"
|
|
339
|
-
},
|
|
340
|
-
void 0
|
|
341
|
-
);
|
|
342
|
-
this.createState(
|
|
343
|
-
deviceInfo.name,
|
|
344
|
-
"",
|
|
345
|
-
"operationMode",
|
|
346
|
-
{
|
|
347
|
-
role: "state",
|
|
348
|
-
states: {
|
|
349
|
-
0: import_panasonic_comfort_cloud_client.OperationMode[0],
|
|
350
|
-
1: import_panasonic_comfort_cloud_client.OperationMode[1],
|
|
351
|
-
2: import_panasonic_comfort_cloud_client.OperationMode[2],
|
|
352
|
-
3: import_panasonic_comfort_cloud_client.OperationMode[3],
|
|
353
|
-
4: import_panasonic_comfort_cloud_client.OperationMode[4]
|
|
354
|
-
},
|
|
355
|
-
write: true,
|
|
356
|
-
def: device.operationMode,
|
|
357
|
-
type: "number"
|
|
358
|
-
},
|
|
359
|
-
void 0
|
|
360
|
-
);
|
|
361
|
-
this.createState(
|
|
362
|
-
deviceInfo.name,
|
|
363
|
-
"",
|
|
364
|
-
"fanSpeed",
|
|
365
|
-
{
|
|
366
|
-
role: "state",
|
|
367
|
-
states: {
|
|
368
|
-
0: import_panasonic_comfort_cloud_client.FanSpeed[0],
|
|
369
|
-
1: import_panasonic_comfort_cloud_client.FanSpeed[1],
|
|
370
|
-
2: import_panasonic_comfort_cloud_client.FanSpeed[2],
|
|
371
|
-
3: import_panasonic_comfort_cloud_client.FanSpeed[3],
|
|
372
|
-
4: import_panasonic_comfort_cloud_client.FanSpeed[4],
|
|
373
|
-
5: import_panasonic_comfort_cloud_client.FanSpeed[5]
|
|
374
|
-
},
|
|
375
|
-
write: true,
|
|
376
|
-
def: device.fanSpeed,
|
|
377
|
-
type: "number"
|
|
378
|
-
},
|
|
379
|
-
void 0
|
|
380
|
-
);
|
|
381
|
-
this.createState(
|
|
382
|
-
deviceInfo.name,
|
|
383
|
-
"",
|
|
384
|
-
"actualNanoe",
|
|
385
|
-
{
|
|
386
|
-
role: "state",
|
|
387
|
-
states: {
|
|
388
|
-
0: import_panasonic_comfort_cloud_client.NanoeMode[0],
|
|
389
|
-
1: import_panasonic_comfort_cloud_client.NanoeMode[1],
|
|
390
|
-
2: import_panasonic_comfort_cloud_client.NanoeMode[2],
|
|
391
|
-
3: import_panasonic_comfort_cloud_client.NanoeMode[3],
|
|
392
|
-
4: import_panasonic_comfort_cloud_client.NanoeMode[4]
|
|
393
|
-
},
|
|
394
|
-
write: true,
|
|
395
|
-
def: device.actualNanoe,
|
|
396
|
-
type: "number"
|
|
201
|
+
await this.setObjectNotExistsAsync(deviceInfo.name, {
|
|
202
|
+
type: "device",
|
|
203
|
+
common: {
|
|
204
|
+
name: deviceInfo.name
|
|
397
205
|
},
|
|
398
|
-
|
|
399
|
-
);
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
206
|
+
native: {}
|
|
207
|
+
});
|
|
208
|
+
for (const stateDef of import_state_definitions.deviceStates) {
|
|
209
|
+
const common = {
|
|
210
|
+
name: stateDef.id,
|
|
211
|
+
role: stateDef.role,
|
|
212
|
+
write: stateDef.write,
|
|
213
|
+
type: stateDef.type,
|
|
214
|
+
read: stateDef.read !== void 0 ? stateDef.read : true,
|
|
215
|
+
def: stateDef.id === "guid" ? deviceInfo.guid : stateDef.def !== void 0 ? stateDef.def : device[stateDef.id]
|
|
216
|
+
};
|
|
217
|
+
if (stateDef.states) {
|
|
218
|
+
common.states = stateDef.states;
|
|
219
|
+
}
|
|
220
|
+
await this.setObjectNotExistsAsync(`${deviceInfo.name}.${stateDef.id}`, {
|
|
221
|
+
type: "state",
|
|
222
|
+
common,
|
|
223
|
+
native: {}
|
|
224
|
+
});
|
|
225
|
+
}
|
|
407
226
|
this.log.info(`Device ${deviceInfo.name} created.`);
|
|
227
|
+
if ((_a = this.config) == null ? void 0 : _a.historyEnabled) {
|
|
228
|
+
await this.setObjectNotExistsAsync(`${deviceInfo.name}.history`, {
|
|
229
|
+
type: "channel",
|
|
230
|
+
common: { name: "History Data" },
|
|
231
|
+
native: {}
|
|
232
|
+
});
|
|
233
|
+
const historyStates = (0, import_state_definitions.getHistoryStates)();
|
|
234
|
+
for (const [id, def] of Object.entries(historyStates)) {
|
|
235
|
+
await this.setObjectNotExistsAsync(`${deviceInfo.name}.${id}`, {
|
|
236
|
+
type: "state",
|
|
237
|
+
common: def,
|
|
238
|
+
native: {}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
408
242
|
}
|
|
409
243
|
}));
|
|
410
244
|
this.log.debug("Device creation completed.");
|
|
411
245
|
}
|
|
412
246
|
async updateDevice(deviceName, stateName, state) {
|
|
413
|
-
if (
|
|
247
|
+
if (import_state_definitions.readonlyStateNames.includes(stateName)) {
|
|
414
248
|
return;
|
|
415
249
|
}
|
|
416
250
|
if (!state.ack) {
|
|
@@ -445,6 +279,8 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
445
279
|
try {
|
|
446
280
|
if (this.refreshTimeout)
|
|
447
281
|
clearTimeout(this.refreshTimeout);
|
|
282
|
+
if (this.refreshHistoryTimeout)
|
|
283
|
+
clearTimeout(this.refreshHistoryTimeout);
|
|
448
284
|
this.log.info("cleaned everything up...");
|
|
449
285
|
callback();
|
|
450
286
|
} catch (e) {
|
|
@@ -473,6 +309,15 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
473
309
|
await this.handleClientError(error);
|
|
474
310
|
}
|
|
475
311
|
await this.setStateAsync(id, false, true);
|
|
312
|
+
} else if (stateName == "refreshHistory" && state.val) {
|
|
313
|
+
try {
|
|
314
|
+
const groups = await this.comfortCloudClient.getGroups();
|
|
315
|
+
await this.refreshHistory(groups);
|
|
316
|
+
await this.setStateAsync(id, state, true);
|
|
317
|
+
} catch (error) {
|
|
318
|
+
await this.handleClientError(error);
|
|
319
|
+
}
|
|
320
|
+
await this.setStateAsync(id, false, true);
|
|
476
321
|
}
|
|
477
322
|
} else if (!id.includes(".info.")) {
|
|
478
323
|
const elements = id.split(".");
|
|
@@ -516,15 +361,15 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
516
361
|
this.log.info(
|
|
517
362
|
`Token of comfort cloud client expired. Trying to login again. Code=${error.code}. Stack: ${error.stack}`
|
|
518
363
|
);
|
|
519
|
-
this.
|
|
364
|
+
await this.setStateAsync("info.connection", false, true);
|
|
520
365
|
await this.comfortCloudClient.login(
|
|
521
366
|
this.config.username,
|
|
522
367
|
this.config.password
|
|
523
368
|
);
|
|
524
|
-
this.
|
|
369
|
+
await this.setStateAsync("info.connection", true, true);
|
|
525
370
|
this.log.info("Login successful.");
|
|
526
371
|
} else if (error instanceof import_panasonic_comfort_cloud_client.ServiceError) {
|
|
527
|
-
this.
|
|
372
|
+
await this.setStateAsync("info.connection", false, true);
|
|
528
373
|
this.log.error(
|
|
529
374
|
`Service error: ${error.message}. Code=${error.code}. Stack: ${error.stack}`
|
|
530
375
|
);
|
|
@@ -547,6 +392,25 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
547
392
|
await this.handleClientError(error);
|
|
548
393
|
}
|
|
549
394
|
}
|
|
395
|
+
setupHistoryRefreshTimeout() {
|
|
396
|
+
this.log.debug("setupHistoryRefreshTimeout");
|
|
397
|
+
const refreshIntervalInMilliseconds = this.historyRefreshIntervalInMinutes * 60 * 1e3;
|
|
398
|
+
this.refreshHistoryTimeout = setTimeout(this.refreshHistoryTimeoutFunc.bind(this), refreshIntervalInMilliseconds);
|
|
399
|
+
}
|
|
400
|
+
async refreshHistoryTimeoutFunc() {
|
|
401
|
+
var _a;
|
|
402
|
+
this.log.debug(`refreshHistoryTimeoutFunc started.`);
|
|
403
|
+
try {
|
|
404
|
+
if ((_a = this.config) == null ? void 0 : _a.historyEnabled) {
|
|
405
|
+
const groups = await this.comfortCloudClient.getGroups();
|
|
406
|
+
await this.refreshHistory(groups);
|
|
407
|
+
}
|
|
408
|
+
this.setupHistoryRefreshTimeout();
|
|
409
|
+
} catch (error) {
|
|
410
|
+
this.log.warn(`Failed to refresh history: ${error}`);
|
|
411
|
+
this.setupHistoryRefreshTimeout();
|
|
412
|
+
}
|
|
413
|
+
}
|
|
550
414
|
trimAll(text) {
|
|
551
415
|
const newText = text.trim().replace(/(\r\n|\n|\r)/gm, "");
|
|
552
416
|
return newText;
|
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 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 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://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 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,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "panasonic-comfort-cloud",
|
|
4
|
-
"version": "3.1
|
|
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
|
+
},
|
|
6
32
|
"3.1.0": {
|
|
7
33
|
"en": "read app version from App Store.",
|
|
8
34
|
"de": "lesen Sie die App-Version von App Store.",
|
|
@@ -67,32 +93,6 @@
|
|
|
67
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.",
|
|
68
94
|
"uk": "Додана можливість деактивувати автоматичне оновлення.\nДодано стан для ручного оновлення пристрою інформації.\nОновлена версія клієнта для підтримки OAuth.",
|
|
69
95
|
"zh-cn": "添加选项以关闭自动刷新 .\n添加到手动刷新设备信息中的状态 .\n更新了OAuth支持的客户端版本."
|
|
70
|
-
},
|
|
71
|
-
"2.3.0": {
|
|
72
|
-
"en": "Updated packages\nAdded connected state to devices",
|
|
73
|
-
"de": "Aktualisierte Pakete\nVerbindung mit Geräten hinzugefügt",
|
|
74
|
-
"ru": "Обновленные пакеты\nДобавлено подключенное состояние к устройствам",
|
|
75
|
-
"pt": "Pacotes atualizados\nEstado conectado adicionado a dispositivos",
|
|
76
|
-
"nl": "Verouderde pakketten\nVerbonden staat aan apparatuur",
|
|
77
|
-
"fr": "Forfaits mis à jour\nAjout de l'état connecté aux appareils",
|
|
78
|
-
"it": "Pacchetti aggiornati\nAggiunto stato collegato ai dispositivi",
|
|
79
|
-
"es": "Paquetes actualizados\nEstado conectado a dispositivos",
|
|
80
|
-
"pl": "Pakiet upoważniony\nZłączony stan do urządzeń",
|
|
81
|
-
"uk": "Оновлені пакети\nДодано підключений стан до пристроїв",
|
|
82
|
-
"zh-cn": "最新一揽子计划\n增加与装置有关的国家"
|
|
83
|
-
},
|
|
84
|
-
"2.2.4": {
|
|
85
|
-
"en": "Fixed load AppVersion from Github.",
|
|
86
|
-
"de": "Behobene AppVersion von Github.",
|
|
87
|
-
"ru": "Фиксированная нагрузка AppVersion от Github.",
|
|
88
|
-
"pt": "AppVersion de carga fixa do Github.",
|
|
89
|
-
"nl": "Gerepareerde lading van Github.",
|
|
90
|
-
"fr": "Charge fixe AppVersion de Github.",
|
|
91
|
-
"it": "AppVersione di carico fisso da Github.",
|
|
92
|
-
"es": "Carga fija AppVersion de Github.",
|
|
93
|
-
"pl": "Wykorzystywany ładunek z Github.",
|
|
94
|
-
"uk": "Виправлено навантаження AppVersion від Github.",
|
|
95
|
-
"zh-cn": "来自吉特布的固定载荷。."
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
|
@@ -164,7 +164,8 @@
|
|
|
164
164
|
"automaticRefreshEnabled": true,
|
|
165
165
|
"appVersion": "",
|
|
166
166
|
"appVersionFromAppStore": "",
|
|
167
|
-
"useAppVersionFromAppStore": true
|
|
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.1
|
|
3
|
+
"version": "3.2.1",
|
|
4
4
|
"description": "Adapter for Panasonic Comfort Cloud",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "marc",
|
|
@@ -21,17 +21,16 @@
|
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@iobroker/adapter-core": "^3.2.2",
|
|
24
|
-
"
|
|
25
|
-
"lodash": "^4.17.21",
|
|
26
|
-
"panasonic-comfort-cloud-client": "^2.0.3",
|
|
24
|
+
"panasonic-comfort-cloud-client": "^2.1.4",
|
|
27
25
|
"ts-enum-util": "^4.0.2"
|
|
28
26
|
},
|
|
29
27
|
"devDependencies": {
|
|
30
|
-
"@alcalzone/release-script": "^
|
|
31
|
-
"@alcalzone/release-script-plugin-iobroker": "^
|
|
32
|
-
"@alcalzone/release-script-plugin-license": "^
|
|
33
|
-
"@alcalzone/release-script-plugin-manual-review": "^
|
|
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",
|
|
34
32
|
"@iobroker/adapter-dev": "^1.2.0",
|
|
33
|
+
"@iobroker/dev-server": "^0.8.0",
|
|
35
34
|
"@iobroker/testing": "^4.1.3",
|
|
36
35
|
"@tsconfig/node14": "^14.1.0",
|
|
37
36
|
"@types/chai": "^4.3.11",
|
|
@@ -67,6 +66,11 @@
|
|
|
67
66
|
"LICENSE"
|
|
68
67
|
],
|
|
69
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",
|
|
70
74
|
"translate": "translate-adapter",
|
|
71
75
|
"prebuild": "rimraf ./build",
|
|
72
76
|
"build:ts": "tsc -p tsconfig.build.json",
|
|
@@ -76,11 +80,11 @@
|
|
|
76
80
|
"watch": "npm run watch:ts",
|
|
77
81
|
"test": "npm run test:package && npm run test:unit",
|
|
78
82
|
"test:package": "mocha test/package --exit",
|
|
79
|
-
"test:unit": "mocha test/
|
|
83
|
+
"test:unit": "mocha test/lib --exit",
|
|
80
84
|
"test:integration": "mocha test/integration --exit",
|
|
81
85
|
"test:rule": "mocha test/rule --exit",
|
|
82
86
|
"lint": "eslint --ext .ts src",
|
|
83
|
-
"release": "release-script"
|
|
87
|
+
"release": "release-script --branch-pattern \"main\""
|
|
84
88
|
},
|
|
85
89
|
"bugs": {
|
|
86
90
|
"url": "https://github.com/marc2016/ioBroker.panasonic-comfort-cloud/issues"
|