Azure IoT Edge 통합 테스트 템플릿 - 2부
요약
이 문서는 Part.1을 따르고 azure-iot-edge-integration-test-template에서 IoT Edge 모듈에 대한 중요한 팁을 공유합니다.
목차
개요
This sample template has six IoT Edge modules and two integration test data flows. One is Azure Pipelines agent sending direct method Azure Blob Storage에 업로드된 일기 예보 및 일기 예보 파일을 수신합니다. 또 다른 통합 테스트 흐름은 아카이브 날씨 파일을 다운로드하도록 요청하는 직접 메서드 요청입니다.
IoThub커넥터
rclpy.spin()
를 사용합니다.def module_termination_handler(signal, frame):
print ("IoTHubClient sample stopped")
stop_event.set()
stop_event = threading.Event()
signal.signal(signal.SIGTERM, module_termination_handler)
try:
stop_event.wait()
except Exception as e:
print("Unexpected error %s " % e)
raise
finally:
print("Shutting down client")
module_client.shutdown()
method_request_handler()
로 구현됩니다. 직접 메서드 요청을 받으면 WeatherReporter
~ Azure Iot Edge route communication 으로 요청 메시지를 보냅니다.async def method_request_handler(method_request):
print('Direct Method: ', method_request.name, method_request.payload)
if method_request.name in request_method_list:
response_payload, response_status = await request_method_list[method_request.name](method_request.payload, module_client)
else:
response_payload = {"Response": "Direct method {} not defined".format(method_request.name)}
response_status = 404
method_response = MethodResponse.create_from_method_request(method_request, response_status, response_payload)
await module_client.send_method_response(method_response)
module_client.on_method_request_received = method_request_handler
async def request_weather_report(payload: dict, module_client: IoTHubModuleClient):
try:
json_string = json.dumps(payload)
message = Message(json_string)
await module_client.send_message_to_output(message, 'reportRequest')
return {"Response": "Send weather report request for {}".format(payload['city'])}, 200
except Exception as e:
print(e)
return {"Response": "Invalid parameter"}, 400
receive_message_handler()
로 구현됩니다. ROS2 주제 통신을 통해 WeatherReport
모듈로부터 메시지를 수신하고 FileGenerator
모듈로 요청을 보냅니다.async def receive_message_handler(message_received):
if message_received.input_name == 'reportResponse':
message_telemetry = Message(
data=message_received.data.decode('utf-8'),
content_encoding='utf-8',
content_type='application/json',
)
await module_client.send_message_to_output(message_telemetry, 'telemetry')
print("Weather report sent to IoT Hub")
ros2_publisher_client.ros2_publisher(message_received.data.decode('utf-8'))
print("ROS2 message sent to FileGenerator")
elif message_received.input_name == 'updateResponse':
message_telemetry = Message(
data=message_received.data.decode('utf-8'),
content_encoding='utf-8',
content_type='application/json',
)
await module_client.send_message_to_output(message_telemetry, 'telemetry')
print("Download status sent to IoT Hub")
else:
print("Message received on unknown input: {}".format(message_received.input_name))
module_client.on_message_received = receive_message_handler
날씨관찰자
IothubConnector
의 요청을 처리하는 콜백은 ioTHubModuleClient.SetInputMessageHandlerAsync()
로 구현됩니다.await ioTHubModuleClient.SetInputMessageHandlerAsync(routeC2W, ParseRequests, ioTHubModuleClient).ConfigureAwait(false);
파일 생성기
IothubConnector
의 요청을 받아 Edge 호스트 시스템에서 날씨 보고서 파일을 생성합니다. rclpy.spin()
를 사용하여 응용 프로그램 자체를 계속 실행하고 요청을 기다립니다.rclpy.init(args=args)
file_generator = FileGenerator()
rclpy.spin(file_generator)
file_generator.destroy_node()
rclpy.shutdown()
create_subscription()
에 의해 구현됩니다.def __init__(self):
super().__init__('file_generator')
self.subscription = self.create_subscription(
String,
os.getenv('ROS_TOPIC_NAME'),
self.listener_callback,
10)
self.subscription
def listener_callback(self, msg):
파일 업로더
FileGenerator
에서 생성된 파일을 추출하여 LocalBlobStorage
로 보내는 .NET6 C#으로 작성된 모듈입니다. FileUpdater
LocalBlobStorage
mcr.microsoft.com/azure-blob-storage:latest
에서 사용합니다. 기본 제공 로컬 Blob을 사용하는 이유는 Azure IoT Edge 런타임 및 EdgeHub
및 EdgeAgent
를 포함한 기본 모듈이 파일 업로드 기능을 지원하지 않기 때문입니다. Reference
이 문제에 관하여(Azure IoT Edge 통합 테스트 템플릿 - 2부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/koheikawata/azure-iot-edge-integration-test-template-part2-378l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)