async def set_build_info(self, product_uri, manufacturer_name, product_name, software_version, build_number, build_date): status_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus)) build_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo)) status = await status_node.read_value() if status is None: # first time status = ua.ServerStatusDataType() status.SecondsTillShutdown = 0 status.BuildInfo.ProductUri = product_uri status.BuildInfo.ManufacturerName = manufacturer_name status.BuildInfo.ProductName = product_name status.BuildInfo.SoftwareVersion = software_version status.BuildInfo.BuildNumber = build_number status.BuildInfo.BuildDate = build_date await status_node.write_value(status) await build_node.write_value(status.BuildInfo) # we also need to update all individual nodes :/ product_uri_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo_ProductUri)) product_name_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo_ProductName)) product_manufacturer_name_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo_ManufacturerName)) product_software_version_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo_SoftwareVersion)) product_build_number_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo_BuildNumber)) product_build_date_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo_BuildDate)) await product_uri_node.write_value(status.BuildInfo.ProductUri) await product_name_node.write_value(status.BuildInfo.ProductName) await product_manufacturer_name_node.write_value(status.BuildInfo.ManufacturerName) await product_software_version_node.write_value(status.BuildInfo.SoftwareVersion) await product_build_number_node.write_value(status.BuildInfo.BuildNumber) await product_build_date_node.write_value(status.BuildInfo.BuildDate)
async def set_build_info(self, product_uri, manufacturer_name, product_name, software_version, build_number, build_date): if not all(isinstance(arg, str) for arg in [ product_uri, manufacturer_name, product_name, software_version, build_number ]): raise TypeError(f"""Expected all str got product_uri: {type(product_uri)}, manufacturer_name: {type(manufacturer_name)}, product_name: {type(product_name)}, software_version: {type(software_version)}, build_number: {type(build_number)} instead!""") if not isinstance(build_date, datetime): raise TypeError(f"Expected datetime got {type(build_date)} instead!") status_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus)) build_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo)) status = await status_node.read_value() if status is None: # first time status = ua.ServerStatusDataType() status.SecondsTillShutdown = 0 status.BuildInfo.ProductUri = product_uri status.BuildInfo.ManufacturerName = manufacturer_name status.BuildInfo.ProductName = product_name status.BuildInfo.SoftwareVersion = software_version status.BuildInfo.BuildNumber = build_number status.BuildInfo.BuildDate = build_date await status_node.write_value(status) await build_node.write_value(status.BuildInfo) # we also need to update all individual nodes :/ product_uri_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo_ProductUri)) product_name_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo_ProductName)) product_manufacturer_name_node = self.get_node( ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo_ManufacturerName)) product_software_version_node = self.get_node( ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo_SoftwareVersion)) product_build_number_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo_BuildNumber)) product_build_date_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo_BuildDate)) await product_uri_node.write_value(status.BuildInfo.ProductUri) await product_name_node.write_value(status.BuildInfo.ProductName) await product_manufacturer_name_node.write_value(status.BuildInfo.ManufacturerName) await product_software_version_node.write_value(status.BuildInfo.SoftwareVersion) await product_build_number_node.write_value(status.BuildInfo.BuildNumber) await product_build_date_node.write_value(status.BuildInfo.BuildDate)
async def init(self, shelf_file=None): await self.iserver.init(shelf_file) # setup some expected values await self.set_application_uri(self._application_uri) sa_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerArray)) await sa_node.set_value([self._application_uri]) status_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus)) build_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo)) status = ua.ServerStatusDataType() status.BuildInfo.ProductUri = self.product_uri status.BuildInfo.ManufacturerName = self.manufacturer_name status.BuildInfo.ProductName = self.name status.BuildInfo.SoftwareVersion = "1.0pre" status.BuildInfo.BuildNumber = "0" status.BuildInfo.BuildDate = datetime.now() status.SecondsTillShutdown = 0 await status_node.set_value(status) await build_node.set_value(status.BuildInfo)