@mirta/globals 0.0.2
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 +24 -0
- package/README.md +26 -0
- package/README.ru.md +25 -0
- package/package.json +33 -0
- package/types/index.d.ts +6 -0
- package/types/wb-rules.d.ts +497 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
This is free and unencumbered software released into the public domain.
|
|
2
|
+
|
|
3
|
+
Anyone is free to copy, modify, publish, use, compile, sell, or
|
|
4
|
+
distribute this software, either in source code form or as a compiled
|
|
5
|
+
binary, for any purpose, commercial or non-commercial, and by any
|
|
6
|
+
means.
|
|
7
|
+
|
|
8
|
+
In jurisdictions that recognize copyright laws, the author or authors
|
|
9
|
+
of this software dedicate any and all copyright interest in the
|
|
10
|
+
software to the public domain. We make this dedication for the benefit
|
|
11
|
+
of the public at large and to the detriment of our heirs and
|
|
12
|
+
successors. We intend this dedication to be an overt act of
|
|
13
|
+
relinquishment in perpetuity of all present and future rights to this
|
|
14
|
+
software under copyright law.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
19
|
+
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
20
|
+
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
21
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
|
23
|
+
|
|
24
|
+
For more information, please refer to <https://unlicense.org>
|
package/README.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# @mirta/globals
|
|
2
|
+
|
|
3
|
+
[](https://github.com/wb-mirta/core/blob/latest/packages/mirta-globals/README.md)
|
|
4
|
+
[](https://github.com/wb-mirta/core/blob/latest/packages/mirta-globals/README.ru.md)
|
|
5
|
+
[](https://npmjs.com/package/@mirta/globals)
|
|
6
|
+
|
|
7
|
+
Provides a complete set of necessary types enabling development of wb-rules in TypeScript.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
pnpm add -D @mirta/globals
|
|
13
|
+
```
|
|
14
|
+
Add following lines to your `tsconfig.json`:
|
|
15
|
+
|
|
16
|
+
```json
|
|
17
|
+
{
|
|
18
|
+
"compilerOptions": {
|
|
19
|
+
"baseUrl": ".",
|
|
20
|
+
"types": [
|
|
21
|
+
"@mirta/globals",
|
|
22
|
+
"node"
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
package/README.ru.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# @mirta/globals
|
|
2
|
+
|
|
3
|
+
[](https://github.com/wb-mirta/core/blob/latest/packages/mirta-globals/README.md)
|
|
4
|
+
[](https://github.com/wb-mirta/core/blob/latest/packages/mirta-globals/README.ru.md)
|
|
5
|
+
[](https://npmjs.com/package/@mirta/globals)
|
|
6
|
+
|
|
7
|
+
Содержит все необходимые типы для разработки правил wb-rules на TypeScript.
|
|
8
|
+
|
|
9
|
+
## Установка
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
pnpm add -D @mirta/globals
|
|
13
|
+
```
|
|
14
|
+
Добавьте следующие строки в ваш `tsconfig.json`:
|
|
15
|
+
|
|
16
|
+
```json
|
|
17
|
+
{
|
|
18
|
+
"compilerOptions": {
|
|
19
|
+
"types": [
|
|
20
|
+
"node"
|
|
21
|
+
"@mirta/globals",
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
```
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mirta/globals",
|
|
3
|
+
"description": "Complete set of types for wb-rule development in TypeScript",
|
|
4
|
+
"version": "0.0.2",
|
|
5
|
+
"license": "Unlicense",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"mirta",
|
|
8
|
+
"globals",
|
|
9
|
+
"wb-rules"
|
|
10
|
+
],
|
|
11
|
+
"files": [
|
|
12
|
+
"types",
|
|
13
|
+
"LICENSE",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./types/index.d.ts"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"homepage": "https://github.com/wb-mirta/core/tree/latest/packages/mirta-globals#readme",
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/wb-mirta/core.git",
|
|
25
|
+
"directory": "packages/mirta-globals"
|
|
26
|
+
},
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/wb-mirta/core/issues"
|
|
29
|
+
},
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public"
|
|
32
|
+
}
|
|
33
|
+
}
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
/** Типы и интерфейсы правил wb-rules */
|
|
2
|
+
declare namespace WbRules {
|
|
3
|
+
|
|
4
|
+
/** Расширение для поддержки module.static */
|
|
5
|
+
type ModuleStatic = Record<string, unknown>
|
|
6
|
+
|
|
7
|
+
type LogFunc = (
|
|
8
|
+
message: string | undefined, ...args: (string | number | boolean)[]
|
|
9
|
+
) => void
|
|
10
|
+
|
|
11
|
+
interface Log {
|
|
12
|
+
/**
|
|
13
|
+
* Запись в лог информационного сообщения, полезного в долгосрочной перспективе.
|
|
14
|
+
* @param message
|
|
15
|
+
* @param args
|
|
16
|
+
*/
|
|
17
|
+
(message: string | undefined, ...args: (string | number | boolean)[]): void
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Запись в лог сообщения, полезного при отладке в процессе разработки и не представляющего ценности в долгосрочной перспективе.
|
|
21
|
+
* @param message
|
|
22
|
+
* @param args
|
|
23
|
+
*/
|
|
24
|
+
debug(message: unknown, ...args: (string | number | boolean)[]): void
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Запись в лог информационного сообщения, полезного в долгосрочной перспективе.
|
|
28
|
+
* @param message
|
|
29
|
+
* @param args
|
|
30
|
+
*/
|
|
31
|
+
info(message: string | undefined, ...args: (string | number | boolean)[]): void
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Запись ненормального или неожиданного события в потоке приложения, но не прекращение выполнения.
|
|
35
|
+
* @param message
|
|
36
|
+
* @param args
|
|
37
|
+
*/
|
|
38
|
+
warning(message: string | undefined, ...args: (string | number | boolean)[]): void
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Запись события остановки выполнения из-за сбоя текущего действия.
|
|
42
|
+
* @param message
|
|
43
|
+
* @param args
|
|
44
|
+
*/
|
|
45
|
+
error(message: string | undefined, ...args: (string | number | boolean)[]): void
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
type DevControl = Record<string, unknown>
|
|
49
|
+
type Dev = Record<string, DevControl | undefined>
|
|
50
|
+
|
|
51
|
+
interface Timer {
|
|
52
|
+
firing: boolean
|
|
53
|
+
|
|
54
|
+
stop(): void
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
type TimerCollection = Record<string, Timer>
|
|
58
|
+
|
|
59
|
+
/** Тип значения топика MQTT. */
|
|
60
|
+
type MqttValue = string | number | boolean
|
|
61
|
+
|
|
62
|
+
interface MqttMessage {
|
|
63
|
+
topic: string
|
|
64
|
+
value: MqttValue
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Объект описания правила
|
|
69
|
+
*/
|
|
70
|
+
interface RuleOptions {
|
|
71
|
+
/**
|
|
72
|
+
* Поле или список полей, которые необходимо отслеживать
|
|
73
|
+
*/
|
|
74
|
+
whenChanged?: string[] | string
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Правило срабатывает, когда значение, возвращаемое функцией, меняется с false на true.
|
|
78
|
+
*/
|
|
79
|
+
asSoonAs?(): boolean
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Функция, которая сигнализирует, что правило должно отработать
|
|
83
|
+
*/
|
|
84
|
+
when?(): number | boolean
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Функция, которая вызывается при срабатывании правила
|
|
88
|
+
* @param newValue Новое значение
|
|
89
|
+
* @param deviceId Устройство, сгенерировавшее событие
|
|
90
|
+
* @param controlId Поле, по которому произошло событие
|
|
91
|
+
*/
|
|
92
|
+
then(
|
|
93
|
+
newValue?: MqttValue,
|
|
94
|
+
deviceId?: string,
|
|
95
|
+
controlId?: string
|
|
96
|
+
): void
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
enum ControlType {
|
|
100
|
+
SWITCH = 'switch',
|
|
101
|
+
ALARM = 'alarm',
|
|
102
|
+
PUSHBUTTON = 'pushbutton',
|
|
103
|
+
RANGE = 'range',
|
|
104
|
+
RGB = 'rgb',
|
|
105
|
+
TEXT = 'text',
|
|
106
|
+
VALUE = 'value'
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Объект настроек передаваемого в контрол значения.
|
|
111
|
+
*/
|
|
112
|
+
interface ControlValueOptions {
|
|
113
|
+
/**
|
|
114
|
+
* Значение контрола
|
|
115
|
+
*/
|
|
116
|
+
value: string | number | boolean
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Уведомить правила об изменении значения,
|
|
120
|
+
* по умолчанию - `true`.
|
|
121
|
+
*/
|
|
122
|
+
notify?: boolean
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Контрол устройства
|
|
127
|
+
*/
|
|
128
|
+
interface Control {
|
|
129
|
+
/**
|
|
130
|
+
* Устанавливает заголовок.
|
|
131
|
+
* @param title
|
|
132
|
+
*/
|
|
133
|
+
setTitle(title: string): void
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Устанавливает описание.
|
|
137
|
+
* @param description
|
|
138
|
+
*/
|
|
139
|
+
setDescription(description: string): void
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Устанавливает тип значения.
|
|
143
|
+
* @param type Тип значения.
|
|
144
|
+
* @see ControlType
|
|
145
|
+
*/
|
|
146
|
+
setType(controlType: ControlType): void
|
|
147
|
+
|
|
148
|
+
setUnits(units: string): void
|
|
149
|
+
|
|
150
|
+
setReadonly(isReadonly: boolean): void
|
|
151
|
+
|
|
152
|
+
setMax(max: number): void
|
|
153
|
+
|
|
154
|
+
setMin(min: number): void
|
|
155
|
+
|
|
156
|
+
setError(order: number): void
|
|
157
|
+
|
|
158
|
+
setValue(value: MqttValue | ControlValueOptions): void
|
|
159
|
+
|
|
160
|
+
getId(): string
|
|
161
|
+
|
|
162
|
+
getTitle(): string
|
|
163
|
+
|
|
164
|
+
getDescription(): string
|
|
165
|
+
|
|
166
|
+
getType(): string
|
|
167
|
+
|
|
168
|
+
getUnits(): string
|
|
169
|
+
|
|
170
|
+
getReadonly(): boolean
|
|
171
|
+
|
|
172
|
+
getMax(): number
|
|
173
|
+
|
|
174
|
+
getMin(): number
|
|
175
|
+
|
|
176
|
+
getError(): string
|
|
177
|
+
|
|
178
|
+
getOrder(): number
|
|
179
|
+
|
|
180
|
+
getValue(): string | number | boolean
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Конфигурация контрола.
|
|
185
|
+
*/
|
|
186
|
+
interface ControlOptions {
|
|
187
|
+
/**
|
|
188
|
+
* имя, публикуемое в MQTT-топике
|
|
189
|
+
*/
|
|
190
|
+
title?: string
|
|
191
|
+
/**
|
|
192
|
+
* тип, публикуемый в MQTT-топике
|
|
193
|
+
* @see ControlType
|
|
194
|
+
*/
|
|
195
|
+
type: string
|
|
196
|
+
/**
|
|
197
|
+
* значение параметра по умолчанию
|
|
198
|
+
*/
|
|
199
|
+
value: string | number | boolean
|
|
200
|
+
/**
|
|
201
|
+
* когда задано истинное значение, при запуске контроллера параметр всегда устанавливается в значение по умолчанию.
|
|
202
|
+
* Иначе он будет установлен в последнее сохранённое значение.
|
|
203
|
+
*/
|
|
204
|
+
forceDefault?: boolean
|
|
205
|
+
/**
|
|
206
|
+
* когда задано истинное значение, параметр объявляется read-only
|
|
207
|
+
*/
|
|
208
|
+
readonly?: boolean
|
|
209
|
+
precision?: number
|
|
210
|
+
/**
|
|
211
|
+
* когда задано истинное значение, при описании контрола в коде фактическое создание его в mqtt происходить
|
|
212
|
+
* не будет до тех пор, пока этому контролу не будет присвоено какое-то значение
|
|
213
|
+
* (например dev[deviceID][controlID] = "string")
|
|
214
|
+
*/
|
|
215
|
+
lazyInit?: boolean
|
|
216
|
+
/**
|
|
217
|
+
* Порядок следования полей
|
|
218
|
+
*/
|
|
219
|
+
order?: number
|
|
220
|
+
/**
|
|
221
|
+
* для параметра типа range может задавать его максимально допустимое значение
|
|
222
|
+
*/
|
|
223
|
+
max?: number
|
|
224
|
+
/**
|
|
225
|
+
* для параметра типа range может задавать его минимально допустимое значение
|
|
226
|
+
*/
|
|
227
|
+
min?: number
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Интерфейс устройства
|
|
232
|
+
*/
|
|
233
|
+
interface Device {
|
|
234
|
+
getId(): string
|
|
235
|
+
|
|
236
|
+
getCellId(cellName: string): string
|
|
237
|
+
|
|
238
|
+
addControl(cellName: string, description: ControlOptions): void
|
|
239
|
+
|
|
240
|
+
removeControl(cellName: string): void
|
|
241
|
+
|
|
242
|
+
getControl(cellName: string): Control
|
|
243
|
+
|
|
244
|
+
isControlExists(cellName: string): boolean
|
|
245
|
+
|
|
246
|
+
controlsList(): Control[]
|
|
247
|
+
|
|
248
|
+
isVirtual(): boolean
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
type ControlOptionsTree = Record<string, ControlOptions>
|
|
252
|
+
|
|
253
|
+
interface DeviceOptions {
|
|
254
|
+
title: string
|
|
255
|
+
cells: ControlOptionsTree
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Функция, вызываемая при завершении процесса
|
|
260
|
+
* @param exitCode код возврата процесса
|
|
261
|
+
* @param capturedOutput захваченный stdout процесса в виде строки в случае, когда задана опция captureOutput
|
|
262
|
+
* @param capturedErrorOutput захваченный stderr процесса в виде строки в случае, когда задана опция captureErrorOutput
|
|
263
|
+
*/
|
|
264
|
+
type ExitCallback = (
|
|
265
|
+
exitCode: number,
|
|
266
|
+
capturedOutput?: string,
|
|
267
|
+
capturedErrorOutput?: string
|
|
268
|
+
) => void
|
|
269
|
+
|
|
270
|
+
interface SpawnOptions {
|
|
271
|
+
/**
|
|
272
|
+
* Если true, захватить stdout процесса и передать его в виде строки в exitCallback
|
|
273
|
+
*/
|
|
274
|
+
captureOutput?: boolean
|
|
275
|
+
/**
|
|
276
|
+
* Если true, захватить stderr процесса и передать его в виде строки в exitCallback.
|
|
277
|
+
* Если данный параметр не задан, то stderr дочернего процесса направляется в stderr процесса wb-rules
|
|
278
|
+
*/
|
|
279
|
+
captureErrorOutput?: boolean
|
|
280
|
+
/**
|
|
281
|
+
* Строка, которую следует использовать в качестве содержимого stdin процесса
|
|
282
|
+
*/
|
|
283
|
+
input?: string
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Функция, вызываемая при завершении процесса
|
|
287
|
+
*/
|
|
288
|
+
exitCallback?: ExitCallback
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
interface ReadConfigOptions {
|
|
292
|
+
logErrorOnNoFile: boolean
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
interface StorageOptions {
|
|
296
|
+
global: boolean
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
type PersistentStorage = new (
|
|
300
|
+
name: string,
|
|
301
|
+
options: StorageOptions
|
|
302
|
+
) => PersistentStorage
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
declare namespace NodeJS {
|
|
306
|
+
interface Module {
|
|
307
|
+
/**
|
|
308
|
+
* Хранит данные, общие для всех экземпляров данного модуля.
|
|
309
|
+
*/
|
|
310
|
+
static: WbRules.ModuleStatic
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
declare var log: WbRules.Log
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Объект доступа к MQTT-топикам устройства
|
|
318
|
+
*/
|
|
319
|
+
declare var dev: WbRules.Dev
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Объект доступа к именованным таймерам
|
|
323
|
+
*/
|
|
324
|
+
declare var timers: WbRules.TimerCollection
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Создаёт правило обработки.
|
|
328
|
+
* @param ruleName Название правила.
|
|
329
|
+
* @param options Конфигурация правила.
|
|
330
|
+
*/
|
|
331
|
+
declare function defineRule(name: string, options: WbRules.RuleOptions): void
|
|
332
|
+
/**
|
|
333
|
+
* Создаёт анонимное правило обработки.
|
|
334
|
+
* @param options Конфигурация правила.
|
|
335
|
+
*/
|
|
336
|
+
declare function defineRule(options: WbRules.RuleOptions): void
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Создаёт виртуальное устройство.
|
|
340
|
+
* @param deviceId Идентификатор устройства.
|
|
341
|
+
* @param options Конфигурация устройства.
|
|
342
|
+
*/
|
|
343
|
+
declare function defineVirtualDevice(
|
|
344
|
+
deviceId: string,
|
|
345
|
+
options: WbRules.DeviceOptions
|
|
346
|
+
): WbRules.Device
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Позволяет получить объект для работы с указанным устройством.
|
|
350
|
+
* @param deviceId Идентификатор устройства.
|
|
351
|
+
*/
|
|
352
|
+
declare function getDevice(deviceId: string): WbRules.Device | undefined
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Позволяет получить объект для работы с указанным контролом устройства.
|
|
356
|
+
* @param controlPath Строка в формате "deviceId/controlId"
|
|
357
|
+
*/
|
|
358
|
+
declare function getControl(controlPath: string): WbRules.Control | undefined
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Запускает периодический таймер с указанным интервалом.
|
|
362
|
+
*
|
|
363
|
+
* К таймеру можно обратиться через `timers.<name>` внутри when при работе с `defineRule`.
|
|
364
|
+
*
|
|
365
|
+
* @param name Идентификатор таймера в глобальном наборе `timers`.
|
|
366
|
+
* @param delay Интервал срабатывания, в миллисекундах
|
|
367
|
+
*/
|
|
368
|
+
declare function startTicker(name: string, interval: number): void
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Запускает однократный таймер с указанным именем,
|
|
372
|
+
* к которому можно обратиться через `timers.<name>`,
|
|
373
|
+
*
|
|
374
|
+
* см. [руководство по однократным таймерам](https://github.com/wirenboard/wb-rules?tab=readme-ov-file#однократные)
|
|
375
|
+
*
|
|
376
|
+
* @param name Идентификатор таймера в глобальном наборе `timers`.
|
|
377
|
+
* @param delay
|
|
378
|
+
*
|
|
379
|
+
* Используется при работе с определениями правил:
|
|
380
|
+
*
|
|
381
|
+
* @example
|
|
382
|
+
* ```ts
|
|
383
|
+
* defineRule('1', {
|
|
384
|
+
* asSoonAs: () => dev['test_buzzer/enabled'],
|
|
385
|
+
* then: () => {
|
|
386
|
+
* startTimer('one_second', 1000)
|
|
387
|
+
* dev['buzzer/enabled'] = true
|
|
388
|
+
* }
|
|
389
|
+
* })
|
|
390
|
+
*
|
|
391
|
+
* defineRule('2', {
|
|
392
|
+
* when: () => timers.one_second.firing,
|
|
393
|
+
* then: () => {
|
|
394
|
+
* dev['buzzer/enabled'] = false
|
|
395
|
+
* dev['test_buzzed/enabled'] = false
|
|
396
|
+
* }
|
|
397
|
+
* })
|
|
398
|
+
*
|
|
399
|
+
* ```
|
|
400
|
+
*
|
|
401
|
+
*/
|
|
402
|
+
declare function startTimer(name: string, delay: number): void
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Запуск внешних процессов
|
|
406
|
+
* @param cmd
|
|
407
|
+
* @param args
|
|
408
|
+
* @param options
|
|
409
|
+
*/
|
|
410
|
+
declare function spawn(
|
|
411
|
+
cmd: string,
|
|
412
|
+
args: string[],
|
|
413
|
+
options: WbRules.SpawnOptions | WbRules.ExitCallback
|
|
414
|
+
): void
|
|
415
|
+
|
|
416
|
+
declare function runShellCommand(
|
|
417
|
+
command: string,
|
|
418
|
+
options: WbRules.SpawnOptions | WbRules.ExitCallback
|
|
419
|
+
): void
|
|
420
|
+
|
|
421
|
+
declare function readConfig(
|
|
422
|
+
fileName: string,
|
|
423
|
+
options?: WbRules.ReadConfigOptions
|
|
424
|
+
): object
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
*
|
|
428
|
+
* @param alias Альтернативное наименование для контрола.
|
|
429
|
+
* @param controlPath Путь к контролу устройства в формате `deviceId/controlId`
|
|
430
|
+
*
|
|
431
|
+
* @example
|
|
432
|
+
* ```ts
|
|
433
|
+
* defineAlias('heaterOn', 'Relays/Relay 1')
|
|
434
|
+
* ```
|
|
435
|
+
*/
|
|
436
|
+
declare function defineAlias(alias: string, controlPath: string): void
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* Следует учесть, что функция format и xformat съедают одинарные квадратные скобки!
|
|
440
|
+
* Поэтому, если необходимо их вывести, то нужно дублировать.
|
|
441
|
+
*/
|
|
442
|
+
interface String {
|
|
443
|
+
format(...args: (string | number | boolean)[]): string
|
|
444
|
+
xformat(...args: (string | number | boolean)[]): string
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Подписаться на топик (допустимы символы # и +)
|
|
449
|
+
* @param topic
|
|
450
|
+
* @param callback
|
|
451
|
+
*/
|
|
452
|
+
declare function trackMqtt(
|
|
453
|
+
topic: string,
|
|
454
|
+
callback: (message: WbRules.MqttMessage) => void
|
|
455
|
+
): void
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* Публикация сообщений в MQTT
|
|
459
|
+
* Важно: не используйте publish() для изменения значения параметров устройств.
|
|
460
|
+
* @param topic
|
|
461
|
+
* @param payload
|
|
462
|
+
* @param QoS
|
|
463
|
+
* @param retain
|
|
464
|
+
*/
|
|
465
|
+
declare function publish(
|
|
466
|
+
topic: string,
|
|
467
|
+
value: WbRules.MqttValue,
|
|
468
|
+
QoS?: number,
|
|
469
|
+
retain?: boolean
|
|
470
|
+
): void
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Класс оповещения
|
|
474
|
+
* @abstract
|
|
475
|
+
*/
|
|
476
|
+
declare abstract class Notify {
|
|
477
|
+
/**
|
|
478
|
+
* Отправляет почту указанному адресату
|
|
479
|
+
* @static
|
|
480
|
+
* @param to адресат
|
|
481
|
+
* @param subject тема
|
|
482
|
+
* @param text содержимое
|
|
483
|
+
* @memberof Notify
|
|
484
|
+
*/
|
|
485
|
+
static sendEmail(to: string, subject: string, text: string): void
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* Отправляет SMS на указанный номер
|
|
489
|
+
* Для отправки SMS используется ModemManager, а если он не установлен, то gammu.
|
|
490
|
+
* @static
|
|
491
|
+
* @param to номер адресата
|
|
492
|
+
* @param text содержимое
|
|
493
|
+
* @param command используя команду
|
|
494
|
+
* @memberof Notify
|
|
495
|
+
*/
|
|
496
|
+
static sendSMS(to: string, text: string, command?: string): void
|
|
497
|
+
}
|