Giter Club home page Giter Club logo

zigpy-zigate's Introduction

zigpy

Build Coverage Status

zigpy is a hardware independent Zigbee protocol stack integration project to implement Zigbee standard specifications as a Python 3 library.

Zigbee integration via zigpy allows you to connect one of many off-the-shelf Zigbee Coordinator adapters using one of the available Zigbee radio library modules compatible with zigpy to control Zigbee based devices. There is currently support for controlling Zigbee device types such as binary sensors (e.g., motion and door sensors), sensors (e.g., temperature sensors), lights, switches, buttons, covers, fans, climate control equipment, locks, and intruder alarm system devices. Note that Zigbee Green Power devices currently are unsupported.

Zigbee stacks and hardware from many different hardware chip manufacturers are supported via radio libraries which translate their proprietary communication protocol into a common API which is shared among all radio libraries for zigpy. If some Zigbee stack or Zigbee Coordinator hardware for other manufacturers is not supported by yet zigpy it is possible for any independent developer to step-up and develop a new radio library for zigpy which translates its proprietary communication protocol into the common API that zigpy can understand.

zigpy contains common code implementing ZCL (Zigbee Cluster Library) and ZDO (Zigbee Device Object) application state management which is being used by various radio libraries implementing the actual interface with the radio modules from different manufacturers. The separate radio libraries interface with radio hardware adapters/modules over USB and GPIO using different native UART serial protocols.

The ZHA integration component for Home Assistant, the Zigbee Plugin for Domoticz, and the Zigbee Plugin for Jeedom (competing open-source home automation software) are all using zigpy libraries as dependencies, as such they could be used as references of different implementations if looking to integrate a Zigbee solution into your application.

Zigbee device OTA updates

zigpy have ability to download and perform Zigbee OTAU (Over-The-Air Updates) of Zigbee devices firmware. The Zigbee OTA update firmware image files should conform to standard Zigbee OTA format and OTA provider source URLs need to be published for public availability. Updates from a local OTA update directory also is also supported and can be used as an option for offline firmware updates if user provide correct Zigbee OTA formatted firmware files themselves.

Support for automatic download from existing online OTA providers in zigpy OTA provider code is currently only available for IKEA, Inovelli, LEDVANCE/OSRAM, SALUS/Computime, and SONOFF/ITEAD devices. Support for additional OTA providers for other manufacturers devices could be added to zigpy in the future, if device manufacturers publish their firmware images publicly and developers contribute the needed download code for them.

How to install and test, report bugs, or contribute to this project

For specific instructions on how-to install and test zigpy or contribute bug-reports and code to this project please see the guidelines in the CONTRIBUTING.md file:

This CONTRIBUTING.md file will contain information about using zigpy, testing new releases, troubleshooting and bug-reporting as, as well as library + code instructions for developers and more. This file also contain short summaries and links to other related projects that directly or indirectly depends in zigpy libraries.

You can contribute to this project either as an end-user, a tester (advanced user contributing constructive issue/bug-reports) or as a developer contributing code.

Compatible Zigbee coordinator hardware

Radio libraries for zigpy are separate projects with their own repositories and include bellows (for communicating with Silicon Labs EmberZNet based radios), zigpy-deconz (for communicating with deCONZ based radios from Dresden Elektronik), and zigpy-xbee (for communicating with XBee based Zigbee radios), zigpy-zigate for communicating with ZiGate based radios, zigpy-znp or zigpy-cc for communicating with Texas Instruments based radios that have Z-Stack ZNP coordinator firmware.

Note! Zigbee 3.0 support or not in zigpy depends primarily on your Zigbee coordinator hardware and its firmware. Some Zigbee coordinator hardware support Zigbee 3.0 but might be shipped with an older firmware which does not, in which case may want to upgrade the firmware manually yourself. Some other Zigbee coordinator hardware may not support a firmware that is capable of Zigbee 3.0 at all but can still be fully functional and feature complete for your needs, (this is very common as many if not most Zigbee devices do not yet Zigbee 3.0 or are backwards-compable with a Zigbee profile that is support by your Zigbee coordinator hardware and its firmware). As a general rule, newer Zigbee coordinator hardware released can normally support Zigbee 3.0 firmware and it is up to its manufacturer to make such firmware available for them.

Compatible zigpy radio libraries

  • Digi XBee based Zigbee radios via the zigpy-xbee library for zigpy.
  • dresden elektronik deCONZ based Zigbee radios via the zigpy-deconz library for zigpy.
  • Silicon Labs (EmberZNet) based Zigbee radios using the EZSP protocol via the bellows library for zigpy.
  • Texas Instruments based Zigbee radios with all compatible Z-Stack firmware via the zigpy-znp library for zigpy.
  • ZiGate based ZigBee radios via the zigpy-zigate library for zigpy.

Legacy or obsolete zigpy radio libraries

  • Texas Instruments with Z-Stack legacy firmware via the zigpy-cc library for zigpy.

Release packages available via PyPI

New packages of tagged versions are also released via the "zigpy" project on PyPI

Older packages of tagged versions are still available on the "zigpy-homeassistant" project on PyPI

Packages of tagged versions of the radio libraries are released via separate projects on PyPI

zigpy-zigate's People

Contributors

adminiuga avatar badzz avatar devbis avatar doudz avatar gamester17 avatar hedda avatar jsl-1 avatar michaelbitard avatar onkelbeh avatar puddly avatar thejulianjes 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

Watchers

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

zigpy-zigate's Issues

[REQUEST] Add same PyPa workflow as the other zigpy projects

PyPa has a GitHub Action for publishing pre-built distribution packages to PyPI.

and

Also, consider adding a long description to PyPi index by pointing to the README.md

  • zigpy/zigpy#371

  • Keeping this and other methods the same in all zigpy libraries can help unify them.

Others features/functions which code could be reused and kept the same include:

  • New zigpy initialization
  • Support for radio lib configuration schemas
  • Implement radio probe / API probe method
  • USB reconnect (reconnect serial port on disconnects)

IMHO keep code for same functions/features the same to help the finding of issues.

This, in turn, could help existing and developers to which on all libraries for zigpy.

[REQUEST] Implement new zigpy initialization and support for radio lib configuration schemas

Please consider implementing new zigpy initialization and support for radio lib configuration schemas.

@doudz please see similar zigpy/zigpy-deconz#105 and zigpy/zigpy-cc#34 from @Adminiuga which in turn refer to https://github.com/zigpy/zigpy/commits/new-zigpy-init/dev and corresponding changes in Home Assistant are currently in https://github.com/Adminiuga/home-assistant/tree/experimental/new-zigpy-init

For reference also see zigpy/zigpy#372 and zigpy/zigpy#364 for zigpy.

This would allow each radio library to extend the zigpy configuration schema by adding radio specific configuration options.

Error setting up entry /dev/ttyUSB0 for zha

My Zigate stop responding from some hours ago.
I got a zigbee2mqtt stick in the same USB (powered) hub, and it's still kicking.
This is the error trace on a new boot:

No response to command 0x0002 and then:

Error setting up entry /dev/ttyUSB0 for zha
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/zigpy_zigate/api.py", line 80, in command
    timeout=COMMAND_TIMEOUT
  File "/usr/local/lib/python3.7/asyncio/tasks.py", line 449, in wait_for
    raise futures.TimeoutError()
concurrent.futures._base.TimeoutError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 215, in async_setup
    hass, self
  File "/usr/src/homeassistant/homeassistant/components/zha/__init__.py", line 103, in async_setup_entry
    await zha_gateway.async_initialize()
  File "/usr/src/homeassistant/homeassistant/components/zha/core/gateway.py", line 136, in async_initialize
    await self.application_controller.startup(auto_form=True)
  File "/usr/local/lib/python3.7/site-packages/zigpy_zigate/zigbee/application.py", line 29, in startup
    await self._api.set_raw_mode()
  File "/usr/local/lib/python3.7/site-packages/zigpy_zigate/api.py", line 105, in set_raw_mode
    await self.command(0x0002, data)
  File "/usr/local/lib/python3.7/site-packages/zigpy_zigate/api.py", line 84, in command
    raise NoResponseError
zigpy_zigate.api.NoResponseError

[REQUEST] Support for Xiaomi Lumi Gateway MIxx01 Zigbee to WiFi bridge with ZiGate and OpenLumi firmware

@doudz Please consider adding for supporting Xiaomi Lumi Gateway with ZiGate and OpenLumi firmware in zigpy-zigate via WiFi.

Please see -> Koenkk/zigbee-herdsman#241 and Koenkk/zigbee-herdsman#242

Summary: @G1K, @devbis, @kirovilya (from the @diyruz organization on GitHub) have hacked Xiaomi Lumi Gateway MIxx01 Zigbee to WiFi bridges (Xiaomi gateways DGNWG05LM and ZHWG11LM) with an OpenWRT based firmware on its IMX6 SoC and ZiGate firmware on its NXP JN516x chips (JN5168 and JN5169 chip), or you can make use your own DIY hardware.

