Giter Site home page Giter Site logo

zigbee-herdsman's Introduction

zigbee-herdsman

npm

zigbee-herdsman is an open source Zigbee gateway solution with Node.js JavaScript runtime back-end.

It was originally forked from zigbee-shepherd with the goal to refactor it to improve maintainability.

API Documentation

For automatically generated API reference documentation, see: tsdocs.dev.

Changelog

0.14.0 breaking changes

  • sendWhenActive has been replaced with sendWhen: 'active'

0.13.0 breaking changes

  • controller.touchlinkFactoryReset has been renamed to controller.touchlinkFactoryResetFirst()

0.12.0 breaking changes

  • options.network.extenedPanID -> options.network.extendedPanID (typo fix)

0.11.0 breaking changes

  • endpoint.bind[].cluster will now return cluster object instead of cluster number

0.10.0 breaking changes

  • controller.start() renamed resetted start result to reset

0.9.0 breaking changes

  • Removed controller.softReset() -> use controller.reset('soft') now
  • Removed group.get('groupID') -> use group.groupID now

0.8.0 breaking changes

  • Removed device.getEndpoints() -> use device.endpoints now
  • Removed device/endpoint.set() -> directly set properties now (e.g. device.modelID = 'newmodelid')
  • Removed device/endpoint.get() -> directly get properties now (e.g. device.modelID)
  • Removed group.getMembers() -> use group.members now
  • Removed endpoint.deviceIeeeAddress -> use endpoint.getDevice().ieeeAddr

Related projects

Zigbee2MQTT

Zigbee2MQTT is a Zigbee to MQTT gateway. It bridges events and allows you to control your Zigbee devices via MQTT. Allows you to use your Zigbee devices without the vendors or propritary and closed sources bridges or gateways. Zigbee2MQTT also keeps track of the state of the system and the capabilities of connected devices. It uses zigbee-herdsman and zigbee-herdsman-converters as modules to handle low-level core Zigbee communication.

ioBroker

ioBroker is an home automation integration platform that is focused on Building Automation, Smart Metering, Ambient Assisted Living, Process Automation, Visualization and Data Logging. It uses zigbee-herdsman for its Zigbee integration.

zigbee-herdsman's People

Contributors

aadegtyarev avatar atokulus avatar burmistrzak avatar castorw avatar chrishae avatar danieledwardgeorgehitchcock avatar dependabot[bot] avatar fabianmangold avatar felixstorm avatar futurexdesign avatar g1k avatar ghoz avatar github-actions[bot] avatar hacker-cb avatar hobbyquaker avatar kennylevinsen avatar kirovilya avatar koenkk avatar mattl0 avatar nathanfiscus avatar nerivec avatar peterbb avatar pklokke avatar presslab-us avatar robertalexa avatar sjorge avatar slugzero avatar tarik2142 avatar tomasbedrich avatar vk496 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zigbee-herdsman's Issues

Hard vs. Soft-Reset

Hi!

A question for my understanding: what exactly does a hard reset do? A soft reset is (as far as I understood that right) so to say a restart of the Z-Stack Software, right?

I had sometimes the problem that device interviews on pairing failed - worked around that by stopping the herdsman, turning USB power off and on and then it always worked again. A soft-reset didn't help, could a hard reset replace the USB power cycling in that case?

Regards,
Sebastian

Failure to add Konke Device.

Hi @Koenkk

I see this if i want to add the Konke Motion Device because it doesnt seem to add correctly.


  zigbee-herdsman:unpi:parser <-- [254,23,68,129,0,0,32,0,12,100,1,1,0,2,0,190,246,101,0,0,3,25,16,0,12,100,29,202] +24s
  zigbee-herdsman:unpi:parser --- parseNext [254,23,68,129,0,0,32,0,12,100,1,1,0,2,0,190,246,101,0,0,3,25,16,0,12,100,29,202] +0ms
  zigbee-herdsman:unpi:parser --> parsed 23 - 2 - 4 - 129 - [
d��e
d] - 202 +1ms
  zigbee-herdsman:znp:AREQ <-- AF - incomingMsg - {"groupid":0,"clusterid":32,"srcaddr":25612,"srcendpoint":1,"dstendpoint":1,"wasbroadcast":0,"linkquality":2,"securityuse":0,"timestamp":6682302,"transseqnumber":0,"len":3,"data":{"type":"Buffer","data":[25,16,0]}} +24s
  zigbee-herdsman:controller:log Received ZCL data '{"frame":{"Header":{"frameControl":{"frameType":1,"manufacturerSpecific":false,"direction":1,"disableDefaultResponse":true},"transactionSequenceNumber":16,"manufacturerCode":null,"commandIdentifier":0},"Payload":{},"ClusterID":32},"networkAddress":25612,"endpoint":1,"linkquality":2,"groupID":0}' +24s
  zigbee-herdsman:unpi:parser --- parseNext [] +5ms
  zigbee-herdsman:controller:log Skipping command 'checkin' because it is missing from the lookup +2ms
  zigbee-herdsman:unpi:parser <-- [254,28,68,129,0,0,1,2,12,100,1,1,0,0,0,58,64,102,0,0,8,24,17,10,0,0,41,138,7,12,100,29,116] +6s
  zigbee-herdsman:unpi:parser --- parseNext [254,28,68,129,0,0,1,2,12,100,1,1,0,0,0,58,64,102,0,0,8,24,17,10,0,0,41,138,7,12,100,29,116] +1ms
  zigbee-herdsman:unpi:parser --> parsed 28 - 2 - 4 - 129 - [
d:@f
  zigbee-herdsman:unpi:parser )�
d] - 116 +1ms

It seems to be that some Encoding Problem occures ?

Can we use Xbee S2C (and similar) radios with this?

Digi's devices, like mentioned above, or is this a cc253x with custom firmware only?

I ask because I use them with node-red-contrib-xbee package and custom flows. They have great range, easy to work with (uart), and comes in a 63mW package, with possibility to use external antennas.

Bad interview of TERNCY-PP01

Need help analyzing a failed interview with the new TERNCY PP01 device.
bad_interview.log

