UNPKG

zigbee-herdsman

Version:

An open source ZigBee gateway solution with node.js.

473 lines (469 loc) 16.9 kB
import * as Zdo from "../src/zspec/zdo"; import type * as ZdoTypes from "../src/zspec/zdo/definition/tstypes"; export const NODE_DESC_DEFAULTS = { // nwkAddress: NodeId; /** 000 == Zigbee Coordinator, 001 == Zigbee Router, 010 === Zigbee End Device, 011-111 === Reserved */ // logicalType: number; fragmentationSupported: undefined, apsFlags: 0, frequencyBand: 3, capabilities: Zdo.Utils.getMacCapFlags(0x8e), // manufacturerCode: number; maxBufSize: 0xaa, maxIncTxSize: 0xac, serverMask: Zdo.Utils.getServerMask(0x2c43), maxOutTxSize: 0xdc, deprecated1: 0, tlvs: [], }; export const LQI_TABLE_ENTRY_DEFAULTS = { extendedPanId: [1, 2, 3, 4, 5, 6, 7, 8], // eui64: EUI64; // nwkAddress: NodeId; /** * The type of the neighbor device: * 0x00 = ZigBee coordinator * 0x01 = ZigBee router * 0x02 = ZigBee end device * 0x03 = Unknown * * 2-bit */ deviceType: 0x01, /** * 0x00 = Receiver is off * 0x01 = Receiver is on * 0x02 = unknown */ rxOnWhenIdle: 0x00, /** * 0x00 = neighbor is the parent * 0x01 = neighbor is a child * 0x02 = neighbor is a sibling * 0x03 = None of the above * 0x04 = previous child */ // relationship: number; reserved1: 0, /** * 0x00 = neighbor is not accepting join requests * 0x01 = neighbor is accepting join requests * 0x02 = unknown */ permitJoining: 0x00, /** Each of these reserved bits shall be set to 0. 6-bit */ reserved2: 0, // depth: number; // lqi: number; }; export const ROUTING_TABLE_ENTRY_DEFAULTS = { // destinationAddress: NodeId; /** * Status of the route * 0x0=ACTIVE. * 0x1=DISCOVERY_UNDERWAY. * 0x2=DISCOVERY_FAILED. * 0x3=INACTIVE. * 0x4=VALIDATION_UNDERWAY * 0x5-0x7=RESERVED * * 3-bit */ // status: keyof typeof RoutingTableStatus | 'UNKNOWN'; memoryConstrained: 0, manyToOne: 0, routeRecordRequired: 0, reserved1: 0, // nextHopAddress: number; }; export const DEFAULT_184_CHECKIN_INTERVAL = 50; /** * - undefined => should timeout * - key => identifier for special behavior */ export const MOCK_DEVICES: { [key: number]: { nodeDescriptor?: ZdoTypes.ResponseMap[Zdo.ClusterId.NODE_DESCRIPTOR_RESPONSE]; activeEndpoints?: ZdoTypes.ResponseMap[Zdo.ClusterId.ACTIVE_ENDPOINTS_RESPONSE]; simpleDescriptor?: {[key: number]: ZdoTypes.ResponseMap[Zdo.ClusterId.SIMPLE_DESCRIPTOR_RESPONSE] | undefined}; lqiTable?: ZdoTypes.ResponseMap[Zdo.ClusterId.LQI_TABLE_RESPONSE]; routingTable?: ZdoTypes.ResponseMap[Zdo.ClusterId.ROUTING_TABLE_RESPONSE]; attributes?: {[key: number]: {[key: string]: unknown}}; key?: "xiaomi"; }; } = { // coordinator 0: { nodeDescriptor: [Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 0, logicalType: 0b000, manufacturerCode: 0x0007}], activeEndpoints: [Zdo.Status.SUCCESS, {nwkAddress: 0, endpointList: [1, 2]}], simpleDescriptor: { 1: [ Zdo.Status.SUCCESS, {nwkAddress: 0, length: 14, endpoint: 1, profileId: 2, deviceId: 3, deviceVersion: 1, inClusterList: [10], outClusterList: [11]}, ], 2: [ Zdo.Status.SUCCESS, {nwkAddress: 0, length: 14, endpoint: 2, profileId: 3, deviceId: 5, deviceVersion: 1, inClusterList: [1], outClusterList: [0]}, ], }, }, 129: { nodeDescriptor: [Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 129, logicalType: 0b001, manufacturerCode: 1212}], // {type: 'Router', manufacturerCode: 1212}, activeEndpoints: [Zdo.Status.SUCCESS, {nwkAddress: 129, endpointList: [1]}], // {endpoints: [1]}, simpleDescriptor: { 1: [ Zdo.Status.SUCCESS, {nwkAddress: 129, length: 14, endpoint: 1, profileId: 99, deviceId: 5, deviceVersion: 1, inClusterList: [0, 1], outClusterList: [2]}, ], // {1: {endpointID: 1, deviceID: 5, inputClusters: [0, 1], outputClusters: [2], profileID: 99}}, }, attributes: { 1: { modelId: "myModelID", manufacturerName: "KoenAndCo", zclVersion: 1, appVersion: 2, hwVersion: 3, dateCode: "201901", swBuildId: "1.01", powerSource: 1, stackVersion: 101, }, }, }, 140: { nodeDescriptor: undefined, lqiTable: [ Zdo.Status.SUCCESS, { neighborTableEntries: 2, startIndex: 0, entryList: [ {...LQI_TABLE_ENTRY_DEFAULTS, eui64: "0x160", nwkAddress: 160, lqi: 20, relationship: 2, depth: 5}, {...LQI_TABLE_ENTRY_DEFAULTS, eui64: "0x170", nwkAddress: 170, lqi: 21, relationship: 4, depth: 8}, ], }, ], routingTable: [ Zdo.Status.SUCCESS, { routingTableEntries: 2, startIndex: 0, entryList: [ {...ROUTING_TABLE_ENTRY_DEFAULTS, destinationAddress: 120, status: "ACTIVE", nextHopAddress: 1}, {...ROUTING_TABLE_ENTRY_DEFAULTS, destinationAddress: 130, status: "DISCOVERY_FAILED", nextHopAddress: 2}, ], }, ], }, 150: { nodeDescriptor: undefined, key: "xiaomi", }, 151: { nodeDescriptor: [Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 151, logicalType: 0b010, manufacturerCode: 1219}], activeEndpoints: undefined, key: "xiaomi", }, 160: { nodeDescriptor: [Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 160, logicalType: 0b001, manufacturerCode: 1212}], activeEndpoints: [Zdo.Status.SUCCESS, {nwkAddress: 160, endpointList: []}], attributes: {}, }, 161: { // stackComplianceRevision 0 nodeDescriptor: [ Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 161, logicalType: 0b001, manufacturerCode: 1213, serverMask: Zdo.Utils.getServerMask(0)}, ], activeEndpoints: [Zdo.Status.SUCCESS, {nwkAddress: 161, endpointList: [4, 1]}], simpleDescriptor: { 1: [ Zdo.Status.SUCCESS, {nwkAddress: 161, length: 14, endpoint: 1, profileId: 99, deviceId: 5, deviceVersion: 1, inClusterList: [0, 1], outClusterList: [2]}, ], 4: [ Zdo.Status.SUCCESS, {nwkAddress: 161, length: 12, endpoint: 4, profileId: 99, deviceId: 5, deviceVersion: 1, inClusterList: [1], outClusterList: [2]}, ], }, attributes: { 1: { modelId: "myDevice9123", manufacturerName: "Boef", zclVersion: 1, appVersion: 2, hwVersion: 3, dateCode: "201901", swBuildId: "1.01", powerSource: 1, stackVersion: 101, }, 4: {}, }, }, 162: { // stackComplianceRevision 21 nodeDescriptor: [ Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 162, logicalType: 0b001, manufacturerCode: 1213, serverMask: Zdo.Utils.getServerMask(0x2a00)}, ], activeEndpoints: [Zdo.Status.SUCCESS, {nwkAddress: 162, endpointList: [2, 1]}], simpleDescriptor: { 1: [ Zdo.Status.SUCCESS, {nwkAddress: 162, length: 12, endpoint: 1, profileId: 99, deviceId: 5, deviceVersion: 1, inClusterList: [1], outClusterList: [2]}, ], 2: [ Zdo.Status.SUCCESS, {nwkAddress: 162, length: 14, endpoint: 2, profileId: 99, deviceId: 5, deviceVersion: 1, inClusterList: [0, 1], outClusterList: [2]}, ], }, attributes: { 2: { modelId: "myDevice9124", manufacturerName: "Boef", zclVersion: 1, appVersion: 2, hwVersion: 3, dateCode: "201901", swBuildId: "1.01", powerSource: 1, stackVersion: 101, }, 1: {}, }, }, 170: { nodeDescriptor: [Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 170, logicalType: 0b010, manufacturerCode: 4619}], activeEndpoints: [Zdo.Status.SUCCESS, {nwkAddress: 170, endpointList: [1]}], simpleDescriptor: { 1: [ Zdo.Status.SUCCESS, { nwkAddress: 170, length: 14, endpoint: 1, profileId: 99, deviceId: 5, deviceVersion: 1, inClusterList: [0, 1280], outClusterList: [2], }, ], }, attributes: { 1: { zoneState: 0, iasCieAddr: "0x0000012300000000", modelId: "myIasDevice", manufacturerName: "KoenAndCoSecurity", zclVersion: 1, appVersion: 2, hwVersion: 3, dateCode: "201901", swBuildId: "1.01", powerSource: 1, stackVersion: 101, }, }, }, 171: { // Xiaomi WXCJKG11LM - https://github.com/koenkk/zigbee2mqtt/issues/2844 nodeDescriptor: [Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 171, logicalType: 0b010, manufacturerCode: 1212}], activeEndpoints: [Zdo.Status.SUCCESS, {nwkAddress: 171, endpointList: [1, 2, 3, 4, 5, 6]}], simpleDescriptor: { 1: [ Zdo.Status.SUCCESS, { nwkAddress: 171, length: 16, endpoint: 1, profileId: 99, deviceId: 5, deviceVersion: 1, inClusterList: [0, 1, 2], outClusterList: [2], }, ], }, attributes: { 1: { modelId: "lumi.remote.b286opcn01", manufacturerName: "Xioami", zclVersion: 1, appVersion: 2, hwVersion: 3, dateCode: "201901", swBuildId: "1.01", powerSource: 1, stackVersion: 101, }, }, }, 172: { // Gledopto GL-C-007/GL-C-008 - https://github.com/Koenkk/zigbee2mqtt/issues/2872 // All endpoints announce to support genBasic but only endpoint 12 really responds nodeDescriptor: [Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 172, logicalType: 0b001, manufacturerCode: 1212}], activeEndpoints: [Zdo.Status.SUCCESS, {nwkAddress: 172, endpointList: [12, 11, 13]}], simpleDescriptor: { 11: [ Zdo.Status.SUCCESS, { nwkAddress: 172, length: 26, endpoint: 11, profileId: 99, deviceId: 0x0210, deviceVersion: 1, inClusterList: [0, 3, 4, 5, 6, 8, 768, 62301], outClusterList: [2], }, ], 12: [ Zdo.Status.SUCCESS, { nwkAddress: 172, length: 24, endpoint: 12, profileId: 99, deviceId: 0xe15e, deviceVersion: 1, inClusterList: [0, 3, 4, 5, 6, 8, 768], outClusterList: [2], }, ], 13: [ Zdo.Status.SUCCESS, { nwkAddress: 172, length: 24, endpoint: 13, profileId: 99, deviceId: 0x0100, deviceVersion: 1, inClusterList: [0, 3, 4, 5, 6, 8, 768], outClusterList: [2], }, ], }, attributes: { 12: { modelId: "GL-C-008", manufacturerName: "Gledopto", zclVersion: 1, appVersion: 2, hwVersion: 3, dateCode: "201901", swBuildId: "1.01", powerSource: 1, stackVersion: 101, }, }, }, 173: { nodeDescriptor: [Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 173, logicalType: 0b010, manufacturerCode: 0}], activeEndpoints: [Zdo.Status.SUCCESS, {nwkAddress: 173, endpointList: [1]}], simpleDescriptor: undefined, attributes: {}, }, 174: { nodeDescriptor: [Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 174, logicalType: 0b010, manufacturerCode: 1213}], activeEndpoints: [Zdo.Status.SUCCESS, {nwkAddress: 174, endpointList: [1]}], simpleDescriptor: { 1: [ Zdo.Status.SUCCESS, {nwkAddress: 174, length: 14, endpoint: 1, profileId: 99, deviceId: 5, deviceVersion: 1, inClusterList: [0, 32], outClusterList: [2]}, ], }, attributes: { 1: {checkinInterval: DEFAULT_184_CHECKIN_INTERVAL}, }, }, 175: { nodeDescriptor: [Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 175, logicalType: 0b001, manufacturerCode: 1212}], activeEndpoints: [Zdo.Status.SUCCESS, {nwkAddress: 175, endpointList: [1, 2, 3, 4, 5, 6]}], simpleDescriptor: { 1: [ Zdo.Status.SUCCESS, { nwkAddress: 175, length: 16, endpoint: 1, profileId: 99, deviceId: 5, deviceVersion: 1, inClusterList: [0, 1, 2], outClusterList: [2], }, ], }, attributes: { 1: { modelId: "lumi.plug", manufacturerName: "LUMI", zclVersion: 1, appVersion: 2, hwVersion: 3, dateCode: "201901", swBuildId: "1.01", powerSource: 1, stackVersion: 101, }, }, }, 176: { nodeDescriptor: [Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 176, logicalType: 0b001, manufacturerCode: 1212}], activeEndpoints: [Zdo.Status.SUCCESS, {nwkAddress: 176, endpointList: [1, 2, 3, 4, 5, 6]}], simpleDescriptor: { 1: [ Zdo.Status.SUCCESS, {nwkAddress: 176, length: 14, endpoint: 1, profileId: 99, deviceId: 5, deviceVersion: 1, inClusterList: [1, 2], outClusterList: [2]}, ], }, attributes: { 1: { modelId: "lumi.plug", manufacturerName: "LUMI", zclVersion: 1, appVersion: 2, hwVersion: 3, dateCode: "201901", swBuildId: "1.01", powerSource: 1, stackVersion: 101, }, }, }, 177: { nodeDescriptor: [Zdo.Status.SUCCESS, {...NODE_DESC_DEFAULTS, nwkAddress: 177, logicalType: 0b001, manufacturerCode: 4129}], activeEndpoints: [Zdo.Status.SUCCESS, {nwkAddress: 177, endpointList: [1]}], simpleDescriptor: { 1: [ Zdo.Status.SUCCESS, { nwkAddress: 177, length: 32, endpoint: 1, profileId: 260, deviceId: 514, deviceVersion: 1, inClusterList: [0, 3, 258, 4, 5, 15, 64513], outClusterList: [258, 0, 64513, 5, 25], }, ], }, attributes: { 1: { modelId: " Shutter switch with neutral", manufacturerName: "Legrand", zclVersion: 2, appVersion: 0, hwVersion: 8, dateCode: "231030", swBuildId: "0038", powerSource: 1, stackVersion: 67, }, }, }, };