They call their project "OpenLumi" (or "Open Lumi") and thet look currently to be only testing this themselves with Zigbee2MQTT.

https://github.com/openlumi

As I understand this could maybe be used as ZiGate WiFi but in the practical format of a stand-alone bridge appliance format.

I believe that this is a very similar concept to how you can use ITead's Sonoff ZBBridge with bellows if you hack its ESP8266 with Tasmota firmware and standard EZSP firmware so that you can use it as a remote coordinator over WiFi via its integrated TCP serial server. For that see -> https://www.digiblur.com/2020/07/how-to-use-sonoff-zigbee-bridge-with.html

installation Pizigate ?

REbonjour Doudz

Donc, venant de Zigate (qui est devenu obsolete), je cherche à installer mon Pizigate (3.1d) avec ZHA.
Mais probleme dès l'installation

2020-11-19 16_36_25-Configuration - Home Assistant

en log, j'ai ca qui remonte :
Logger: zigate
Source: /usr/local/lib/python3.8/site-packages/zigate/core.py:594
First occurred: 16:53:32 (6 occurrences)
Last logged: 16:57:20

Unknown response 0x0302

Can't turn on/off group entities

Hi,

We have an error when trying to turn on group entities in HA because mrequest is not implemented in zigpy_zigate/zigbee/application.py.

Is there any plan to implement this method ?

Thank you for your hard work !