First of all, I added a new endpoint 110 for the coordinator (in startZnp.js), as this is where some commands from the device come.
Second, I tried to add a 'checkin' command in the events.js file, but not handle. Yes, I seen not implemented issue #73

But I don’t understand why the interview is interrupted ... maybe the device did not wait for an answer to its checkin request ...
Even after such an unsuccessful interview, messages from the device come correctly. But the fact that the interview was not completed. Any ideas?

Friends of Hue Smart Switch

Hi,

i have these:

https://new.abb.com/low-voltage/products/residential-product/remote-control/friends-of-hue-smart-switch

and it seams not supported in zigbee2mqtt, that i will try in the next step.

I started to figure out how it works.
First I found it is not able to pair at all.
Than I made a PacketSniffing on zigbee, and found out that the device sends Broadcast if it is pressed and released.
Yesterday i dived into the sourcecode to do an "Proove of Concept" how to support that kind of device. But after hours of reading i figured out that I knew not enough about the CC2531 API how to get broadcast packets at all.
It would be very helpful if somebody could give me a hint how to capture broadcast packets with the "zigbee-herdsman"?
I will attach the packet trace later today.

thx in advance

meno

the coordinator doesn't respond to "Match Description Request"

Hi @Koenkk ,
I have a new zigbee device. it sends Match Description Request to the coordinator during join procedure. but the coordinator doesn't respond to it.
I use the latest version of CC2531 firmware and zigbee2mqtt. you can see the issue in below image:
image
the normal condition should be like below:
image

Problem installing. RPi3 latest raspibian lite

Hi. have follow aguide to install zigbee2mqtt and i try to install zigbee-herdsman
I had cloned the git and try to install with npm install inside zigbee-herdsman directoy but this error always appears.

