iobroker.hydrawise 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2024 SentiQ <fischer.yves@web.de>
3
+ Copyright (c) 2025 SentiQ <yves.nuesser@proton.me>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -25,10 +25,10 @@ You can see all controller information, schedules and sensors. It is also possib
25
25
 
26
26
  ## Documentation
27
27
 
28
- - log into https://app.hydrawise.com/config/account-details
29
- - generate API Key by clicking "Generate API Key" under "Account Settings"
30
- - paste key into adapter settings
31
- - API documentation: https://support.hydrawise.com/hc/en-us/articles/360008965753-Hydrawise-API-Information
28
+ - log into https://app.hydrawise.com/config/account-details
29
+ - generate API Key by clicking "Generate API Key" under "Account Settings"
30
+ - paste key into adapter settings
31
+ - API documentation: https://support.hydrawise.com/hc/en-us/articles/360008965753-Hydrawise-API-Information
32
32
 
33
33
  > **Note**
34
34
  > After updating from 0.0.15 you have to re-enter your API key
@@ -39,160 +39,168 @@ You can see all controller information, schedules and sensors. It is also possib
39
39
  Placeholder for the next version (at the beginning of the line):
40
40
  ### **WORK IN PROGRESS**
41
41
  -->
42
+ ### 1.0.3 (2025-12-05)
43
+
44
+ - (SentiQ) updated dependencies
45
+
46
+ ### 1.0.2 (2024-09-24)
47
+
48
+ - (SentiQ) fixed issues detected by repository checker
49
+
42
50
  ### 1.0.1 (2024-09-24)
43
51
 
44
52
  - (SentiQ) added compatibility check and testing for node.js 22
45
53
 
46
54
  ### 1.0.0 (2024-04-30)
47
55
 
48
- - (SentiQ) fixed adapter crash after dns not reachable
56
+ - (SentiQ) fixed adapter crash after dns not reachable
49
57
 
50
58
  ### 0.3.3 (2024-04-22)
51
59
 
52
- - (SentiQ) updated dependencies
60
+ - (SentiQ) updated dependencies
53
61
 
54
62
  ### 0.3.2 (2024-04-19)
55
63
 
56
- - (SentiQ) added default value to parameter `apiInterval`
57
- - (SentiQ) added translations
64
+ - (SentiQ) added default value to parameter `apiInterval`
65
+ - (SentiQ) added translations
58
66
 
59
67
  ### 0.3.1 (2024-04-18)
60
68
 
61
- - (SentiQ) removed parameter `apiKey` in method call
69
+ - (SentiQ) removed parameter `apiKey` in method call
62
70
 
63
71
  ### 0.3.0 (2024-04-18)
64
72
 
65
- - (SentiQ) added api interval to settings
66
- - (SentiQ) changed interval of schedule endpoint from 5 minutes to 1 minute
73
+ - (SentiQ) added api interval to settings
74
+ - (SentiQ) changed interval of schedule endpoint from 5 minutes to 1 minute
67
75
 
68
76
  ### 0.2.8 (2024-04-08)
69
77
 
70
- - (SentiQ) fixed tier and license
78
+ - (SentiQ) fixed tier and license
71
79
 
72
80
  ### 0.2.7 (2024-04-08)
73
81
 
74
- - (SentiQ) fixed type of runDefault object
82
+ - (SentiQ) fixed type of runDefault object
75
83
 
76
84
  ### 0.2.6 (2024-04-08)
77
85
 
78
- - (SentiQ) fixed type of `runDefault`
86
+ - (SentiQ) fixed type of `runDefault`
79
87
 
80
88
  ### 0.2.5 (2024-04-07)
81
89
 
82
- - (SentiQ) NodeJS >= 18.x and js-controller >= 5 is required
90
+ - (SentiQ) NodeJS >= 18.x and js-controller >= 5 is required
83
91
 
84
92
  ### 0.2.4 (2024-02-01)
85
93
 
86
- - (SentiQ) updated dependencies
94
+ - (SentiQ) updated dependencies
87
95
 
88
96
  ### 0.2.3 (2023-10-28)
89
97
 
90
- - (SentiQ) NodeJS 16.x is required
91
- - (SentiQ) updated dependencies
98
+ - (SentiQ) NodeJS 16.x is required
99
+ - (SentiQ) updated dependencies
92
100
 
93
101
  ### 0.2.2 (2023-09-22)
94
102
 
95
- - (SentiQ) fixed versions
103
+ - (SentiQ) fixed versions
96
104
 
97
105
  ### 0.2.0 (2023-09-22)
98
106
 
99
- - (SentiQ) added button to run zone for default runtime
107
+ - (SentiQ) added button to run zone for default runtime
100
108
 
101
109
  ### 0.1.2 (2023-08-22)
102
110
 
103
- - (SentiQ) added link to api docu
111
+ - (SentiQ) added link to api docu
104
112
 
105
113
  ### 0.1.1 (2023-08-22)
106
114
 
107
- - (SentiQ) fixed random crash, when api domain can't be resolved by dns
108
- - (SentiQ) added time string of last api call
115
+ - (SentiQ) fixed random crash, when api domain can't be resolved by dns
116
+ - (SentiQ) added time string of last api call
109
117
 
110
118
  ### 0.0.19 (2023-08-05)
111
119
 
112
- - (SentiQ) fixed button roles
120
+ - (SentiQ) fixed button roles
113
121
 
114
122
  ### 0.0.18 (2023-08-05)
115
123
 
116
- - (SentiQ) fixed timeout
124
+ - (SentiQ) fixed timeout
117
125
 
118
126
  ### 0.0.17 (2023-08-03)
119
127
 
120
- - (SentiQ) fixed adapter crash
128
+ - (SentiQ) fixed adapter crash
121
129
 
122
130
  ### 0.0.16 (2023-08-02)
123
131
 
124
- - (SentiQ) added more information to README
125
- - (SentiQ) encrypted apiKey
126
- - (SentiQ) removed logging of apiKey
127
- - (SentiQ) added filtering of invalid characters in ids
128
- - (SentiQ) added check of ack flag
129
- - (SentiQ) fixed roles
130
- - (SentiQ) fixed error message
131
- - (SentiQ) removed usage of clearTimeout
132
+ - (SentiQ) added more information to README
133
+ - (SentiQ) encrypted apiKey
134
+ - (SentiQ) removed logging of apiKey
135
+ - (SentiQ) added filtering of invalid characters in ids
136
+ - (SentiQ) added check of ack flag
137
+ - (SentiQ) fixed roles
138
+ - (SentiQ) fixed error message
139
+ - (SentiQ) removed usage of clearTimeout
132
140
 
133
141
  ### 0.0.15 (2023-06-29)
134
142
 
135
- - (SentiQ) updated dependencies
143
+ - (SentiQ) updated dependencies
136
144
 
137
145
  ### 0.0.14 (2023-06-29)
138
146
 
139
- - (SentiQ) fixing version
147
+ - (SentiQ) fixing version
140
148
 
141
149
  ### 0.0.12 (2023-06-29)
142
150
 
143
- - (SentiQ) changed value of `last_contact` to date string format
151
+ - (SentiQ) changed value of `last_contact` to date string format
144
152
 
145
153
  ### 0.0.11 (2023-06-28)
146
154
 
147
- - (SentiQ) raised timeouts
148
- - (SentiQ) fixed types
155
+ - (SentiQ) raised timeouts
156
+ - (SentiQ) fixed types
149
157
 
150
158
  ### 0.0.10 (2023-06-27)
151
159
 
152
- - (SentiQ) fixed adapter crash
153
- - (SentiQ) changed value of `timestr` to date string format
160
+ - (SentiQ) fixed adapter crash
161
+ - (SentiQ) changed value of `timestr` to date string format
154
162
 
155
163
  ### 0.0.9 (2023-05-25)
156
164
 
157
- - (SentiQ) added more translations
165
+ - (SentiQ) added more translations
158
166
 
159
167
  ### 0.0.8 (2023-05-25)
160
168
 
161
- - (SentiQ) improved log messages
169
+ - (SentiQ) improved log messages
162
170
 
163
171
  ### 0.0.7 (2023-05-25)
164
172
 
165
- - (SentiQ) fixed author
173
+ - (SentiQ) fixed author
166
174
 
167
175
  ### 0.0.6 (2023-05-24)
168
176
 
169
- - (SentiQ) lowered min node version to 14.5.0
177
+ - (SentiQ) lowered min node version to 14.5.0
170
178
 
171
179
  ### 0.0.5 (2023-05-24)
172
180
 
173
- - (SentiQ) updated packages
181
+ - (SentiQ) updated packages
174
182
 
175
183
  ### 0.0.4 (2023-05-24)
176
184
 
177
- - (SentiQ) testing
185
+ - (SentiQ) testing
178
186
 
179
187
  ### 0.0.3 (2023-05-24)
180
188
 
181
- - (SentiQ) added zone controls and Ukrainian language
189
+ - (SentiQ) added zone controls and Ukrainian language
182
190
 
183
191
  ### 0.0.2 (2023-05-23)
184
192
 
185
- - (SentiQ) refactoring code
193
+ - (SentiQ) refactoring code
186
194
 
187
195
  ### 0.0.1 (2023-01-26)
188
196
 
189
- - (aDabbelju) Initial commit by adapter creator
197
+ - (aDabbelju) Initial commit by adapter creator
190
198
 
191
199
  ## License
192
200
 
193
201
  MIT License
194
202
 
195
- Copyright (c) 2024 SentiQ <yves.nuesser@proton.me>
203
+ Copyright (c) 2025 SentiQ <yves.nuesser@proton.me>
196
204
 
197
205
  Permission is hereby granted, free of charge, to any person obtaining a copy
198
206
  of this software and associated documentation files (the "Software"), to deal
@@ -7,14 +7,13 @@
7
7
  "label": "api key",
8
8
  "newLine": true,
9
9
  "help": "how to get token",
10
- "helpLink": "https://github.com/SentiQ/ioBroker.hydrawise/blob/main/README.md#documentation"
10
+ "helpLink": "https://github.com/SentiQ/ioBroker.hydrawise/blob/main/README.md#documentation",
11
+ "xs": 12,
12
+ "sm": 12,
13
+ "md": 6,
14
+ "lg": 4,
15
+ "xl": 4
11
16
  },
12
- "apiInterval": {
13
- "type": "number",
14
- "label": "api interval",
15
- "newLine": true,
16
- "default": 60,
17
- "min": 15
18
- }
17
+ "apiInterval": { "type": "number", "label": "api interval", "newLine": true, "default": 60, "min": 15, "xs": 12, "sm": 12, "md": 6, "lg": 4, "xl": 4 }
19
18
  }
20
19
  }
