Example #1
0
def publication_add(publication_params):
    print("**UUID: ", publication_params[1])
    print("**NodeID: ", publication_params[2])
    print("**Group Number : ", publication_params[3])

    global cc
    cc.publish_set(8, 0)
    cc.composition_data_get()
    time.sleep(2)

    cc.appkey_add(0)
    time.sleep(1)
    print("**Appkey Added")

    cc.model_app_bind(
        (db.nodes[int(publication_params[2])].unicast_address) + 1, 0,
        mt.ModelId(0x1000))
    time.sleep(1)
    print("**Appkey Bound")

    cc.model_publication_set(
        db.nodes[int(publication_params[2])].unicast_address + 1,
        mt.ModelId(0x1000),
        mt.Publish(db.groups[int(publication_params[3])].address,
                   index=0,
                   ttl=1))
Example #2
0
    def addAppKeys(self, uuid, groupAddrId=0):
        """ Used to:
            - subscribes the serial device to the group address
            - add publication address of each element to the serial device
            - bind app_key to each model on each element
            - set the client to publish to the group address
        
        Parameters
        ----------
            node : index of node in db
            groupAddrId : index of group address in db

        """
        node = self.uuid_to_node_index(uuid)
        command = cmd.AddrSubscriptionAdd(self.db.groups[groupAddrId].address)
        self.message_que.append(functools.partial(self.iaci.send, command))

        for e, element in enumerate(self.db.nodes[node].elements):

            # Add each element to the serial device's pubusb list
            element_address = self.db.nodes[node].unicast_address + e
            command = cmd.AddrPublicationAdd(element_address)
            self.message_que.append(functools.partial(self.iaci.send, command))

            for model in element.models:

                # Generic OnOff Server
                if str(model.model_id) == "1000":
                    self.message_que.append(
                        functools.partial(self.cc.model_app_bind,
                                          element_address, 0,
                                          mt.ModelId(0x1000)))

                # Generic OnOff Client
                if str(model.model_id) == "1001":
                    self.message_que.append(
                        functools.partial(self.cc.model_app_bind,
                                          element_address, 0,
                                          mt.ModelId(0x1001)))
                    self.message_que.append(
                        functools.partial(
                            self.cc.model_publication_set, element_address,
                            mt.ModelId(0x1001),
                            mt.Publish(self.db.groups[groupAddrId].address,
                                       index=0,
                                       ttl=1)))

                # Simple OnOff Server
                if str(model.model_id) == "00590000":
                    self.message_que.append(
                        functools.partial(
                            self.cc.model_app_bind, element_address, 0,
                            mt.ModelId(0x0000, company_id=0x0059)))

        self.message_que.append(
            functools.partial(self.addAppKeysComplete, uuid))

        self.send_next_message()
Example #3
0
    def server_set_subscribe(self, server_address, element, modelid,
                             subscribe_address):
        node = self._find_node_int(server_address)

        devkey_handle, address_handle = self._get_handles(node)

        self.cc.publish_set(devkey_handle, address_handle)
        self.cc.model_subscription_delete_all(node.unicast_address + element,
                                              mt.ModelId(modelid))
        self.cc.model_subscription_add(node.unicast_address + element,
                                       subscribe_address, mt.ModelId(modelid))

        self._free_handles(devkey_handle, address_handle)
Example #4
0
 def __model_sig_app_list_handler(self, opcode, message):
     status, element_address, model_id = struct.unpack(
         "<BHH", message.data[0:5])
     status = AccessStatus(status)
     self.logger.info("SIG Model App List status: %s", status)
     if status == AccessStatus.SUCCESS:
         appkeys = ConfigurationClient._unpack_key_ind(message.data[5:])
         model = self.model_get(element_address, mt.ModelId(model_id))
         model.bind = appkeys
         self.db_save()
         self.logger.info("SIG model %04x has appkey(s) %r bound", model_id,
                          appkeys)
Example #5
0
    def client_set_publish(self, client_address, element, modelid,
                           publish_address):
        node = self._find_node_int(client_address)

        devkey_handle, address_handle = self._get_handles(node)

        self.cc.publish_set(devkey_handle, address_handle)
        self.cc.model_publication_set(
            node.unicast_address + element, mt.ModelId(modelid),
            mt.Publish(publish_address, index=0, ttl=1))

        self._free_handles(devkey_handle, address_handle)