`

pi@raspberrypi:/opt/zigbee-herdsman $ sudo npm install
npm WARN tarball tarball data for [email protected] (sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==) seems to be corrupted. Trying one more time.
npm WARN tarball tarball data for [email protected] (sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==) seems to be corrupted. Trying one more time.
npm WARN tar ENOENT: no such file or directory, open '/opt/zigbee-herdsman/node_modules/.staging/fsevents-e48a7acc/node_modules/strip-ansi/index.js'
npm WARN tar ENOENT: no such file or directory, open '/opt/zigbee-herdsman/node_modules/.staging/fsevents-e48a7acc/node_modules/strip-ansi/license'
npm WARN tar ENOENT: no such file or directory, open '/opt/zigbee-herdsman/node_modules/.staging/fsevents-e48a7acc/node_modules/strip-ansi/package.json'
npm WARN tar ENOENT: no such file or directory, open '/opt/zigbee-herdsman/node_modules/.staging/fsevents-e48a7acc/node_modules/strip-ansi/readme.md'
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN enoent SKIPPING OPTIONAL DEPENDENCY: ENOENT: no such file or directory, rename '/opt/zigbee-herdsman/node_modules/.staging/fsevents-e48a7acc/node_modules/abbrev' -> '/opt/zigbee-herdsman/node_modules/.staging/abbrev-00ac77d5'

npm ERR! code EINTEGRITY
npm ERR! Verification failed while extracting [email protected]:
npm ERR! Verification failed while extracting [email protected]:
npm ERR! sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== integrity checksum failed when using sha512: wanted sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== but got sha512-5w25EOryuAGqTJle2+AoxjNQqem3oGrGAk1iUSDyhMTt5cwLgQUoj8fDBfoRf2gMdnWHMXfOaM2z+W0Qf/8Hbg==. (2296540 bytes)

npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2019-09-14T20_29_24_795Z-debug.log

Tried width differents SD cards. nothing helps.
Tried to install typescript, installation went ok but not help.

Thanks.

Network gets slow when using Ikea dimmer

I updated to 1.7.0. and it worked until I tried to use my ikea dimmer. My system immediately got stuck.
I tried several things (restarting, reinstalling) but only reflashing my stick made it work again.

There is no error but when I'm using my ikea dimmer now the system gets extremely slow. Other devices won't work for some seconds. It feels like the dimmer sends to many messages and the system gets stuck because it has to worked itself though the messages. Inputs from other devices are handled after that.

If I don't use the dimmer other devices work immediately. The device worked fine in former versions.

If someone can reproduce this users with ikea dimmers should be warned, because they might need to reflash, if the ikea dimmer does something nasty here.

Where is network states retained?

Hi,

I'm fairly new to Zigbee and ZNP. I wonder where is network states retained in a system of zigbee-shephard/herdsman + ZNP module?

I know zigbee shephard has some states saved in a local json file. Is that all? Is it possible to transparently replace the ZNP module with a new one, while still able to maintain the network?

[Question] Valid PANId

I'm using @hobbyquaker node-red zigbee implementation (herdsman v0.12.3) and switched from CC2531 to Z-Stack 3.0 with CC1352P-2.

In this process I changed my Network Key and the PANId. The PANId currently set in the node settings is 1A63.
It worked quite flawlessly and I could easily pair all my devices (even without bringing them near the coordinator) but one issue remains: I can no longer join my CC2530 + CC2591 router.

I have already re-flashed the router but to no avail. Before starting to play again with PANId and Network Key, I have some questions:

  1. Valid PANIds are 16 bit UInt as Hex, correct?
  2. Valid Network Keys are 32 bit UInt as Hex?
  3. Are the Hex values case sensitive?

Error messages during startup

  zigbee2mqtt:info 9/17/2019, 8:12:14 AM Starting zigbee2mqtt version 1.6.0 (commit #d24c41c)
  zigbee2mqtt:info 9/17/2019, 8:12:14 AM Starting zigbee-herdsman...
(node:4150) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'find' of undefined
    at Function.<anonymous> (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:154:51)
    at Generator.next (<anonymous>)
    at /opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:7:71
    at new Promise (<anonymous>)
    at __awaiter (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:3:12)
    at Function.find (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:144:16)
    at Function.<anonymous> (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:139:40)
    at Generator.next (<anonymous>)
    at /opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:7:71
    at new Promise (<anonymous>)
(node:4150) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 4)
(node:4150) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(node:4150) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'find' of undefined
    at Function.<anonymous> (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:154:51)
    at Generator.next (<anonymous>)
    at /opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:7:71
    at new Promise (<anonymous>)
    at __awaiter (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:3:12)
    at Function.find (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:144:16)
    at Function.<anonymous> (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:139:40)
    at Generator.next (<anonymous>)
    at /opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:7:71
    at new Promise (<anonymous>)
(node:4150) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 5)
(node:4150) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'find' of undefined
    at Function.<anonymous> (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:154:51)
    at Generator.next (<anonymous>)
    at /opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:7:71
    at new Promise (<anonymous>)
    at __awaiter (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:3:12)
    at Function.find (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:144:16)
    at Function.<anonymous> (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:139:40)
    at Generator.next (<anonymous>)
    at /opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:7:71
    at new Promise (<anonymous>)
(node:4150) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 6)
(node:4150) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'find' of undefined
    at Function.<anonymous> (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:154:51)
    at Generator.next (<anonymous>)
    at /opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:7:71
    at new Promise (<anonymous>)
    at __awaiter (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:3:12)
    at Function.find (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:144:16)
    at Function.<anonymous> (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:139:40)
    at Generator.next (<anonymous>)
    at /opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:7:71
    at new Promise (<anonymous>)
(node:4150) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 9)
(node:4150) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'find' of undefined
    at Function.<anonymous> (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:154:51)
    at Generator.next (<anonymous>)
    at /opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:7:71
    at new Promise (<anonymous>)
    at __awaiter (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:3:12)
    at Function.find (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:144:16)
    at Function.<anonymous> (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:139:40)
    at Generator.next (<anonymous>)
    at /opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/controller/model/device.js:7:71
    at new Promise (<anonymous>)
(node:4150) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 10)
  zigbee2mqtt:info 9/17/2019, 8:12:15 AM zigbee-herdsman started

This is with latest zigbee2mqtt development version.

Error with latest dev version

Hey, I updated Hassio to latest version 1.0 and now zigbee2mqtt exits with an error:
Running zigbee2mqtt-edge on latest commit.

zigbee2mqtt:error 2019-10-11T14:18:52: Error while starting zigbee-herdsman
zigbee2mqtt:error 2019-10-11T14:18:52: Error: SRSP - SYS - version after 6000ms
    at Timeout.object.timer.setTimeout [as _onTimeout] (/app/node_modules/zigbee-herdsman/dist/utils/waitress.js:44:24)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)
zigbee2mqtt:error 2019-10-11T14:18:52: Failed to start zigbee
zigbee2mqtt:error 2019-10-11T14:18:52: Exiting...
zigbee2mqtt:error 2019-10-11T14:18:52: Error: SRSP - SYS - version after 6000ms
    at Timeout.object.timer.setTimeout [as _onTimeout] (/app/node_modules/zigbee-herdsman/dist/utils/waitress.js:44:24)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)
npm
 ERR! code ELIFECYCLE
npm ERR! errno 1

bind tracking

Hey Koenkk, I think a new Issue for discussions around the bind tracking makes sense :-)

Right now I'm doing the tracking in the device.meta, looks like this:

"binds":[{"endpoint":1,"cluster":"genOnOff","targetType":"endpoint","targetDevice":"0x0017880102fe0180","targetEndpoint":11}]

Should we move that to the Endpoint Object instead? What do you think of the scheme itself? Using a Set instead of an Array? I think a Set will not offer an advantage as it will not prevent adding to Objects with same content. So right now I'm using a construct like this

if (!device.meta.binds.find(b => {
    return b.endpoint === bind.endpoint &&
            b.cluster === bind.cluster &&
            b.targetDevice === bind.targetDevice &&
            b.targetEndpoint === bind.targetEndpoint;
})) {
    device.meta.binds.push(bind);
    device.save();
}

to prevent adding the same bind more than once. Do you have a more elegant suggestion for this?

the Coordinator doesn't send "Transport Key" message

Hi friends,
I have an standard HA light switch. when it wants to join, after association response, the coordinator doesn't transport security key, so the join procedure isn't continued. I try in multiple times, in one time it works and the device joined. but now it doesn't join again.
you can see the zigbee log below:
3-gangs switch log.zip

port doesn't accept symlink anymore

since 0.10.0 we can't use a symlink anymore.
This is a regression, a lot of us do use udev rules to maintain a consistent name for our serial ports.
I've looked at serialport/node-serialport#1476 and at several links from this issue;
I guess instead of counting on serialport to be able to list symlinks, it should be reasonable to see if the provided port is a symlink, follow it, and then search for the real device in SerialPort.list()

Manufacturer-specific clusters not working without manufacturer code in ZCL frame header

Sorry to bother you again about this, but unfortunately there seems to be a slight problem with the current implementation of manufacturer-specific clusters: As far as I can see from the code and from testing, they only get resolved from number to cluster object on incoming packets if the manufacturer code is set in the ZCL frame header, but AFAIK it is common (and probably legal) to use these manufacturer specific clusters without setting the flag and code again in the ZCL header (in contrast to how manufacturer-specific attributes must be used).

It would probably be best to take these clusters in account whenever we're dealing with a device of that manufacturer. But unfortunately I do not see an easy solution for this issue as from what I can see there is no further context available when the frame is being parsed, but maybe you have an idea?

For me, this is currently not a real problem, as it's only on incoming packets and as I still get the numeric attribute ids back when reading attributes, but it somehow defeats the purpose of the implementation a bit (at least for my use case).

Thanks,
Felix

Remove database as cause for async

At the moment, calls like getDevice are async, because it might query the database. Often it doesn't as it uses Device.lookup. But herdsman could operate with the in-memory data structures as the source of truth, only synced to disk in a best-effort manner.

That would make the path between receiving message from a device to sending a message in response to another device a single tick of the runloop.

If I am not mistaken, only groups and devices are stored directly, the rest (eg endpoints) are stored via the device. It would be even nicer to provide a default storage adapter, but allow libraries to bring an alternative implementation.

It would also be nice if the data store supports custom properties. So that users of the library have a place to store properties like the device friendly name without having to maintain a parallel data store.

Errors with latest Zigbee2MQTT

I updated to latest development version of Zigbee2MQTT and I'm getting this kind of errors all the time now.
Seems to be something within Zigbee-Herdsman.

zigbee2mqtt:error 2019-10-07T07:44:06: Publish 'set' 'state' to '0x00158d0001d0f272' failed: 'Error: SRSP - AF - dataRequest after 6000ms'
zigbee2mqtt:info  2019-10-07T07:44:06: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"zigbee_publish_error","message":"Publish 'set' 'state' to '0x00158d0001d0f272' failed: 'Error: SRSP - AF - dataRequest after 6000ms'","meta":{"friendly_name":"0x00158d0001d0f272"}}'
(node:25609) UnhandledPromiseRejectionWarning: Error: AREQ - AF - dataConfirm after 10000ms
    at Timeout.object.timer.setTimeout [as _onTimeout] (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/utils/waitress.js:44:24)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)
(node:25609) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 11)
(node:25609) UnhandledPromiseRejectionWarning: Error: AREQ - AF - dataConfirm after 10000ms
    at Timeout.object.timer.setTimeout [as _onTimeout] (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/utils/waitress.js:44:24)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)
(node:25609) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 12)
(node:25609) UnhandledPromiseRejectionWarning: Error: AREQ - AF - dataConfirm after 10000ms
    at Timeout.object.timer.setTimeout [as _onTimeout] (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/utils/waitress.js:44:24)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)
(node:25609) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 13)
(node:25609) UnhandledPromiseRejectionWarning: Error: AREQ - AF - dataConfirm after 10000ms
    at Timeout.object.timer.setTimeout [as _onTimeout] (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/utils/waitress.js:44:24)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)
zigbee2mqtt:error 2019-10-07T07:46:10: Publish 'set' 'state' to '0x000b57fffe8be58f' failed: 'Error: SRSP - AF - dataRequest after 6000ms'
zigbee2mqtt:info  2019-10-07T07:46:10: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"zigbee_publish_error","message":"Publish 'set' 'state' to '0x000b57fffe8be58f' failed: 'Error: SRSP - AF - dataRequest after 6000ms'","meta":{"friendly_name":"0x000b57fffe8be58f"}}'
(node:25609) UnhandledPromiseRejectionWarning: Error: AREQ - AF - dataConfirm after 10000ms
    at Timeout.object.timer.setTimeout [as _onTimeout] (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/utils/waitress.js:44:24)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)
(node:25609) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 16)
zigbee2mqtt:error 2019-10-07T07:46:37: Publish 'set' 'state' to '0x00124b001d3ab1b9' failed: 'Error: SRSP - AF - dataRequest after 6000ms'
zigbee2mqtt:info  2019-10-07T07:46:37: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"zigbee_publish_error","message":"Publish 'set' 'state' to '0x00124b001d3ab1b9' failed: 'Error: SRSP - AF - dataRequest after 6000ms'","meta":{"friendly_name":"0x00124b001d3ab1b9"}}'
(node:25609) UnhandledPromiseRejectionWarning: Error: AREQ - AF - dataConfirm after 10000ms
    at Timeout.object.timer.setTimeout [as _onTimeout] (/opt/zigbee2mqtt-herdsman/node_modules/zigbee-herdsman/dist/utils/waitress.js:44:24)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)
(node:25609) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 17)



Unknown cluster 23

Got unknown cluster 23 with device ORVIBO CR11S8UZ:

2019-11-03T06:48:38.964Z zigbee-herdsman:adapter:zStack:unpi:parser <-- [254,26,68,129,0,0,23,0,123,200,1,1,0,102,0,52,130,107,0,0,6,25,0,8,7,0,0,123,200,29,126]
2019-11-03T06:48:38.965Z zigbee-herdsman:adapter:zStack:unpi:parser --- parseNext [254,26,68,129,0,0,23,0,123,200,1,1,0,102,0,52,130,107,0,0,6,25,0,8,7,0,0,123,200,29,126]
2019-11-03T06:48:38.966Z zigbee-herdsman:adapter:zStack:unpi:parser --> parsed 26 - 2 - 4 - 129 - [�{���f4�k����{��] - 126
2019-11-03T06:48:38.969Z zigbee-herdsman:adapter:zStack:znp:AREQ <-- AF - incomingMsg - {"groupid":0,"clusterid":23,"srcaddr":51323,"srcendpoint":1,"dstendpoint":1,"wasbroadcast":0,"linkquality":102,"securityuse":0,"timestamp":7045684,"transseqnumber":0,"len":6,"data":{"type":"Buffer","data":[25,0,8,7,0,0]}}
2019-11-03T06:48:38.972Z zigbee-herdsman:controller:log Received 'raw' data '{"clusterID":23,"data":{"type":"Buffer","data":[25,0,8,7,0,0]},"networkAddress":51323,"endpoint":1,"linkquality":102,"groupID":0}'
2019-11-03T06:48:38.976Z zigbee-herdsman:controller:error Error while retrieving cluster for raw 'Error: Cluster with key '23' does not exist'
2019-11-03T06:48:38.985Z zigbee-herdsman:adapter:zStack:unpi:parser --- parseNext []

Can't find description of this cluster...

[Question] Strategy for manufacturer-specific attributes in standard clusters?

As already mentioned in my last pull request, I am implementing support for some ubisys devices at the moment. To e.g. calibrate their shutter controller to the run-time from fully open to fully closed, they use quite a lot of manufacturer-specific attributes within standard clusters (e.g. attributes 0x1000 and up in closuresWindowCovering).
Currently, I have these implemented as numeric values in code but thought it might be nicer to have them somewhere in a central location, but could not really figure out an obvious way to do it. One idea is to implement them in additional clusters that have numerical ids with the manufacturer id as upper bytes, e.g. for ubisys (manufacturer id is 0x10f2) and the cluster closuresWindowCovering (258 = 0x102) it would be 0x10f20102 = 284295426. But even this would mean that I will need to touch quite some central code inside zigbee-shepherd and zigbee2mqtt to implement it correctly...
Do you have any opinion or suggestions for me or should I rather stick with the way I have it implemented currently?

Current implementation in my code: https://github.com/felixstorm/zigbee2mqtt/blob/f41f754135f918a9b60ad14501311e48f5ae1114/lib/extension/ubisys.js#L166
ubisys documentation (if interested): https://www.ubisys.de/wp-content/uploads/ubisys-j1-technical-reference.pdf

Thanks,
Felix

Unknown ZDO command (200)

Sometimes when I enable pairing, I get a strange command (with code 200). Parser falls:

2019-10-16T18:37:05.609Z zigbee-herdsman:controller:log Permit joining
2019-10-16T18:37:05.610Z zigbee-herdsman:zStack:znp:SREQ --> ZDO - mgmtPermitJoinReq - {"addrmode":15,"dstaddr":65532,"duration":254,"tcsignificance":0}
2019-10-16T18:37:05.611Z zigbee-herdsman:zStack:unpi:writer --> frame [254,5,37,54,15,252,255,254,0,228]
2019-10-16T18:37:09.570Z zigbee-herdsman:zStack:unpi:parser <-- [254,1,101,54,0,82]
2019-10-16T18:37:09.570Z zigbee-herdsman:zStack:unpi:parser --- parseNext [254,1,101,54,0,82]
2019-10-16T18:37:09.570Z zigbee-herdsman:zStack:unpi:parser --> parsed 1 - 3 - 5 - 54 - [] - 82
2019-10-16T18:37:09.570Z zigbee-herdsman:zStack:znp:SRSP <-- ZDO - mgmtPermitJoinReq - {"status":0}
2019-10-16T18:37:09.570Z zigbee-herdsman:zStack:unpi:parser --- parseNext []
2019-10-16T18:37:09.579Z zigbee-herdsman:zStack:unpi:parser <-- [254,3,69,182,0,0,0,240]
2019-10-16T18:37:09.579Z zigbee-herdsman:zStack:unpi:parser --- parseNext [254,3,69,182,0,0,0,240]
2019-10-16T18:37:09.579Z zigbee-herdsman:zStack:unpi:parser --> parsed 3 - 2 - 5 - 182 - [] - 240
2019-10-16T18:37:09.579Z zigbee-herdsman:zStack:znp:AREQ <-- ZDO - mgmtPermitJoinRsp - {"srcaddr":0,"status":0}
2019-10-16T18:37:09.579Z zigbee-herdsman:zStack:unpi:parser --- parseNext []
2019-10-16T18:37:09.742Z zigbee-herdsman:zStack:unpi:parser <-- [254,11,69,200,0,0,30,116,232,24,0,75,18,0,2,71]
2019-10-16T18:37:09.743Z zigbee-herdsman:zStack:unpi:parser --- parseNext [254,11,69,200,0,0,30,116,232,24,0,75,18,0,2,71]
2019-10-16T18:37:09.743Z zigbee-herdsman:zStack:unpi:parser --> parsed 11 - 2 - 5 - 200 - [�t��K��] - 71
2019-10-16T18:37:09.744Z zigbee-herdsman:zStack:znp:error Error while parsing to ZpiObject 'Error: CommandID '200' from subsystem '5' not found
    at Function.fromUnpiFrame (c:\Projects\ioBroker\node_modules\iobroker.zigbee\node_modules\zigbee-herdsman\dist\adapter\z-stack\znp\zpiObject.js:44:19)
    at Znp.onUnpiParsed (c:\Projects\ioBroker\node_modules\iobroker.zigbee\node_modules\zigbee-herdsman\dist\adapter\z-stack\znp\znp.js:74:48)
    at emitOne (events.js:116:13)
    at Parser.emit (events.js:211:7)
    at Parser.parseNext (c:\Projects\ioBroker\node_modules\iobroker.zigbee\node_modules\zigbee-herdsman\dist\adapter\z-stack\unpi\parser.js:49:26)
    at Parser._transform (c:\Projects\ioBroker\node_modules\iobroker.zigbee\node_modules\zigbee-herdsman\dist\adapter\z-stack\unpi\parser.js:35:14)
    at Parser.Transform._read (_stream_transform.js:186:10)
    at Parser.Transform._write (_stream_transform.js:174:12)
    at doWrite (_stream_writable.js:396:12)
    at writeOrBuffer (_stream_writable.js:382:5)'
2019-10-16T18:37:09.744Z zigbee-herdsman:zStack:unpi:parser --- parseNext []
2019-10-16T18:38:18.516Z zigbee-herdsman:controller:log Disable joining
2019-10-16T18:38:18.518Z zigbee-herdsman:zStack:znp:SREQ --> ZDO - mgmtPermitJoinReq - {"addrmode":15,"dstaddr":65532,"duration":0,"tcsignificance":0}
2019-10-16T18:38:18.520Z zigbee-herdsman:zStack:unpi:writer --> frame [254,5,37,54,15,252,255,0,0,26]
2019-10-16T18:38:18.542Z zigbee-herdsman:zStack:unpi:parser <-- [254,1,101,54,0,82]
2019-10-16T18:38:18.542Z zigbee-herdsman:zStack:unpi:parser --- parseNext [254,1,101,54,0,82]
2019-10-16T18:38:18.543Z zigbee-herdsman:zStack:unpi:parser --> parsed 1 - 3 - 5 - 54 - [] - 82
2019-10-16T18:38:18.543Z zigbee-herdsman:zStack:znp:SRSP <-- ZDO - mgmtPermitJoinReq - {"status":0}
2019-10-16T18:38:18.543Z zigbee-herdsman:zStack:unpi:parser --- parseNext []
2019-10-16T18:38:18.546Z zigbee-herdsman:zStack:unpi:parser <-- [254,1,69,203,0,143,254,3,69,182,0,0,0,240]
2019-10-16T18:38:18.547Z zigbee-herdsman:zStack:unpi:parser --- parseNext [254,1,69,203,0,143,254,3,69,182,0,0,0,240]
2019-10-16T18:38:18.547Z zigbee-herdsman:zStack:unpi:parser --> parsed 1 - 2 - 5 - 203 - [] - 143
2019-10-16T18:38:18.547Z zigbee-herdsman:zStack:znp:AREQ <-- ZDO - permitJoinInd - {"duration":0}
2019-10-16T18:38:18.548Z zigbee-herdsman:zStack:unpi:parser --- parseNext [254,3,69,182,0,0,0,240]
2019-10-16T18:38:18.548Z zigbee-herdsman:zStack:unpi:parser --> parsed 3 - 2 - 5 - 182 - [] - 240
2019-10-16T18:38:18.548Z zigbee-herdsman:zStack:znp:AREQ <-- ZDO - mgmtPermitJoinRsp - {"srcaddr":0,"status":0}
2019-10-16T18:38:18.548Z zigbee-herdsman:zStack:unpi:parser --- parseNext []

Docker device mapping issue

I switched my zigbee2mqtt docker container from latest to latest-dev. On startup I was getting:

> [email protected] start /app
> node index.js

zigbee2mqtt:error 2019-10-18T22:06:41: Error while starting zigbee-herdsman
zigbee2mqtt:error 2019-10-18T22:06:41: Failed to start zigbee
zigbee2mqtt:error 2019-10-18T22:06:41: Exiting...
zigbee2mqtt:error 2019-10-18T22:06:41: Error: Path '/dev/ttyACM0' does not exist
    at Object.<anonymous> (/app/node_modules/zigbee-herdsman/dist/adapter/serialPortUtils.js:34:19)
    at Generator.next (<anonymous>)
    at fulfilled (/app/node_modules/zigbee-herdsman/dist/adapter/serialPortUtils.js:5:58)
    at process._tickCallback (internal/process/next_tick.js:68:7)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `node index.js`
npm ERR! Exit status 1

I added this in serialPortUtils.js near the issue to get some debug info:

        let devices = await SerialPort.list()
        console.warn(devices);
        const child_process = require('child_process');
        console.warn(child_process.execSync('ls /dev/tty*').toString('utf8'));

which output:

[
  { manufacturer: undefined,
    serialNumber: undefined,
    pnpId: undefined,
    locationId: undefined,
    vendorId: undefined,
    productId: undefined,
    path: '/dev/ttyUSB0'
  },
  { manufacturer: undefined,
    serialNumber: undefined,
    pnpId: undefined,
    locationId: undefined,
    vendorId: undefined,
    productId: undefined,
    path: '/dev/ttyUSB1'
  },
  { manufacturer: undefined,
    serialNumber: undefined,
    pnpId: undefined,
    locationId: undefined,
    vendorId: undefined,
    productId: undefined,
    path: '/dev/ttyUSB2'
  },
  { manufacturer: undefined,
    serialNumber: undefined,
    pnpId: undefined,
    locationId: undefined,
    vendorId: undefined,
    productId: undefined,
    path: '/dev/ttyS0'
  },
  { manufacturer: undefined,
    serialNumber: undefined,
    pnpId: undefined,
    locationId: undefined,
    vendorId: undefined,
    productId: undefined,
    path: '/dev/ttyS1'
  },
  { manufacturer: undefined,
    serialNumber: undefined,
    pnpId: undefined,
    locationId: undefined,
    vendorId: undefined,
    productId: undefined,
    path: '/dev/ttyS2'
  },
  { manufacturer: undefined,
    serialNumber: undefined,
    pnpId: undefined,
    locationId: undefined,
    vendorId: undefined,
    productId: undefined,
    path: '/dev/ttyS3'
  }
]

/dev/tty
/dev/ttyACM0

Note that all the devices returned by serialport.list() don't appear to match what is in /dev/. I tried changing /dev/ttyACM0 to /dev/ttyUSB0 in both my docker config and z2m config and that fixed it! However this still seems like an issue that would affect other users not using one of these particular device names.

Probably related to serialport/node-serialport#1944

For reference my original docker-compose was:

  zigbee2mqtt:
    container_name: zigbee2mqtt
    image: koenkk/zigbee2mqtt:latest-dev
    depends_on:
    - mosquitto
    volumes:
    - ./zigbee2mqtt:/app/data
    devices:
    - /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0:/dev/ttyACM0
    restart: unless-stopped
    network_mode: host

Implement ZDO_MGMT_DIRECT_JOIN_REQ call

This allow devices to join directly to coordinator by using the IEEE address.
Could be help when you reset the NVRAM of your coordinator and you want to push back some devices who are hard to join into the network.

Cant get Xiaomi Motion to reconnect

Motion sensors disconnected tried to repair but for some reason keep getting zigbee-herdsman:controller:log Not interviewing '0x00158d00035ffa60', completed 'true', in progress 'false'
I removed all occurances of the device in database.db and configuration

here is the relevant logs:

2019-11-03T05:12:18.705Z zigbee-herdsman:adapter:zStack:unpi:parser --- parseNext [254,1,69,203,254,113,254,3,69,182,0,0,0,240]
2019-11-03T05:12:18.705Z zigbee-herdsman:adapter:zStack:unpi:parser --> parsed 1 - 2 - 5 - 203 - [�] - 113
2019-11-03T05:12:18.705Z zigbee-herdsman:adapter:zStack:znp:AREQ <-- ZDO - permitJoinInd - {"duration":254}
2019-11-03T05:12:18.705Z zigbee-herdsman:adapter:zStack:unpi:parser --- parseNext [254,3,69,182,0,0,0,240]
2019-11-03T05:12:18.706Z zigbee-herdsman:adapter:zStack:unpi:parser --> parsed 3 - 2 - 5 - 182 - [] - 240
2019-11-03T05:12:18.706Z zigbee-herdsman:adapter:zStack:znp:AREQ <-- ZDO - mgmtPermitJoinRsp - {"srcaddr":0,"status":0}
2019-11-03T05:12:18.706Z zigbee-herdsman:adapter:zStack:unpi:parser --- parseNext []
2019-11-03T05:12:55.077Z zigbee-herdsman:adapter:zStack:unpi:parser <-- [254,3,69,196,110,129,0,109]
2019-11-03T05:12:55.077Z zigbee-herdsman:adapter:zStack:unpi:parser --- parseNext [254,3,69,196,110,129,0,109]
2019-11-03T05:12:55.077Z zigbee-herdsman:adapter:zStack:unpi:parser --> parsed 3 - 2 - 5 - 196 - [n�] - 109
2019-11-03T05:12:55.077Z zigbee-herdsman:adapter:zStack:znp:AREQ <-- ZDO - srcRtgInd - {"dstaddr":33134,"relaycount":0,"relaylist":[]}
2019-11-03T05:12:55.078Z zigbee-herdsman:adapter:zStack:unpi:parser --- parseNext []
2019-11-03T05:12:55.122Z zigbee-herdsman:adapter:zStack:unpi:parser <-- [254,3,69,196,110,129,0,109]
2019-11-03T05:12:55.122Z zigbee-herdsman:adapter:zStack:unpi:parser --- parseNext [254,3,69,196,110,129,0,109]
2019-11-03T05:12:55.122Z zigbee-herdsman:adapter:zStack:unpi:parser --> parsed 3 - 2 - 5 - 196 - [n�] - 109
2019-11-03T05:12:55.123Z zigbee-herdsman:adapter:zStack:znp:AREQ <-- ZDO - srcRtgInd - {"dstaddr":33134,"relaycount":0,"relaylist":[]}
2019-11-03T05:12:55.123Z zigbee-herdsman:adapter:zStack:unpi:parser --- parseNext []
2019-11-03T05:12:55.199Z zigbee-herdsman:adapter:zStack:unpi:parser <-- [254,12,69,202,202,92,96,250,95,3,0,141,21,0,110,129,164]
2019-11-03T05:12:55.199Z zigbee-herdsman:adapter:zStack:unpi:parser --- parseNext [254,12,69,202,202,92,96,250,95,3,0,141,21,0,110,129,164]
2019-11-03T05:12:55.200Z zigbee-herdsman:adapter:zStack:unpi:parser --> parsed 12 - 2 - 5 - 202 - [�\`�_�n�] - 164
2019-11-03T05:12:55.200Z zigbee-herdsman:adapter:zStack:znp:AREQ <-- ZDO - tcDeviceInd - {"nwkaddr":23754,"extaddr":"0x00158d00035ffa60","parentaddr":33134}
2019-11-03T05:12:55.202Z zigbee-herdsman:controller:log Device '0x00158d00035ffa60' joined
2019-11-03T05:12:55.202Z zigbee-herdsman:adapter:zStack:unpi:parser --- parseNext []
2019-11-03T05:12:55.203Z zigbee-herdsman:controller:log Device '0x00158d00035ffa60' accepted by handler
2019-11-03T05:12:55.203Z zigbee-herdsman:controller:log Not interviewing '0x00158d00035ffa60', completed 'true', in progress 'false'
2019-11-03T05:15:38.656Z zigbee-herdsman:controller:log Permit joining```

