详细了解 control.py

为了更好的理解后面的项目,我们先来看看 Cloud4RPi 官方提供的示例代码。

注解

在查看本章之前,请先完成上一章 Cloud4RPi的快速使用指南

打开 control.py 文件。

cd cloud4rpi-raspberrypi-python
sudo nano control.py

Cloud4RPi 会为每个设备设置一个设备令牌,您需要用正确的设备令牌填写变量 DEVICE_TOKEN 才能连接到相应的设备。

DEVICE_TOKEN = '556UfPaRw6r6rDKYfzx5Nd1jd'

variables 是一个二维字典,它的每个键对应的值也是一个字典。

variables 字典的键包括 'Room Temp', 'LED On', 'CPU Temp', 'STATUS', 'Location', 它们都是显示在控制面板小部件上的数据。

variables 字典中每个键的值也是一个字典,这些字典的键是一样的,其中 'bind' 键的值是一个可以返回传递内容的函数,是传递内容 'type' 的数据类型( 'numeric' 是数字类型, 'string' 是字符串类型, 'bool' 是布尔类型, 'location' 是包含两个字典的列表)。

通过对 variables 字典的分析,我们可以知道 Cloud4RPi 会读取 variables 字典的键值,并在控制面板中显示键值对应的值。显然我们不能改变 variables 字典的键,但是我们可以改变键中的值( 'bind' 字典的值),让 widgets 显示我们想要的内容。

比如我们要向 Cloud4RPi 发送湿度值,虽然不能在 variables 字典中添加一个新的键 ,但是可以借用其中的键,比如 'Room Temp',然后在其 'bind' 的值里面编写返回湿度值的函数。

variables = {
    'Room Temp': {
        'type': 'numeric' if ds_sensors else 'string',
        'bind': ds_sensors[0] if ds_sensors else sensor_not_connected
    },
    'LED On': {
        'type': 'bool',
        'value': False,
        'bind': led_control
    },
    'CPU Temp': {
        'type': 'numeric',
        'bind': rpi.cpu_temp
    },
    'STATUS': {
        'type': 'string',
        'bind': listen_for_events
    },
    'Location': {
        'type': 'location',
        'bind': get_location
    }

vdiagnostics 中存储有关树莓派的信息,并用于验证,防止错接。

vdiagnostics = {
    'CPU Temp': rpi.cpu_temp,
    'IP Address': rpi.ip_address,
    'Host': rpi.host_name,
    'Operating System': rpi.os_name,
    'Client Version:': cloud4rpi.__version__,
}