@@ -6,7 +6,7 @@ const settings = require('./util/settings');
6
6
const ExtensionNetworkMap = require ( './extension/networkMap' ) ;
7
7
const zigbeeShepherdConverters = require ( 'zigbee-shepherd-converters' ) ;
8
8
const homeassistant = require ( './homeassistant' ) ;
9
- const objectAssignDeep = require ( ` object-assign-deep` ) ;
9
+ const objectAssignDeep = require ( ' object-assign-deep' ) ;
10
10
11
11
const mqttConfigRegex = new RegExp ( `${ settings . get ( ) . mqtt . base_topic } /bridge/config/\\w+` , 'g' ) ;
12
12
const mqttDeviceRegex = new RegExp ( `${ settings . get ( ) . mqtt . base_topic } /[\\w\\s\\d.-]+/set` , 'g' ) ;
@@ -107,7 +107,7 @@ class Controller {
107
107
sendAllCachedStates ( ) {
108
108
this . zigbee . getAllClients ( ) . forEach ( ( device ) => {
109
109
if ( this . state . exists ( device . ieeeAddr ) ) {
110
- this . mqttPublishDeviceState ( device . ieeeAddr , this . state . get ( device . ieeeAddr ) , false ) ;
110
+ this . mqttPublishDeviceState ( device , this . state . get ( device . ieeeAddr ) , false ) ;
111
111
}
112
112
} ) ;
113
113
}
@@ -216,6 +216,23 @@ class Controller {
216
216
`${ friendlyDevice . vendor } ${ friendlyDevice . description } (${ type } )` ;
217
217
}
218
218
219
+ getDeviceInfoForMqtt ( device ) {
220
+ const { type, ieeeAddr, nwkAddr, manufId, manufName, powerSource, modelId, status} = device ;
221
+ const deviceSettings = settings . getDevice ( device . ieeeAddr ) ;
222
+
223
+ return {
224
+ ieeeAddr,
225
+ friendlyName : deviceSettings . friendly_name || '' ,
226
+ type,
227
+ nwkAddr,
228
+ manufId,
229
+ manufName,
230
+ powerSource,
231
+ modelId,
232
+ status,
233
+ } ;
234
+ }
235
+
219
236
handleZigbeeMessage ( message ) {
220
237
// Zigbee message receieved, reset soft reset timeout.
221
238
this . softResetTimeout ( true ) ;
@@ -337,7 +354,7 @@ class Controller {
337
354
payload . linkquality = message . linkquality ;
338
355
}
339
356
340
- this . mqttPublishDeviceState ( device . ieeeAddr , payload , cache ) ;
357
+ this . mqttPublishDeviceState ( device , payload , cache ) ;
341
358
} ;
342
359
343
360
const payload = converter . convert ( mappedModel , message , publish , settings . getDevice ( device . ieeeAddr ) ) ;
@@ -536,7 +553,7 @@ class Controller {
536
553
const msg = { } ;
537
554
const _key = topicPrefix ? `${ key } _${ topicPrefix } ` : key ;
538
555
msg [ _key ] = json [ key ] ;
539
- this . mqttPublishDeviceState ( deviceID , msg , true ) ;
556
+ this . mqttPublishDeviceState ( device , msg , true ) ;
540
557
}
541
558
} ;
542
559
@@ -575,11 +592,15 @@ class Controller {
575
592
} ) ;
576
593
}
577
594
578
- mqttPublishDeviceState ( deviceID , payload , cache ) {
595
+ mqttPublishDeviceState ( device , payload , cache ) {
596
+ const deviceID = device . ieeeAddr ;
597
+ const appSettings = settings . get ( ) ;
598
+ let messagePayload = { ...payload } ;
599
+
579
600
if ( cacheState ) {
580
601
// Add cached state to payload
581
602
if ( this . state . exists ( deviceID ) ) {
582
- payload = objectAssignDeep . noMutate ( this . state . get ( deviceID ) , payload ) ;
603
+ messagePayload = objectAssignDeep . noMutate ( this . state . get ( deviceID ) , payload ) ;
583
604
}
584
605
585
606
// Update state cache with new state.
@@ -594,7 +615,11 @@ class Controller {
594
615
qos : deviceSettings . qos ? deviceSettings . qos : 0 ,
595
616
} ;
596
617
597
- this . mqtt . publish ( deviceSettings . friendly_name , JSON . stringify ( payload ) , options ) ;
618
+ if ( appSettings . mqtt . include_device_information ) {
619
+ messagePayload . device = this . getDeviceInfoForMqtt ( device ) ;
620
+ }
621
+
622
+ this . mqtt . publish ( deviceSettings . friendly_name , JSON . stringify ( messagePayload ) , options ) ;
598
623
}
599
624
600
625
startupLogVersion ( callback ) {
0 commit comments