node-red bindings?

Hi
Is there any documentation about API used?
I'd like to integrate this into node-red
Would be cool to have zigbee2mgtt nodes there.

zigbee-herdsman migration

Hi Koenkk! First of all: Thanks for your awesome work!
I have questions about the herdsman:

  • will you move functionality like handling reporting, configure, deviceAvailability (and other stuff that is currently implemented in zigbee2mqtt as extension) to zigbee-herdsman?
  • I'm already using [email protected] in node-red-contrib-zigbee, worked flawlessly as a drop-in replacement for the shepherd. As far as I saw you introduced some breaking changes in the higher versions of the herdsman - will you create a little "migration guide" pointing out the API changes?

Regards,
Sebastian

Ref: hobbyquaker/node-red-contrib-zigbee#44

using cc2530 with UART and arduino

I dont know how much work this is and I dont know if it would work, but I wanted to use cc2530 over UART connected to an esp8266 or arduino.
I dont know where to start. I flashed the z-stack firmware from Koenkk on the cc2530 and connected with UART to arduino. Somebody give me a starting point where to start?
Should I start with the development Board from Texas Instruments?

Support for XBee s2c?

Can you give me an idea on how difficult it may be to add a driver for the XBee s2c module? It has some characteristics I find more useful than the typical USB sticks for the TI chips, such as various power and antenna options.