package/build/main.js CHANGED
@@ -42,7 +42,7 @@ class Hydrawise extends utils.Adapter {
42
42
  if (!this.config.apiKey) {
43
43
  this.log.error("No API-Key defined!");
44
44
  } else {
45
- this.setStateChangedAsync("info.connection", false, true);
45
+ void this.setStateChangedAsync("info.connection", false, true);
46
46
  try {
47
47
  await this.GetStatusSchedule();
48
48
  nextpollSchedule = this.setInterval(async () => {
@@ -66,7 +66,7 @@ class Hydrawise extends utils.Adapter {
66
66
  this.buildRequest("statusschedule.php", { api_key: this.config.apiKey }).then(async (response) => {
67
67
  if ((response == null ? void 0 : response.status) === 200) {
68
68
  const content = response.data;
69
- this.setStateChangedAsync("info.connection", true, true);
69
+ void this.setStateChangedAsync("info.connection", true, true);
70
70
  await this.setObjectNotExistsAsync("schedule.stopall", {
71
71
  type: "state",
72
72
  common: {
@@ -151,7 +151,7 @@ class Hydrawise extends utils.Adapter {
151
151
  },
152
152
  native: {}
153
153
  });
154
- this.setStateChangedAsync(`schedule.${key}`, content[key], true);
154
+ void this.setStateChangedAsync(`schedule.${key}`, content[key], true);
155
155
  if (key === "time") {
156
156
  await this.setObjectNotExistsAsync("schedule.timestr", {
157
157
  type: "state",
@@ -165,7 +165,7 @@ class Hydrawise extends utils.Adapter {
165
165
  native: {}
166
166
  });
167
167
  const t = new Date(content[key] * 1e3);
168
- this.setStateChangedAsync("schedule.timestr", t.toString(), true);
168
+ void this.setStateChangedAsync("schedule.timestr", t.toString(), true);
169
169
  }
170
170
  }
171
171
  }
@@ -197,7 +197,7 @@ class Hydrawise extends utils.Adapter {
197
197
  t.setSeconds(t.getSeconds() + relay.time);
198
198
  relay[key] = t.toString();
199
199
  }
200
- this.setStateChangedAsync(`schedule.${relay.relay}.${key}`, relay[key], true);
200
+ void this.setStateChangedAsync(`schedule.${relay.relay}.${key}`, relay[key], true);
201
201
  }
202
202
  await this.setObjectNotExistsAsync(`schedule.${relay.relay}.stopZone`, {
203
203
  type: "state",
@@ -314,7 +314,11 @@ class Hydrawise extends utils.Adapter {
314
314
  },
315
315
  native: {}
316
316
  });
317
- this.setStateChangedAsync(`schedule.sensors.${sensor.input}.${key}`, sensor[key], true);
317
+ void this.setStateChangedAsync(
318
+ `schedule.sensors.${sensor.input}.${key}`,
319
+ sensor[key],
320
+ true
321
+ );
318
322
  }
319
323
  }
320
324
  }
@@ -329,8 +333,8 @@ class Hydrawise extends utils.Adapter {
329
333
  }, this.config.apiInterval * 1e3);
330
334
  } else {
331
335
  this.log.debug(`(stats) received error - API is now offline: ${JSON.stringify(error)}`);
332
- this.setStateChangedAsync("info.connection", false, true);
333
- reject(error);
336
+ void this.setStateChangedAsync("info.connection", false, true);
337
+ reject(new Error(error));
334
338
  }
335
339
  });
336
340
  });
@@ -340,7 +344,7 @@ class Hydrawise extends utils.Adapter {
340
344
  this.buildRequest("customerdetails.php", { api_key: this.config.apiKey }).then(async (response) => {
341
345
  if ((response == null ? void 0 : response.status) === 200) {
342
346
  const content = response.data;
343
- this.setStateChangedAsync("info.connection", true, true);
347
+ void this.setStateChangedAsync("info.connection", true, true);
344
348
  for (let key in content) {
345
349
  if (key !== "controllers" && !Number.isNaN(key)) {
346
350
  key = this.name2id(key);
@@ -355,7 +359,7 @@ class Hydrawise extends utils.Adapter {
355
359
  },
356
360
  native: {}
357
361
  });
358
- this.setStateChangedAsync(`customer.${key}`, content[key], true);
362
+ void this.setStateChangedAsync(`customer.${key}`, content[key], true);
359
363
  }
360
364
  }
361
365
  for (const controller of content.controllers) {
@@ -383,7 +387,11 @@ class Hydrawise extends utils.Adapter {
383
387
  const t = new Date(controller[key] * 1e3);
384
388
  controller[key] = t.toString();
385
389
  }
386
- this.setStateChangedAsync(`customer.controllers.${controller.name}.${key}`, controller[key], true);
390
+ void this.setStateChangedAsync(
391
+ `customer.controllers.${controller.name}.${key}`,
392
+ controller[key],
393
+ true
394
+ );
387
395
  }
388
396
  }
389
397
  }
@@ -400,8 +408,8 @@ class Hydrawise extends utils.Adapter {
400
408
  );
401
409
  } else {
402
410
  this.log.debug(`(stats) received error - API is now offline: ${JSON.stringify(error)}`);
403
- this.setStateChangedAsync("info.connection", false, true);
404
- reject(error);
411
+ void this.setStateChangedAsync("info.connection", false, true);
412
+ reject(new Error(error));
405
413
  }
406
414
  });
407
415
  });
@@ -424,7 +432,9 @@ class Hydrawise extends utils.Adapter {
424
432
  resolve(response);
425
433
  }).catch((error) => {
426
434
  if (error.response) {
427
- this.log.warn(`received ${error.response.status} response from ${url} with content: ${JSON.stringify(error.response.data)}`);
435
+ this.log.warn(
436
+ `received ${error.response.status} response from ${url} with content: ${JSON.stringify(error.response.data)}`
437
+ );
428
438
  } else if (error.request) {
429
439
  if (error.code === lastErrorCode) {
430
440
  this.log.debug(error.message);
@@ -435,39 +445,44 @@ class Hydrawise extends utils.Adapter {
435
445
  } else {
436
446
  this.log.error(error.message);
437
447
  }
438
- reject(error);
448
+ reject(new Error(error));
439
449
  });
440
450
  } catch (error) {
441
- reject(error);
451
+ reject(new Error(error));
442
452
  }
443
453
  } else {
444
- reject("API key is not configured");
454
+ reject(new Error("API key is not configured"));
445
455
  }
446
456
  });
447
457
  }
448
458
  /**
449
459
  * Is called when adapter shuts down - callback has to be called under any circumstances!
460
+ *
461
+ * @param callback callback function
450
462
  */
451
463
  onUnload(callback) {
452
464
  try {
453
465
  this.clearInterval(nextpollSchedule);
454
466
  this.clearInterval(nextpollCustomer);
455
467
  callback();
456
- } catch (e) {
468
+ } catch {
457
469
  callback();
458
470
  }
459
471
  }
460
472
  /**
461
473
  * Is called if a subscribed state changes
474
+ *
475
+ * @param id id of the state
476
+ * @param state state object
462
477
  */