2020-12-23 09:22:19 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [140120683100576]
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 135, in handle_call_service
await hass.services.async_call(
File "/usr/src/homeassistant/homeassistant/core.py", line 1445, in async_call
task.result()
File "/usr/src/homeassistant/homeassistant/core.py", line 1480, in _execute_service
await handler.job.target(service_call)
File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 204, in handle_service
await self.hass.helpers.service.entity_service_call(
File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 593, in entity_service_call
future.result() # pop exception if have
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 664, in async_request_call
await coro
File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 630, in _handle_entity_call
await result
File "/usr/src/homeassistant/homeassistant/components/light/init.py", line 230, in async_handle_light_on_service
await light.async_turn_on(**params)
File "/usr/src/homeassistant/homeassistant/components/zha/light.py", line 529, in async_turn_on
await super().async_turn_on(**kwargs)
File "/usr/src/homeassistant/homeassistant/components/zha/light.py", line 225, in async_turn_on
result = await self._on_off_channel.on()
File "/usr/local/lib/python3.8/site-packages/zigpy/group.py", line 44, in request
res = await self.application.mrequest(
File "/usr/local/lib/python3.8/site-packages/zigpy/application.py", line 255, in mrequest
raise NotImplementedError
NotImplementedError

I made a working dirty fix to implement this :

async def mrequest(
    self,
    group_id,
    profile,
    cluster,
    src_ep,
    sequence,
    data,
    *,
    hops=0,
    non_member_radius=3,
):
    src_ep = 1
    dst_ep = src_ep
    LOGGER.debug('mrequest %s',
                 (group_id, profile, cluster, src_ep, sequence, data, hops, non_member_radius))
    try:
        v, lqi = await self._api.raw_aps_data_request(group_id, src_ep, dst_ep, profile, cluster, data, 1)
    except NoResponseError:
        return 1, "ZiGate doesn't answer to command"
    req_id = v[1]
    send_fut = asyncio.Future()
    self._pending[req_id] = send_fut

    if v[0] != 0:
        self._pending.pop(req_id)
        return v[0], "Message send failure {}".format(v[0])

    # disabled because of https://github.com/fairecasoimeme/ZiGate/issues/324
    # try:
    #     v = await asyncio.wait_for(send_fut, 120)
    # except asyncio.TimeoutError:
    #     return 1, "timeout waiting for message %s send ACK" % (sequence, )
    # finally:
    #     self._pending.pop(req_id)
    # return v, "Message sent"
    return 0, "Message sent"

Migration path over from doudz/homeassistant-zigate

Hi @doudz,

As a doudz/homeassistant-zigate user, I felt a bit lost on how to transition over to zigpy-zigate. I'd be happy to add this to the README.md once I get your help/feedback.

  1. Stop HASS.
  2. Remove custom_components/zigate and all configuration settings pertaining to zigate: .
  3. Enable Zigbee integration by going into the Integrations panel on HASS frontend.

This is where I stopped. I got a timeout error which I had never seen before. Some comments on issues here and on the original project suggest erasing Zigate's and resetting the device.

It's also unclear what's the recommended unpairing/pairing strategy. Should I unpair all devices while still using doudz/homeassistant-zigate? Should zigate.remove_device be called at all?

Addtional insight from someone who has been through this transition would be very helpful to minimize mistakes.

Add command translation layer

Some Zigbee commands implemented by Zigate differ from Zigpy, e.g.:

Maybe a command translation layer could help here, WDYT?

Note: I'm came across this as it prevents zha_map from working (ZDOCmd.Mgmt_Lqi_req: 49 is 0x0031 in hexadecimal):

2020-05-23 12:25:59 DEBUG (MainThread) [zigpy.util] Tries remaining: 1
2020-05-23 12:25:59 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0x0000, 0, <ZDOCmd.Mgmt_Lqi_req: 49>, 0, 0, 113, b'q\x00', True, False)
2020-05-23 12:25:59 DEBUG (MainThread) [zigpy_zigate.uart] Send: 0x530 b'0200000000003100000000027100'
2020-05-23 12:25:59 DEBUG (MainThread) [zigpy_zigate.uart] Frame to send: b'\x050\x00\x0e{\x02\x00\x00\x00\x00\x001\x00\x00\x00\x00\x02q\x00'
2020-05-23 12:25:59 DEBUG (MainThread) [zigpy_zigate.uart] Frame escaped: b'\x02\x150\x02\x10\x02\x1e{\x02\x12\x02\x10\x02\x10\x02\x10\x02\x10\x02\x101\x02\x10\x02\x10\x02\x10\x02\x10\x02\x12q\x02\x10'=
2020-05-23 12:25:59 DEBUG (MainThread) [zigpy_zigate.uart] Frame received: 8000000516a600053000
2020-05-23 12:25:59 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-05-23 12:25:59 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-05-23 12:25:59 DEBUG (MainThread) [zigpy.device] [0x0000] Delivery error for seq # 0x71, on endpoint id 0 cluster 0x0031: Message send failure 166
2020-05-23 12:25:59 ERROR (MainThread) [custom_components.zha_map] failed to scan 00:15:8d:00:02:19:ff:ff device: [0x0000:0:0x0031]: Message send failure

Database is not created and all devices are lost after restart

When running the library (branch master), I'm able to provision new devices, but when restarting all devices seems to be lost.

I'm using the following APP Config and calling ControllerApplication() in that way

APP_CONFIG = {
    config.CONF_DEVICE: {
        config.CONF_DEVICE_PATH: "/dev/ttyUSBRPI3",
    },
    config.CONF_DATABASE: "/var/lib/domoticz/plugins/Domoticz-Zigpy/Datas/zigpy.db",
}

zigpyApp = ControllerApplication(APP_CONFIG)

Don't know if this is related to : zigpy/zigpy#207

Warn device

Hi,
I have a heiman Warn device.
added via zha :

IEEE: 00:0d:6f:00:12:0a:bc:e6
Nwk: 0x55fd
LQI: 156
RSSI: Unknown
Last Seen: 2019-10-16T20:54:46
Power Source: Mains

Using the code example "full example data" : nothing happen.

Log :

2019-10-16 20:58:03 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection.140049627285824] Error handling message: Unknown error
Traceback (most recent call last):
  File "/home/jimmy/rien/hass/.venv/lib/python3.6/site-packages/homeassistant/components/websocket_api/decorators.py", line 19, in _handle_async_response
    await func(hass, connection, msg)
  File "/home/jimmy/rien/hass/.venv/lib/python3.6/site-packages/homeassistant/components/zha/api.py", line 457, in websocket_get_bindable_devices
    for device in zha_gateway.devices.values()
  File "/home/jimmy/rien/hass/.venv/lib/python3.6/site-packages/homeassistant/components/zha/api.py", line 458, in <listcomp>
    if async_is_bindable_target(source_device, device)
  File "/home/jimmy/rien/hass/.venv/lib/python3.6/site-packages/homeassistant/components/zha/core/helpers.py", line 129, in async_is_bindable_target
    source_clusters = source_zha_device.async_get_std_clusters()
AttributeError: 'NoneType' object has no attribute 'async_get_std_clusters'

2019-10-16 20:59:54 ERROR (MainThread) [homeassistant.components.zha.api] Warning IASWD: ieee: [00:0d:6f:00:05:7d:2d:34] could not be found!
2019-10-16 20:59:54 DEBUG (MainThread) [homeassistant.components.zha.api] Warning IASWD: ieee: [00:0d:6f:00:05:7d:2d:34] mode: [1] strobe: [1] level: [2]

Pizigate - ZHA installation error "No response to command 0x0002"

Hi,
I am using the setup with Pizigate, RPI3B+ and hassio, while trying the ZHA integration I am having some issues.
In Configuration+System+Hardware I have pizigate as:
/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0
In Integration for ZHA I am using:

  1. Serial device path: enter manually
  2. Radio type: Zigate
  3. Serial device path: /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0
    result: Failed to connect.
    In logs I can see the following:
    2020-11-30 12:30:40 DEBUG (MainThread) [zigpy_zigate.uart] Connection made
    2020-11-30 12:30:40 DEBUG (MainThread) [zigpy_zigate.uart] Send: 0x0002 b'01'
    2020-11-30 12:30:40 DEBUG (MainThread) [zigpy_zigate.uart] Frame to send: b'\x00\x02\x00\x01\x02\x01'
    2020-11-30 12:30:40 DEBUG (MainThread) [zigpy_zigate.uart] Frame escaped: b'\x02\x10\x02\x12\x02\x10\x02\x11\x02\x12\x02\x11'
    2020-11-30 12:30:41 WARNING (MainThread) [zigpy_zigate.api] No response to command 0x0002
    2020-11-30 12:30:41 WARNING (MainThread) [zigpy_zigate.api] Retry command 0x0002
    2020-11-30 12:30:41 DEBUG (MainThread) [zigpy_zigate.uart] Send: 0x0002 b'01'
    2020-11-30 12:30:41 DEBUG (MainThread) [zigpy_zigate.uart] Frame to send: b'\x00\x02\x00\x01\x02\x01'
    2020-11-30 12:30:41 DEBUG (MainThread) [zigpy_zigate.uart] Frame escaped: b'\x02\x10\x02\x12\x02\x10\x02\x11\x02\x12\x02\x11'
    2020-11-30 12:30:43 DEBUG (MainThread) [zigpy_zigate.api] Unsuccessful radio probe of '/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0' port

Can you provide some assistance?
Thanks in advance
BR
Pedro

upcoming changes in zigpy

Just wanted to give a heads up about changes in the zigpy library which would require changes on your side too.
See zigpy/zigpy#223

Shouldn't be too bad and actually should make your code a bit simpler. The gist of change:

  • request()/broadcast() just need to send the data out and wait for send confirmation, returning a tuple of (status, message) , shouldn't raise any DeliveryError exceptions and leave it to zigpy. If you raise an exception here, zigpy will allow it to bubble up.
  • for incoming messages, just pass them through to zigpy, zigpy will handle deserialization and request/reply session tracking

Init avec ZHA

Hello @doudz,

Aujourd'hui j'ai voulu essayer ma Zigate (flashée avec le firmware 3.1a) dans Home Assistant (0.98.0b1) avec ZHA et donc zigpy-zigate et je dois dire que ce n'est pas très concluant.

Pour mes tests j'ai utilisé une lampe Philips hue et une commande Philips.

Le premier problème rencontré c'est lorsque que j'essaye d'appairé les devices depuis HA lorsque je fais Configuration > ZHA > ADD Devices la zigate ne passe pas toujours en mode appairage (LED bleu qui flash). Souvent ça fonctionne la première fois et pas les suivantes. Quand je suis dans ce cas là je dois redémarrer mon système complet (pas seulement HA mais aussi hassio).

Ma lampe n'est pas détectée correctement (unk_manufacturer unk_model) et ma commande ne fonctionne pas non plus.

Je vais essayer d'aller plus loin dans le debug mais si tu des pistes à suivre ou des choses à faire je prends.

image

[REQUEST] Access to the Certification CE or FCC via zigpy-zigate and/or the zigpy library?

Requesting access to the Certification CE or FCC on a ZiGate radio via zigpy-zigate and/or the zigpy library?

Perhaps extend zigpy API so can also be used by other radio libraries too or otherwise only add the function to zigpy-zigate for now?

Splitting from #42 to have a separate issue for tracking this specific idea/suggestion/request.

Posted this as a suggestion as also mentioned as a current limitation by @pipiche38 for his experimental project to make a Zigpy plugin for Domoticz with ZiGate support:

https://github.com/pipiche38/Domoticz-Zigpy

The idea is that his new project might at some point be able to replace his existing ZiGate plugin for Domoticz if and when functions and features get up to par.

https://github.com/pipiche38/Domoticz-Zigpy/blob/master/README.md

PS: See comments that functions like these can be added to zigpy if and when more than one radio library has support for it:

zigpy/zigpy#372

zigpy/zigpy#384

Until then I understand you will have to bypass zigpy for those specific features and as a workaround talk direct to radio library.

[REQUEST] Zeroconf / mDNS network detection of ZiGate Pack WiFi adapter and configuration flow for ZHA integration

Not sure if any of you own the newer ZiGate-Ethernet (wired gateway with PiZiGate) or the older ZiGate + WiFi Pack (wireless bridge for ZiGate module) but please consider discussing and brainstorming mDNS concepts for zigpy probe method + initialization routine that can be used in a config flow by the ZHA integration component for initial Zigbee setup in Home Assistant.

https://www.home-assistant.io/integrations/zha/#discovery-via-usb-or-zeroconf

Zeroconf network discovery can be used by not only for the ZiGate Pack WiFi adapter but also for similar none-ZiGate network-attached Zigbee-adapters that will probably come in the near future, (like any other ESP8266/ESP8285 and ESP32 based gateways with a zigpy compatible Zigbee radio which will surely get a hacked firmware with similar features, and probably sooner rather than later as it is inexpensive and looks to have a great Zigbee radio.

Please also see the Zeroconf discovery for ZHA integration discussion here in the Home Assistant community forum:

https://community.home-assistant.io/t/zha-automatic-discovery-of-zigbee-coordinator-bridges-gateways-ethernet-wifi-network-devices-that-support-zeroconf-or-ssdp/293300

Anyway, this is a follow-up issue to mDNS question raised in home-assistant/core#35161 where Adminiuga implemented a configuration flow for ZHA integration component to make the probing type of to local connect adapters and initial initialization routine much more user-friendly for new installations in the ZHA integration component for Home Assistant.

Now it would be awesome if the ZHA integration component for Home Assistant from an end-user perspective supported just as an easy detection and configuration of network networked-attached Zigbee coordinator adapters, like the "ZiGate Pack WiFi adapter".

Therefore I suggest using some kind of Zero-configuration networking (zeroconf) method, like for example mDNS, (as mDNS is already in use in Home Assistant Core), to make the ZHA integration component for Home Assistant automatically detect, connect, and configure compatible networked-attached Zigbee coordinator adapters like the "ZiGate Pack WiFi adapter" as that is otherwise already supported by the zigpy-zigate radio library for zigpy.

As I understand it, all ZiGate hardware look to be modular in design and the "ZiGate Pack WiFi adapter" was first concieved as really just an optional ESP8266/ESP8285 or ESP32 based "dumb" UART-to-TCP/IP (for Serial-port to WiFi-bridge function) for the standard "ZiGate TTL adapter" that allows users to connect to it remotely using TCP/IP over your home LAN (Local Area Network) instead of plugging it directly to your computer via the optional USB adapter.

Specifically, please see the picture of "ZiGate Pack WiFi adapter" https://zigate.fr/produit/zigate-pack-wifi-v1-3/ compared to the picture of "ZiGate TTL USB adapter" https://zigate.fr/produit/zigate-ttl/

Thus "ZiGate Pack WiFi adapter" allows ZHA users to have a networked Zigbee adapter setup like this:

ZHA <–> zigpy/zigpy-zigate <–> TCP/IP over LAN <–> ZiGate-WiFi <–> UART <–> ZiGate Radio

Suggesting this now as I just learned from @doudz there that the new v2.0 version of the ZiGate Pack WiFi adapter firmware contains "ESP-LINK from Jeelab" software which among other things adds mDNS and UART WiFi Bridge support over TCP. As I understand, version v1.x of the firmware for the ZiGate Pack WiFi adapter basically only contained a simple UART/serial-port server forwarding service ( serial server software that just acts as a dumb Zigbee to WiFi bridge for the zigpy-zigate library), while the new version v2.x also has more advanced features (which does not need to used) it still also contain a simple UART/serial-port server forwarding service, but now mDNS also makes it easier to discover the adapter on your local network.

ESP-LINK from Jeelab

Here is the list of features of this new v2.xx firmware for the ZiGate Pack WiFi adapter:

  • ZiGate TCP 9999 to UART WiFi Bridge
  • WiFi configuration in client and access point mode
  • DHCP client or static IP
  • Client syslog
  • SNTP client
  • mDNS
  • MQTT client
  • WiFi firmware update (OTA)
  • Console for logging and validating the operation of the ZiGate

PS: @doudz Do you maybe happen to have any connections or contact with the manufacturers of ZiGate and could possibly get them to sponsor each of you guys (yourself plus @Adminiuga and @dmulcahey ) with both the ZiGate Pack WiFi adapter as well as the standard ZiGate TTL USB adapter for ZHA, zigpy and zigpy-zigate development purposes for free under the premises of no promises and no-strings-attached so that there is no pressure for you to produce as this is still just a hobby project?

[REQUEST] NVRAM Backup and Restore + Export and Import NCP Trust Center parameters

Could it be possible to fully backup ZiGate NVRAM and restore to other ZiGate hardware via the zigpy-zigate radio library?

If possible also Export and Import NCP Trust Center parameters.

Please note that https://github.com/zha-ng/zigpy-znp also has a nice "NVRAM Backup and restore" function.

Also, bellows can Export (backup) and Import (restore) NCP Trust Center parameters, see -> zigpy/bellows#295

https://github.com/doudz/homeassistant-zigate and https://github.com/doudz/zigate do not feature backup and restore either?

[REQUEST] Access to the LED control via zigpy-zigate and/or the zigpy library?

Requesting access to the ZiGate LED control on a ZiGate radio via zigpy-zigate and/or the zigpy library?

Perhaps extend zigpy API so can also be used by other radio libraries too or otherwise only add the function to zigpy-zigate for now?

Splitting from #42 to have a separate issue for tracking this specific idea/suggestion/request.

Posted this as a suggestion as also mentioned as a current limitation by @pipiche38 for his experimental project to make a Zigpy plugin for Domoticz with ZiGate support:

https://github.com/pipiche38/Domoticz-Zigpy

The idea is that his new project might at some point be able to replace his existing ZiGate plugin for Domoticz if and when functions and features get up to par.

https://github.com/pipiche38/Domoticz-Zigpy/blob/master/README.md

By the way, I think that controlling LEDs is already possible via zigpy-cc and zigpy-znp radio libraries (for TI radios):

zigpy/zigpy-cc#42

zigpy/zigpy-znp#20

PS: See comments that functions like these can be added to zigpy if and when more than one radio library has support for it:

zigpy/zigpy#372

zigpy/zigpy#384

Until then I understand you will have to bypass zigpy for those specific features and as a workaround talk direct to radio library.

Tag release versions and make PyPi release(s) of zigpy-zigate

Please remember to tag an initial release version of zigpy-zigate and make PyPi release of zigpy-zigate.

@doudz I guess that you are probably not yet to make the first release of this zigpy-zigate library but I just wanted to add a friendly reminder here under issues for tracking purposes only, so there is no rush.

An initial PyPi release version and then continues versions/releases will make it easier for Linux OS distributions like Hass.io and Raspbian to update and make use of each new versions of this library.

Version tagging and PyPi release(s) is something that is already available for the zigpy library as well as similar radio libraries that is depends on such as; bellows, zigpy-deconz, and zigpy-xbee

https://github.com/zigpy/zigpy/releases
https://github.com/zigpy/bellows/releases
https://github.com/zigpy/zigpy-xbee/releases
https://github.com/zigpy/zigpy-deconz/releases

https://pypi.org/project/zigpy
https://pypi.org/project/bellows
https://pypi.org/project/zigpy-xbee
https://pypi.org/project/zigpy-deconz

Oh! And one more thing; FIRST! ;) ...though I should add don't actually own ZiGate hardware myself

Remove device with ZHA

Hi,

I tried to remove a device via Configuration > ZHA > #pick a device# > Remove Device (or Configuration > ZHA > #pick a device# > Reconfigure device)

Nothing seems to happen on zigate side. The device is temporary removed from the UI but will reappear if I refresh the page.
In the logs I get only a notification from zha but nothing from zigate

2019-10-15 12:06:50 INFO (MainThread) [homeassistant.components.zha.api] Removing node 00:15:8d:00:01:b9:22:7e
2019-10-15 12:07:22 DEBUG (MainThread) [homeassistant.components.zha.api] Reconfiguring node with ieee_address: 00:0d:6f:ff:fe:a9:17:ce

Is it implemented ?

[REQUEST] Access to the TX Power / Energy level via zigpy-zigate and/or the zigpy library?

Requesting access to the Power / Energy level on a ZiGate radio via zigpy-zigate and/or the zigpy library?

Perhaps extend zigpy API so can also be used by other radio libraries too or otherwise only add the function to zigpy-zigate for now?

Splitting from #42 to have a separate issue for tracking this specific idea/suggestion/request.

Posted this as a suggestion as also mentioned as a current limitation by @pipiche38 for his experimental project to make a Zigpy plugin for Domoticz with ZiGate support:

https://github.com/pipiche38/Domoticz-Zigpy

The idea is that his new project might at some point be able to replace his existing ZiGate plugin for Domoticz if and when functions and features get up to par.

https://github.com/pipiche38/Domoticz-Zigpy/blob/master/README.md

By the way, I think that controlling TX Power is already possible via zigpy-znp and/or zigpy-cc radio libraries (for TI radios):

zigpy/zigpy-znp#11

zigpy/zigpy-cc#33

PS: See comments that functions like these can be added to zigpy if and when more than one radio library has support for it:

zigpy/zigpy#372

zigpy/zigpy#384

Until then I understand you will have to bypass zigpy for those specific features and as a workaround talk direct to radio library.

Unable to use with dev branch

I'm trying to use the zigpy-zigate lib and zigpy dev branch and I'm getting and error when starting.

python3 testzigpy.py
Traceback (most recent call last):
  File "testzigpy.py", line 5, in <module>
    from zigpy_zigate.zigbee.application import ControllerApplication
  File "/var/lib/domoticz/plugins/Domoticz-Zigpy/zigpy_zigate/zigbee/application.py", line 8, in <module>
    from zigpy_zigate import types as t
  File "/var/lib/domoticz/plugins/Domoticz-Zigpy/zigpy_zigate/types.py", line 132, in <module>
    class NWK(zigpy.types.HexRepr, uint16_t):
AttributeError: module 'zigpy.types' has no attribute 'HexRepr'

If adding the definition of HexRep (which seems to be removed from the latest zigpy library), I'm getting the following error

$ python3 testzigpy.py


DEBUG:asyncio:Using selector: EpollSelector
Traceback (most recent call last):
  File "testzigpy.py", line 71, in <module>
    asyncio.run(main())
  File "/usr/lib/python3.7/asyncio/runners.py", line 43, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.7/asyncio/base_events.py", line 587, in run_until_complete
    return future.result()
  File "testzigpy.py", line 48, in main
    "path": "/dev/ttyUSBRPI3",
TypeError: Can't instantiate abstract class ControllerApplication with abstract methods probe

[DEPENDENCY] The pre-commit/mirrors-isort mirror repository is deprecated so should use isort directly instead?

Probably need to update dependencies plus possibly other source for isort or in other way seperate isort dependency for all zigpy libraries as upstream repo for isort has moved?

@doudz & @pipiche38 This is only to bring this to your attention as I don't know the best solution for this in zigpy-zigate

I just happened to stumble on the fact that the mirror of isort package for pre-commit is deprecated and that upstream isort has also recently been moved. I think that this applies to all zigpy libraries, including zigpy, bellows, zigpy-cc, zigpy-deconz, zigpy-xbee, zigpy-zigate, and zha-device-handlers, plus zigpy-znp as well?

For reference, updated now in zigpy, zigpy-deconz, and bellows:

zigpy/zigpy#488

zigpy/zigpy-deconz#124

zigpy/bellows#349

See comment in https://github.com/pre-commit/mirrors-isort where is says that the pre-commit mirror for isort repository is deprecated, and to instead use isort directly.

Mirror of isort package for pre-commit split and moved

For pre-commit: see https://github.com/pre-commit/pre-commit

For isort: see https://github.com/PyCQA/isort

Also note that isort upstream recently moved from https://github.com/timothycrosley/isort to https://github.com/PyCQA/isort

Currently, the latest release is 5.5.0 (as of September 3, 2020) and since isort 5.0.0 and later it now requires Python 3.6 or later:

https://pycqa.github.io/isort/CHANGELOG/

Some more information should be available at https://pycqa.github.io/isort/

PS: If you decide on changing this then please also remember to reflect the changes in the CONTRIBUTING.md file for zigpy:

https://github.com/zigpy/zigpy/blob/dev/CONTRIBUTING.md

zigpy/zigpy#490

Prerequicites

It is recommended that code is formatted with black and sorted with isort. The check format script that runs in CI will ensure that code meets this requirement and that it is correctly formatted with black. Instructions for installing black in many editors can be found here: https://github.com/psf/black#editor-integration

https://github.com/psf/black
https://github.com/timothycrosley/isort

Question about OTA update with zigpy-zigate

Hi,

All my ota update attempt have failed with zha/zigpy-zigate. Is there a known issue with this ? Does someone had success with ota update with zigpy-zigate ?

Here is a log with hue firmware update in ota folder. All ota update stopped at file_offset = 40

https://termbin.com/n6be

Thanks !

Zigate firmware 3.1d
HA core 2020.12.1 in docker

Turn blue led off

Hello Doudz,

I cannot turn off zigate blue led since migrating to zha.
How can I do that?

Here si what I tried in configuration.yaml

zha:
  zigpy_config:
    zigpy_zigate:
      set_led: False

zha:
  zigpy_config:
    zigpy_zigate:
      set_led: 0

Playing with zigpy-zigate with Firmware 31d (early phase)

@doudz , I'm currently playing with zigpy-zigate and with the upcoming firmware 31d (under development).

I would like to report several unhandled messages from the zigpy-zigate library

0x8011 is a new message for ACK when messages are sent with ACK request

I'm also getting after a restart
unhanded response 0x302 and 0x8006

0x0302 is a new message indicating Zigate PDM ready
0x8006 is I think an old message type indicating that we got a ZiGate restart.

[REQUEST] Automagically auto-detect port-path and discover radio-type?

This is a feature request that I'm not exactly sure if it belongs to the Home Assistant core, the ZHA integration for Home Assistant, to zigpy, to each and every radio library for zigpy, or in many of all those mentioned in order to be achieved. Anyway, my main point with this feature request is this:

Is it possible to add some kind of "auto-detect" scanning option for automatic discovery/detection of port-path and radio-type (with recommended select) to achieve an even more plug-and-play experience of the initial install/configuration of the ZHA integration in Home Assistant or a zigpy implementation in any other software for that matter? An option for a so-called "next next next" installation process if you will.

From an end-users point-of-view the ZHA integration implementation of zigpy I think that it would be absolutely awesome if the installation process could automagically detect exactly which type of Zigbee adapter(s) you have plugged in and which USB-port(s) that the Zigbee adapter(s) is plugged into. Is this possible?

I think nicest would probably be if the user would be greeted by an option for "auto-detect and recommend Zigbee adapter(s)" that you could then simply click for automagic plug-and-play configuration of your Zigbee stick hardware instead of having to manually type the full port-path and the radio-type as you have to do today in ZHA.

Such an automagical auto-detect port-path and discover radio-type would make the ZHA integration component in Home Assistant even easier to install and configure for first-time ZHA users by removing the need for end-user to manually configure port-path and radio-type.

I believe that a plug-and-play oriented hardware configuration could be the last piece that is missing to make the ZHA in Home Assistant a much more user-friendly initial installation and configuration process experience.

Listening to group messages

Hello and thanks already for this great software. I am currently running into problems receiving messages from an IKEA tradfri remote control in Home Assistant. As I found out the remote is sending its messages to a group. These messages are not showing up in the log thus I think they are not handled by zigpy-zigate. Also the coordinator (PiZiGate) is showing a device type of "unknown". This results in it not being found in the list of devices when I tried to create a ZigBee group for the remote and the coordinator.

I am able to code in python but I would need some assistance for pointing me into the right direction. Thank you in advance.

[REQUEST] Access to ZiGate reset via zigpy-zigate and/or the zigpy library?

Requesting access to ZiGate reset via zigpy-zigate and/or the zigpy library? ?

Perhaps extend zigpy API so can also be used by other radio libraries too or otherwise only add the function to zigpy-zigate for now?

Splitting from #42 to have a separate issue for tracking this specific idea/suggestion/request.

Posted this as a suggestion as also mentioned as a current limitation by @pipiche38 for his experimental project to make a Zigpy plugin for Domoticz with ZiGate support:

https://github.com/pipiche38/Domoticz-Zigpy

The idea is that his new project might at some point be able to replace his existing ZiGate plugin for Domoticz if and when functions and features get up to par.

https://github.com/pipiche38/Domoticz-Zigpy/blob/master/README.md

PS: See comments that functions like these can be added to zigpy if and when more than one radio library has support for it:

zigpy/zigpy#372

zigpy/zigpy#384

Until then I understand you will have to bypass zigpy for those specific features and as a workaround talk direct to radio library.

Lots of log messages and devices become unavailable after several hours

Hi
I have profalux covers and a zigate to connect them to homeassistant.
Since the last version, I have a lots of message in logs and my devices become unavailable after 5-6 hours.
I have to open the zigbee network and click on the "device reconfiguration" for all covers to work again. But after 5-6 hours, they all became unavailable again.

Let me know if I can help you with more logs, tests...
Thanks

Related issues :
home-assistant/core#40707
home-assistant/core#40729

Here are the logs when the devices become unavailable : (below, all the logs messages)

2020-09-29 01:01:35 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xFBB2](unk_model): Attempting to checkin with device - missed checkins: 1
2020-09-29 01:01:35 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0xFBB2, 260, 0, 1, 1, 35, b'\x00#\x00\x04\x00', True, False)
2020-09-29 01:01:35 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:01:35 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:01:35 DEBUG (MainThread) [zigpy.device] [0xfbb2] Delivery error for seq # 0x23, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:01:35 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0x75A3](unk_model): Attempting to checkin with device - missed checkins: 1
2020-09-29 01:01:35 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0x75A3, 260, 0, 1, 1, 37, b'\x00%\x00\x04\x00', True, False)
2020-09-29 01:01:35 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:01:35 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:01:35 DEBUG (MainThread) [zigpy.device] [0x75a3] Delivery error for seq # 0x25, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:01:43 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xBAC9](unk_model): Attempting to checkin with device - missed checkins: 1
2020-09-29 01:01:43 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0xBAC9, 260, 0, 1, 1, 39, b"\x00'\x00\x04\x00", True, False)
2020-09-29 01:01:43 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:01:43 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:01:43 DEBUG (MainThread) [zigpy.device] [0xbac9] Delivery error for seq # 0x27, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:02:05 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xD490](unk_model): Attempting to checkin with device - missed checkins: 1
2020-09-29 01:02:05 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0xD490, 260, 0, 1, 1, 41, b'\x00)\x00\x04\x00', True, False)
2020-09-29 01:02:05 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:02:05 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:02:05 DEBUG (MainThread) [zigpy.device] [0xd490] Delivery error for seq # 0x29, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:02:15 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0x1EE6](unk_model): Attempting to checkin with device - missed checkins: 1
2020-09-29 01:02:15 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0x1EE6, 260, 0, 1, 1, 43, b'\x00+\x00\x04\x00', True, False)
2020-09-29 01:02:15 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:02:15 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:02:15 DEBUG (MainThread) [zigpy.device] [0x1ee6] Delivery error for seq # 0x2b, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:02:24 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xF341](unk_model): Attempting to checkin with device - missed checkins: 1
2020-09-29 01:02:24 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0xF341, 260, 0, 1, 1, 45, b'\x00-\x00\x04\x00', True, False)
2020-09-29 01:02:24 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:02:24 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:02:24 DEBUG (MainThread) [zigpy.device] [0xf341] Delivery error for seq # 0x2d, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:02:39 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0x75A3](unk_model): Attempting to checkin with device - missed checkins: 2
2020-09-29 01:02:39 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0x75A3, 260, 0, 1, 1, 47, b'\x00/\x00\x04\x00', True, False)
2020-09-29 01:02:39 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:02:39 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:02:39 DEBUG (MainThread) [zigpy.device] [0x75a3] Delivery error for seq # 0x2f, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:02:43 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xBAC9](unk_model): Attempting to checkin with device - missed checkins: 2
2020-09-29 01:02:43 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0xBAC9, 260, 0, 1, 1, 49, b'\x001\x00\x04\x00', True, False)
2020-09-29 01:02:43 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:02:43 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:02:43 DEBUG (MainThread) [zigpy.device] [0xbac9] Delivery error for seq # 0x31, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:02:54 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xFBB2](unk_model): Attempting to checkin with device - missed checkins: 2
2020-09-29 01:02:54 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0xFBB2, 260, 0, 1, 1, 51, b'\x003\x00\x04\x00', True, False)
2020-09-29 01:02:54 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:02:54 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:02:54 DEBUG (MainThread) [zigpy.device] [0xfbb2] Delivery error for seq # 0x33, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:03:34 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xD490](unk_model): Attempting to checkin with device - missed checkins: 2
2020-09-29 01:03:34 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0xD490, 260, 0, 1, 1, 53, b'\x005\x00\x04\x00', True, False)
2020-09-29 01:03:34 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:03:34 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:03:34 DEBUG (MainThread) [zigpy.device] [0xd490] Delivery error for seq # 0x35, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:03:41 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0x1EE6](unk_model): Attempting to checkin with device - missed checkins: 2
2020-09-29 01:03:41 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0x1EE6, 260, 0, 1, 1, 55, b'\x007\x00\x04\x00', True, False)
2020-09-29 01:03:41 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:03:41 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:03:41 DEBUG (MainThread) [zigpy.device] [0x1ee6] Delivery error for seq # 0x37, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:03:47 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xF341](unk_model): Attempting to checkin with device - missed checkins: 2
2020-09-29 01:03:47 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0xF341, 260, 0, 1, 1, 57, b'\x009\x00\x04\x00', True, False)
2020-09-29 01:03:47 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:03:47 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:03:47 DEBUG (MainThread) [zigpy.device] [0xf341] Delivery error for seq # 0x39, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:04:51 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xCE11](unk_model): Attempting to checkin with device - missed checkins: 1
2020-09-29 01:04:51 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0xCE11, 260, 0, 1, 1, 59, b'\x00;\x00\x04\x00', True, False)
2020-09-29 01:04:51 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:04:51 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:04:51 DEBUG (MainThread) [zigpy.device] [0xce11] Delivery error for seq # 0x3b, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:06:13 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xCE11](unk_model): Attempting to checkin with device - missed checkins: 2
2020-09-29 01:06:13 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0xCE11, 260, 0, 1, 1, 61, b'\x00=\x00\x04\x00', True, False)
2020-09-29 01:06:13 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:06:13 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:06:13 DEBUG (MainThread) [zigpy.device] [0xce11] Delivery error for seq # 0x3d, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:12:58 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xF7EF](unk_model): Attempting to checkin with device - missed checkins: 1
2020-09-29 01:12:58 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0xF7EF, 260, 0, 1, 1, 63, b'\x00?\x00\x04\x00', True, False)
2020-09-29 01:12:58 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:12:58 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:12:58 DEBUG (MainThread) [zigpy.device] [0xf7ef] Delivery error for seq # 0x3f, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:13:37 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0x3F0D](unk_model): Attempting to checkin with device - missed checkins: 1
2020-09-29 01:13:37 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0x3F0D, 260, 0, 1, 1, 65, b'\x00A\x00\x04\x00', True, False)
2020-09-29 01:13:37 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:13:37 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:13:37 DEBUG (MainThread) [zigpy.device] [0x3f0d] Delivery error for seq # 0x41, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:13:43 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0x06EA](unk_model): Attempting to checkin with device - missed checkins: 1
2020-09-29 01:13:43 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0x06EA, 260, 0, 1, 1, 67, b'\x00C\x00\x04\x00', True, False)
2020-09-29 01:13:43 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:13:43 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:13:43 DEBUG (MainThread) [zigpy.device] [0x06ea] Delivery error for seq # 0x43, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:14:03 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0xF7EF](unk_model): Attempting to checkin with device - missed checkins: 2
2020-09-29 01:14:03 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0xF7EF, 260, 0, 1, 1, 69, b'\x00E\x00\x04\x00', True, False)
2020-09-29 01:14:03 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:14:03 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:14:03 DEBUG (MainThread) [zigpy.device] [0xf7ef] Delivery error for seq # 0x45, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:14:43 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0x06EA](unk_model): Attempting to checkin with device - missed checkins: 2
2020-09-29 01:14:43 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0x06EA, 260, 0, 1, 1, 71, b'\x00G\x00\x04\x00', True, False)
2020-09-29 01:14:43 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:14:43 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:14:43 DEBUG (MainThread) [zigpy.device] [0x06ea] Delivery error for seq # 0x47, on endpoint id 1 cluster 0x0000: Message send failure 166
2020-09-29 01:14:55 DEBUG (MainThread) [homeassistant.components.zha.core.device] [0x3F0D](unk_model): Attempting to checkin with device - missed checkins: 2
2020-09-29 01:14:55 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0x3F0D, 260, 0, 1, 1, 73, b'\x00I\x00\x04\x00', True, False)
2020-09-29 01:14:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'a6000530' LQI:0
2020-09-29 01:14:55 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [166, 0, 1328, b'']
2020-09-29 01:14:55 DEBUG (MainThread) [zigpy.device] [0x3f0d] Delivery error for seq # 0x49, on endpoint id 1 cluster 0x0000: Message send failure 166`