I have quite a bit of familiarity with the module, but I don't have a lot of knowledge on how much the cc chips currently handle. The XBee has router/endpoint/coordinator modes, and has a fairly simple but low level API to send and receive various frames, and pass through most (perhaps not all) ZDO frames.

data doesnt sync from request to database.db file

Hi @Koenkk
i´m see on different device types like Konke that the request themeselve isnt in sync with database entry.

this two entrys show what i´m mean by Konke Devices:

{"id":9,"type":"EndDevice","ieeeAddr":"0x00158d00024a48c6","nwkAddr":53008,"manufId":4151,"manufName":"LUMI","powerSource":"Battery","modelId":"lumi.sensor_cube.aqgl01","epList":[1,2,3],"endpoints":{"1":{"epId":1,"inClusterList":[],"outClusterList":[],"clusters":{}},"2":{"epId":2,"inClusterList":[],"outClusterList":[],"clusters":{}},"3":{"epId":3,"inClusterList":[],"outClusterList":[],"clusters":{}}},"interviewCompleted":true,"meta":{},"_id":"aw0NAXV02RjNllon"}

{"id":21,"type":"EndDevice","ieeeAddr":"0x086bd7fffee972e8","nwkAddr":54718,"manufId":4098,"manufName":"Konke","powerSource":"Unknown","modelId":"3AFE130104020015","epList":[1],"endpoints":{"1":{"profId":260,"epId":1,"devId":1026,"inClusterList":[0,1,3,1280],"outClusterList":[3],"clusters":{}}},"appVersion":19,"stackVersion":0,"hwVersion":1,"dateCode":"","zclVersion":3,"interviewCompleted":false,"meta":{},"_id":"lZtnvDFf0qJI5w9W"}