463
478
  onStateChange(id, state) {
464
479
  if (state && !state.ack) {
465
480
  if (id.indexOf("stopall") !== -1) {
466
- this.buildRequest("setzone.php", { api_key: this.config.apiKey, action: "stopall" });
481
+ void this.buildRequest("setzone.php", { api_key: this.config.apiKey, action: "stopall" });
467
482
  } else if (id.indexOf("stop") !== -1) {
468
483
  const relay = id.match(/.*schedule\.(.*)\.stopZone/);
469
484
  if (relay && (relay == null ? void 0 : relay.length) > 1) {
470
- this.buildRequest("setzone.php", {
485
+ void this.buildRequest("setzone.php", {
471
486
  api_key: this.config.apiKey,
472
487
  action: "stop",
473
488
  relay_id: RELAYS[relay[1]]
@@ -475,7 +490,7 @@ class Hydrawise extends utils.Adapter {
475
490
  }
476
491
  }
477
492
  if (id.indexOf("runall") !== -1 && (state.val || state.val === 0)) {
478
- this.buildRequest("setzone.php", {
493
+ void this.buildRequest("setzone.php", {
479
494
  api_key: this.config.apiKey,
480
495
  action: "runall",
481
496
  period_id: 999,
@@ -484,7 +499,7 @@ class Hydrawise extends utils.Adapter {
484
499
  } else if (id.indexOf("runZone") !== -1 && (state.val || state.val === 0)) {
485
500
  const relay = id.match(/.*schedule\.(.*)\.runZone/);
486
501
  if (relay && (relay == null ? void 0 : relay.length) > 1) {
487
- this.buildRequest("setzone.php", {
502
+ void this.buildRequest("setzone.php", {
488
503
  api_key: this.config.apiKey,
489
504
  action: "run",
490
505
  period_id: 999,
@@ -494,11 +509,11 @@ class Hydrawise extends utils.Adapter {
494
509
  }
495
510
  }
496
511
  if (id.indexOf("runDefault") !== -1 && state.val !== null) {
497
- this.initRunDefault(id, state.val);
512
+ void this.initRunDefault(id, state.val);
498
513
  }
499
514
  if (id.indexOf("suspendall") !== -1 && (state.val || state.val === 0)) {
500
515
  const num = state.val;
501
- this.buildRequest("setzone.php", {
516
+ void this.buildRequest("setzone.php", {
502
517
  api_key: this.config.apiKey,
503
518
  action: "suspendall",
504
519
  period_id: 999,
@@ -508,7 +523,7 @@ class Hydrawise extends utils.Adapter {
508
523
  const num = state.val;
509
524
  const relay = id.match(/.*schedule\.(.*)\.suspendZone/);
510
525
  if (relay && (relay == null ? void 0 : relay.length) > 1) {
511
- this.buildRequest("setzone.php", {
526
+ void this.buildRequest("setzone.php", {
512
527
  api_key: this.config.apiKey,
513
528
  action: "suspend",
514
529
  period_id: 999,
@@ -524,18 +539,18 @@ class Hydrawise extends utils.Adapter {
524
539
  this.clearTimeout(resetSwitch);
525
540
  if (relay) {
526
541
  if (run) {
527
- const defaultRunTime = await this.getStateAsync(relay[1] + "run");
542
+ const defaultRunTime = await this.getStateAsync(`${relay[1]}run`);
528
543
  if (defaultRunTime && defaultRunTime.val) {
529
- this.setStateAsync(relay[1] + "runZone", defaultRunTime.val, false);
544
+ void this.setState(`${relay[1]}runZone`, defaultRunTime.val, false);
530
545
  resetSwitch = this.setTimeout(
531
546
  () => {
532
- this.setStateAsync(id, false, false);
547
+ void this.setState(id, false, false);
533
548
  },
534
549
  defaultRunTime.val * 1e3
535
550
  );
536
551
  }
537
552
  } else {
538
- this.setStateAsync(relay[1] + "stopZone", true, false);
553
+ void this.setState(`${relay[1]}stopZone`, true, false);
539
554
  }
540
555
  }
541
556
  }
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 v2.3.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';\nimport axios from 'axios';\n\nconst hydrawise_url = 'https://api.hydrawise.com';\nlet nextpollSchedule: any = null;\nlet nextpollCustomer: any = null;\nlet resetSwitch: any = null;\nconst RELAYS: any = Object;\n\nclass Hydrawise extends utils.Adapter {\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'hydrawise',\n });\n\n this.on('ready', this.onReady.bind(this));\n this.on('stateChange', this.onStateChange.bind(this));\n this.on('unload', this.onUnload.bind(this));\n }\n\n private async onReady(): Promise<void> {\n if (!this.config.apiKey) {\n this.log.error('No API-Key defined!');\n } else {\n this.setStateChangedAsync('info.connection', false, true);\n\n try {\n await this.GetStatusSchedule();\n\n nextpollSchedule = this.setInterval(async () => {\n await this.GetStatusSchedule();\n }, this.config.apiInterval * 1000);\n\n await this.GetCustomerDetails();\n\n nextpollCustomer = this.setInterval(\n async () => {\n await this.GetCustomerDetails();\n },\n 5 * 60 * 1000,\n );\n } catch (error: any) {\n this.log.error(error.toString());\n }\n\n await this.subscribeStatesAsync('*');\n }\n }\n\n private async GetStatusSchedule(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.buildRequest('statusschedule.php', { api_key: this.config.apiKey })\n .then(async (response) => {\n if (response?.status === 200) {\n const content = response.data;\n\n this.setStateChangedAsync('info.connection', true, true);\n\n await this.setObjectNotExistsAsync('schedule.stopall', {\n type: 'state',\n common: {\n name: {\n en: 'stop all zones',\n de: 'alle Zonen stoppen',\n ru: '\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u0437\u043E\u043D\u044B',\n pt: 'parar todas as zonas',\n nl: 'stop alle zones',\n fr: 'arr\u00EAter toutes les zones',\n it: 'fermare tutte le zone',\n es: 'detener todas las zonas',\n pl: 'zatrzymuj\u0105 wszystkie strefy',\n uk: '\u0437\u0443\u043F\u0438\u043D\u0438\u0442\u0438 \u0432\u0441\u0456 \u0437\u043E\u043D\u0438',\n 'zh-cn': '\u505C\u6B62\u6240\u6709\u5730\u533A',\n },\n type: 'boolean',\n role: 'button.stop',\n read: false,\n write: true,\n },\n native: {},\n });\n\n await this.setObjectNotExistsAsync('schedule.runall', {\n type: 'state',\n common: {\n name: {\n en: 'run all zones for x seconds',\n de: 'alle Zonen f\u00FCr x Sekunden ausf\u00FChren',\n ru: '\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u0432\u0441\u0435 \u0437\u043E\u043D\u044B \u0437\u0430 x \u0441\u0435\u043A\u0443\u043D\u0434\u044B',\n pt: 'executar todas as zonas por x segundos',\n nl: 'ren alle zones voor x seconden',\n fr: 'ex\u00E9cuter toutes les zones pendant x secondes',\n it: 'eseguire tutte le zone per x secondi',\n es: 'ejecutar todas las zonas durante x segundos',\n pl: 'wszystkie strefy startuj\u0105 dla x sekundy',\n uk: '\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0438 \u0432\u0441\u0456 \u0437\u043E\u043D\u0438 \u0434\u043B\u044F x \u0441\u0435\u043A\u0443\u043D\u0434',\n 'zh-cn': '\u8DD1\u9053\u533A',\n },\n type: 'number',\n role: 'level',\n unit: 'seconds',\n read: true,\n write: true,\n },\n native: {},\n });\n\n await this.setObjectNotExistsAsync('schedule.suspendall', {\n type: 'state',\n common: {\n name: {\n en: 'suspend all zones for x seconds',\n de: 'alle Zonen f\u00FCr x Sekunden aussetzen',\n ru: '\u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u0437\u043E\u043D\u044B \u0437\u0430 x \u0441\u0435\u043A\u0443\u043D\u0434\u044B',\n pt: 'suspender todas as zonas por x segundos',\n nl: 'vertaling:',\n fr: 'suspendre toutes les zones pendant x secondes',\n it: 'sospendere tutte le zone per x secondi',\n es: 'suspender todas las zonas durante x segundos',\n pl: 'wszystkie strefy zawieszenia dla x sekundy',\n uk: '\u043F\u0440\u0438\u0437\u0443\u043F\u0438\u043D\u0438\u0442\u0438 \u0432\u0441\u0456 \u0437\u043E\u043D\u0438 \u043D\u0430 x \u0441\u0435\u043A\u0443\u043D\u0434',\n 'zh-cn': '\u505C\u6B62\u6240\u6709\u00D7\u4E8C\u533A',\n },\n type: 'number',\n role: 'level',\n read: true,\n write: true,\n },\n native: {},\n });\n\n for (let key in content) {\n key = this.name2id(key);\n\n if (key !== 'relays' && key !== 'sensors' && key !== 'expanders' && !Number.isNaN(key)) {\n await this.setObjectNotExistsAsync(`schedule.${key}`, {\n type: 'state',\n common: {\n name: key,\n type: key === 'message' ? 'string' : 'number',\n role: key === 'message' ? 'text' : 'value',\n read: true,\n write: false,\n },\n native: {},\n });\n\n this.setStateChangedAsync(`schedule.${key}`, content[key], true);\n\n if (key === 'time') {\n await this.setObjectNotExistsAsync('schedule.timestr', {\n type: 'state',\n common: {\n name: 'last api call',\n type: 'string',\n role: 'text',\n read: true,\n write: false,\n },\n native: {},\n });\n\n const t = new Date(content[key] * 1000);\n\n this.setStateChangedAsync('schedule.timestr', t.toString(), true);\n }\n }\n }\n\n for (const relay of content.relays) {\n const name = relay.relay;\n await this.setObjectNotExistsAsync(`schedule.${relay.relay}`, {\n type: 'channel',\n common: {\n name: name.toString(),\n },\n native: {},\n });\n\n RELAYS[relay.relay] = relay.relay_id;\n\n for (let key in relay) {\n key = this.name2id(key);\n\n await this.setObjectNotExistsAsync(`schedule.${relay.relay}.${key}`, {\n type: 'state',\n common: {\n name: key,\n type: key === 'name' || key === 'timestr' ? 'string' : 'number',\n role: key === 'name' || key === 'timestr' ? 'text' : 'value',\n read: true,\n write: false,\n },\n native: {},\n });\n\n if (key === 'timestr') {\n const t = new Date();\n t.setSeconds(t.getSeconds() + relay.time);\n relay[key] = t.toString();\n }\n\n this.setStateChangedAsync(`schedule.${relay.relay}.${key}`, relay[key], true);\n }\n\n await this.setObjectNotExistsAsync(`schedule.${relay.relay}.stopZone`, {\n type: 'state',\n common: {\n name: {\n en: 'stop zone',\n de: 'Zone stoppen',\n ru: '\u0437\u043E\u043D\u0430 \u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438',\n pt: 'zona de paragem',\n nl: 'stop zone',\n fr: \"zone d ' arr\u00EAt\",\n it: 'zona di sosta',\n es: 'zona de parada',\n pl: 'strefa stopu',\n uk: '\u0437\u043E\u043D\u0430 \u0437\u0443\u043F\u0438\u043D\u043A\u0438',\n 'zh-cn': '\u505C\u6B62\u5730\u533A',\n },\n type: 'boolean',\n role: 'button.stop',\n read: false,\n write: true,\n },\n native: {},\n });\n\n await this.setObjectNotExistsAsync(`schedule.${relay.relay}.runZone`, {\n type: 'state',\n common: {\n name: {\n en: 'run zone for x seconds',\n de: 'Zone f\u00FCr x Sekunden starten',\n ru: '\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u0437\u043E\u043D\u0443 \u0437\u0430 x \u0441\u0435\u043A\u0443\u043D\u0434\u044B',\n pt: 'zona de execu\u00E7\u00E3o por x segundos',\n nl: 'ren zone voor x seconden',\n fr: 'zone de course pour x secondes',\n it: 'zona di corsa per x secondi',\n es: 'zona de ejecuci\u00F3n por x segundos',\n pl: 'strefa x sekundy',\n uk: '\u0437\u043E\u043D\u0430 \u0437\u0430\u043F\u0443\u0441\u043A\u0443 \u0434\u043B\u044F x \u0441\u0435\u043A\u0443\u043D\u0434',\n 'zh-cn': '\u00D7\u4E8C\u533A',\n },\n type: 'number',\n role: 'level',\n read: true,\n write: true,\n },\n native: {},\n });\n\n await this.setObjectNotExistsAsync(`schedule.${relay.relay}.suspendZone`, {\n type: 'state',\n common: {\n name: {\n en: 'suspend zone for x seconds',\n de: 'Zone f\u00FCr x Sekunden aussetzen',\n ru: '\u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0437\u043E\u043D\u0443 \u043D\u0430 x \u0441\u0435\u043A\u0443\u043D\u0434\u044B',\n pt: 'zona de suspens\u00E3o por x segundos',\n nl: 'quality over quantity (qoq) releases vertaling:',\n fr: 'zone de suspension pour x secondes',\n it: 'zona di sospensione per x secondi',\n es: 'zona de suspensi\u00F3n por x segundos',\n pl: 'strefa zawies\u0142a na x sekundy',\n uk: '\u0437\u043E\u043D\u0430 \u043F\u0456\u0434\u0432\u0456\u0441\u043A\u0438 \u0434\u043B\u044F x \u0441\u0435\u043A\u0443\u043D\u0434',\n 'zh-cn': '\u505C\u6B62x\u4E8C\u533A',\n },\n type: 'number',\n role: 'level',\n read: true,\n write: true,\n },\n native: {},\n });\n\n await this.setObjectNotExistsAsync(`schedule.${relay.relay}.runDefault`, {\n type: 'state',\n common: {\n name: {\n en: 'run zone for default time',\n de: 'Zone mit Standardlaufzeit starten',\n ru: '\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u0437\u043E\u043D\u0443 \u0434\u043B\u044F \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E',\n pt: 'fuso de execu\u00E7\u00E3o para o tempo padr\u00E3o',\n nl: 'run zone for default time',\n fr: 'run zone for default time',\n it: 'run zone per il tempo predefinito',\n es: 'zona de ejecuci\u00F3n por tiempo predeterminado',\n pl: 'strefa czasu domy\u015Blnego',\n uk: '\u0437\u043E\u043D\u0430 \u0437\u0430\u043F\u0443\u0441\u043A\u0443 \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C',\n 'zh-cn': 'a. \u6682\u505C\u65F6\u95F4\u533A',\n },\n type: 'boolean',\n role: 'button.start',\n read: true,\n write: true,\n },\n native: {},\n });\n }\n\n for (const sensor of content.sensors) {\n await this.setObjectNotExistsAsync(`schedule.sensors.${sensor.input}`, {\n type: 'channel',\n common: {\n name: 'sensors',\n },\n native: {},\n });\n\n for (let key in sensor) {\n if (key !== 'relays') {\n key = this.name2id(key);\n\n await this.setObjectNotExistsAsync(`schedule.sensors.${sensor.input}.${key}`, {\n type: 'state',\n common: {\n name: key,\n type: 'number',\n role: 'value',\n read: true,\n write: false,\n },\n native: {},\n });\n\n this.setStateChangedAsync(`schedule.sensors.${sensor.input}.${key}`, sensor[key], true);\n }\n }\n }\n }\n\n resolve(response.status);\n })\n .catch((error) => {\n this.clearInterval(nextpollSchedule);\n\n if (error.code === 'EAI_AGAIN' || error.code === 'ECONNABORTED' || error.code === 'ENOTFOUND' || error.response?.status === 429) {\n nextpollSchedule = this.setInterval(async () => {\n await this.GetStatusSchedule();\n }, this.config.apiInterval * 1000);\n } else {\n this.log.debug(`(stats) received error - API is now offline: ${JSON.stringify(error)}`);\n\n this.setStateChangedAsync('info.connection', false, true);\n\n reject(error);\n }\n });\n });\n }\n\n private async GetCustomerDetails(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.buildRequest('customerdetails.php', { api_key: this.config.apiKey })\n .then(async (response) => {\n if (response?.status === 200) {\n const content = response.data;\n\n this.setStateChangedAsync('info.connection', true, true);\n\n for (let key in content) {\n if (key !== 'controllers' && !Number.isNaN(key)) {\n key = this.name2id(key);\n\n await this.setObjectNotExistsAsync(`customer.${key}`, {\n type: 'state',\n common: {\n name: key,\n type: key === 'message' || key === 'current_controller' ? 'string' : 'number',\n role: key === 'message' || key === 'current_controller' ? 'text' : 'value',\n read: true,\n write: false,\n },\n native: {},\n });\n\n this.setStateChangedAsync(`customer.${key}`, content[key], true);\n }\n }\n\n for (const controller of content.controllers) {\n await this.setObjectNotExistsAsync(`customer.controllers.${controller.name}`, {\n type: 'channel',\n common: {\n name: controller.name,\n },\n native: {},\n });\n\n for (let key in controller) {\n key = this.name2id(key);\n\n await this.setObjectNotExistsAsync(`customer.controllers.${controller.name}.${key}`, {\n type: 'state',\n common: {\n name: key,\n type: key !== 'controller_id' ? 'string' : 'number',\n role: key !== 'controller_id' ? 'text' : 'value',\n read: true,\n write: false,\n },\n native: {},\n });\n\n if (key === 'last_contact') {\n const t = new Date(controller[key] * 1000);\n controller[key] = t.toString();\n }\n\n this.setStateChangedAsync(`customer.controllers.${controller.name}.${key}`, controller[key], true);\n }\n }\n }\n\n resolve(response.status);\n })\n .catch((error) => {\n this.clearInterval(nextpollCustomer);\n\n if (error.code === 'EAI_AGAIN' || error.code === 'ECONNABORTED' || error.code === 'ENOTFOUND' || error.response?.status === 429) {\n nextpollCustomer = this.setInterval(\n async () => {\n await this.GetCustomerDetails();\n },\n 5 * 60 * 1000,\n );\n } else {\n this.log.debug(`(stats) received error - API is now offline: ${JSON.stringify(error)}`);\n\n this.setStateChangedAsync('info.connection', false, true);\n\n reject(error);\n }\n });\n });\n }\n\n buildRequest(service: string, params: any): Promise<any> {\n return new Promise((resolve, reject) => {\n const url = `/api/v1/${service}`;\n let lastErrorCode = 0;\n\n if (params.api_key) {\n try {\n axios({\n method: 'GET',\n baseURL: hydrawise_url,\n url: url,\n timeout: 30000,\n responseType: 'json',\n params: params,\n })\n .then((response) => {\n // no error - clear up reminder\n lastErrorCode = 0;\n\n resolve(response);\n })\n .catch((error) => {\n if (error.response) {\n // The request was made and the server responded with a status code\n\n this.log.warn(`received ${error.response.status} response from ${url} with content: ${JSON.stringify(error.response.data)}`);\n } else if (error.request) {\n // The request was made but no response was received\n // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\n // http.ClientRequest in node.js\n\n // avoid spamming of the same error when stuck in a reconnection loop\n if (error.code === lastErrorCode) {\n this.log.debug(error.message);\n } else {\n this.log.info(`error ${error.code} from ${url}: ${error.message}`);\n lastErrorCode = error.code;\n }\n } else {\n // Something happened in setting up the request that triggered an Error\n this.log.error(error.message);\n }\n\n reject(error);\n });\n } catch (error) {\n reject(error);\n }\n } else {\n reject('API key is not configured');\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 this.clearInterval(nextpollSchedule);\n this.clearInterval(nextpollCustomer);\n\n callback();\n } catch (e) {\n callback();\n }\n }\n\n /**\n * Is called if a subscribed state changes\n */\n private onStateChange(id: string, state: ioBroker.State | null | undefined): void {\n if (state && !state.ack) {\n if (id.indexOf('stopall') !== -1) {\n this.buildRequest('setzone.php', { api_key: this.config.apiKey, action: 'stopall' });\n } else if (id.indexOf('stop') !== -1) {\n const relay = id.match(/.*schedule\\.(.*)\\.stopZone/);\n\n if (relay && relay?.length > 1) {\n this.buildRequest('setzone.php', {\n api_key: this.config.apiKey,\n action: 'stop',\n relay_id: RELAYS[relay[1]],\n });\n }\n }\n if (id.indexOf('runall') !== -1 && (state.val || state.val === 0)) {\n this.buildRequest('setzone.php', {\n api_key: this.config.apiKey,\n action: 'runall',\n period_id: 999,\n custom: state.val,\n });\n } else if (id.indexOf('runZone') !== -1 && (state.val || state.val === 0)) {\n const relay = id.match(/.*schedule\\.(.*)\\.runZone/);\n\n if (relay && relay?.length > 1) {\n this.buildRequest('setzone.php', {\n api_key: this.config.apiKey,\n action: 'run',\n period_id: 999,\n custom: state.val,\n relay_id: RELAYS[relay[1]],\n });\n }\n }\n\n if (id.indexOf('runDefault') !== -1 && state.val !== null) {\n this.initRunDefault(id, state.val as boolean);\n }\n\n if (id.indexOf('suspendall') !== -1 && (state.val || state.val === 0)) {\n const num = state.val as number;\n\n this.buildRequest('setzone.php', {\n api_key: this.config.apiKey,\n action: 'suspendall',\n period_id: 999,\n custom: Math.trunc((state.ts + num) / 1000),\n });\n } else if (id.indexOf('suspend') !== -1 && (state.val || state.val === 0)) {\n const num = state.val as number;\n const relay = id.match(/.*schedule\\.(.*)\\.suspendZone/);\n\n if (relay && relay?.length > 1) {\n this.buildRequest('setzone.php', {\n api_key: this.config.apiKey,\n action: 'suspend',\n period_id: 999,\n custom: Math.trunc((state.ts + num) / 1000),\n relay_id: RELAYS[relay[1]],\n });\n }\n }\n }\n }\n\n async initRunDefault(id: string, run: boolean): Promise<void> {\n const relay = id.match(/(.*schedule.*\\.)runDefault/);\n\n this.clearTimeout(resetSwitch);\n\n if (relay) {\n if (run) {\n const defaultRunTime = await this.getStateAsync(relay[1] + 'run');\n if (defaultRunTime && defaultRunTime.val) {\n this.setStateAsync(relay[1] + 'runZone', defaultRunTime.val, false);\n resetSwitch = this.setTimeout(\n () => {\n this.setStateAsync(id, false, false);\n },\n (defaultRunTime.val as number) * 1000,\n );\n }\n } else {\n this.setStateAsync(relay[1] + 'stopZone', true, false);\n }\n }\n }\n\n name2id(pName: string): string {\n return (pName || '').replace(this.FORBIDDEN_CHARS, '_');\n }\n}\n\nif (require.main !== module) {\n // Export the constructor in compact mode\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) => new Hydrawise(options);\n} else {\n // otherwise start the instance directly\n (() => new Hydrawise())();\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\n * Created with @iobroker/create-adapter v2.3.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';\nimport axios from 'axios';\n\nconst hydrawise_url = 'https://api.hydrawise.com';\nlet nextpollSchedule: any = null;\nlet nextpollCustomer: any = null;\nlet resetSwitch: any = null;\nconst RELAYS: any = Object;\n\nclass Hydrawise extends utils.Adapter {\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'hydrawise',\n });\n\n this.on('ready', this.onReady.bind(this));\n this.on('stateChange', this.onStateChange.bind(this));\n this.on('unload', this.onUnload.bind(this));\n }\n\n private async onReady(): Promise<void> {\n if (!this.config.apiKey) {\n this.log.error('No API-Key defined!');\n } else {\n void this.setStateChangedAsync('info.connection', false, true);\n\n try {\n await this.GetStatusSchedule();\n\n nextpollSchedule = this.setInterval(async () => {\n await this.GetStatusSchedule();\n }, this.config.apiInterval * 1000);\n\n await this.GetCustomerDetails();\n\n nextpollCustomer = this.setInterval(\n async () => {\n await this.GetCustomerDetails();\n },\n 5 * 60 * 1000,\n );\n } catch (error: any) {\n this.log.error(error.toString());\n }\n\n await this.subscribeStatesAsync('*');\n }\n }\n\n private async GetStatusSchedule(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.buildRequest('statusschedule.php', { api_key: this.config.apiKey })\n .then(async response => {\n if (response?.status === 200) {\n const content = response.data;\n\n void this.setStateChangedAsync('info.connection', true, true);\n\n await this.setObjectNotExistsAsync('schedule.stopall', {\n type: 'state',\n common: {\n name: {\n en: 'stop all zones',\n de: 'alle Zonen stoppen',\n ru: '\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u0437\u043E\u043D\u044B',\n pt: 'parar todas as zonas',\n nl: 'stop alle zones',\n fr: 'arr\u00EAter toutes les zones',\n it: 'fermare tutte le zone',\n es: 'detener todas las zonas',\n pl: 'zatrzymuj\u0105 wszystkie strefy',\n uk: '\u0437\u0443\u043F\u0438\u043D\u0438\u0442\u0438 \u0432\u0441\u0456 \u0437\u043E\u043D\u0438',\n 'zh-cn': '\u505C\u6B62\u6240\u6709\u5730\u533A',\n },\n type: 'boolean',\n role: 'button.stop',\n read: false,\n write: true,\n },\n native: {},\n });\n\n await this.setObjectNotExistsAsync('schedule.runall', {\n type: 'state',\n common: {\n name: {\n en: 'run all zones for x seconds',\n de: 'alle Zonen f\u00FCr x Sekunden ausf\u00FChren',\n ru: '\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u0432\u0441\u0435 \u0437\u043E\u043D\u044B \u0437\u0430 x \u0441\u0435\u043A\u0443\u043D\u0434\u044B',\n pt: 'executar todas as zonas por x segundos',\n nl: 'ren alle zones voor x seconden',\n fr: 'ex\u00E9cuter toutes les zones pendant x secondes',\n it: 'eseguire tutte le zone per x secondi',\n es: 'ejecutar todas las zonas durante x segundos',\n pl: 'wszystkie strefy startuj\u0105 dla x sekundy',\n uk: '\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0438 \u0432\u0441\u0456 \u0437\u043E\u043D\u0438 \u0434\u043B\u044F x \u0441\u0435\u043A\u0443\u043D\u0434',\n 'zh-cn': '\u8DD1\u9053\u533A',\n },\n type: 'number',\n role: 'level',\n unit: 'seconds',\n read: true,\n write: true,\n },\n native: {},\n });\n\n await this.setObjectNotExistsAsync('schedule.suspendall', {\n type: 'state',\n common: {\n name: {\n en: 'suspend all zones for x seconds',\n de: 'alle Zonen f\u00FCr x Sekunden aussetzen',\n ru: '\u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u0437\u043E\u043D\u044B \u0437\u0430 x \u0441\u0435\u043A\u0443\u043D\u0434\u044B',\n pt: 'suspender todas as zonas por x segundos',\n nl: 'vertaling:',\n fr: 'suspendre toutes les zones pendant x secondes',\n it: 'sospendere tutte le zone per x secondi',\n es: 'suspender todas las zonas durante x segundos',\n pl: 'wszystkie strefy zawieszenia dla x sekundy',\n uk: '\u043F\u0440\u0438\u0437\u0443\u043F\u0438\u043D\u0438\u0442\u0438 \u0432\u0441\u0456 \u0437\u043E\u043D\u0438 \u043D\u0430 x \u0441\u0435\u043A\u0443\u043D\u0434',\n 'zh-cn': '\u505C\u6B62\u6240\u6709\u00D7\u4E8C\u533A',\n },\n type: 'number',\n role: 'level',\n read: true,\n write: true,\n },\n native: {},\n });\n\n for (let key in content) {\n key = this.name2id(key);\n\n if (key !== 'relays' && key !== 'sensors' && key !== 'expanders' && !Number.isNaN(key)) {\n await this.setObjectNotExistsAsync(`schedule.${key}`, {\n type: 'state',\n common: {\n name: key,\n type: key === 'message' ? 'string' : 'number',\n role: key === 'message' ? 'text' : 'value',\n read: true,\n write: false,\n },\n native: {},\n });\n\n void this.setStateChangedAsync(`schedule.${key}`, content[key], true);\n\n if (key === 'time') {\n await this.setObjectNotExistsAsync('schedule.timestr', {\n type: 'state',\n common: {\n name: 'last api call',\n type: 'string',\n role: 'text',\n read: true,\n write: false,\n },\n native: {},\n });\n\n const t = new Date(content[key] * 1000);\n\n void this.setStateChangedAsync('schedule.timestr', t.toString(), true);\n }\n }\n }\n\n for (const relay of content.relays) {\n const name = relay.relay;\n await this.setObjectNotExistsAsync(`schedule.${relay.relay}`, {\n type: 'channel',\n common: {\n name: name.toString(),\n },\n native: {},\n });\n\n RELAYS[relay.relay] = relay.relay_id;\n\n for (let key in relay) {\n key = this.name2id(key);\n\n await this.setObjectNotExistsAsync(`schedule.${relay.relay}.${key}`, {\n type: 'state',\n common: {\n name: key,\n type: key === 'name' || key === 'timestr' ? 'string' : 'number',\n role: key === 'name' || key === 'timestr' ? 'text' : 'value',\n read: true,\n write: false,\n },\n native: {},\n });\n\n if (key === 'timestr') {\n const t = new Date();\n t.setSeconds(t.getSeconds() + relay.time);\n relay[key] = t.toString();\n }\n\n void this.setStateChangedAsync(`schedule.${relay.relay}.${key}`, relay[key], true);\n }\n\n await this.setObjectNotExistsAsync(`schedule.${relay.relay}.stopZone`, {\n type: 'state',\n common: {\n name: {\n en: 'stop zone',\n de: 'Zone stoppen',\n ru: '\u0437\u043E\u043D\u0430 \u043E\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438',\n pt: 'zona de paragem',\n nl: 'stop zone',\n fr: \"zone d ' arr\u00EAt\",\n it: 'zona di sosta',\n es: 'zona de parada',\n pl: 'strefa stopu',\n uk: '\u0437\u043E\u043D\u0430 \u0437\u0443\u043F\u0438\u043D\u043A\u0438',\n 'zh-cn': '\u505C\u6B62\u5730\u533A',\n },\n type: 'boolean',\n role: 'button.stop',\n read: false,\n write: true,\n },\n native: {},\n });\n\n await this.setObjectNotExistsAsync(`schedule.${relay.relay}.runZone`, {\n type: 'state',\n common: {\n name: {\n en: 'run zone for x seconds',\n de: 'Zone f\u00FCr x Sekunden starten',\n ru: '\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u0437\u043E\u043D\u0443 \u0437\u0430 x \u0441\u0435\u043A\u0443\u043D\u0434\u044B',\n pt: 'zona de execu\u00E7\u00E3o por x segundos',\n nl: 'ren zone voor x seconden',\n fr: 'zone de course pour x secondes',\n it: 'zona di corsa per x secondi',\n es: 'zona de ejecuci\u00F3n por x segundos',\n pl: 'strefa x sekundy',\n uk: '\u0437\u043E\u043D\u0430 \u0437\u0430\u043F\u0443\u0441\u043A\u0443 \u0434\u043B\u044F x \u0441\u0435\u043A\u0443\u043D\u0434',\n 'zh-cn': '\u00D7\u4E8C\u533A',\n },\n type: 'number',\n role: 'level',\n read: true,\n write: true,\n },\n native: {},\n });\n\n await this.setObjectNotExistsAsync(`schedule.${relay.relay}.suspendZone`, {\n type: 'state',\n common: {\n name: {\n en: 'suspend zone for x seconds',\n de: 'Zone f\u00FCr x Sekunden aussetzen',\n ru: '\u043F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0437\u043E\u043D\u0443 \u043D\u0430 x \u0441\u0435\u043A\u0443\u043D\u0434\u044B',\n pt: 'zona de suspens\u00E3o por x segundos',\n nl: 'quality over quantity (qoq) releases vertaling:',\n fr: 'zone de suspension pour x secondes',\n it: 'zona di sospensione per x secondi',\n es: 'zona de suspensi\u00F3n por x segundos',\n pl: 'strefa zawies\u0142a na x sekundy',\n uk: '\u0437\u043E\u043D\u0430 \u043F\u0456\u0434\u0432\u0456\u0441\u043A\u0438 \u0434\u043B\u044F x \u0441\u0435\u043A\u0443\u043D\u0434',\n 'zh-cn': '\u505C\u6B62x\u4E8C\u533A',\n },\n type: 'number',\n role: 'level',\n read: true,\n write: true,\n },\n native: {},\n });\n\n await this.setObjectNotExistsAsync(`schedule.${relay.relay}.runDefault`, {\n type: 'state',\n common: {\n name: {\n en: 'run zone for default time',\n de: 'Zone mit Standardlaufzeit starten',\n ru: '\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u0437\u043E\u043D\u0443 \u0434\u043B\u044F \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E',\n pt: 'fuso de execu\u00E7\u00E3o para o tempo padr\u00E3o',\n nl: 'run zone for default time',\n fr: 'run zone for default time',\n it: 'run zone per il tempo predefinito',\n es: 'zona de ejecuci\u00F3n por tiempo predeterminado',\n pl: 'strefa czasu domy\u015Blnego',\n uk: '\u0437\u043E\u043D\u0430 \u0437\u0430\u043F\u0443\u0441\u043A\u0443 \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C',\n 'zh-cn': 'a. \u6682\u505C\u65F6\u95F4\u533A',\n },\n type: 'boolean',\n role: 'button.start',\n read: true,\n write: true,\n },\n native: {},\n });\n }\n\n for (const sensor of content.sensors) {\n await this.setObjectNotExistsAsync(`schedule.sensors.${sensor.input}`, {\n type: 'channel',\n common: {\n name: 'sensors',\n },\n native: {},\n });\n\n for (let key in sensor) {\n if (key !== 'relays') {\n key = this.name2id(key);\n\n await this.setObjectNotExistsAsync(`schedule.sensors.${sensor.input}.${key}`, {\n type: 'state',\n common: {\n name: key,\n type: 'number',\n role: 'value',\n read: true,\n write: false,\n },\n native: {},\n });\n\n void this.setStateChangedAsync(\n `schedule.sensors.${sensor.input}.${key}`,\n sensor[key],\n true,\n );\n }\n }\n }\n }\n\n resolve(response.status);\n })\n .catch(error => {\n this.clearInterval(nextpollSchedule);\n\n if (\n error.code === 'EAI_AGAIN' ||\n error.code === 'ECONNABORTED' ||\n error.code === 'ENOTFOUND' ||\n error.response?.status === 429\n ) {\n nextpollSchedule = this.setInterval(async () => {\n await this.GetStatusSchedule();\n }, this.config.apiInterval * 1000);\n } else {\n this.log.debug(`(stats) received error - API is now offline: ${JSON.stringify(error)}`);\n\n void this.setStateChangedAsync('info.connection', false, true);\n\n reject(new Error(error));\n }\n });\n });\n }\n\n private async GetCustomerDetails(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.buildRequest('customerdetails.php', { api_key: this.config.apiKey })\n .then(async response => {\n if (response?.status === 200) {\n const content = response.data;\n\n void this.setStateChangedAsync('info.connection', true, true);\n\n for (let key in content) {\n if (key !== 'controllers' && !Number.isNaN(key)) {\n key = this.name2id(key);\n\n await this.setObjectNotExistsAsync(`customer.${key}`, {\n type: 'state',\n common: {\n name: key,\n type: key === 'message' || key === 'current_controller' ? 'string' : 'number',\n role: key === 'message' || key === 'current_controller' ? 'text' : 'value',\n read: true,\n write: false,\n },\n native: {},\n });\n\n void this.setStateChangedAsync(`customer.${key}`, content[key], true);\n }\n }\n\n for (const controller of content.controllers) {\n await this.setObjectNotExistsAsync(`customer.controllers.${controller.name}`, {\n type: 'channel',\n common: {\n name: controller.name,\n },\n native: {},\n });\n\n for (let key in controller) {\n key = this.name2id(key);\n\n await this.setObjectNotExistsAsync(`customer.controllers.${controller.name}.${key}`, {\n type: 'state',\n common: {\n name: key,\n type: key !== 'controller_id' ? 'string' : 'number',\n role: key !== 'controller_id' ? 'text' : 'value',\n read: true,\n write: false,\n },\n native: {},\n });\n\n if (key === 'last_contact') {\n const t = new Date(controller[key] * 1000);\n controller[key] = t.toString();\n }\n\n void this.setStateChangedAsync(\n `customer.controllers.${controller.name}.${key}`,\n controller[key],\n true,\n );\n }\n }\n }\n\n resolve(response.status);\n })\n .catch(error => {\n this.clearInterval(nextpollCustomer);\n\n if (\n error.code === 'EAI_AGAIN' ||\n error.code === 'ECONNABORTED' ||\n error.code === 'ENOTFOUND' ||\n error.response?.status === 429\n ) {\n nextpollCustomer = this.setInterval(\n async () => {\n await this.GetCustomerDetails();\n },\n 5 * 60 * 1000,\n );\n } else {\n this.log.debug(`(stats) received error - API is now offline: ${JSON.stringify(error)}`);\n\n void this.setStateChangedAsync('info.connection', false, true);\n\n reject(new Error(error));\n }\n });\n });\n }\n\n buildRequest(service: string, params: any): Promise<any> {\n return new Promise((resolve, reject) => {\n const url = `/api/v1/${service}`;\n let lastErrorCode = 0;\n\n if (params.api_key) {\n try {\n axios({\n method: 'GET',\n baseURL: hydrawise_url,\n url: url,\n timeout: 30000,\n responseType: 'json',\n params: params,\n })\n .then(response => {\n // no error - clear up reminder\n lastErrorCode = 0;\n\n resolve(response);\n })\n .catch(error => {\n if (error.response) {\n // The request was made and the server responded with a status code\n\n this.log.warn(\n `received ${error.response.status} response from ${url} with content: ${JSON.stringify(error.response.data)}`,\n );\n } else if (error.request) {\n // The request was made but no response was received\n // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\n // http.ClientRequest in node.js\n\n // avoid spamming of the same error when stuck in a reconnection loop\n if (error.code === lastErrorCode) {\n this.log.debug(error.message);\n } else {\n this.log.info(`error ${error.code} from ${url}: ${error.message}`);\n lastErrorCode = error.code;\n }\n } else {\n // Something happened in setting up the request that triggered an Error\n this.log.error(error.message);\n }\n\n reject(new Error(error));\n });\n } catch (error: any) {\n reject(new Error(error));\n }\n } else {\n reject(new Error('API key is not configured'));\n }\n });\n }\n\n /**\n * Is called when adapter shuts down - callback has to be called under any circumstances!\n *\n * @param callback callback function\n */\n private onUnload(callback: () => void): void {\n try {\n this.clearInterval(nextpollSchedule);\n this.clearInterval(nextpollCustomer);\n\n callback();\n } catch {\n callback();\n }\n }\n\n /**\n * Is called if a subscribed state changes\n *\n * @param id id of the state\n * @param state state object\n */\n private onStateChange(id: string, state: ioBroker.State | null | undefined): void {\n if (state && !state.ack) {\n if (id.indexOf('stopall') !== -1) {\n void this.buildRequest('setzone.php', { api_key: this.config.apiKey, action: 'stopall' });\n } else if (id.indexOf('stop') !== -1) {\n const relay = id.match(/.*schedule\\.(.*)\\.stopZone/);\n\n if (relay && relay?.length > 1) {\n void this.buildRequest('setzone.php', {\n api_key: this.config.apiKey,\n action: 'stop',\n relay_id: RELAYS[relay[1]],\n });\n }\n }\n if (id.indexOf('runall') !== -1 && (state.val || state.val === 0)) {\n void this.buildRequest('setzone.php', {\n api_key: this.config.apiKey,\n action: 'runall',\n period_id: 999,\n custom: state.val,\n });\n } else if (id.indexOf('runZone') !== -1 && (state.val || state.val === 0)) {\n const relay = id.match(/.*schedule\\.(.*)\\.runZone/);\n\n if (relay && relay?.length > 1) {\n void this.buildRequest('setzone.php', {\n api_key: this.config.apiKey,\n action: 'run',\n period_id: 999,\n custom: state.val,\n relay_id: RELAYS[relay[1]],\n });\n }\n }\n\n if (id.indexOf('runDefault') !== -1 && state.val !== null) {\n void this.initRunDefault(id, state.val as boolean);\n }\n\n if (id.indexOf('suspendall') !== -1 && (state.val || state.val === 0)) {\n const num = state.val as number;\n\n void this.buildRequest('setzone.php', {\n api_key: this.config.apiKey,\n action: 'suspendall',\n period_id: 999,\n custom: Math.trunc((state.ts + num) / 1000),\n });\n } else if (id.indexOf('suspend') !== -1 && (state.val || state.val === 0)) {\n const num = state.val as number;\n const relay = id.match(/.*schedule\\.(.*)\\.suspendZone/);\n\n if (relay && relay?.length > 1) {\n void this.buildRequest('setzone.php', {\n api_key: this.config.apiKey,\n action: 'suspend',\n period_id: 999,\n custom: Math.trunc((state.ts + num) / 1000),\n relay_id: RELAYS[relay[1]],\n });\n }\n }\n }\n }\n\n async initRunDefault(id: string, run: boolean): Promise<void> {\n const relay = id.match(/(.*schedule.*\\.)runDefault/);\n\n this.clearTimeout(resetSwitch);\n\n if (relay) {\n if (run) {\n const defaultRunTime = await this.getStateAsync(`${relay[1]}run`);\n if (defaultRunTime && defaultRunTime.val) {\n void this.setState(`${relay[1]}runZone`, defaultRunTime.val, false);\n resetSwitch = this.setTimeout(\n () => {\n void this.setState(id, false, false);\n },\n (defaultRunTime.val as number) * 1000,\n );\n }\n } else {\n void this.setState(`${relay[1]}stopZone`, true, false);\n }\n }\n }\n\n name2id(pName: string): string {\n return (pName || '').replace(this.FORBIDDEN_CHARS, '_');\n }\n}\n\nif (require.main !== module) {\n // Export the constructor in compact mode\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) => new Hydrawise(options);\n} else {\n // otherwise start the instance directly\n (() => new Hydrawise())();\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAMA,YAAuB;AACvB,mBAAkB;AAElB,MAAM,gBAAgB;AACtB,IAAI,mBAAwB;AAC5B,IAAI,mBAAwB;AAC5B,IAAI,cAAmB;AACvB,MAAM,SAAc;AAEpB,MAAM,kBAAkB,MAAM,QAAQ;AAAA,EAC3B,YAAY,UAAyC,CAAC,GAAG;AAC5D,UAAM;AAAA,MACF,GAAG;AAAA,MACH,MAAM;AAAA,IACV,CAAC;AAED,SAAK,GAAG,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC;AACxC,SAAK,GAAG,eAAe,KAAK,cAAc,KAAK,IAAI,CAAC;AACpD,SAAK,GAAG,UAAU,KAAK,SAAS,KAAK,IAAI,CAAC;AAAA,EAC9C;AAAA,EAEA,MAAc,UAAyB;AACnC,QAAI,CAAC,KAAK,OAAO,QAAQ;AACrB,WAAK,IAAI,MAAM,qBAAqB;AAAA,IACxC,OAAO;AACH,WAAK,KAAK,qBAAqB,mBAAmB,OAAO,IAAI;AAE7D,UAAI;AACA,cAAM,KAAK,kBAAkB;AAE7B,2BAAmB,KAAK,YAAY,YAAY;AAC5C,gBAAM,KAAK,kBAAkB;AAAA,QACjC,GAAG,KAAK,OAAO,cAAc,GAAI;AAEjC,cAAM,KAAK,mBAAmB;AAE9B,2BAAmB,KAAK;AAAA,UACpB,YAAY;AACR,kBAAM,KAAK,mBAAmB;AAAA,UAClC;AAAA,UACA,IAAI,KAAK;AAAA,QACb;AAAA,MACJ,SAAS,OAAY;AACjB,aAAK,IAAI,MAAM,MAAM,SAAS,CAAC;AAAA,MACnC;AAEA,YAAM,KAAK,qBAAqB,GAAG;AAAA,IACvC;AAAA,EACJ;AAAA,EAEA,MAAc,oBAAmC;AAC7C,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,WAAK,aAAa,sBAAsB,EAAE,SAAS,KAAK,OAAO,OAAO,CAAC,EAClE,KAAK,OAAM,aAAY;AACpB,aAAI,qCAAU,YAAW,KAAK;AAC1B,gBAAM,UAAU,SAAS;AAEzB,eAAK,KAAK,qBAAqB,mBAAmB,MAAM,IAAI;AAE5D,gBAAM,KAAK,wBAAwB,oBAAoB;AAAA,YACnD,MAAM;AAAA,YACN,QAAQ;AAAA,cACJ,MAAM;AAAA,gBACF,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,SAAS;AAAA,cACb;AAAA,cACA,MAAM;AAAA,cACN,MAAM;AAAA,cACN,MAAM;AAAA,cACN,OAAO;AAAA,YACX;AAAA,YACA,QAAQ,CAAC;AAAA,UACb,CAAC;AAED,gBAAM,KAAK,wBAAwB,mBAAmB;AAAA,YAClD,MAAM;AAAA,YACN,QAAQ;AAAA,cACJ,MAAM;AAAA,gBACF,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,SAAS;AAAA,cACb;AAAA,cACA,MAAM;AAAA,cACN,MAAM;AAAA,cACN,MAAM;AAAA,cACN,MAAM;AAAA,cACN,OAAO;AAAA,YACX;AAAA,YACA,QAAQ,CAAC;AAAA,UACb,CAAC;AAED,gBAAM,KAAK,wBAAwB,uBAAuB;AAAA,YACtD,MAAM;AAAA,YACN,QAAQ;AAAA,cACJ,MAAM;AAAA,gBACF,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,SAAS;AAAA,cACb;AAAA,cACA,MAAM;AAAA,cACN,MAAM;AAAA,cACN,MAAM;AAAA,cACN,OAAO;AAAA,YACX;AAAA,YACA,QAAQ,CAAC;AAAA,UACb,CAAC;AAED,mBAAS,OAAO,SAAS;AACrB,kBAAM,KAAK,QAAQ,GAAG;AAEtB,gBAAI,QAAQ,YAAY,QAAQ,aAAa,QAAQ,eAAe,CAAC,OAAO,MAAM,GAAG,GAAG;AACpF,oBAAM,KAAK,wBAAwB,YAAY,GAAG,IAAI;AAAA,gBAClD,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACJ,MAAM;AAAA,kBACN,MAAM,QAAQ,YAAY,WAAW;AAAA,kBACrC,MAAM,QAAQ,YAAY,SAAS;AAAA,kBACnC,MAAM;AAAA,kBACN,OAAO;AAAA,gBACX;AAAA,gBACA,QAAQ,CAAC;AAAA,cACb,CAAC;AAED,mBAAK,KAAK,qBAAqB,YAAY,GAAG,IAAI,QAAQ,GAAG,GAAG,IAAI;AAEpE,kBAAI,QAAQ,QAAQ;AAChB,sBAAM,KAAK,wBAAwB,oBAAoB;AAAA,kBACnD,MAAM;AAAA,kBACN,QAAQ;AAAA,oBACJ,MAAM;AAAA,oBACN,MAAM;AAAA,oBACN,MAAM;AAAA,oBACN,MAAM;AAAA,oBACN,OAAO;AAAA,kBACX;AAAA,kBACA,QAAQ,CAAC;AAAA,gBACb,CAAC;AAED,sBAAM,IAAI,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAI;AAEtC,qBAAK,KAAK,qBAAqB,oBAAoB,EAAE,SAAS,GAAG,IAAI;AAAA,cACzE;AAAA,YACJ;AAAA,UACJ;AAEA,qBAAW,SAAS,QAAQ,QAAQ;AAChC,kBAAM,OAAO,MAAM;AACnB,kBAAM,KAAK,wBAAwB,YAAY,MAAM,KAAK,IAAI;AAAA,cAC1D,MAAM;AAAA,cACN,QAAQ;AAAA,gBACJ,MAAM,KAAK,SAAS;AAAA,cACxB;AAAA,cACA,QAAQ,CAAC;AAAA,YACb,CAAC;AAED,mBAAO,MAAM,KAAK,IAAI,MAAM;AAE5B,qBAAS,OAAO,OAAO;AACnB,oBAAM,KAAK,QAAQ,GAAG;AAEtB,oBAAM,KAAK,wBAAwB,YAAY,MAAM,KAAK,IAAI,GAAG,IAAI;AAAA,gBACjE,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACJ,MAAM;AAAA,kBACN,MAAM,QAAQ,UAAU,QAAQ,YAAY,WAAW;AAAA,kBACvD,MAAM,QAAQ,UAAU,QAAQ,YAAY,SAAS;AAAA,kBACrD,MAAM;AAAA,kBACN,OAAO;AAAA,gBACX;AAAA,gBACA,QAAQ,CAAC;AAAA,cACb,CAAC;AAED,kBAAI,QAAQ,WAAW;AACnB,sBAAM,IAAI,oBAAI,KAAK;AACnB,kBAAE,WAAW,EAAE,WAAW,IAAI,MAAM,IAAI;AACxC,sBAAM,GAAG,IAAI,EAAE,SAAS;AAAA,cAC5B;AAEA,mBAAK,KAAK,qBAAqB,YAAY,MAAM,KAAK,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,IAAI;AAAA,YACrF;AAEA,kBAAM,KAAK,wBAAwB,YAAY,MAAM,KAAK,aAAa;AAAA,cACnE,MAAM;AAAA,cACN,QAAQ;AAAA,gBACJ,MAAM;AAAA,kBACF,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,SAAS;AAAA,gBACb;AAAA,gBACA,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO;AAAA,cACX;AAAA,cACA,QAAQ,CAAC;AAAA,YACb,CAAC;AAED,kBAAM,KAAK,wBAAwB,YAAY,MAAM,KAAK,YAAY;AAAA,cAClE,MAAM;AAAA,cACN,QAAQ;AAAA,gBACJ,MAAM;AAAA,kBACF,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,SAAS;AAAA,gBACb;AAAA,gBACA,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO;AAAA,cACX;AAAA,cACA,QAAQ,CAAC;AAAA,YACb,CAAC;AAED,kBAAM,KAAK,wBAAwB,YAAY,MAAM,KAAK,gBAAgB;AAAA,cACtE,MAAM;AAAA,cACN,QAAQ;AAAA,gBACJ,MAAM;AAAA,kBACF,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,SAAS;AAAA,gBACb;AAAA,gBACA,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO;AAAA,cACX;AAAA,cACA,QAAQ,CAAC;AAAA,YACb,CAAC;AAED,kBAAM,KAAK,wBAAwB,YAAY,MAAM,KAAK,eAAe;AAAA,cACrE,MAAM;AAAA,cACN,QAAQ;AAAA,gBACJ,MAAM;AAAA,kBACF,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,IAAI;AAAA,kBACJ,SAAS;AAAA,gBACb;AAAA,gBACA,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO;AAAA,cACX;AAAA,cACA,QAAQ,CAAC;AAAA,YACb,CAAC;AAAA,UACL;AAEA,qBAAW,UAAU,QAAQ,SAAS;AAClC,kBAAM,KAAK,wBAAwB,oBAAoB,OAAO,KAAK,IAAI;AAAA,cACnE,MAAM;AAAA,cACN,QAAQ;AAAA,gBACJ,MAAM;AAAA,cACV;AAAA,cACA,QAAQ,CAAC;AAAA,YACb,CAAC;AAED,qBAAS,OAAO,QAAQ;AACpB,kBAAI,QAAQ,UAAU;AAClB,sBAAM,KAAK,QAAQ,GAAG;AAEtB,sBAAM,KAAK,wBAAwB,oBAAoB,OAAO,KAAK,IAAI,GAAG,IAAI;AAAA,kBAC1E,MAAM;AAAA,kBACN,QAAQ;AAAA,oBACJ,MAAM;AAAA,oBACN,MAAM;AAAA,oBACN,MAAM;AAAA,oBACN,MAAM;AAAA,oBACN,OAAO;AAAA,kBACX;AAAA,kBACA,QAAQ,CAAC;AAAA,gBACb,CAAC;AAED,qBAAK,KAAK;AAAA,kBACN,oBAAoB,OAAO,KAAK,IAAI,GAAG;AAAA,kBACvC,OAAO,GAAG;AAAA,kBACV;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAEA,gBAAQ,SAAS,MAAM;AAAA,MAC3B,CAAC,EACA,MAAM,WAAS;AA1VhC;AA2VoB,aAAK,cAAc,gBAAgB;AAEnC,YACI,MAAM,SAAS,eACf,MAAM,SAAS,kBACf,MAAM,SAAS,iBACf,WAAM,aAAN,mBAAgB,YAAW,KAC7B;AACE,6BAAmB,KAAK,YAAY,YAAY;AAC5C,kBAAM,KAAK,kBAAkB;AAAA,UACjC,GAAG,KAAK,OAAO,cAAc,GAAI;AAAA,QACrC,OAAO;AACH,eAAK,IAAI,MAAM,gDAAgD,KAAK,UAAU,KAAK,CAAC,EAAE;AAEtF,eAAK,KAAK,qBAAqB,mBAAmB,OAAO,IAAI;AAE7D,iBAAO,IAAI,MAAM,KAAK,CAAC;AAAA,QAC3B;AAAA,MACJ,CAAC;AAAA,IACT,CAAC;AAAA,EACL;AAAA,EAEA,MAAc,qBAAoC;AAC9C,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,WAAK,aAAa,uBAAuB,EAAE,SAAS,KAAK,OAAO,OAAO,CAAC,EACnE,KAAK,OAAM,aAAY;AACpB,aAAI,qCAAU,YAAW,KAAK;AAC1B,gBAAM,UAAU,SAAS;AAEzB,eAAK,KAAK,qBAAqB,mBAAmB,MAAM,IAAI;AAE5D,mBAAS,OAAO,SAAS;AACrB,gBAAI,QAAQ,iBAAiB,CAAC,OAAO,MAAM,GAAG,GAAG;AAC7C,oBAAM,KAAK,QAAQ,GAAG;AAEtB,oBAAM,KAAK,wBAAwB,YAAY,GAAG,IAAI;AAAA,gBAClD,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACJ,MAAM;AAAA,kBACN,MAAM,QAAQ,aAAa,QAAQ,uBAAuB,WAAW;AAAA,kBACrE,MAAM,QAAQ,aAAa,QAAQ,uBAAuB,SAAS;AAAA,kBACnE,MAAM;AAAA,kBACN,OAAO;AAAA,gBACX;AAAA,gBACA,QAAQ,CAAC;AAAA,cACb,CAAC;AAED,mBAAK,KAAK,qBAAqB,YAAY,GAAG,IAAI,QAAQ,GAAG,GAAG,IAAI;AAAA,YACxE;AAAA,UACJ;AAEA,qBAAW,cAAc,QAAQ,aAAa;AAC1C,kBAAM,KAAK,wBAAwB,wBAAwB,WAAW,IAAI,IAAI;AAAA,cAC1E,MAAM;AAAA,cACN,QAAQ;AAAA,gBACJ,MAAM,WAAW;AAAA,cACrB;AAAA,cACA,QAAQ,CAAC;AAAA,YACb,CAAC;AAED,qBAAS,OAAO,YAAY;AACxB,oBAAM,KAAK,QAAQ,GAAG;AAEtB,oBAAM,KAAK,wBAAwB,wBAAwB,WAAW,IAAI,IAAI,GAAG,IAAI;AAAA,gBACjF,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACJ,MAAM;AAAA,kBACN,MAAM,QAAQ,kBAAkB,WAAW;AAAA,kBAC3C,MAAM,QAAQ,kBAAkB,SAAS;AAAA,kBACzC,MAAM;AAAA,kBACN,OAAO;AAAA,gBACX;AAAA,gBACA,QAAQ,CAAC;AAAA,cACb,CAAC;AAED,kBAAI,QAAQ,gBAAgB;AACxB,sBAAM,IAAI,IAAI,KAAK,WAAW,GAAG,IAAI,GAAI;AACzC,2BAAW,GAAG,IAAI,EAAE,SAAS;AAAA,cACjC;AAEA,mBAAK,KAAK;AAAA,gBACN,wBAAwB,WAAW,IAAI,IAAI,GAAG;AAAA,gBAC9C,WAAW,GAAG;AAAA,gBACd;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAEA,gBAAQ,SAAS,MAAM;AAAA,MAC3B,CAAC,EACA,MAAM,WAAS;AAtbhC;AAuboB,aAAK,cAAc,gBAAgB;AAEnC,YACI,MAAM,SAAS,eACf,MAAM,SAAS,kBACf,MAAM,SAAS,iBACf,WAAM,aAAN,mBAAgB,YAAW,KAC7B;AACE,6BAAmB,KAAK;AAAA,YACpB,YAAY;AACR,oBAAM,KAAK,mBAAmB;AAAA,YAClC;AAAA,YACA,IAAI,KAAK;AAAA,UACb;AAAA,QACJ,OAAO;AACH,eAAK,IAAI,MAAM,gDAAgD,KAAK,UAAU,KAAK,CAAC,EAAE;AAEtF,eAAK,KAAK,qBAAqB,mBAAmB,OAAO,IAAI;AAE7D,iBAAO,IAAI,MAAM,KAAK,CAAC;AAAA,QAC3B;AAAA,MACJ,CAAC;AAAA,IACT,CAAC;AAAA,EACL;AAAA,EAEA,aAAa,SAAiB,QAA2B;AACrD,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,YAAM,MAAM,WAAW,OAAO;AAC9B,UAAI,gBAAgB;AAEpB,UAAI,OAAO,SAAS;AAChB,YAAI;AACA,2BAAAA,SAAM;AAAA,YACF,QAAQ;AAAA,YACR,SAAS;AAAA,YACT;AAAA,YACA,SAAS;AAAA,YACT,cAAc;AAAA,YACd;AAAA,UACJ,CAAC,EACI,KAAK,cAAY;AAEd,4BAAgB;AAEhB,oBAAQ,QAAQ;AAAA,UACpB,CAAC,EACA,MAAM,WAAS;AACZ,gBAAI,MAAM,UAAU;AAGhB,mBAAK,IAAI;AAAA,gBACL,YAAY,MAAM,SAAS,MAAM,kBAAkB,GAAG,kBAAkB,KAAK,UAAU,MAAM,SAAS,IAAI,CAAC;AAAA,cAC/G;AAAA,YACJ,WAAW,MAAM,SAAS;AAMtB,kBAAI,MAAM,SAAS,eAAe;AAC9B,qBAAK,IAAI,MAAM,MAAM,OAAO;AAAA,cAChC,OAAO;AACH,qBAAK,IAAI,KAAK,SAAS,MAAM,IAAI,SAAS,GAAG,KAAK,MAAM,OAAO,EAAE;AACjE,gCAAgB,MAAM;AAAA,cAC1B;AAAA,YACJ,OAAO;AAEH,mBAAK,IAAI,MAAM,MAAM,OAAO;AAAA,YAChC;AAEA,mBAAO,IAAI,MAAM,KAAK,CAAC;AAAA,UAC3B,CAAC;AAAA,QACT,SAAS,OAAY;AACjB,iBAAO,IAAI,MAAM,KAAK,CAAC;AAAA,QAC3B;AAAA,MACJ,OAAO;AACH,eAAO,IAAI,MAAM,2BAA2B,CAAC;AAAA,MACjD;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,SAAS,UAA4B;AACzC,QAAI;AACA,WAAK,cAAc,gBAAgB;AACnC,WAAK,cAAc,gBAAgB;AAEnC,eAAS;AAAA,IACb,QAAQ;AACJ,eAAS;AAAA,IACb;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,cAAc,IAAY,OAAgD;AAC9E,QAAI,SAAS,CAAC,MAAM,KAAK;AACrB,UAAI,GAAG,QAAQ,SAAS,MAAM,IAAI;AAC9B,aAAK,KAAK,aAAa,eAAe,EAAE,SAAS,KAAK,OAAO,QAAQ,QAAQ,UAAU,CAAC;AAAA,MAC5F,WAAW,GAAG,QAAQ,MAAM,MAAM,IAAI;AAClC,cAAM,QAAQ,GAAG,MAAM,4BAA4B;AAEnD,YAAI,UAAS,+BAAO,UAAS,GAAG;AAC5B,eAAK,KAAK,aAAa,eAAe;AAAA,YAClC,SAAS,KAAK,OAAO;AAAA,YACrB,QAAQ;AAAA,YACR,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,UAC7B,CAAC;AAAA,QACL;AAAA,MACJ;AACA,UAAI,GAAG,QAAQ,QAAQ,MAAM,OAAO,MAAM,OAAO,MAAM,QAAQ,IAAI;AAC/D,aAAK,KAAK,aAAa,eAAe;AAAA,UAClC,SAAS,KAAK,OAAO;AAAA,UACrB,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,QAAQ,MAAM;AAAA,QAClB,CAAC;AAAA,MACL,WAAW,GAAG,QAAQ,SAAS,MAAM,OAAO,MAAM,OAAO,MAAM,QAAQ,IAAI;AACvE,cAAM,QAAQ,GAAG,MAAM,2BAA2B;AAElD,YAAI,UAAS,+BAAO,UAAS,GAAG;AAC5B,eAAK,KAAK,aAAa,eAAe;AAAA,YAClC,SAAS,KAAK,OAAO;AAAA,YACrB,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,QAAQ,MAAM;AAAA,YACd,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,UAC7B,CAAC;AAAA,QACL;AAAA,MACJ;AAEA,UAAI,GAAG,QAAQ,YAAY,MAAM,MAAM,MAAM,QAAQ,MAAM;AACvD,aAAK,KAAK,eAAe,IAAI,MAAM,GAAc;AAAA,MACrD;AAEA,UAAI,GAAG,QAAQ,YAAY,MAAM,OAAO,MAAM,OAAO,MAAM,QAAQ,IAAI;AACnE,cAAM,MAAM,MAAM;AAElB,aAAK,KAAK,aAAa,eAAe;AAAA,UAClC,SAAS,KAAK,OAAO;AAAA,UACrB,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO,GAAI;AAAA,QAC9C,CAAC;AAAA,MACL,WAAW,GAAG,QAAQ,SAAS,MAAM,OAAO,MAAM,OAAO,MAAM,QAAQ,IAAI;AACvE,cAAM,MAAM,MAAM;AAClB,cAAM,QAAQ,GAAG,MAAM,+BAA+B;AAEtD,YAAI,UAAS,+BAAO,UAAS,GAAG;AAC5B,eAAK,KAAK,aAAa,eAAe;AAAA,YAClC,SAAS,KAAK,OAAO;AAAA,YACrB,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO,GAAI;AAAA,YAC1C,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,UAC7B,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,eAAe,IAAY,KAA6B;AAC1D,UAAM,QAAQ,GAAG,MAAM,4BAA4B;AAEnD,SAAK,aAAa,WAAW;AAE7B,QAAI,OAAO;AACP,UAAI,KAAK;AACL,cAAM,iBAAiB,MAAM,KAAK,cAAc,GAAG,MAAM,CAAC,CAAC,KAAK;AAChE,YAAI,kBAAkB,eAAe,KAAK;AACtC,eAAK,KAAK,SAAS,GAAG,MAAM,CAAC,CAAC,WAAW,eAAe,KAAK,KAAK;AAClE,wBAAc,KAAK;AAAA,YACf,MAAM;AACF,mBAAK,KAAK,SAAS,IAAI,OAAO,KAAK;AAAA,YACvC;AAAA,YACC,eAAe,MAAiB;AAAA,UACrC;AAAA,QACJ;AAAA,MACJ,OAAO;AACH,aAAK,KAAK,SAAS,GAAG,MAAM,CAAC,CAAC,YAAY,MAAM,KAAK;AAAA,MACzD;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,QAAQ,OAAuB;AAC3B,YAAQ,SAAS,IAAI,QAAQ,KAAK,iBAAiB,GAAG;AAAA,EAC1D;AACJ;AAEA,IAAI,QAAQ,SAAS,QAAQ;AAEzB,SAAO,UAAU,CAAC,YAAuD,IAAI,UAAU,OAAO;AAClG,OAAO;AAEH,GAAC,MAAM,IAAI,UAAU,GAAG;AAC5B;",
6
6
  "names": ["axios"]
7
7
  }
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "hydrawise",
4
- "version": "1.0.1",
4
+ "version": "1.0.3",
5
5
  "news": {
6
+ "1.0.3": {
7
+ "en": "updated dependencies",
8
+ "de": "aktualisierte abhängigkeiten",
9
+ "ru": "обновленные зависимости",
10
+ "pt": "dependências atualizadas",
11
+ "nl": "bijgewerkte afhankelijkheden",
12
+ "fr": "dépendances actualisées",
13
+ "it": "dipendenze aggiornate",
14
+ "es": "dependencias actualizadas",
15
+ "pl": "zaktualizowane zależności",
16
+ "uk": "оновлені залежності",
17
+ "zh-cn": "更新的依赖关系"
18
+ },
19
+ "1.0.2": {
20
+ "en": "fixed issues detected by repository checker",
21
+ "de": "von repository checker erkannte probleme",
22
+ "ru": "фиксированные проблемы, выявленные регистратором",
23
+ "pt": "problemas corrigidos detectados pelo verificador de repositório",
24
+ "nl": "vaste problemen gedetecteerd door repository checker",
25
+ "fr": "problèmes corrigés détectés par le vérificateur du dépôt",
26
+ "it": "problemi fissi rilevati da repository checker",
27
+ "es": "problemas fijos detectados por el repositorio",
28
+ "pl": "stałe problemy wykryte przez kontroler repozytorium",
29
+ "uk": "виправлені питання, виявлені репозиторійним чекером",
30
+ "zh-cn": "仓库检查器检测到的固定问题"
31
+ },
6
32
  "1.0.1": {
7
33
  "en": "added compatibility check and testing for node.js 22",
8
34
  "de": "kompatibilitätsprüfung und test für node.js 22",
@@ -55,32 +81,6 @@
55
81
  "uk": "додано значення за замовчуванням до параметра `apiInterval й\nдодано переклади",
56
82
  "zh-cn": "添加参数“ apiInterval” 的默认值 `\n增加翻译"
57
83
  },
58
- "0.3.1": {
59
- "en": "removed parameter `apiKey` in method call",
60
- "de": "entfernter Parameter `apiKey` im Methodenaufruf",
61
- "ru": "удаленный параметр `apiKey' в вызове метода",
62
- "pt": "parâmetro removido `apiKey` na chamada do método",
63
- "nl": "verwijderde parameter ",
64
- "fr": "paramètre supprimé `apiKey` dans l'appel de méthode",
65
- "it": "parametro rimosso `apiKey` nella chiamata metodo",
66
- "es": "parámetro eliminado `apiKey` en llamada de método",
67
- "pl": "usunięty parametr 'apiKey' w wywołaniu metody",
68
- "uk": "видалити параметр `apiKey` в методі виклику",
69
- "zh-cn": "方法调用中已删除参数“ apiKey ”"
70
- },
71
- "0.3.0": {
72
- "en": "added api interval to settings\nchanged interval of schedule endpoint from 5 minutes to 1 minute",
73
- "de": "api intervall zu den einstellungen hinzugefügt\ngeändertes intervall von zeitplan endpunkt von 5 minuten bis 1 minute",
74
- "ru": "добавлен интервал api в настройки\nизмененный интервал конечной точки расписания с 5 минут до 1 минуты",
75
- "pt": "adicionado intervalo api para configurações\nintervalo alterado de cronograma ponto final de 5 minutos a 1 minuto",
76
- "nl": "api-interval toegevoegd aan instellingen\nveranderde interval van het eindpunt van het schema van 5 minuten tot 1 minuut",
77
- "fr": "l'intervalle api ajouté aux paramètres\nchangement de l'intervalle de 5 minutes à 1 minute",
78
- "it": "intervallo api aggiunto alle impostazioni\nintervallo modificato di endpoint programmato da 5 minuti a 1 minuto",
79
- "es": "añadir intervalo api a la configuración\ncambio de intervalo de tiempo de 5 minutos a 1 minuto",
80
- "pl": "dodany interwał api do ustawień\nzmiana odstępu między punktem końcowym schematu z 5 minut do 1 minuty",
81
- "uk": "додано інтервал api для налаштувань\nзмінений інтервал графіка кінцевої точки від 5 хвилин до 1 хвилини",
82
- "zh-cn": "在设置中添加 api 间隔\n时间表终点从5分钟改为1分钟"
83
- },
84
84
  "0.2.8": {
85
85
  "en": "fixed tier and license",
86
86
  "de": "festwert und lizenz",
@@ -137,7 +137,6 @@
137
137
  "type": "free"
138
138
  },
139
139
  "platform": "Javascript/Node.js",
140
- "main": "build/main.js",
141
140
  "icon": "hydrawise.jpg",
142
141
  "enabled": true,
143
142
  "extIcon": "https://raw.githubusercontent.com/SentiQ/ioBroker.hydrawise/main/admin/hydrawise.jpg",
@@ -153,7 +152,7 @@
153
152
  },
154
153
  "dependencies": [
155
154
  {
156
- "js-controller": ">=5.0.0"
155
+ "js-controller": ">=5.0.19"
157
156
  }
158
157
  ],
159
158
  "globalDependencies": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.hydrawise",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Adapter to control the Hydrawise irrigation control system",
5
5
  "author": {
6
6
  "name": "SentiQ",
@@ -9,6 +9,7 @@
9
9
  "homepage": "https://github.com/SentiQ/ioBroker.hydrawise",
10
10
  "license": "MIT",
11
11
  "keywords": [
12
+ "iobroker",
12
13
  "hydrawise",
13
14
  "hunter",
14
15
  "irrigation",
@@ -20,44 +21,29 @@
20
21
  "url": "git@github.com:SentiQ/ioBroker.hydrawise.git"
21
22
  },
22
23
  "engines": {
23
- "node": ">=18"
24
+ "node": ">=20"
24
25
  },
25
26
  "dependencies": {
26
- "@iobroker/adapter-core": "^3.1.6",
27
- "axios": "^1.7.7"
27
+ "@iobroker/adapter-core": "^3.3.2",
28
+ "axios": "^1.13.2"
28
29
  },
29
30
  "devDependencies": {
30
- "@alcalzone/release-script": "^3.8.0",
31
- "@alcalzone/release-script-plugin-iobroker": "^3.7.0",
32
- "@alcalzone/release-script-plugin-license": "^3.5.9",
33
- "@alcalzone/release-script-plugin-manual-review": "^3.7.0",
34
- "@iobroker/adapter-dev": "^1.3.0",
35
- "@iobroker/testing": "^4.1.3",
36
- "@tsconfig/node16": "^16.1.0",
37
- "@types/chai": "^4.3.4",
38
- "@types/chai-as-promised": "^7.1.5",
39
- "@types/mocha": "^10.0.2",
40
- "@types/node": "^20.13.0",
31
+ "@alcalzone/release-script": "^5.0.0",
32
+ "@alcalzone/release-script-plugin-iobroker": "^4.0.0",
33
+ "@alcalzone/release-script-plugin-license": "^4.0.0",
34
+ "@alcalzone/release-script-plugin-manual-review": "^4.0.0",
35
+ "@iobroker/adapter-dev": "^1.4.0",
36
+ "@iobroker/eslint-config": "^2.2.0",
37
+ "@iobroker/testing": "^5.2.2",
38
+ "@tsconfig/node16": "^16.1.8",
39
+ "@types/node": "^24.10.1",
41
40
  "@types/proxyquire": "^1.3.31",
42
- "@types/sinon": "^17.0.3",
43
- "@types/sinon-chai": "^3.2.10",
44
- "@typescript-eslint/eslint-plugin": "^5.60.1",
45
- "@typescript-eslint/parser": "^5.60.1",
46
- "chai": "^4.3.8",
47
- "chai-as-promised": "^8.0.0",
48
- "eslint": "^8.56.0",
49
- "eslint-config-prettier": "^9.0.0",
50
- "eslint-plugin-prettier": "^5.2.1",
51
- "mocha": "^10.3.0",
52
- "nyc": "^15.1.0",
53
- "prettier": "^3.3.2",
41
+ "nyc": "^17.1.0",
54
42
  "proxyquire": "^2.1.3",
55
- "rimraf": "^5.0.7",
56
- "sinon": "^18.0.0",
57
- "sinon-chai": "^3.7.0",
43
+ "rimraf": "^6.0.1",
58
44
  "source-map-support": "^0.5.21",
59
45
  "ts-node": "^10.9.1",
60
- "typescript": "~5.5.4"
46
+ "typescript": "~5.9.3"
61
47
  },
62
48
  "main": "build/main.js",
63
49
  "files": [
@@ -81,7 +67,7 @@
81
67
  "test": "npm run test:ts && npm run test:package",
82
68
  "check": "tsc --noEmit",
83
69
  "coverage": "nyc npm run test:ts",
84
- "lint": "eslint --ext .ts src/ --fix",
70
+ "lint": "eslint -c eslint.config.mjs .",
85
71
  "translate": "translate-adapter",
86
72
  "release": "release-script patch --yes",
87
73
  "release-minor": "release-script minor --yes",