import time import traceback import json import lgpio import awsiot.greengrasscoreipc import awsiot.greengrasscoreipc.client as client from awsiot.greengrasscoreipc.model import ( IoTCoreMessage, QOS, PublishToIoTCoreRequest, SubscribeToIoTCoreRequest ) subscribetopic = "cm5-module-rpi/led" TIMEOUT = 10 qos = QOS.AT_LEAST_ONCE subqos = QOS.AT_MOST_ONCE RED_LED = 17 # BCM 17, pin 11 GREEN_LED = 15 # BCM 15, pin 10 h = lgpio.gpiochip_open(4) # CM5 / Pi 5 header lgpio.gpio_claim_output(h, RED_LED, 0) lgpio.gpio_claim_output(h, GREEN_LED, 0) ipc_client = awsiot.greengrasscoreipc.connect() #Code to subscribe to topic from class SubHandler(client.SubscribeToIoTCoreStreamHandler): def __init__(self): super().__init__() def on_stream_event(self, event: IoTCoreMessage) -> None: try: message = str(event.message.payload, "utf-8") topic_name = event.message.topic_name # Handle message. jsonmsg = json.loads(message) print("Json Message is ",jsonmsg) if jsonmsg["red_led"]=="0": lgpio.gpio_write(h, RED_LED, 0) print("Red LED OFF") if jsonmsg["red_led"]=="1": lgpio.gpio_write(h, RED_LED, 1) print("Red LED ON") if jsonmsg['green_led']=="0": lgpio.gpio_write(h, GREEN_LED, 0) print("Green LED OFF") if jsonmsg['green_led']=="1": lgpio.gpio_write(h, GREEN_LED, 1) print("Green LED ON") except: traceback.print_exc() def on_stream_error(self, error: Exception) -> bool: # Handle error. return True # Return True to close stream, False to keep stream open. def on_stream_closed(self) -> None: # Handle close. pass subrequest = SubscribeToIoTCoreRequest() subrequest.topic_name = subscribetopic subrequest.qos = subqos handler = SubHandler() operation = ipc_client.new_subscribe_to_iot_core(handler) future = operation.activate(subrequest) future.result(TIMEOUT) while True: time.sleep(1)