on the first ones i modify the entry and add Battery and now it works great.

it seems that the state of report isn´t in sync via database entry because i see on log that battery as type is reporting correctly but doesnt write on readResponse.

for simple hack we could do something like:
https://github.com/Koenkk/zigbee-herdsman/blob/master/src/controller/controller.ts#L432

if ((type === 'readResponse' || type === 'attributeReport') && data.powerSource && !device.get('powerSource')) {
await device.set('powerSource', data.powerSource);
}

but this looks really hacky to me.

maybe we could add something like loop on values and check if empty or unknown and check if value exists by Response-Return and write them back instant.

Hope you could follow :)

How configure serialport path on Windows?

Previously, under Windows, you could specify a com port by name, for example, "COM57". Now it doesn't work.

Error: ENOENT: no such file or directory, lstat 'C:\Projects\ioBroker\node_modules\iobroker\COM57'
    at Object.realpathSync (fs.js:1657:15)
    at Object.realpathSync [as RealpathSync] (C:\Projects\ioBroker\node_modules\iobroker.zigbee\node_modules\zigbee-herdsman\dist\utils\realpathSync.js:10:25)
    at Function.<anonymous> (C:\Projects\ioBroker\node_modules\iobroker.zigbee\node_modules\zigbee-herdsman\dist\adapter\adapter.js:56:50)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Projects\ioBroker\node_modules\iobroker.zigbee\node_modules\zigbee-herdsman\dist\adapter\adapter.js:5:58)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)

