@operato/scene-mqtt 10.0.0-beta.1 → 10.0.0-beta.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,120 +1,33 @@
1
- # MQTT data source component for Things Scene
1
+ # @operato/scene-mqtt
2
2
 
3
- ## Concept
3
+ > MQTT integration component for things-scene
4
4
 
5
- - Subscribe the topic via MQTT Web Socket protocol.
6
- - Data Spread is set in data binding.
5
+ <!-- AUTOGEN_BEGIN: do not edit between markers (run scripts/regenerate-readmes.mjs to update) -->
7
6
 
8
- ## Creating a Development Environment (Based on MacOS)
7
+ ## Components
9
8
 
10
- ### Installing mosquitto as MQTT broker
9
+ - `Mqtt`
11
10
 
12
- - Use homebrew to install mosquitto.
11
+ ## Install
13
12
 
13
+ ```bash
14
+ yarn add @operato/scene-mqtt
14
15
  ```
15
- $ brew install mosquitto
16
- ```
17
-
18
- - Since Things Scene is for the browser, it must be accessible to MQTT broker via a web socket. So, enable the web service function on mosquitto.
19
-
20
- ```
21
- $ echo -e "listener 1884\nprotocol websockets\nlistener 1883\nprotocol mqtt" >> /usr/local/opt/mosquitto/etc/mosquitto/mosquitto.conf
22
- $ brew services restart mosquitto
23
- ```
24
-
25
- ## Setting
26
-
27
- ### When use mosquitto as MQTT Broker
28
16
 
29
- - broker : hostname of the broker
30
- - port : websocket service port number (default 1884)
31
- - path : '/mqtt'
32
- - user : username or blank
33
- - password : password or blank
34
- - topic : topic
35
- - qos : QOS level [0, 1, 2]
36
- - client-id : (unique) client id
17
+ ## Usage
37
18
 
19
+ ```ts
20
+ import { Mqtt } from '@operato/scene-mqtt'
38
21
  ```
39
- The client ID is the name of the only connection node (from the broker's point of view) and is unique for monitoring by the broker.
40
- If leave the client ID property blank, it will be automatically created as 'THINGS-BOARD-{timestamp}'.
41
- If enter the client ID property, it will be automatically created as '{{client-id}}-{timestamp}'.
42
- The reason for adding timestamp to the client ID property is to create a unique ID.
43
- ```
44
-
45
- - data-format : [Plain Text, JSON]
46
- - retain : true or false
47
- - ssl : true or false (false)
48
22
 
49
- ### When use MQTT-Websocket Plug-in of RabbitMQ
23
+ ## Build
50
24
 
