diff --git a/lib/statescontroller.js b/lib/statescontroller.js index e16c75db..7613d76b 100644 --- a/lib/statescontroller.js +++ b/lib/statescontroller.js @@ -193,6 +193,7 @@ class StatesController extends EventEmitter { } else { states = stateModel.states; } + if (typeof states === 'function' && !states.prototype) { const entity = await this.adapter.zbController.resolveEntity(deviceId); if (entity) { @@ -597,28 +598,39 @@ class StatesController extends EventEmitter { } async publishToState(devId, model, payload) { - const devStates = await this.getDevStates(`0x${devId}`, model); - let has_debug = false; - if (this.checkDebugDevice(devId)) - { - if (!payload.hasOwnProperty('msg_from_zigbee')) { - this.warn(`ELEVATED I1: message received '${JSON.stringify(payload)}' from device ${devId} type '${model}'`); - has_debug = true; - } + + var isMsg_from_zigbee = payload.hasOwnProperty('msg_from_zigbee'); + var isCommonState = isMsg_from_zigbee|| + payload.hasOwnProperty('linkquality'); + + let has_debug = ! isMsg_from_zigbee && this.checkDebugDevice(devId); + + if (has_debug){ + this.warn(`ELEVATED I1(publishToState): message received '${JSON.stringify(payload)}' from device ${devId} type '${model}'`); } - if (!devStates) { - if (has_debug) this.error(`ELEVATED IE2: no device states for device ${devId} type '${model}'`) - return; + + let states = undefined; + if (isCommonState){ + states = statesMapping.commonStates; } - // find states for payload - let has_published = false; + else{ + const devStates = await this.getDevStates(`0x${devId}`, model); - if (devStates.states !== undefined) { - try { - const states = statesMapping.commonStates.concat( - devStates.states.filter(statedesc => payload.hasOwnProperty(statedesc.prop || statedesc.id)) - ); + if (!devStates) { + if (has_debug) this.error(`ELEVATED IE2 (publishToState): no device states for device ${devId} type '${model}'`) + return; + } + + states = statesMapping.commonStates.concat( + devStates.states.filter(statedesc => payload.hasOwnProperty(statedesc.prop || statedesc.id)) + ); + } + let has_published = false; + + // find states for payload + if (states!== undefined) { + try { for (const stateInd in states) { const statedesc = states[stateInd]; let value; @@ -634,8 +646,8 @@ class StatesController extends EventEmitter { let stateID = statedesc.id; - if (has_debug && statedesc.id !== 'msg_from_zigbee') { - this.warn(`ELEVATED I2: value generated '${JSON.stringify(value)}' from device ${devId} for '${statedesc.name}'`); + if (has_debug) { + this.warn(`ELEVATED I2 (publishToState): value generated '${JSON.stringify(value)}' from device ${devId} for '${statedesc.name}'`); } const common = { diff --git a/lib/zigbeecontroller.js b/lib/zigbeecontroller.js index c5c8271a..c2f3ef95 100644 --- a/lib/zigbeecontroller.js +++ b/lib/zigbeecontroller.js @@ -642,7 +642,7 @@ class ZigbeeController extends EventEmitter { } async handleDeviceJoined(message) { - this.debug('handleDeviceJoined', message); + this.warn('handleDeviceJoined', message); //const entity = await this.resolveEntity(message.device || message.ieeeAddr); //this.emit('new', entity); } @@ -697,13 +697,12 @@ class ZigbeeController extends EventEmitter { } async handleMessage(data) { - this.debug(`handleMessage`, data); + //this.debug(`handleMessage`, data); const entity = await this.resolveEntity(data.device || data.ieeeAddr); const name = (entity && entity._modelID) ? entity._modelID : data.device.ieeeAddr; this.debug( - `Received Zigbee message from '${name}', type '${data.type}', cluster '${data.cluster}'` + - `, data '${JSON.stringify(data.data)}' from endpoint ${data.endpoint.ID}` + - (data.hasOwnProperty('groupID') ? ` with groupID ${data.groupID}` : ``) + `HandleMessage. Received Zigbee message from '${name}', type '${data.type}', cluster '${data.cluster}', from endpoint ${data.endpoint.ID}` + + (data.hasOwnProperty('groupID') ? ` with groupID ${data.groupID}` : ``) + ` data:`,data.data ); this.event(data.type, entity, data); diff --git a/main.js b/main.js index b95d9b35..84ae7368 100644 --- a/main.js +++ b/main.js @@ -458,7 +458,8 @@ class Zigbee extends utils.Adapter { } async onZigbeeEvent(type, entity, message) { - this.log.debug(`Type ${type} device ${safeJsonStringify(entity)} incoming event: ${safeJsonStringify(message)}`); + //Optimization: Use checkDebugDevice as entity and message objects can be very large (ie PTVO 8chanels relay safeJsonStringify(entity) -> 90 kb size) + //this.log.debug(`Type ${type} device ${safeJsonStringify(entity)} incoming event: ${safeJsonStringify(message)}`); const device = entity.device; const mappedModel = entity.mapped; @@ -470,6 +471,9 @@ class Zigbee extends utils.Adapter { const has_elevated_debug = this.stController.checkDebugDevice(devId); if (has_elevated_debug) { + //Full log: + //this.log.debug(`ELEVATED: Zigbee Event of Type "${type}" from device: ${safeJsonStringify(entity)}`); + //this.log.debug(`ELEVATED: incoming event:${safeJsonStringify(message)}`); const shortMessage = {}; for(const propertyName in message) { shortMessage[propertyName] = message[propertyName]; @@ -477,8 +481,12 @@ class Zigbee extends utils.Adapter { shortMessage.device = device.ieeeAddr; shortMessage.meta = undefined; shortMessage.endpoint = (message.endpoint.ID ? message.endpoint.ID: -1); - this.log.warn(`ELEVATED I0: Zigbee Event of Type ${type} from device ${safeJsonStringify(device.ieeeAddr)}, incoming event: ${safeJsonStringify(shortMessage)}`); - } + this.log.warn(`ELEVATED I0: Zigbee Event of Type "${type}" from device "${safeJsonStringify(device.ieeeAddr)}" incoming event: ${safeJsonStringify(shortMessage)}`); + }else + { + this.onLog('debug',`Zigbee Event of Type ${type} from device ${devId}. incoming event:`, message); + }; + // this assigment give possibility to use iobroker logger in code of the converters, via meta.logger meta.logger = this.log; @@ -580,7 +588,11 @@ class Zigbee extends utils.Adapter { async processConverters(converters, devId, model, mappedModel, message, meta) { for (const converter of converters) { const publish = (payload) => { - this.log.debug(`Publish ${safeJsonStringify(payload)} to ${safeJsonStringify(devId)}`); + + if (this.stController.checkDebugDevice(devId)) + this.log.warn(`ELEVATED: ProcessConverters devId:${devId} payload: ${safeJsonStringify(payload)}`); + else this.onLog('debug', `Publish to ${devId}. payload:`, payload); + if (typeof payload === 'object') { this.publishToState(devId, model, payload); } @@ -629,7 +641,11 @@ class Zigbee extends utils.Adapter { let isGroup = false; const has_elevated_debug = this.stController.checkDebugDevice(deviceId) - this.log.debug(`publishFromState : ${deviceId} ${model} ${safeJsonStringify(stateList)}`); + + if(has_elevated_debug) + this.log.warn(`ELEVATED: PublishFromState : ${deviceId} ${model} stateList: ${safeJsonStringify(stateList)}`) + else this.onLog('debug',`PublishFromState : ${deviceId} ${model}. stateList:`, stateList); + if (model === 'group') { isGroup = true; deviceId = parseInt(deviceId); @@ -637,7 +653,9 @@ class Zigbee extends utils.Adapter { try { const entity = await this.zbController.resolveEntity(deviceId); - this.log.debug(`entity: ${deviceId} ${model} ${safeJsonStringify(entity)}`); + if (has_elevated_debug) + this.log.warn(`ELEVATED: PublishFromState. ${deviceId} ${model} entity: ${safeJsonStringify(entity)}`) + else this.onLog('debug',`PublishFromState : ${deviceId} ${model} entity:`, entity); const mappedModel = entity.mapped; @@ -1090,7 +1108,12 @@ class Zigbee extends utils.Adapter { if (typeof data === 'string') { logger(`${msg}. ${data}`); } else { - logger(`${msg}. ${safeJsonStringify(data)}`); + if ((this.log.level==level) || + ((this.log.level='warn')&&(level='error')) || + ((this.log.level='info')&&(level='error' || level=='warn')) + ) + logger(`${msg}. ${safeJsonStringify(data)}`) + else logger(`${msg}. DATA unavailable. Check log level. MsgLevel:${level} AdaptorLevel:${this.log.level}`); } } else { logger(msg);