Trying to change to '\.\COM57' like describe here https://github.com/Koenkk/zigbee2mqtt.io/blob/master/docs/information/windows.md

ENOTSUP: operation not supported on socket, lstat '\\.\COM57\'
    at Object.realpathSync (fs.js:1617:13)
    at Object.realpathSync [as RealpathSync] (C:\Projects\ioBroker\node_modules\iobroker.zigbee\node_modules\zigbee-herdsman\dist\utils\realpathSync.js:10:25)
    at Function.<anonymous> (C:\Projects\ioBroker\node_modules\iobroker.zigbee\node_modules\zigbee-herdsman\dist\adapter\adapter.js:56:50)
    at Generator.next (<anonymous>)
    at fulfilled (C:\Projects\ioBroker\node_modules\iobroker.zigbee\node_modules\zigbee-herdsman\dist\adapter\adapter.js:5:58)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)

specify entpoint for readrsp with herdsman

Hi @Koenkk
i´m on the test for different of my devices who work with shepherd but doesnt work with herdsman.

The faulty Device from Bitron (AV2010/34) wont join because it use the readsp from endpoint 4 but should use them for basic interview from endpoint 1.

�[34mzigbee2mqtt:debug�[39m 2019-09-29T07:40:21: Device 'FourTouchWallSwitch_Wohnzimmer' announced itself
�[34mzigbee2mqtt:debug�[39m 2019-09-29T07:40:25: Received Zigbee message from 'FourTouchWallSwitch_Wohnzimmer' of type 'readResponse' with data '{}' from endpoint 4 with groupID 0
�[33mzigbee2mqtt:warn �[39m 2019-09-29T07:40:25: Received message from unsupported device with Zigbee model 'undefined'
�[33mzigbee2mqtt:warn �[39m 2019-09-29T07:40:25: Please see: https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html.
�[34mzigbee2mqtt:debug�[39m 2019-09-29T07:40:25: Received Zigbee message from 'FourTouchWallSwitch_Wohnzimmer' of type 'readResponse' with data '{}' from endpoint 4 with groupID 0
�[33mzigbee2mqtt:warn �[39m 2019-09-29T07:40:25: Received message from unsupported device with Zigbee model 'undefined'
�[33mzigbee2mqtt:warn �[39m 2019-09-29T07:40:25: Please see: https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html.
�[34mzigbee2mqtt:debug�[39m 2019-09-29T07:40:25: Received Zigbee message from 'FourTouchWallSwitch_Wohnzimmer' of type 'readResponse' with data '{}' from endpoint 4 with groupID 0
�[33mzigbee2mqtt:warn �[39m 2019-09-29T07:40:25: Received message from unsupported device with Zigbee model 'undefined'
�[33mzigbee2mqtt:warn �[39m 2019-09-29T07:40:25: Please see: https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html.
�[32mzigbee2mqtt:info �[39m 2019-09-29T07:40:25: Successfully interviewed 'FourTouchWallSwitch_Wohnzimmer', device has successfully been paired
�[33mzigbee2mqtt:warn �[39m 2019-09-29T07:40:25: Device 'FourTouchWallSwitch_Wohnzimmer' with Zigbee model 'undefined' is NOT supported, please follow https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html
�[32mzigbee2mqtt:info �[39m 2019-09-29T07:40:25: MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"pairing","message":"interview_successful","meta":{"friendly_name":"FourTouchWallSwitch_Wohnzimmer","supported":false}}'
``

Zigbee Device PowerSource wrong Mapping for Konke Devices

Hi @Koenkk
It seem that your Power-Source Mapping seem to be wrong or the End-Device from Konke seems to be report wrong Power-Source-Value �[34mzigbee2mqtt:debug�[39m 2019-10-13T18:36:52: Received Zigbee message from 'konke_motion_1', type 'readResponse', cluster 'genBasic', data '{"modelId":"3AFE14010402000D","manufacturerName":"Konke","powerSource":0}' from endpoint 1 with groupID 0.
With this i get Unknown as Result but we know the Device use Battery :)

Support NodeJS 6

For use in the iobroker project, I would like to support nodejs starting from 6.
Therefore, I propose to rewrite the async-functions.

ConBee implementation

Hello, I have noticed you started on implementation of the conbee adapter. I am from dresden elektronik and we'd like to help with the implementation. What do you think is the best way to synchronize the workflow?

We could contribute the code for the following tasks, to start with:

  • CRC calculation
  • SLIP frame builder
  • Query and set Zigbee parameters

... in the files driver.ts and conbeeAdapter.ts.

Furthermore if you need any documentation or hardware to proceed just drop me a line. E.g. a ConBee II stick or the deCONZ serial line protocol documentation.

Note that this adapter not only work with the ConBee USB stick but also with the RaspBee Zigbee module for Raspberry Pi, because they share the same serial protocol. A more generic adapter name, like phoscon or deconz adapter, might be more fitting.

how to start developing?

How can I start developing on this project? When i enter npm start the project build the ts files. But how can I test the methods and endpoints?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.