예제 #1
0
async def unbind_group(app, listener, ieee, cmd, data, service, params,
                       event_data):
    from zigpy.zdo.types import MultiAddress
    from zigpy import types as t

    LOGGER.debug("running 'unbind group' command: %s", service)
    if ieee is None:
        LOGGER.error("missing ieee")
        return
    if not data:
        LOGGER.error("missing data (destination ieee)")
        return

    src_dev = app.get_device(ieee=ieee)

    group_id = u.str2int(data)

    zdo = src_dev.zdo
    src_cls = [6, 8, 768]

    dst_addr = MultiAddress()
    dst_addr.addrmode = t.uint8_t(1)
    dst_addr.nwk = t.uint16_t(group_id)
    results = {}
    for src_cluster in src_cls:
        src_ep = None
        for ep_id, ep in src_dev.endpoints.items():
            if ep_id == 0:
                continue
            if src_cluster in ep.out_clusters:
                src_ep = ep_id
                break
        if not src_ep:
            LOGGER.debug(
                "0x%04x: skipping %s cluster as non present",
                src_dev.nwk,
                src_cluster,
            )
            continue

        if src_ep not in results:
            results[src_ep] = []

        LOGGER.debug(
            "0x%04x: unbinding %s, ep: %s, cluster: %s",
            src_dev.nwk,
            str(src_dev.ieee),
            src_ep,
            src_cluster,
        )

        unbind_result = {"endpoint_id": src_ep, "cluster_id": src_cluster}
        res = await zdo.request(ZDOCmd.Unbind_req, src_dev.ieee, src_ep,
                                src_cluster, dst_addr)
        unbind_result["result"] = res
        results[src_ep].append(unbind_result)
        LOGGER.debug("0x%04x: unbinding group 0x%04x: %s", src_dev.nwk,
                     group_id, res)

    event_data["result"] = results
예제 #2
0
async def unbind_group(app, listener, ieee, cmd, data, service):
    from zigpy.zdo.types import MultiAddress
    from zigpy import types as t

    LOGGER.debug("running 'unbind group' command: %s", service)
    if ieee is None or not data:
        LOGGER.error("missing ieee")
        return
    src_dev = app.get_device(ieee=ieee)
    group_id = int(data, base=16)

    zdo = src_dev.zdo
    src_cls = [6, 8, 768]

    dst_addr = MultiAddress()
    dst_addr.addrmode = t.uint8_t(1)
    dst_addr.nwk = t.uint16_t(group_id)
    for src_cluster in src_cls:
        src_ep = None
        for ep_id, ep in src_dev.endpoints.items():
            if ep_id == 0:
                continue
            if src_cluster in ep.out_clusters:
                src_ep = ep_id
                break
        if not src_ep:
            LOGGER.debug("0x%04x: skipping %s cluster as non present",
                         src_dev.nwk, src_cluster)
            continue
        LOGGER.debug("0x%04x: unbinding %s, ep: %s, cluster: %s",
                     src_dev.nwk, str(src_dev.ieee), src_ep, src_cluster)
        res = await zdo.request(ZDOCmd.Unbind_req, src_dev.ieee, src_ep,
                                src_cluster, dst_addr)
        LOGGER.debug("0x%04x: unbinding group 0x%04x: %s",
                     src_dev.nwk, group_id, res)