51
- - broker : hostname of the broker
52
- - port : websocket service port number (default 15675)
53
- - path : '/ws'
54
- - user : username or blank
55
- - password : password or blank
56
- - topic : topic
57
- - qos : QOS level [0, 1, 2]
58
- - client-id : (unique) client id
59
-
60
- ```
61
- The client ID is the name of the only connection node (from the broker's point of view) and is unique for monitoring by the broker.
62
- If leave the client ID property blank, it will be automatically created as 'THINGS-BOARD-{timestamp}'.
63
- If enter the client ID property, it will be automatically created as '{{client-id}}-{timestamp}'.
64
- The reason for adding timestamp to the client ID property is to create a unique ID.
25
+ ```bash
26
+ yarn build
65
27
  ```
66
28
 
67
- - data-format : [Plain Text, JSON]
68
- - retain : true or false
69
- - ssl : true or false (false)
70
-
71
- ## Message Exchange when use MQTT-Websocket Plug-in of Rabbit MQ
72
-
73
- ```
74
- If use MQTT-Websocket Plug-in of Rabbit MQ,
75
- it is routed by 'amq.topic' exchange of durable 'topic' type.
76
- Therefore, the topic property of the above MQTT Data Source acts as a routing key.
77
-
78
- To receive from MQTT Data Source using AMQP of Rabbit MQ,
79
- see the JavaScript sample code below.
80
- ```
81
-
82
- ```
83
- var amqp = require('amqplib/callback_api');
84
-
85
- amqp.connect('amqp://hatiolab:hatiolab@mq.hatiolab.com', function(err, conn) {
86
- if(err) {
87
- console.error(err);
88
- return;
89
- }
90
-
91
- conn.createChannel(function (err, ch) {
92
- // Set exchange to amq.topic and durable option to true.
93
- var ex = 'amq.topic';
94
-
95
- ch.assertExchange(ex, 'topic', { durable: true });
96
-
97
- var location = {
98
- x: 100,
99
- y: 200
100
- };
101
-
102
- // When set the topic property to location
103
- ch.publish(ex, 'location', new Buffer(JSON.stringify(location)));
104
- });
105
- });
106
- ```
107
-
108
- ## build
109
-
110
- `$ yarn build`
111
-
112
- | type | filename | for | tested |
113
- | ---- | ----------------------- | -------------- | ------ |
114
- | UMD | things-scene-mqtt.js | modern browser | X |
115
- | UMD | things-scene-mqtt-ie.js | ie 11 | O |
116
- | ESM | things-scene-mqtt.mjs | modern browser | X |
29
+ Output: ESM module at `dist/index.js` (single bundle, no UMD/IE legacy).
117
30
 
118
- ## publish
31
+ _Version: 10.0.0-beta.2_
119
32
 
120
- `$ yarn publish`
33
+ <!-- AUTOGEN_END -->
package/dist/mqtt.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Component, ComponentNature, Properties, Shape } from '@hatiolab/things-scene';
1
+ import { ComponentNature, Properties, Shape } from '@hatiolab/things-scene';
2
2
  declare const Mqtt_base: (new (...args: any[]) => {
3
3
  _convertDataFormat(data: any, format: any): any;
4
4
  isDataSource(): boolean;
@@ -32,7 +32,7 @@ declare const Mqtt_base: (new (...args: any[]) => {
32
32
  get disposed(): boolean;
33
33
  isLayer(): boolean;
34
34
  isGroup(): boolean;
35
- isContainer(): this is import("@hatiolab/things-scene/dist-types/types/component").Container;
35
+ isContainer(): this is import("@hatiolab/things-scene").Container;
36
36
  isLine(): boolean;
37
37
  isRoot(): boolean;
38
38
  isRootModel(): boolean;
@@ -48,9 +48,9 @@ declare const Mqtt_base: (new (...args: any[]) => {
48
48
  get(property: any): any;
49
49
  set(props: any, propval?: any): any;
50
50
  getState(property: any): any;
51
- setState(props: any, propval?: any): any;
51
+ setState(props: Partial<import("@hatiolab/things-scene").State> | string, propval?: any): any;
52
52
  get model(): any;
53
- get state(): any;
53
+ get state(): import("@hatiolab/things-scene").State;
54
54
  get hierarchy(): any;
55
55
  get volatile(): never[];
56
56
  _applyProps(target: any, props: any, options: any): any;
@@ -92,7 +92,7 @@ declare const Mqtt_base: (new (...args: any[]) => {
92
92
  prerender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
93
93
  render(context: import("@hatiolab/things-scene").SceneRenderContext): void;
94
94
  postrender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
95
- prepare(resolve: (component: Component) => void, reject: (reason: any) => void): void;
95
+ prepare(resolve: (component: import("@hatiolab/things-scene").Component) => void, reject: (reason: any) => void): void;
96
96
  prepareIf(condition: boolean): void;
97
97
  drawText(context: import("@hatiolab/things-scene").SceneRenderContext): void;
98
98
  drawStroke(context: import("@hatiolab/things-scene").SceneRenderContext, override?: Record<string, unknown>): void;
@@ -143,16 +143,16 @@ declare const Mqtt_base: (new (...args: any[]) => {
143
143
  get started(): boolean;
144
144
  set started(v: boolean): any;
145
145
  get controls(): import("@hatiolab/things-scene").Control[] | undefined;
146
- findFirst(finder: string | ((c: Component) => boolean), ...others: any[]): Component | undefined;
147
- findAll(s: string | ((c: Component) => boolean), ...others: any[]): any[] | undefined;
148
- capture(x: number, y: number, except?: (c: Component) => boolean): any;
146
+ findFirst(finder: string | ((c: import("@hatiolab/things-scene").Component) => boolean), ...others: any[]): import("@hatiolab/things-scene").Component | undefined;
147
+ findAll(s: string | ((c: import("@hatiolab/things-scene").Component) => boolean), ...others: any[]): any[] | undefined;
148
+ capture(x: number, y: number, except?: (c: import("@hatiolab/things-scene").Component) => boolean): any;
149
149
  findAnchor(name: string): any;
150
- isDescendible(container: Component): boolean;
150
+ isDescendible(container: import("@hatiolab/things-scene").Component): boolean;
151
151
  getContext(component?: unknown): any;
152
- get root(): Component;
153
- get rootModel(): Component;
154
- get parent(): Component;
155
- set parent(v: Component): any;
152
+ get root(): import("@hatiolab/things-scene").Component;
153
+ get rootModel(): import("@hatiolab/things-scene").Component;
154
+ get parent(): import("@hatiolab/things-scene").Component;
155
+ set parent(v: import("@hatiolab/things-scene").Component): any;
156
156
  get anchors(): import("@hatiolab/things-scene").Anchor[];
157
157
  get scalable(): boolean;
158
158
  get stuck(): boolean;
@@ -178,20 +178,20 @@ declare const Mqtt_base: (new (...args: any[]) => {
178
178
  ondropfile(transfered: FileList, files: string[]): void;
179
179
  transcoordS2P(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
180
180
  transcoordP2S(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
181
- transcoordS2T(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
182
- transcoordT2P(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
183
- transcoordT2S(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
184
- transcoordS2TR(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
185
- transcoordS2O(x: number, y: number, target: Component): import("@hatiolab/things-scene").POINT;
186
- transcoordC2S(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
187
- transcoordS2C(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
181
+ transcoordS2T(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
182
+ transcoordT2P(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
183
+ transcoordT2S(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
184
+ transcoordS2TR(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
185
+ transcoordS2O(x: number, y: number, target: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
186
+ transcoordC2S(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
187
+ transcoordS2C(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
188
188
  toParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
189
189
  fromParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
190
- toScene(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
191
- fromScene(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
192
- toLocal(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
193
- toGlobal(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
194
- toOther(x: number, y: number, target: Component): import("@hatiolab/things-scene").POINT;
190
+ toScene(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
191
+ fromScene(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
192
+ toLocal(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
193
+ toGlobal(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
194
+ toOther(x: number, y: number, target: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
195
195
  on(name: string | object, callback: Function, context?: any): any;
196
196
  off(name?: string | object, callback?: Function, context?: any): any;
197
197
  once(name: string | object, callback: Function, context?: any): any;
@@ -201,24 +201,24 @@ declare const Mqtt_base: (new (...args: any[]) => {
201
201
  onchange(after: Record<string, any>, before: Record<string, any>): void;
202
202
  calculateBounds?(): void;
203
203
  oncreate_element?(element: HTMLElement): void;
204
- removeComponent(component: Component, ghost?: boolean): void;
205
- addComponent(component: Component, ghost?: boolean): void;
206
- insertComponentAt(component: Component, index: number, ghost?: boolean): void;
207
- getOverlay(component: Component): HTMLElement | undefined;
208
- findById(id: string): Component | undefined;
209
- findByRefid(ref: string | number): Component | undefined;
210
- findAllById(id: string): Component[];
204
+ removeComponent(component: import("@hatiolab/things-scene").Component, ghost?: boolean): void;
205
+ addComponent(component: import("@hatiolab/things-scene").Component, ghost?: boolean): void;
206
+ insertComponentAt(component: import("@hatiolab/things-scene").Component, index: number, ghost?: boolean): void;
207
+ getOverlay(component: import("@hatiolab/things-scene").Component): HTMLElement | undefined;
208
+ findById(id: string): import("@hatiolab/things-scene").Component | undefined;
209
+ findByRefid(ref: string | number): import("@hatiolab/things-scene").Component | undefined;
210
+ findAllById(id: string): import("@hatiolab/things-scene").Component[];
211
211
  resize(): void;
212
212
  fit(type?: string): void;
213
- get components(): Component[] | undefined;
213
+ get components(): import("@hatiolab/things-scene").Component[] | undefined;
214
214
  get layout(): any;
215
215
  get auxOverlay(): HTMLElement | undefined;
216
216
  get isReady(): boolean;
217
217
  get unitScale(): number;
218
- get selected(): Component[];
219
- set selected(_v: Component[]): any;
220
- get focused(): Component | null;
221
- set focused(_v: Component | null): any;
218
+ get selected(): import("@hatiolab/things-scene").Component[];
219
+ set selected(_v: import("@hatiolab/things-scene").Component[]): any;
220
+ get focused(): import("@hatiolab/things-scene").Component | null;
221
+ set focused(_v: import("@hatiolab/things-scene").Component | null): any;
222
222
  get hasSameParentForAllSelected(): boolean;
223
223
  set hasSameParentForAllSelected(_v: boolean): any;
224
224
  get fitMode(): string | undefined;
@@ -275,7 +275,7 @@ declare const Mqtt_base: (new (...args: any[]) => {
275
275
  get disposed(): boolean;
276
276
  isLayer(): boolean;
277
277
  isGroup(): boolean;
278
- isContainer(): this is import("@hatiolab/things-scene/dist-types/types/component").Container;
278
+ isContainer(): this is import("@hatiolab/things-scene").Container;
279
279
  isLine(): boolean;
280
280
  isRoot(): boolean;
281
281
  isRootModel(): boolean;
@@ -291,9 +291,9 @@ declare const Mqtt_base: (new (...args: any[]) => {
291
291
  get(property: any): any;
292
292
  set(props: any, propval?: any): any;
293
293
  getState(property: any): any;
294
- setState(props: any, propval?: any): any;
294
+ setState(props: Partial<import("@hatiolab/things-scene").State> | string, propval?: any): any;
295
295
  get model(): any;
296
- get state(): any;
296
+ get state(): import("@hatiolab/things-scene").State;
297
297
  get hierarchy(): any;
298
298
  get volatile(): never[];
299
299
  _applyProps(target: any, props: any, options: any): any;
@@ -329,7 +329,7 @@ declare const Mqtt_base: (new (...args: any[]) => {
329
329
  draw(context?: import("@hatiolab/things-scene").SceneRenderContext): void;
330
330
  prerender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
331
331
  postrender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
332
- prepare(resolve: (component: Component) => void, reject: (reason: any) => void): void;
332
+ prepare(resolve: (component: import("@hatiolab/things-scene").Component) => void, reject: (reason: any) => void): void;
333
333
  prepareIf(condition: boolean): void;
334
334
  drawText(context: import("@hatiolab/things-scene").SceneRenderContext): void;
335
335
  drawStroke(context: import("@hatiolab/things-scene").SceneRenderContext, override?: Record<string, unknown>): void;
@@ -380,16 +380,16 @@ declare const Mqtt_base: (new (...args: any[]) => {
380
380
  get started(): boolean;
381
381
  set started(v: boolean): any;
382
382
  get controls(): import("@hatiolab/things-scene").Control[] | undefined;
383
- findFirst(finder: string | ((c: Component) => boolean), ...others: any[]): Component | undefined;
384
- findAll(s: string | ((c: Component) => boolean), ...others: any[]): any[] | undefined;
385
- capture(x: number, y: number, except?: (c: Component) => boolean): any;
383
+ findFirst(finder: string | ((c: import("@hatiolab/things-scene").Component) => boolean), ...others: any[]): import("@hatiolab/things-scene").Component | undefined;
384
+ findAll(s: string | ((c: import("@hatiolab/things-scene").Component) => boolean), ...others: any[]): any[] | undefined;
385
+ capture(x: number, y: number, except?: (c: import("@hatiolab/things-scene").Component) => boolean): any;
386
386
  findAnchor(name: string): any;
387
- isDescendible(container: Component): boolean;
387
+ isDescendible(container: import("@hatiolab/things-scene").Component): boolean;
388
388
  getContext(component?: unknown): any;
389
- get root(): Component;
390
- get rootModel(): Component;
391
- get parent(): Component;
392
- set parent(v: Component): any;
389
+ get root(): import("@hatiolab/things-scene").Component;
390
+ get rootModel(): import("@hatiolab/things-scene").Component;
391
+ get parent(): import("@hatiolab/things-scene").Component;
392
+ set parent(v: import("@hatiolab/things-scene").Component): any;
393
393
  get scalable(): boolean;
394
394
  get stuck(): boolean;
395
395
  get capturable(): boolean;
@@ -414,20 +414,20 @@ declare const Mqtt_base: (new (...args: any[]) => {
414
414
  ondropfile(transfered: FileList, files: string[]): void;
415
415
  transcoordS2P(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
416
416
  transcoordP2S(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
417
- transcoordS2T(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
418
- transcoordT2P(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
419
- transcoordT2S(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
420
- transcoordS2TR(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
421
- transcoordS2O(x: number, y: number, target: Component): import("@hatiolab/things-scene").POINT;
422
- transcoordC2S(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
423
- transcoordS2C(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
417
+ transcoordS2T(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
418
+ transcoordT2P(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
419
+ transcoordT2S(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
420
+ transcoordS2TR(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
421
+ transcoordS2O(x: number, y: number, target: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
422
+ transcoordC2S(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
423
+ transcoordS2C(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
424
424
  toParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
425
425
  fromParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
426
- toScene(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
427
- fromScene(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
428
- toLocal(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
429
- toGlobal(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
430
- toOther(x: number, y: number, target: Component): import("@hatiolab/things-scene").POINT;
426
+ toScene(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
427
+ fromScene(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
428
+ toLocal(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
429
+ toGlobal(x: number, y: number, top?: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
430
+ toOther(x: number, y: number, target: import("@hatiolab/things-scene").Component): import("@hatiolab/things-scene").POINT;
431
431
  on(name: string | object, callback: Function, context?: any): any;
432
432
  off(name?: string | object, callback?: Function, context?: any): any;
433
433
  once(name: string | object, callback: Function, context?: any): any;
@@ -437,24 +437,24 @@ declare const Mqtt_base: (new (...args: any[]) => {
437
437
  onchange(after: Record<string, any>, before: Record<string, any>): void;
438
438
  calculateBounds?(): void;
439
439
  oncreate_element?(element: HTMLElement): void;
440
- removeComponent(component: Component, ghost?: boolean): void;
441
- addComponent(component: Component, ghost?: boolean): void;
442
- insertComponentAt(component: Component, index: number, ghost?: boolean): void;
443
- getOverlay(component: Component): HTMLElement | undefined;
444
- findById(id: string): Component | undefined;
445
- findByRefid(ref: string | number): Component | undefined;
446
- findAllById(id: string): Component[];
440
+ removeComponent(component: import("@hatiolab/things-scene").Component, ghost?: boolean): void;
441
+ addComponent(component: import("@hatiolab/things-scene").Component, ghost?: boolean): void;
442
+ insertComponentAt(component: import("@hatiolab/things-scene").Component, index: number, ghost?: boolean): void;
443
+ getOverlay(component: import("@hatiolab/things-scene").Component): HTMLElement | undefined;
444
+ findById(id: string): import("@hatiolab/things-scene").Component | undefined;
445
+ findByRefid(ref: string | number): import("@hatiolab/things-scene").Component | undefined;
446
+ findAllById(id: string): import("@hatiolab/things-scene").Component[];
447
447
  resize(): void;
448
448
  fit(type?: string): void;
449
- get components(): Component[] | undefined;
449
+ get components(): import("@hatiolab/things-scene").Component[] | undefined;
450
450
  get layout(): any;
451
451
  get auxOverlay(): HTMLElement | undefined;
452
452
  get isReady(): boolean;
453
453
  get unitScale(): number;
454
- get selected(): Component[];
455
- set selected(_v: Component[]): any;
456
- get focused(): Component | null;
457
- set focused(_v: Component | null): any;
454
+ get selected(): import("@hatiolab/things-scene").Component[];
455
+ set selected(_v: import("@hatiolab/things-scene").Component[]): any;
456
+ get focused(): import("@hatiolab/things-scene").Component | null;
457
+ set focused(_v: import("@hatiolab/things-scene").Component | null): any;
458
458
  get hasSameParentForAllSelected(): boolean;
459
459
  set hasSameParentForAllSelected(_v: boolean): any;
460
460
  get fitMode(): string | undefined;
package/dist/mqtt.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mqtt.js","sourceRoot":"","sources":["../src/mqtt.ts"],"names":[],"mappings":"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","sourcesContent":["import mqtt from 'mqtt'\n\n/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport {\n Component,\n ComponentNature,\n DataSource,\n Properties,\n RectPath,\n Shape,\n sceneComponent\n} from '@hatiolab/things-scene'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'string',\n label: 'broker',\n name: 'broker',\n placeholder: 'WebSocket hostname'\n },\n {\n type: 'number',\n label: 'port',\n name: 'port',\n placeholder: '15675'\n },\n {\n type: 'string',\n label: 'path',\n name: 'path',\n placeholder: '/mqtt or /ws'\n },\n {\n type: 'string',\n label: 'user',\n name: 'user'\n },\n {\n type: 'string',\n label: 'password',\n name: 'password',\n property: 'password'\n },\n {\n type: 'string',\n label: 'topic',\n name: 'topic'\n },\n {\n type: 'number',\n label: 'qos',\n name: 'qos',\n placeholder: '0..2'\n },\n {\n type: 'string',\n label: 'client-id',\n name: 'clientId'\n },\n {\n type: 'select',\n label: 'data-format',\n name: 'dataFormat',\n property: {\n options: [\n {\n display: 'Plain Text',\n value: 'text'\n },\n {\n display: 'JSON',\n value: 'json'\n }\n ]\n }\n },\n {\n type: 'checkbox',\n label: 'retain',\n name: 'retain'\n },\n {\n type: 'checkbox',\n label: 'ssl',\n name: 'ssl'\n }\n ],\n 'value-property': 'message',\n help: 'scene/component/mqtt'\n}\n\nconst MQTT_IMAGE =\n 'data:image/png;base64,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'\n\n@sceneComponent('mqtt')\nexport default class Mqtt extends DataSource(RectPath(Shape)) {\n private static _image: HTMLImageElement\n\n private _client?: mqtt.MqttClient\n\n static get image() {\n if (!Mqtt._image) {\n Mqtt._image = new Image()\n Mqtt._image.src = MQTT_IMAGE\n }\n\n return Mqtt._image\n }\n\n async ready() {\n await super.ready()\n\n if (!this.app.isViewMode) return\n\n this._initMqttConnection()\n }\n\n _initMqttConnection() {\n try {\n this._client && this._client.end(true, () => {})\n } catch (e) {\n console.error(e)\n }\n delete this._client\n\n var {\n broker,\n port = 8441,\n clientId = 'THINGS-FACTORY',\n topic,\n qos = 1,\n retain = false,\n path = '/mqtt',\n dataFormat = 'text',\n user,\n password,\n ssl = false\n } = this.state\n\n if (!broker) {\n console.warn('broker not defined')\n return\n }\n\n clientId = [clientId, Date.now()].join('-')\n\n var client = mqtt.connect(`ws://${broker}:${port}${path}`, {\n keepalive: 10,\n clientId,\n protocolId: 'MQTT',\n protocolVersion: 4,\n clean: true,\n reconnectPeriod: 1000,\n connectTimeout: 30 * 1000,\n will: {\n topic: 'WillMsg',\n payload: 'Connection Closed abnormally..!',\n qos: 0,\n retain: false\n },\n username: user,\n password: password,\n rejectUnauthorized: false\n })\n\n client.on('error', err => {\n console.error(err)\n client.end()\n })\n\n client.on('connect', packet => {\n console.log('client connected:', clientId, packet)\n\n client.subscribe(\n topic,\n {\n qos\n },\n (err, granted) => {\n if (!err) {\n console.error('subscription failed', err)\n } else {\n console.log('mqtt subscription success for topic - ', topic)\n }\n }\n )\n })\n\n client.on('message', (topic, message, packet) => {\n this.data = this._convertDataFormat(message.toString(), dataFormat)\n })\n\n client.on('close', () => {\n console.log(clientId + ' disconnected')\n })\n\n this._client = client\n }\n\n dispose() {\n try {\n this._client && this._client.end(true, () => {})\n } catch (e) {\n console.error(e)\n }\n delete this._client\n\n super.dispose()\n }\n\n render(context: CanvasRenderingContext2D): void {\n var { left, top, width, height } = this.bounds\n\n context.beginPath()\n this.drawImage(context, Mqtt.image, left, top, width, height)\n }\n\n get message() {\n return this.getState('message')\n }\n\n set message(message) {\n this.setState('message', message)\n }\n\n onchange(after: Properties, before: Properties): void {\n if ('message' in after) {\n const { message } = after\n\n if (!this._client || !this._client.connected) {\n return\n }\n\n var { topic } = this.state\n\n this._client.publish(topic, JSON.stringify(message), {\n qos: 0,\n retain: false\n })\n }\n }\n\n get nature() {\n return NATURE\n }\n}\n"]}
1
+ {"version":3,"file":"mqtt.js","sourceRoot":"","sources":["../src/mqtt.ts"],"names":[],"mappings":"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","sourcesContent":["import mqtt from 'mqtt'\n\n/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport {\n ComponentNature,\n DataSource,\n Properties,\n RectPath,\n Shape,\n sceneComponent\n} from '@hatiolab/things-scene'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'string',\n label: 'broker',\n name: 'broker',\n placeholder: 'WebSocket hostname'\n },\n {\n type: 'number',\n label: 'port',\n name: 'port',\n placeholder: '15675'\n },\n {\n type: 'string',\n label: 'path',\n name: 'path',\n placeholder: '/mqtt or /ws'\n },\n {\n type: 'string',\n label: 'user',\n name: 'user'\n },\n {\n type: 'string',\n label: 'password',\n name: 'password',\n property: 'password'\n },\n {\n type: 'string',\n label: 'topic',\n name: 'topic'\n },\n {\n type: 'number',\n label: 'qos',\n name: 'qos',\n placeholder: '0..2'\n },\n {\n type: 'string',\n label: 'client-id',\n name: 'clientId'\n },\n {\n type: 'select',\n label: 'data-format',\n name: 'dataFormat',\n property: {\n options: [\n {\n display: 'Plain Text',\n value: 'text'\n },\n {\n display: 'JSON',\n value: 'json'\n }\n ]\n }\n },\n {\n type: 'checkbox',\n label: 'retain',\n name: 'retain'\n },\n {\n type: 'checkbox',\n label: 'ssl',\n name: 'ssl'\n }\n ],\n 'value-property': 'message',\n help: 'scene/component/mqtt'\n}\n\nconst MQTT_IMAGE =\n 'data:image/png;base64,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'\n\n@sceneComponent('mqtt')\nexport default class Mqtt extends DataSource(RectPath(Shape)) {\n private static _image: HTMLImageElement\n\n private _client?: mqtt.MqttClient\n\n static get image() {\n if (!Mqtt._image) {\n Mqtt._image = new Image()\n Mqtt._image.src = MQTT_IMAGE\n }\n\n return Mqtt._image\n }\n\n async ready() {\n await super.ready()\n\n if (!this.app.isViewMode) return\n\n this._initMqttConnection()\n }\n\n _initMqttConnection() {\n try {\n this._client && this._client.end(true, () => {})\n } catch (e) {\n console.error(e)\n }\n delete this._client\n\n var {\n broker,\n port = 8441,\n clientId = 'THINGS-FACTORY',\n topic,\n qos = 1,\n retain = false,\n path = '/mqtt',\n dataFormat = 'text',\n user,\n password,\n ssl = false\n } = this.state\n\n if (!broker) {\n console.warn('broker not defined')\n return\n }\n\n clientId = [clientId, Date.now()].join('-')\n\n var client = mqtt.connect(`ws://${broker}:${port}${path}`, {\n keepalive: 10,\n clientId,\n protocolId: 'MQTT',\n protocolVersion: 4,\n clean: true,\n reconnectPeriod: 1000,\n connectTimeout: 30 * 1000,\n will: {\n topic: 'WillMsg',\n payload: 'Connection Closed abnormally..!',\n qos: 0,\n retain: false\n },\n username: user,\n password: password,\n rejectUnauthorized: false\n })\n\n client.on('error', err => {\n console.error(err)\n client.end()\n })\n\n client.on('connect', packet => {\n console.log('client connected:', clientId, packet)\n\n client.subscribe(\n topic,\n {\n qos\n },\n (err, granted) => {\n if (!err) {\n console.error('subscription failed', err)\n } else {\n console.log('mqtt subscription success for topic - ', topic)\n }\n }\n )\n })\n\n client.on('message', (topic, message, packet) => {\n this.data = (this as any)._convertDataFormat(message.toString(), dataFormat)\n })\n\n client.on('close', () => {\n console.log(clientId + ' disconnected')\n })\n\n this._client = client\n }\n\n dispose() {\n try {\n this._client && this._client.end(true, () => {})\n } catch (e) {\n console.error(e)\n }\n delete this._client\n\n super.dispose()\n }\n\n render(context: CanvasRenderingContext2D): void {\n var { left, top, width, height } = this.bounds\n\n context.beginPath()\n this.drawImage(context, Mqtt.image, left, top, width, height)\n }\n\n get message() {\n return this.getState('message')\n }\n\n set message(message) {\n this.setState('message', message)\n }\n\n onchange(after: Properties, before: Properties): void {\n if ('message' in after) {\n const { message } = after\n\n if (!this._client || !this._client.connected) {\n return\n }\n\n var { topic } = this.state\n\n this._client.publish(topic, JSON.stringify(message), {\n qos: 0,\n retain: false\n })\n }\n }\n\n get nature() {\n return NATURE\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@operato/scene-mqtt",
3
- "version": "10.0.0-beta.1",
3
+ "version": "10.0.0-beta.30",
4
4
  "type": "module",
5
5
  "description": "MQTT integration component for things-scene",
6
6
  "license": "MIT",
@@ -59,5 +59,5 @@
59
59
  "prettier --write"
60
60
  ]
61
61
  },
62
- "gitHead": "bb127dd516b9e962fb2d0a24bc2d8c5e108f06fb"
62
+ "gitHead": "06b35b1726ec4f27ee76657ce341c6c6f3ba1b3a"
63
63
  }