diff --git a/app/src/model/ConnectionOptions.ts b/app/src/model/ConnectionOptions.ts index 6d3abe7..3582c1c 100644 --- a/app/src/model/ConnectionOptions.ts +++ b/app/src/model/ConnectionOptions.ts @@ -29,6 +29,7 @@ export function toMqttConnection(options: ConnectionOptions): MqttOptions | unde password: options.password, tls: options.encryption, certValidation: options.certValidation, + subscriptions: options.subscriptions, } } @@ -46,7 +47,7 @@ export function createEmptyConnection(): ConnectionOptions { encryption: false, password: undefined, username: undefined, - subscriptions: ['#', '$SYS'], + subscriptions: ['#', '$SYS/#'], type: 'mqtt', host: '', port: 1883, diff --git a/backend/src/DataSource/MqttSource.ts b/backend/src/DataSource/MqttSource.ts index 248a9dd..4926480 100644 --- a/backend/src/DataSource/MqttSource.ts +++ b/backend/src/DataSource/MqttSource.ts @@ -11,13 +11,13 @@ export interface MqttOptions { tls: boolean certValidation: boolean clientId?: string + subscriptions: string[] } export class MqttSource implements DataSource { public stateMachine: DataSourceStateMachine = new DataSourceStateMachine() private client: Client | undefined private messageCallback?: (topic: string, message: Buffer, packet: any) => void - private rootSubscription = '#' public topicSeparator = '/' public onMessage(messageCallback: (topic: string, message: Buffer, packet: any) => void) { @@ -61,15 +61,12 @@ export class MqttSource implements DataSource { client.on('connect', () => { this.stateMachine.setConnected(true) - client.subscribe(this.rootSubscription, (err: Error) => { - if (err) { - this.stateMachine.setError(err) - } - }) - client.subscribe('$SYS/#', (err: Error) => { - if (err) { - console.error('failed to subscribe to sys topic', err) - } + options.subscriptions.forEach((subscription) => { + client.subscribe(subscription, (err: Error) => { + if (err) { + this.stateMachine.setError(err) + } + }) }) })