iobroker.teslafi 3.0.0 → 3.0.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 +9 -8
- package/build/lib/projectUtils.js +76 -116
- package/build/lib/projectUtils.js.map +1 -1
- package/build/lib/teslafiAPICaller.js +47 -206
- package/build/lib/teslafiAPICaller.js.map +1 -1
- package/build/main.js +1 -31
- package/build/main.js.map +1 -1
- package/io-package.json +14 -14
- package/package.json +16 -16
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
[](https://nodei.co/npm/iobroker.teslafi/)
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
## ioBroker TeslaFi Adapter – Seamless Tesla Data Integration for Your Smart Home
|
|
30
30
|
|
|
31
31
|
The TeslaFi adapter enables effortless integration of vehicle data from your TeslaFi account into the ioBroker system. Leverage this data to enhance your Tesla experience and optimize home automation workflows.
|
|
32
32
|
|
|
@@ -66,7 +66,7 @@ The TeslaFi adapter is actively maintained, and additional features or data cate
|
|
|
66
66
|
|
|
67
67
|
## Sentry
|
|
68
68
|
|
|
69
|
-
This adapter
|
|
69
|
+
This adapter uses Sentry libraries to automatically report exceptions and code errors to the developers. For more details and for information on how to disable error reporting, see [Sentry-Plugin Documentation](https://github.com/ioBroker/plugin-sentry#plugin-sentry)! Sentry reporting is used starting with js-controller 3.0.
|
|
70
70
|
|
|
71
71
|
## Donate
|
|
72
72
|
|
|
@@ -79,6 +79,12 @@ If you enjoyed this project — or just feeling generous, consider buying me a b
|
|
|
79
79
|
Placeholder for the next version (at the beginning of the line):
|
|
80
80
|
### **WORK IN PROGRESS**
|
|
81
81
|
-->
|
|
82
|
+
### 3.0.1 (2026-06-05)
|
|
83
|
+
|
|
84
|
+
- (hombach) upgraded TypeScript to 6.x
|
|
85
|
+
- (hombach) fixed warnings by adapter checker
|
|
86
|
+
- (hombach) updated dependencies
|
|
87
|
+
|
|
82
88
|
### 3.0.0 (2026-05-05)
|
|
83
89
|
|
|
84
90
|
- (copilot) BREAKING: adapter requires node.js >= 22 now
|
|
@@ -103,12 +109,7 @@ If you enjoyed this project — or just feeling generous, consider buying me a b
|
|
|
103
109
|
- (hombach) update axios
|
|
104
110
|
- (hombach) update dependencies
|
|
105
111
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
- (hombach) upgrade NPM deployment system
|
|
109
|
-
- (hombach) bump dependencies
|
|
110
|
-
|
|
111
|
-
### Old Changes see [CHANGELOG OLD](CHANGELOG_OLD.md)
|
|
112
|
+
[Older changelogs can be found there](CHANGELOG_OLD.md)
|
|
112
113
|
|
|
113
114
|
## License
|
|
114
115
|
|
|
@@ -1,45 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ProjectUtils = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* ProjectUtils
|
|
6
|
-
*/
|
|
7
4
|
class ProjectUtils {
|
|
8
5
|
adapter;
|
|
9
|
-
/**
|
|
10
|
-
* constructor
|
|
11
|
-
*
|
|
12
|
-
* @param adapter - ioBroker adapter instance
|
|
13
|
-
*/
|
|
14
6
|
constructor(adapter) {
|
|
15
7
|
this.adapter = adapter;
|
|
16
8
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Retrieves the value of a given state by its name.
|
|
19
|
-
*
|
|
20
|
-
* @param stateName - A string representing the name of the state to retrieve.
|
|
21
|
-
* @returns A Promise that resolves with the value of the state if it exists, otherwise resolves with null.
|
|
22
|
-
*/
|
|
23
9
|
async getStateValue(stateName) {
|
|
24
10
|
try {
|
|
25
11
|
const stateObject = await this.getState(stateName);
|
|
26
|
-
return stateObject?.val ?? null;
|
|
12
|
+
return stateObject?.val ?? null;
|
|
27
13
|
}
|
|
28
14
|
catch (error) {
|
|
29
15
|
this.adapter.log.error(`[getStateValue](${stateName}): ${error}`);
|
|
30
16
|
return null;
|
|
31
17
|
}
|
|
32
18
|
}
|
|
33
|
-
/**
|
|
34
|
-
* Retrieves the state object by its name.
|
|
35
|
-
*
|
|
36
|
-
* @param stateName - A string representing the name of the state to retrieve.
|
|
37
|
-
* @returns A Promise that resolves with the object of the state if it exists, otherwise resolves with null.
|
|
38
|
-
*/
|
|
39
19
|
async getState(stateName) {
|
|
40
20
|
try {
|
|
41
21
|
if (await this.verifyStateAvailable(stateName)) {
|
|
42
|
-
// Get state value, so like: {val: false, ack: true, ts: 1591117034451, �}
|
|
43
22
|
const stateValueObject = await this.adapter.getStateAsync(stateName);
|
|
44
23
|
if (!this.isLikeEmpty(stateValueObject)) {
|
|
45
24
|
return stateValueObject;
|
|
@@ -52,33 +31,20 @@ class ProjectUtils {
|
|
|
52
31
|
return null;
|
|
53
32
|
}
|
|
54
33
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Verifies the availability of a state by its name.
|
|
57
|
-
*
|
|
58
|
-
* @param stateName - A string representing the name of the state to verify.
|
|
59
|
-
* @returns A Promise that resolves with true if the state exists, otherwise resolves with false.
|
|
60
|
-
*/
|
|
61
34
|
async verifyStateAvailable(stateName) {
|
|
62
|
-
const stateObject = await this.adapter.getObjectAsync(stateName);
|
|
35
|
+
const stateObject = await this.adapter.getObjectAsync(stateName);
|
|
63
36
|
if (!stateObject) {
|
|
64
37
|
this.adapter.log.debug(`[verifyStateAvailable](${stateName}): State does not exist.`);
|
|
65
38
|
return false;
|
|
66
39
|
}
|
|
67
40
|
return true;
|
|
68
41
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Get foreign state value
|
|
71
|
-
*
|
|
72
|
-
* @param stateName - Full path to state, like 0_userdata.0.other.isSummer
|
|
73
|
-
* @returns State value, or null if error
|
|
74
|
-
*/
|
|
75
|
-
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
|
|
76
42
|
async asyncGetForeignStateVal(stateName) {
|
|
77
43
|
try {
|
|
78
44
|
const stateObject = await this.asyncGetForeignState(stateName);
|
|
79
45
|
if (stateObject == null) {
|
|
80
46
|
return null;
|
|
81
|
-
}
|
|
47
|
+
}
|
|
82
48
|
return stateObject.val;
|
|
83
49
|
}
|
|
84
50
|
catch (error) {
|
|
@@ -86,20 +52,13 @@ class ProjectUtils {
|
|
|
86
52
|
return null;
|
|
87
53
|
}
|
|
88
54
|
}
|
|
89
|
-
/**
|
|
90
|
-
* Get foreign state
|
|
91
|
-
*
|
|
92
|
-
* @param stateName - Full path to state, like 0_userdata.0.other.isSummer
|
|
93
|
-
* @returns State object: {val: false, ack: true, ts: 1591117034451, …}, or null if error
|
|
94
|
-
*/
|
|
95
55
|
async asyncGetForeignState(stateName) {
|
|
96
56
|
try {
|
|
97
|
-
const stateObject = await this.adapter.getForeignObjectAsync(stateName);
|
|
57
|
+
const stateObject = await this.adapter.getForeignObjectAsync(stateName);
|
|
98
58
|
if (!stateObject) {
|
|
99
59
|
throw new Error(`State '${stateName}' does not exist.`);
|
|
100
60
|
}
|
|
101
61
|
else {
|
|
102
|
-
// Get state value, so like: {val: false, ack: true, ts: 1591117034451, …}
|
|
103
62
|
const stateValueObject = await this.adapter.getForeignStateAsync(stateName);
|
|
104
63
|
if (!this.isLikeEmpty(stateValueObject)) {
|
|
105
64
|
return stateValueObject;
|
|
@@ -112,25 +71,9 @@ class ProjectUtils {
|
|
|
112
71
|
return null;
|
|
113
72
|
}
|
|
114
73
|
}
|
|
115
|
-
/**
|
|
116
|
-
* Checks if the given input variable is effectively empty.
|
|
117
|
-
*
|
|
118
|
-
* This method examines the provided `inputVar` to determine if it contains any meaningful data.
|
|
119
|
-
* It performs a series of transformations to strip out whitespace and common punctuation, then checks if the result is an empty string.
|
|
120
|
-
*
|
|
121
|
-
* @param inputVar - The state variable to check, which can be of type `ioBroker.State`, `null`, or `undefined`.
|
|
122
|
-
* @returns A boolean indicating whether the input variable is considered empty (`true` if empty, `false` otherwise).
|
|
123
|
-
*/
|
|
124
74
|
isLikeEmpty(inputVar) {
|
|
125
75
|
if (typeof inputVar !== "undefined" && inputVar !== null) {
|
|
126
|
-
|
|
127
|
-
sTemp = sTemp.replace(/\s+/g, ""); // remove all white spaces
|
|
128
|
-
sTemp = sTemp.replace(/"+/g, ""); // remove all >"<
|
|
129
|
-
sTemp = sTemp.replace(/'+/g, ""); // remove all >'<
|
|
130
|
-
sTemp = sTemp.replace(/\[+/g, ""); // remove all >[<
|
|
131
|
-
sTemp = sTemp.replace(/\]+/g, ""); // remove all >]<
|
|
132
|
-
sTemp = sTemp.replace(/\{+/g, ""); // remove all >{<
|
|
133
|
-
sTemp = sTemp.replace(/\}+/g, ""); // remove all >}<
|
|
76
|
+
const sTemp = JSON.stringify(inputVar).replace(/[\s"'[\]{}]/g, "");
|
|
134
77
|
if (sTemp !== "") {
|
|
135
78
|
return false;
|
|
136
79
|
}
|
|
@@ -138,18 +81,6 @@ class ProjectUtils {
|
|
|
138
81
|
}
|
|
139
82
|
return true;
|
|
140
83
|
}
|
|
141
|
-
/**
|
|
142
|
-
* Checks if a string state exists, creates it if necessary, and updates its value.
|
|
143
|
-
*
|
|
144
|
-
* @param stateName - A string representing the name of the state.
|
|
145
|
-
* @param value - The string value to set for the state.
|
|
146
|
-
* @param description - Optional description for the state (default is "-").
|
|
147
|
-
* @param role - Optional role type for the state (default is "text").
|
|
148
|
-
* @param writeable - Optional boolean indicating if the state should be writeable (default is false).
|
|
149
|
-
* @param dontUpdate - Optional boolean indicating if the state should not be updated if it already exists (default is false).
|
|
150
|
-
* @param forceMode - Optional boolean indicating if the state should be reinitiated if it already exists (default is false).
|
|
151
|
-
* @returns A Promise that resolves when the state is checked, created (if necessary), and updated.
|
|
152
|
-
*/
|
|
153
84
|
async checkAndSetValue(stateName, value, description = "-", role = "text", writeable = false, dontUpdate = false, forceMode = false) {
|
|
154
85
|
if (value?.trim()?.length) {
|
|
155
86
|
const commonObj = {
|
|
@@ -168,22 +99,6 @@ class ProjectUtils {
|
|
|
168
99
|
}
|
|
169
100
|
}
|
|
170
101
|
}
|
|
171
|
-
/**
|
|
172
|
-
* Checks if a number state exists, creates it if necessary, and updates its value.
|
|
173
|
-
*
|
|
174
|
-
* @param stateName - A string representing the name of the state.
|
|
175
|
-
* @param value - The number value to set for the state.
|
|
176
|
-
* @param description - Optional description for the state (default is "-").
|
|
177
|
-
* @param unit - Optional unit string to set for the state (default is undefined).
|
|
178
|
-
* @param role - Optional role type for the state (default is "value").
|
|
179
|
-
* @param writeable - Optional boolean indicating if the state should be writeable (default is false).
|
|
180
|
-
* @param dontUpdate - Optional boolean indicating if the state should not be updated if it already exists (default is false).
|
|
181
|
-
* @param forceMode - Optional boolean indicating if the state should be reinitiated if it already exists (default is false).
|
|
182
|
-
* @param min - Optional number setting allowed value minimum
|
|
183
|
-
* @param max - Optional number setting allowed value maximum
|
|
184
|
-
* @param step - Optional number setting value step
|
|
185
|
-
* @returns A Promise that resolves when the state is checked, created (if necessary), and updated.
|
|
186
|
-
*/
|
|
187
102
|
async checkAndSetValueNumber(stateName, value, description = "-", unit, role = "value", writeable = false, dontUpdate = false, forceMode = false, min, max, step) {
|
|
188
103
|
if (value !== undefined) {
|
|
189
104
|
const commonObj = {
|
|
@@ -193,13 +108,14 @@ class ProjectUtils {
|
|
|
193
108
|
desc: description,
|
|
194
109
|
read: true,
|
|
195
110
|
write: writeable,
|
|
196
|
-
// Add unit only if it's provided and not null or undefined
|
|
197
111
|
...((unit ?? undefined) ? { unit } : {}),
|
|
198
|
-
// Add minimum, maximum and step for value only if it's provided and not null or undefined
|
|
199
112
|
...((min ?? undefined) ? { min } : {}),
|
|
200
113
|
...((max ?? undefined) ? { max } : {}),
|
|
201
114
|
...((step ?? undefined) ? { step } : {}),
|
|
202
115
|
};
|
|
116
|
+
if (unit != null) {
|
|
117
|
+
commonObj.unit = unit;
|
|
118
|
+
}
|
|
203
119
|
await (forceMode
|
|
204
120
|
? this.adapter.setObject(stateName, { type: "state", common: commonObj, native: {} })
|
|
205
121
|
: this.adapter.setObjectNotExistsAsync(stateName, { type: "state", common: commonObj, native: {} }));
|
|
@@ -208,18 +124,6 @@ class ProjectUtils {
|
|
|
208
124
|
}
|
|
209
125
|
}
|
|
210
126
|
}
|
|
211
|
-
/**
|
|
212
|
-
* Checks if a boolean state exists, creates it if necessary, and updates its value.
|
|
213
|
-
*
|
|
214
|
-
* @param stateName - A string representing the name of the state.
|
|
215
|
-
* @param value - The boolean value to set for the state.
|
|
216
|
-
* @param description - Optional description for the state (default is "-").
|
|
217
|
-
* @param role - Optional role type for the state (default is "indicator").
|
|
218
|
-
* @param writeable - Optional boolean indicating if the state should be writeable (default is false).
|
|
219
|
-
* @param dontUpdate - Optional boolean indicating if the state should not be updated if it already exists (default is false).
|
|
220
|
-
* @param forceMode - Optional boolean indicating if the state should be overwritten if it already exists (default is false).
|
|
221
|
-
* @returns A Promise that resolves when the state is checked, created (if necessary), and updated.
|
|
222
|
-
*/
|
|
223
127
|
async checkAndSetValueBoolean(stateName, value, description = "-", role = "indicator", writeable = false, dontUpdate = false, forceMode = false) {
|
|
224
128
|
if (value !== undefined && value !== null) {
|
|
225
129
|
const commonObj = {
|
|
@@ -238,18 +142,75 @@ class ProjectUtils {
|
|
|
238
142
|
}
|
|
239
143
|
}
|
|
240
144
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
145
|
+
async checkAndSetFolder(folderObjectName, name, icon = "", forceMode = false) {
|
|
146
|
+
const commonObj = {
|
|
147
|
+
type: "meta.folder",
|
|
148
|
+
name: name ?? folderObjectName.split(".").pop() ?? folderObjectName,
|
|
149
|
+
desc: "",
|
|
150
|
+
};
|
|
151
|
+
if (icon) {
|
|
152
|
+
commonObj.icon = icon;
|
|
153
|
+
}
|
|
154
|
+
await (forceMode
|
|
155
|
+
? this.adapter.setObject(folderObjectName, {
|
|
156
|
+
type: "folder",
|
|
157
|
+
common: commonObj,
|
|
158
|
+
native: {},
|
|
159
|
+
})
|
|
160
|
+
: this.adapter.setObjectNotExistsAsync(folderObjectName, {
|
|
161
|
+
type: "folder",
|
|
162
|
+
common: commonObj,
|
|
163
|
+
native: {},
|
|
164
|
+
}));
|
|
165
|
+
}
|
|
166
|
+
async checkAndSetDevice(deviceObjectName, name, onlineId = "", icon = "", forceMode = false) {
|
|
167
|
+
const commonObj = {
|
|
168
|
+
name: name ?? deviceObjectName.split(".").pop() ?? deviceObjectName,
|
|
169
|
+
desc: "",
|
|
170
|
+
};
|
|
171
|
+
if (onlineId) {
|
|
172
|
+
commonObj.statusStates = {
|
|
173
|
+
onlineId,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
if (icon) {
|
|
177
|
+
commonObj.icon = icon;
|
|
178
|
+
}
|
|
179
|
+
await (forceMode
|
|
180
|
+
? this.adapter.setObject(deviceObjectName, {
|
|
181
|
+
type: "device",
|
|
182
|
+
common: commonObj,
|
|
183
|
+
native: {},
|
|
184
|
+
})
|
|
185
|
+
: this.adapter.setObjectNotExistsAsync(deviceObjectName, {
|
|
186
|
+
type: "device",
|
|
187
|
+
common: commonObj,
|
|
188
|
+
native: {},
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
async checkAndSetChannel(channelObjectName, name, icon = "", forceMode = false) {
|
|
192
|
+
const commonObj = {
|
|
193
|
+
name: name ?? channelObjectName.split(".").pop() ?? channelObjectName,
|
|
194
|
+
desc: "",
|
|
195
|
+
};
|
|
196
|
+
if (icon) {
|
|
197
|
+
commonObj.icon = icon;
|
|
198
|
+
}
|
|
199
|
+
await (forceMode
|
|
200
|
+
? this.adapter.setObject(channelObjectName, {
|
|
201
|
+
type: "channel",
|
|
202
|
+
common: commonObj,
|
|
203
|
+
native: {},
|
|
204
|
+
})
|
|
205
|
+
: this.adapter.setObjectNotExistsAsync(channelObjectName, {
|
|
206
|
+
type: "channel",
|
|
207
|
+
common: commonObj,
|
|
208
|
+
native: {},
|
|
209
|
+
}));
|
|
210
|
+
}
|
|
248
211
|
generateErrorMessage(error, context) {
|
|
249
212
|
let errorMessages = "";
|
|
250
|
-
// Check if error object has an 'errors' property that is an array
|
|
251
213
|
if (error.errors && Array.isArray(error.errors)) {
|
|
252
|
-
// Iterate over the array of errors and concatenate their messages
|
|
253
214
|
for (const err of error.errors) {
|
|
254
215
|
if (errorMessages) {
|
|
255
216
|
errorMessages += ", ";
|
|
@@ -258,12 +219,11 @@ class ProjectUtils {
|
|
|
258
219
|
}
|
|
259
220
|
}
|
|
260
221
|
else if (error.message) {
|
|
261
|
-
errorMessages = error.message;
|
|
222
|
+
errorMessages = error.message;
|
|
262
223
|
}
|
|
263
224
|
else {
|
|
264
|
-
errorMessages = "Unknown error";
|
|
225
|
+
errorMessages = "Unknown error";
|
|
265
226
|
}
|
|
266
|
-
// Construct the final error message string with status, context, and error messages
|
|
267
227
|
return `Error (${error.statusMessage || error.statusText || "Unknown Status"}) occurred during: -${context}- : ${errorMessages}`;
|
|
268
228
|
}
|
|
269
229
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectUtils.js","sourceRoot":"","sources":["../../src/lib/projectUtils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"projectUtils.js","sourceRoot":"","sources":["../../src/lib/projectUtils.ts"],"names":[],"mappings":"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"}
|