3

根据此处的 boto3 文档:https ://boto3.readthedocs.org/en/latest/reference/services/iot-data.html#client update_thing_shadow 方法将 thingName 和 JSON 有效负载作为参数。目前它是这样写的:

    client = boto3.client('iot-data', region_name='us-east-1')
    data = {"state" : { "desired" : { "switch" : "on" }}}
    mypayload = json.dumps(data)
    response = client.update_thing_shadow(
        thingName = 'MyDevice', 
        payload = b'mypayload'
    )

当我使用命令行时没有问题,但似乎无法从 Lamba 函数中得到它。我已经用许多版本的代码(json.JSONEncoder、bytearray() 等)调用了它,但没有任何运气。调用 UpdateThingShadow 操作时出现的错误范围从语法到 (ForbiddenException):错误请求:ClientError。有没有人从 AWS lambda 函数中成功调用此方法或类似方法?谢谢。

4

2 回答 2

5

这段代码对我来说很好用:

def set_thing_state(thingName, state):
    # Change topic, qos and payload
    payload = json.dumps({'state': { 'desired': { 'property': state } }})

    logger.info("IOT update, thingName:"+thingName+", payload:"+payload)
    #payload = {'state': { 'desired': { 'property': state } }}


    response = client.update_thing_shadow(
        thingName = thingName, 
        payload =  payload
        )

    logger.info("IOT response: " + str(response))  
    logger.info("Body:"+response['payload'].read())


def get_thing_state(thingName):

    response = client.get_thing_shadow(thingName=thingName)

    streamingBody = response["payload"]
    jsonState = json.loads(streamingBody.read())

    print jsonState
    #print jsonState["state"]["reported"]

祝你好运

于 2018-11-15T21:51:36.940 回答
0

加纳特是对的。只需替换payload = b'mypayload'payload = mypayload,它应该可以工作。

于 2016-04-13T15:14:39.170 回答