Exemple #1
0
    def __event_handler(self, event):
        if event._opcode == Event.PROV_COMPLETE:
            address_range = "{}-{}".format(
                hex(event._data["address"]),
                hex(event._data["address"] + self.__num_elements - 1))
            self.logger.info("Provisioning complete")
            self.logger.info("\tAddress(es): " + address_range)
            self.logger.info("\tDevice key: {}".format(
                str(hexlify(event._data["device_key"]), "ascii").upper()))
            self.logger.info("\tNetwork key: {}".format(
                str(hexlify(event._data["net_key"]), "ascii").upper()))

            self.logger.info("Adding network key (subnet)")
            self.iaci.send(
                cmd.SubnetAdd(event._data["net_key_index"],
                              event._data["net_key"]))

            self.logger.info("Adding device key to subnet 0")
            self.iaci.send(
                cmd.DevkeyAdd(event._data["address"], 0,
                              event._data["device_key"]))
            self.logger.info("Setting the local unicast address range")
            self.iaci.send(
                cmd.AddrLocalUnicastSet(event._data["address"],
                                        self.__num_elements))

        else:
            self.default_handler(event)
Exemple #2
0
    def __event_handler(self, event):
        if event._opcode == Event.PROV_INVITE_RECEIVED:
            attention_duration_s = event._data["attention_duration_s"]
            self.logger.info("Provisioning Invite received")
            self.logger.info(
                "\tAttention Duration [s]: {}".format(attention_duration_s))

        elif event._opcode == Event.PROV_START_RECEIVED:
            self.logger.info("Provisioning Start received")

        elif event._opcode == Event.PROV_COMPLETE:
            address_range = "{}-{}".format(
                hex(event._data["address"]),
                hex(event._data["address"] + self.__num_elements - 1))
            self.logger.info("Provisioning complete")
            self.logger.info("\tAddress(es): " + address_range)
            self.logger.info("\tDevice key: {}".format(
                event._data["device_key"].hex()))
            self.logger.info("\tNetwork key: {}".format(
                event._data["net_key"].hex()))

            self.logger.info("Adding network key (subnet)")
            self.iaci.send(
                cmd.SubnetAdd(event._data["net_key_index"],
                              event._data["net_key"]))

            self.logger.info("Adding device key to subnet 0")
            self.iaci.send(
                cmd.DevkeyAdd(event._data["address"], 0,
                              event._data["device_key"]))
            self.logger.info("Setting the local unicast address range")
            self.iaci.send(
                cmd.AddrLocalUnicastSet(event._data["address"],
                                        self.__num_elements))

            # A slight hack to update the access "layer" in case
            # anyone wants to try to run this as a provisionee
            for index, element in enumerate(self.iaci.access.elements):
                element.address = event._data["address"] + index

        else:
            self.default_handler(event)
    def load(self, prov_db):
        """Loads the keys from the provisioning datase and sets the local unicast address.

            prov_db : Mesh database.
        """
        self.prov_db = prov_db

        self.__next_free_address = (
            self.prov_db.provisioners[0].allocated_unicast_range[0].low_address)

        for node in self.prov_db.nodes:
            self.__next_free_address = max(self.__next_free_address,
                                           node.unicast_address + len(node.elements))

        self.iaci.send(cmd.AddrLocalUnicastSet(self.__address, 1))

        for key in self.prov_db.net_keys:
            self.iaci.send(cmd.SubnetAdd(key.index,
                                         key.key))
        for key in self.prov_db.app_keys:
            self.iaci.send(cmd.AppkeyAdd(key.index, key.bound_net_key, key.key))
 def quick_setup(self):
     self.send(cmd.SubnetAdd(0, bytearray(self.DEFAULT_SUBNET_KEY)))
     self.send(cmd.AppkeyAdd(0, 0, bytearray(self.DEFAULT_APP_KEY)))
     self.send(
         cmd.AddrLocalUnicastSet(self.local_unicast_address_start,
                                 self.CONFIG.ACCESS_ELEMENT_COUNT))
Exemple #5
0
 def init(self):
     self.iaci.send(cmd.AddrLocalUnicastSet(self.__address, 1))
     self.iaci.send(
         cmd.SubnetAdd(self.__prov_data["network_key_index"],
                       self.__prov_data["network_key"]))