Example #6
0
def config_node(nodeconfig_params):
    print("**Configure existing node")
    print("**UUID: ", nodeconfig_params[1])
    print("**NodeID: ", nodeconfig_params[2])
    print("**Channel 1: ", nodeconfig_params[3])
    print("**Channel 2: ", nodeconfig_params[4])
    print("**Channel 3: ", nodeconfig_params[5])
    print("**Channel 4: ", nodeconfig_params[6])
    print("**LPN State: ", nodeconfig_params[7])
    print("**LPN Poll Timeout: ", nodeconfig_params[8])
    print("**LPN Delay: ", nodeconfig_params[9])
    print("**LPN Receive Window: ", nodeconfig_params[10])
    #print("**Unicast Address from UUID: ",db.nodes[int(nodeconfig_params[3])].unicast_address)
    #print("**DevKey from UUID: ",db.nodes[int(nodeconfig_params[3])].device_key)
    time.sleep(1)

    # device.send(cmd.DevkeyAdd(
    #     db.nodes[int(nodeconfig_params[3])].unicast_address, 0, db.nodes[int(nodeconfig_params[3])].device_key))
    # device.send(cmd.AddrPublicationAdd(
    #     db.nodes[int(nodeconfig_params[3])].unicast_address))
    # time.sleep(1)

    global cc
    cc.publish_set(8, 0)
    cc.composition_data_get()
    time.sleep(2)

    cc.appkey_add(0)
    time.sleep(1)
    print("**Appkey Added")

    cc.model_app_bind(db.nodes[int(nodeconfig_params[2])].unicast_address, 0,
                      mt.ModelId(0x1002))
    time.sleep(1)
    print("**Appkey Bound")

    time.sleep(2)
    print("**Node Config Client created")

    nc.publish_set(0, 0)
    time.sleep(1)

    # nc.set(nodeconfig_params[4])
    nc.set(int(nodeconfig_params[3]), int(nodeconfig_params[4]),
           int(nodeconfig_params[5]), int(nodeconfig_params[6]),
           int(nodeconfig_params[7]), int(nodeconfig_params[8]),
           int(nodeconfig_params[9]), int(nodeconfig_params[10]))
    time.sleep(5)
    print("**Set Params")

    cc.node_reset()
    time.sleep(1)
    print("**Reset Node")
Example #7
0
def subscription_add(subscription_params):
    print("**UUID: ", subscription_params[1])
    print("**NodeID: ", subscription_params[2])
    print("**Group Number : ", subscription_params[3])

    global cc
    cc.publish_set(8, 0)
    cc.composition_data_get()
    time.sleep(2)

    cc.appkey_add(0)
    time.sleep(1)
    print("**Appkey Added")

    cc.model_app_bind(
        (db.nodes[int(subscription_params[2])].unicast_address) + 1, 0,
        mt.ModelId(0x1000))
    time.sleep(1)
    print("**Appkey Bound")

    cc.model_subscription_add(
        db.nodes[int(subscription_params[2])].unicast_address + 1,
        db.groups[int(subscription_params[3])].address, mt.ModelId(0x1000))
Example #8
0
    def __model_sig_subscription_list_handler(self, opcode, message):
        status, element_address, model_id = struct.unpack(
            "<BHH", message.data[0:5])
        status = AccessStatus(status)
        self.logger.info("SIG Model Subscription List status: %s", status)
        if status == AccessStatus.SUCCESS:
            if len(message.data) > 5:
                addresses = struct.unpack(
                    "<" + "H" * (len(message.data[5:]) // 2), message.data[5:])
                addresses = [mt.group_address(a) for a in addresses]
            else:
                addresses = []

            model = self.model_get(element_address, mt.ModelId(model_id))
            model.subscribe = addresses
            self.db_save()
            self.logger.info("SIG model %04x has addresse(s) %r bound",
                             model_id, addresses)
Example #9
0
    def __model_sig_app_list_handler(self, opcode, message):
        status, element_address, model_id = struct.unpack(
            "<BHH", message.data[0:5])
        status = AccessStatus(status)
        self.logger.info("SIG Model App List status: %s", status)
        if status == AccessStatus.SUCCESS:
            if len(message.data) > 5:
                appkeys = struct.unpack(
                    "<" + "H" * (len(message.data[5:]) // 2), message.data[5:])
                appkeys = [mt.KeyIndex(i) for i in appkeys]
            else:
                appkeys = []

            model = self.model_get(element_address, mt.ModelId(model_id))
            model.bind = appkeys
            self.db_save()
            self.logger.info("SIG model %04x has appkey(s) %r bound", model_id,
                             appkeys)