AWS IoT
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

步骤 5:模拟随机含水量

在此步骤中,您使用开发计算机,通过生成随机数据模拟土壤含水量读数。然后,您可以推送这些读数到 AWS IoT 中的相关影子。当读数太低时,Amazon SNS 自动发送电子邮件警报到绿植的所有者。

  1. 确保您的开发计算机上已安装 Pythonpip

    pip 包含在 Python 版本 3.4 及更高版本中。要检查您已安装的 Python 版本,在 Windows 上请从在管理员模式下运行的命令提示符中,或者从在 macOS、Linux 或 Unix 下运行的终端会话中,运行命令 python --version。要检查 pip 是否也已安装,请运行命令 pip --version

  2. 使用 pip 在开发计算机上安装 适用于 Python 的 AWS IoT 设备开发工具包。为此,请运行 pip install AWSIoTPythonSDK 命令。

  3. 3.通过文本编辑器,使用以下代码在开发计算机上创建新文件:

    from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTShadowClient import random, time # A random programmatic shadow client ID. SHADOW_CLIENT = "myShadowClient" # The unique hostname that &IoT; generated for # this device. HOST_NAME = "yourhostname-ats.iot.us-east-1.amazonaws.com" # The relative path to the correct root CA file for &IoT;, # which you have already saved onto this device. ROOT_CA = "AmazonRootCA1.pem" # The relative path to your private key file that # &IoT; generated for this device, which you # have already saved onto this device. PRIVATE_KEY = "yourkeyid-private.pem.key" # The relative path to your certificate file that # &IoT; generated for this device, which you # have already saved onto this device. CERT_FILE = "yourkeyid-certificate.pem.crt.txt" # A programmatic shadow handler name prefix. SHADOW_HANDLER = "MyRPi" # Automatically called whenever the shadow is updated. def myShadowUpdateCallback(payload, responseStatus, token): print() print('UPDATE: $aws/things/' + SHADOW_HANDLER + '/shadow/update/#') print("payload = " + payload) print("responseStatus = " + responseStatus) print("token = " + token) # Create, configure, and connect a shadow client. myShadowClient = AWSIoTMQTTShadowClient(SHADOW_CLIENT) myShadowClient.configureEndpoint(HOST_NAME, 8883) myShadowClient.configureCredentials(ROOT_CA, PRIVATE_KEY, CERT_FILE) myShadowClient.configureConnectDisconnectTimeout(10) myShadowClient.configureMQTTOperationTimeout(5) myShadowClient.connect() # Create a programmatic representation of the shadow. myDeviceShadow = myShadowClient.createShadowHandlerWithName( SHADOW_HANDLER, True) # Keep generating random test data until this script # stops running. # To stop running this script, press Ctrl+C. while True: # Generate random True or False test data to represent # okay or low moisture levels, respectively. moisture = random.choice([True, False]) if moisture: myDeviceShadow.shadowUpdate( '{"state":{"reported":{"moisture":"okay"}}}', myShadowUpdateCallback, 5) else: myDeviceShadow.shadowUpdate( '{"state":{"reported":{"moisture":"low"}}}', myShadowUpdateCallback, 5) # Wait for this test value to be added. time.sleep(60)

    在上述代码中,替换以下值:

    • yourhostname-ats.iot.us-east-1.amazonaws.com 替换为 AWS IoT 为您生成的 REST API 终端节点。要获取此终端节点,请在 AWS IoT 控制台导航窗格中,展开管理,选择 事物,然后选择您的事物名称(例如,MyRPi)。选择交互,然后查看 HTTPS 区域。

      
                                    MyRPi 事物的交互页面,其中突出显示 HTTPS Rest API 终端节点。
    • AmazonRootCA1.pem 以及 AWS IoT 的根 CA 的名称,您之前已将其保存到开发计算机上。

    • yourkeyid-private.pem.key 以及设备在 AWS IoT 中的私有密钥名称,您之前已将其保存到开发计算机上。

    • yourkeyid-certificate.pem.crt.txt 以及设备在 AWS IoT 中根证书文件的名称,您之前已将其保存到开发计算机上。

    • time.sleep(60) 中的 60 是生成各个新的随机模拟读数等待的秒数。您为此值使用的值越小,就可能会越频繁地收到电子邮件警报。

  4. 在您保存 AWS IoT 的根 CA、设备在 AWS IoT 中的私有密钥以及设备在 AWS IoT 中的根证书文件的相同目录中,使用扩展名 .py 保存文件,例如,moisture.py。如果您为 .py 文件选择使用其他名称,请务必在本示例中替换。

  5. 在 Windows 上请从在管理员模式下运行的命令提示符中,或者从在 macOS、Linux 或 Unix 下运行的终端会话中,切换到包含 moisture.py 文件的目录。然后,为 Python 运行命令 python moisture.py 以开始运行 moisture.py 脚本。

    每隔 60 秒,该脚本会生成一个随机 TrueFalse 值。如果该值为 True,Python 将“moisture okay (含水量正常)”读数发送给 AWS IoT。如果该值为 False,Python 将“low moisture (含水量低)”读数发送给 AWS IoT。只要 AWS IoT 收到低含水量读数,它就会触发规则,将警报通过 Amazon SNS 发送到您的电子邮件地址。

  6. 6.完成后,请按 Ctrl+C 以停止运行脚本。

如果您没有 Raspberry Pi,本示例演练对您已经结束,可以跳至 清除。否则,继续到模块 2:通过 Raspberry Pi 发送数据以开始准备您的 Raspberry Pi。