Logs : 
`2020-09-28 15:14:42 DEBUG (MainThread) [zigpy_zigate.zigbee.application] request (0x06EA, 260, 8, 1, 1, 5, b'\x01\x05\x04\xff\x01\x00', True, False)
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8000 b'005c0530' LQI:0
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [0, 92, 1328, b'']
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8002 b'000104000601010206ea02000018430a00001001' LQI:60
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [0, 260, 6, 1, 1, <Address address_mode=ADDRESS_MODE.NWK address=0x06ea>, <Address address_mode=ADDRESS_MODE.NWK address=0x0000>, b'\x18C\n\x00\x00\x10\x01']
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0006] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=67 command_id=Command.Report_Attributes>
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0006] ZCL request 0x000a: [[Attribute(attrid=0, value=<TypeValue type=Bool, value=Bool.true>)]]
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0006] Attribute report received: on_off=1
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8002 b'000104000601010206ea02000018430a00001001' LQI:60
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [0, 260, 6, 1, 1, <Address address_mode=ADDRESS_MODE.NWK address=0x06ea>, <Address address_mode=ADDRESS_MODE.NWK address=0x0000>, b'\x18C\n\x00\x00\x10\x01']
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0006] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=67 command_id=Command.Report_Attributes>
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0006] ZCL request 0x000a: [[Attribute(attrid=0, value=<TypeValue type=Bool, value=Bool.true>)]]
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0006] Attribute report received: on_off=1
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8002 b'000104000801010206ea02000018440a000020bc' LQI:57
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [0, 260, 8, 1, 1, <Address address_mode=ADDRESS_MODE.NWK address=0x06ea>, <Address address_mode=ADDRESS_MODE.NWK address=0x0000>, b'\x18D\n\x00\x00 \xbc']
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0008] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=68 command_id=Command.Report_Attributes>
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0008] ZCL request 0x000a: [[Attribute(attrid=0, value=<TypeValue type=uint8_t, value=188>)]]
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0008] Attribute report received: current_level=188
2020-09-28 15:14:42 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x06EA:1:0x0008]: received attribute: 0 update with value: 188
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8002 b'000104000801010206ea02000018440a000020bc' LQI:57
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [0, 260, 8, 1, 1, <Address address_mode=ADDRESS_MODE.NWK address=0x06ea>, <Address address_mode=ADDRESS_MODE.NWK address=0x0000>, b'\x18D\n\x00\x00 \xbc']
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0008] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=68 command_id=Command.Report_Attributes>
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0008] ZCL request 0x000a: [[Attribute(attrid=0, value=<TypeValue type=uint8_t, value=188>)]]
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0008] Attribute report received: current_level=188
2020-09-28 15:14:42 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x06EA:1:0x0008]: received attribute: 0 update with value: 188
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8002 b'000104000801010206ea02000008050b0400' LQI:60
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [0, 260, 8, 1, 1, <Address address_mode=ADDRESS_MODE.NWK address=0x06ea>, <Address address_mode=ADDRESS_MODE.NWK address=0x0000>, b'\x08\x05\x0b\x04\x00']
2020-09-28 15:14:42 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0008] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=5 command_id=Command.Default_Response>
2020-09-28 15:14:42 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x06EA:1:0x0008]: executed 'move_to_level_with_on_off' command with args: '(255.0, 1)' kwargs: '{}' result: [4, <Status.SUCCESS: 0>]
2020-09-28 15:14:47 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8002 b'000104000801010206ea02000018450a000020fe' LQI:60
2020-09-28 15:14:47 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [0, 260, 8, 1, 1, <Address address_mode=ADDRESS_MODE.NWK address=0x06ea>, <Address address_mode=ADDRESS_MODE.NWK address=0x0000>, b'\x18E\n\x00\x00 \xfe']
2020-09-28 15:14:47 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0008] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=69 command_id=Command.Report_Attributes>
2020-09-28 15:14:47 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0008] ZCL request 0x000a: [[Attribute(attrid=0, value=<TypeValue type=uint8_t, value=254>)]]
2020-09-28 15:14:47 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0008] Attribute report received: current_level=254
2020-09-28 15:14:47 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x06EA:1:0x0008]: received attribute: 0 update with value: 254
2020-09-28 15:14:47 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8002 b'000104000801010206ea02000018450a000020fe' LQI:60
2020-09-28 15:14:47 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [0, 260, 8, 1, 1, <Address address_mode=ADDRESS_MODE.NWK address=0x06ea>, <Address address_mode=ADDRESS_MODE.NWK address=0x0000>, b'\x18E\n\x00\x00 \xfe']
2020-09-28 15:14:47 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0008] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=69 command_id=Command.Report_Attributes>
2020-09-28 15:14:47 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0008] ZCL request 0x000a: [[Attribute(attrid=0, value=<TypeValue type=uint8_t, value=254>)]]
2020-09-28 15:14:47 DEBUG (MainThread) [zigpy.zcl] [0x06ea:1:0x0008] Attribute report received: current_level=254
2020-09-28 15:14:47 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x06EA:1:0x0008]: received attribute: 0 update with value: 254
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8002 b'0001040008010102d49002000018410a00002001' LQI:87
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [0, 260, 8, 1, 1, <Address address_mode=ADDRESS_MODE.NWK address=0xd490>, <Address address_mode=ADDRESS_MODE.NWK address=0x0000>, b'\x18A\n\x00\x00 \x01']
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy.zcl] [0xd490:1:0x0008] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=65 command_id=Command.Report_Attributes>
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy.zcl] [0xd490:1:0x0008] ZCL request 0x000a: [[Attribute(attrid=0, value=<TypeValue type=uint8_t, value=1>)]]
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy.zcl] [0xd490:1:0x0008] Attribute report received: current_level=1
2020-09-28 15:14:55 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0xD490:1:0x0008]: received attribute: 0 update with value: 1
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8002 b'0001040008010102d49002000018410a00002001' LQI:87
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [0, 260, 8, 1, 1, <Address address_mode=ADDRESS_MODE.NWK address=0xd490>, <Address address_mode=ADDRESS_MODE.NWK address=0x0000>, b'\x18A\n\x00\x00 \x01']
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy.zcl] [0xd490:1:0x0008] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=65 command_id=Command.Report_Attributes>
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy.zcl] [0xd490:1:0x0008] ZCL request 0x000a: [[Attribute(attrid=0, value=<TypeValue type=uint8_t, value=1>)]]
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy.zcl] [0xd490:1:0x0008] Attribute report received: current_level=1
2020-09-28 15:14:55 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0xD490:1:0x0008]: received attribute: 0 update with value: 1
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8002 b'0001040006010102d49002000018420a00001000' LQI:90
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [0, 260, 6, 1, 1, <Address address_mode=ADDRESS_MODE.NWK address=0xd490>, <Address address_mode=ADDRESS_MODE.NWK address=0x0000>, b'\x18B\n\x00\x00\x10\x00']
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy.zcl] [0xd490:1:0x0006] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=66 command_id=Command.Report_Attributes>
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy.zcl] [0xd490:1:0x0006] ZCL request 0x000a: [[Attribute(attrid=0, value=<TypeValue type=Bool, value=Bool.false>)]]
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy.zcl] [0xd490:1:0x0006] Attribute report received: on_off=0
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8002 b'0001040006010102d49002000018420a00001000' LQI:90
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy_zigate.zigbee.application] zigate_callback_handler [0, 260, 6, 1, 1, <Address address_mode=ADDRESS_MODE.NWK address=0xd490>, <Address address_mode=ADDRESS_MODE.NWK address=0x0000>, b'\x18B\n\x00\x00\x10\x00']
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy.zcl] [0xd490:1:0x0006] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=True> manufacturer=None tsn=66 command_id=Command.Report_Attributes>
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy.zcl] [0xd490:1:0x0006] ZCL request 0x000a: [[Attribute(attrid=0, value=<TypeValue type=Bool, value=Bool.false>)]]
2020-09-28 15:14:55 DEBUG (MainThread) [zigpy.zcl] [0xd490:1:0x0006] Attribute report received: on_off=0
2020-09-28 15:15:08 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:15:08 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:08 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:15:08 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:10 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f102' LQI:0
2020-09-28 15:15:10 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:10 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:15:10 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:10 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f101' LQI:0
2020-09-28 15:15:10 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:10 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:15:10 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:10 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:15:10 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:10 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f102' LQI:0
2020-09-28 15:15:10 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:10 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:15:10 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:10 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:15:10 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f102' LQI:0
2020-09-28 15:15:55 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:15:55 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f101' LQI:0
2020-09-28 15:15:55 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:15:55 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:15:55 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f102' LQI:0
2020-09-28 15:15:55 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:15:55 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:15:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:15:55 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:18:42 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:18:42 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:18:42 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:18:42 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:18:55 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f102' LQI:0
2020-09-28 15:18:55 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:18:56 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:18:56 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:18:56 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f101' LQI:0
2020-09-28 15:18:56 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:18:56 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:18:56 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:18:56 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:18:56 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:18:56 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f102' LQI:0
2020-09-28 15:18:56 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:18:56 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:18:56 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:18:56 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:18:56 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:19:37 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:19:37 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:19:37 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:19:37 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:21:11 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f102' LQI:0
2020-09-28 15:21:11 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:21:11 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:21:11 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:21:11 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f101' LQI:0
2020-09-28 15:21:11 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:21:11 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:21:11 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:21:11 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:21:11 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:21:11 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f102' LQI:0
2020-09-28 15:21:11 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:21:11 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:21:11 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:21:11 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:21:11 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:22:39 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:22:39 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:22:39 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:22:39 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:23:41 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f102' LQI:0
2020-09-28 15:23:41 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:23:41 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:23:41 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:23:41 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f101' LQI:0
2020-09-28 15:23:41 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:23:41 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:23:41 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:23:41 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:23:41 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:23:41 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f102' LQI:0
2020-09-28 15:23:41 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:23:41 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f104' LQI:0
2020-09-28 15:23:41 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035
2020-09-28 15:23:41 DEBUG (MainThread) [zigpy_zigate.api] data received 0x8035 b'030000f103' LQI:0
2020-09-28 15:23:41 ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8035

Usable or not?

Hi,

Today since I had some problem with the zigate normal library (after the firmware upgrade every device were still there, but no device worked anymore) I tried the ZHA functions from Home assistant.

I want to clarify, I absolutely do not want to judge, just trying to understand where is the fault. Is your library already stable and usable?
Or maybe the ZHA portion is not still usable in the home assistant core?

I had a LOT of troubles, mainly these:

  • pairing ("search for new devices" or the pairing service) worked 1 times on 2, sometimes it just continue to flash for longer time (5/10 minutes)
  • two battery powered devices were seen as AC devices
  • I had a lot of problems with pairing lamps and outlets, and they worked 2 times on 5
  • after every reboot, EVERY device went missing. Everytime. That was the worst problem that let me gave this up.

Latest zigpy zigate lib, latest home assistant (.99)
Do you suggest something? I came back again to using your zigate module, just repairing every device and now it is working quite good apart of a few problems.

segmentation fault with new code for zigate din

log.txt
I'm using zigate usb (old prolific version) with home-assistant 0.118.3 in a docker container on a synology ds218+
Since the new code for zigate din has been integrated, when adding the zigate usb key in zha integration, a segmentation fault occurs, rebooting home-assistant and preventing to add the zigate key in ZHA. This seems linked to the load of libusb1 when zigpy-zigate code tests if the key is a zigate din
When checking the version of pyusb used, it is 1.0.0b1; this seg fault bug seems to be an already identified bug corrected in 1.0.2 and 1.1.0 :
pyusb/pyusb#232

implement an `api.probe()` method

Whenever you have a chance, could you implement something similar to zigpy/zigpy-deconz#101 ?

Essentially I'd like to be able to run await zigpy_zigate.api.ZiGate.probe(serial_port_path, baudrate) and get either a True if radio was detected or False otherwise. Method should swallow all exceptions.
Currently for deconz or EZSP it justs opens the port, issues some command to which it always should get a response and closes the port.

Not sure if anything similar is possible with zigate. Maybe issuing set_raw_command() and if successful then consider the radio is there.

Received unhandled response 0x8011

the Homeassistant ZHA module correctly detected the Tuya On_Off switch but unable to control it
When I press the button here is the error
DEBUG (MainThread) [zigpy_zigate.uart] Frame received: 8011000704008d1801000600
DEBUG (MainThread) [zigpy_zigate.api] data received 0x8011 b'008d18010006' LQI:0
ERROR (MainThread) [zigpy_zigate.api] Received unhandled response 0x8011

is it possible to add the response 0x8011 which is missing from the zigpy_zigate file ?

Model : SmartSwitch 1-Gang

{
"node_descriptor": "",
"endpoints": {
"1": {
"profile_id": 260,
"device_type": "0x0000",
"in_clusters": [
"0x0000",
"0x0001",
"0x0006"
],
"out_clusters": [
"0x000a",
"0x0019"
]
}
},
"manufacturer": "_TZ3400_keyjqthh",
"model": "TS0041",
"class": "zigpy.device.Device"
}

[REQUEST] ZiGate firmware upgrade capabilities via zigpy-zigate radio library?

Is it possible to get ZiGate firmware upgrade capabilities via zigpy-zigate radio library to map and match upstream ZiGate API?

https://github.com/doudz/homeassistant-zigate and https://github.com/doudz/zigate can upgrade/flash ZiGate firmware.

https://github.com/zha-ng/zigpy-znp can upgrade Texas Instruments CC firmware, (see zigpy/zigpy-znp#24 request/discussion).

But the zigpy-zigate radio library can currently not upgrade ZiGate firmware.

Please note that https://github.com/zha-ng/zigpy-znp also has a nice "NVRAM Backup and restore" function.

Also, bellows can Export (backup) and Import (restore) NCP Trust Center parameters, see -> zigpy/bellows#295

Error doing job: Exception in callback SerialTransport._read_ready()

Hello,

I updated all software packages on my RPi4 yesterday and ever since I get this error a lot and my zigbee devices stop working after a while. After a reboot they reconnect but only for a few minutes.

Error doing job: Exception in callback SerialTransport._read_ready()
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/asyncio/events.py", line 81, in _run
    self._context.run(self._callback, *self._args)
  File "/usr/local/lib/python3.8/site-packages/serial_asyncio/__init__.py", line 119, in _read_ready
    self._protocol.data_received(data)
  File "/usr/local/lib/python3.8/site-packages/zigpy_zigate/uart.py", line 60, in data_received
    cmd, length, checksum, f_data, lqi = struct.unpack('!HHB%dsB' % (len(frame) - 6), frame)
struct.error: bad char in struct format

I tried the beta channel for HA supervised but without result.

System Health

version 2021.1.1
installation_type Home Assistant Supervised
dev false
hassio true
docker true
virtualenv false
python_version 3.8.7
os_name Linux
os_version 5.4.83-v7l+
arch armv7l
timezone Europe/Amsterdam
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Hass.io
host_os Raspbian GNU/Linux 10 (buster)
update_channel beta
supervisor_version 2021.01.1
docker_version 20.10.2
disk_total 14.3 GB
disk_used 5.7 GB
healthy true
supported failed to load: Unsupported
supervisor_api ok
version_api ok
installed_addons Check Home Assistant configuration (3.6.0), Node-RED (7.2.11), Home Assistant Google Drive Backup (0.103.0), Samba share (9.3.0)
Lovelace
dashboards 2
mode auto-gen
resources 0

Broadcast not implemented

Hi, when I did use the zigate custom component for HASS I extended my configuration with some outlet and with some IKEA USB charger/extender.
Now when using zigpy-zigate it seems that network is a bit "limited", and I realized that when starting the "[zigpy_zigate.zigbee.application] Broadcast not implemented" is printed.
Is this the normal behaviour or something is wrong with my config?

[SUGGESTION] Migrate zigpy-zigate repository to upstream zigpy organization?

@doudz can I suggest that you please consider talking to @Adminiuga & @dmulcahey about the possibility of you joining the zigpy organization @ https://github.com/zigpy/ and maybe also having your zigpy-zigate repository here on GitHub moved to the zigpy organization @ https://github.com/zigpy/ so that the mainstream copy of this repo will stay there as its upstream instead and owned by the upstream zigpy organization?

Move repo from https://github.com/doudz/zigpy-zigate to https://github.com/zigpy/zigpy-zigate

That way all developers that are members in the zigpy organization can have write access to one or more projects that it own for collaboration as a community? Hope that you could all come to an agreement that will make everyone happy with continuing with working on the zigpy-zigate repository together without getting offended by any ownership conflicts.

PS: I also posted the same suggestion on zigpy repository by @zigpy org here zigpy/zigpy#296

Issue with paring

Hi,

I migrated from zigate home assistant with firmware 3.1c to zha with firmware 3.1d and I have a lot of trouble with pairing aqara/xiaomi devices. I cannot pair few of them and I could pair rest after many tries.

Is it possible that some xiaomi/aqara "hack" for custom implementation of 3.0 spec are not migrated to zigpy-zigate?

For example I see weird data for reporting FF01 attribute and I found in zigate library that there is special implementation for this this attribute for xiaomi responses.

PiZiGate + TS0601

Hello,
I bought a Tuya thermostatic valve (TS0601) and I would like to pair it with my Pizigate, but it doesn't work very well...
The pair is ok, but i can't read anything, and ZigPy doesn't create any entity.

I put the verbose mode, this is the log :
http://pastebin.fr/73875

This is my "ZigBee informations" :
http://pastebin.fr/73877

I'll also search, I'll keep you informed.

Thanks !

Not able to include my valve

Dear,

I was able to include my zigbee valve (_TYZB01_ymcdbl3u TS0111) with this project https://github.com/doudz/homeassistant-zigate but not with ZHA Integration in HA.

Each time I try to add the device I receive ;
XX:XX:XX:XX:XX has left the Network.

Any ideas ?
Also can you tell me how to enable debug log ?

For you information my 5 Aqara sensors have been added and my Honeywell Gas Detector also.

Thank You.

[REQUEST] Energy detection scan with zigpy-zigate for ZiGate based adapters

Requesting an "energy detection scan" feature in zigpy-zigate if possible matching what @puddly has recently added to zigpy-znp

Suggest implement similar channel energy scanning via some energy scanner tool but for ZiGate based firmware and hardware.

https://github.com/zha-ng/zigpy-znp

https://github.com/zha-ng/zigpy-znp/blob/dev/README.md

Energy scan

Perform an energy scan to find a quiet Zigbee channel:

$ python -m zigpy_znp.tools.energy_scan /dev/cu.usbmodem14101
Channel energy (mean of 1 / 5):
------------------------------------------------
 + Lower energy is better
 + Active Zigbee networks on a channel may still cause congestion
 + Using 26 in the USA may have lower TX power due to FCC regulations
 + Zigbee channels 15, 20, 25 fall between WiFi channels 1, 6, 11
 + Some Zigbee devices only join networks on channels 15, 20, and 25
------------------------------------------------
 - 11    61.57%  #############################################################
 - 12    60.78%  ############################################################
 - 13    12.16%  ############
 - 14    58.43%  ##########################################################
 - 15    57.65%  #########################################################
 - 16    29.80%  #############################
 - 17    38.82%  ######################################
 - 18    47.06%  ###############################################
 - 19    36.86%  ####################################
 - 20    10.98%  ##########
 - 21    16.47%  ################
 - 22    33.73%  #################################
 - 23    30.59%  ##############################
 - 24    20.39%  ####################
 - 25     5.88%  #####
 - 26*   20.39%  ####################

Cannot create groups

Hi, when I try to create a new group from HASS ZHA group editor I receive this:

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/zigpy/zcl/clusters/general.py", line 856, in _handle_cluster_request
    await self._handle_query_next_image(*args, tsn=tsn)
  File "/usr/local/lib/python3.7/site-packages/zigpy/zcl/clusters/general.py", line 925, in _handle_query_next_image
    foundation.Status.NO_IMAGE_AVAILABLE, tsn=tsn
  File "/usr/local/lib/python3.7/site-packages/zigpy/device.py", line 162, in request
    with self._pending.new(sequence) as req:
  File "/usr/local/lib/python3.7/site-packages/zigpy/util.py", line 236, in new
    return Request(self, sequence)
  File "/usr/local/lib/python3.7/site-packages/zigpy/util.py", line 205, in __init__
    assert sequence not in pending
AssertionError
Error handling message: Unknown error
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/decorators.py", line 20, in _handle_async_response
    await func(hass, connection, msg)
  File "/usr/src/homeassistant/homeassistant/components/zha/api.py", line 301, in websocket_add_group
    group = await zha_gateway.async_create_zigpy_group(group_name, members)
  File "/usr/src/homeassistant/homeassistant/components/zha/core/gateway.py", line 528, in async_create_zigpy_group
    await asyncio.gather(*tasks)
  File "/usr/src/homeassistant/homeassistant/components/zha/core/device.py", line 570, in async_add_to_group
    await self._zigpy_device.add_to_group(group_id)
  File "/usr/local/lib/python3.7/site-packages/zigpy/device.py", line 140, in add_to_group
    await ep.add_to_group(grp_id, name)
  File "/usr/local/lib/python3.7/site-packages/zigpy/endpoint.py", line 119, in add_to_group
    res = await self.groups.add(grp_id, name)
  File "/usr/local/lib/python3.7/site-packages/zigpy/device.py", line 187, in request
    self.nwk, dst_ep, cluster
zigpy.exceptions.DeliveryError: [0x130f:1:0x0004]: Message send failure

The loader spinner just keep spinning.
The first error doesn't look like it has something to do with groups, but it's flooding the log:

Logger: homeassistant.core
First occured: 16:37:46 (409 occurences)
Last logged: 18:28:59

Error doing job: Task exception was never retrieved

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.