该项目使用 Raspberry Pi Zero W、Pimoroni Enviro+ 和 Plantower 空气质量传感器来监测、显示和报告空气颗粒、气体、温度、湿度、气压、光照水平和噪音水平。还可以选择通过添加 SGP30 传感器来监测 eCO2 和 TVOC 水平。该代码基于 Pimoroni 发布的许多 Python 示例和库,并进行了一系列修改和增强。
添加了基于气压水平和变化的基本天气预报功能。
出色的天气和光线中的光线级别显示已更改为显示空气质量级别。背景色调现在代表空气质量水平,并且太阳的位置现在通过可见的太阳图标显示。它还提供天气预报信息、噪音水平(如果启用)并对湿度指示器进行一些细微的更改。
组合功能已被修改,以提高每个图表的可见性。图表颜色基于每个参数的级别阈值,并且仅显示已测量的参数。 “display_everything”方法也已修改为仅显示空气质量参数,以提高显示的可读性。
多合一功能已修改为允许循环使用环境监视器的所有功能。
通过进行广泛的测试和回归分析(0 至 40 摄氏度之间),提高了温度和湿度测量的准确性,以开发更有效的补偿算法。然而,就其本身而言,即使这些改进的算法也无法提供足够的精度,因此有必要使用 3D 打印外壳将 Enviro+ 与 Raspberry Pi Zero W 分开,并通过带状电缆将它们连接起来。
除了改进温度和湿度测量之外,还进行了测试和回归分析,为 Enviro+ 气体传感器提供基于时间的漂移、温度、湿度和气压补偿。算法和清洁空气校准也用于提供气体传感器读数(以 ppm 为单位)。提供数据记录功能来支持回归分析。在进行进一步的回归分析之前,需要启用该分析的日志文件并将其转换为有效的 json 格式。
气压读数的准确性通过高度补偿来提供。海拔高度由 config.json 文件中的“altitude”参数设置。
该外壳不防水,需要避开自然环境。仅当设备未安装在垂直表面上时才需要底座。 Indoor Plus 型号的外壳和盖子有一个变体,可监测 eCO2 和 TVOC 水平。这种外壳变体为 SGP30 传感器提供了额外的空间和气流。
该保护套还可以选择添加防风雨罩,以提供额外的防风雨保护。使用此封面时,需要将config.json文件中的“enable_display”设置为“false”。这将显示功能限制为仅基于空气质量的色调和序列号,以及更改温度和湿度补偿变量以减轻盖子对温度和湿度传感器的影响。
基于此存储库,近似噪声级测量已添加到版本 6。此功能尚未校准,不能用于精确的声级测量。 6.7版本改进了噪声电平测量功能的频率补偿,但仍需要进一步的工作和校准。此噪声级测量功能需要额外的设置(如下所述),并且设置后需要在配置文件中启用。
提供 mqtt 支持以启用外部温度和湿度传感器(用于数据记录和回归分析)、Enviro Monitor 和家庭自动化系统之间的互操作以及支持室外和室内 Enviro 监视器之间的互操作。这种相互作用允许室内环境监视器的显示在室内和室外读数之间循环。
使用 mqtt 链接的室内和室外 Enviro 监视器获取室内 Enviro 监视器上的室外读数的另一种方法是配置室内 Enviro 监视器以捕获 Luftdaten 读数或来自另一个 Enviro 监视器的 Adafruit IO 源。
Luftdaten 互通已进行修改,可支持添加最小、最大和平均噪声级读数。通过在 config.json 文件中将“enable_luftdaten_noise”设置为 true,可以将噪声级别读数发送到 Luftdaten。请注意,Luftdaten 目前无法为每个节点配置三个传感器,因此只有在禁用 PM 或气候读数时,噪声水平读数才能发送到 Luftdaten。这可以通过将 config.json 文件中的“disable_luftdaten_sensor_upload”设置为“Climate”或“PM”来完成。
相同的 Enviro+ 设置用于设置 Enviro 监视器,config.json 文件参数用于自定义其功能。 config.json 文件参数的描述位于此处。
设置噪声级测量需要以下附加步骤:
在配置文件中启用噪声测量之前,必须成功执行此设置。
sudo apt-get 更新
sudo apt-get 升级
卷曲-sSL https://get.pimoroni.com/enviroplus |巴什
sudo python -m pip 卸载声音设备
sudo pip3 安装声音设备==0.3.15
对于版本 6.7 及更高版本,还执行以下操作:
sudo apt-get install python3-scipy
sudo pip3 install git+https://github.com/endolith/waveform_analysis.git@master
然后按照以下网址的说明进行操作:https://learn.adafruit.com/adafruit-i2s-mems-microphone-breakout/raspberry-pi-wiring-test,包括“添加音量控制”
使用以下内容代替 ~/.asoundrc 的记录文本:
对于版本 6.7 之前的版本:
使用 alsamixer 将 adau7002 捕获级别设置为 50
对于版本 6.7 及更高版本:
使用 alsamixer 将 adau7002 捕获级别设置为 10
用户指南提供了环境监视器的使用指南。
支持将天气预报、空气质量、温度、湿度、露点、气压、PM 浓度、气体浓度、光照水平、噪声水平以及可选的 SGP30 传感器、eCO2 和 TVOC 数据传输到 Adafruit IO。可以按如下方式启用和设置:
需要填充 Enviro Monitor 的 config.json 文件中的以下字段,以向 Adafruit IO 源提供数据。
“enable_adafruit_io”:设置为 true 以启用 Adafruit IO feed,设置为 false 以禁用 Adafruit IO feed,
"aio_user_name": "您的 Adafruit IO 用户名",
"aio_key": "您的 Adafruit IO 密钥",
“aio_feed_window”:0 到 9 之间的值。设置一分钟 feed 窗口的开始时间(请参阅 Adafruit 节流控制)。如果您只有一台环境监视器,则设置为 0,
“aio_feed_sequence”:0 到 3 之间的值。设置一分钟 feed 更新窗口内的 feed 更新开始时间(请参阅 Adafruit 节流控制)。如果您只有一台环境监视器,则设置为 0,
"aio_household_prefix": "您正在监控的家庭的 Adafruit IO 密钥前缀(请参阅 Adafruit IO 命名约定)",
"aio_location_prefix": "此特定 Enviro 监视器位置的 Adafruit IO 密钥前缀。对于室内监视器使用 'indoor',对于室外监视器使用 'outdoor'。(请参阅 Adafruit IO 命名约定)",
“aio_package”:设置为“Premium Plus”或“Premium Plus Noise”或“Premium”或“Premium Noise”或“Basic Air”或“Basic Combo”
您需要一个 Adafruit IO+ 帐户才能使用“Premium Plus”、“Premium Plus Noise”、“Premium”或“Premium Noise”套餐以及一个 Enviro Monitor Indoor Plus(配备 SGP30 eCO2/TVOC 传感器) Premium Plus' 或 'Premium Plus Noise' 软件包(请参阅 Adafruit IO 软件包)”,
该脚本设置 Enviro Monitor 的 Adafruit IO 源、仪表板和块,如本例所示
通过使用所需数据填充 aio_feed_prefix 字典,该脚本可以在一次运行中设置多个家庭和位置。 aio_feed_prefix 的格式为:
aio_feed_prefix = {'家庭 1 名称': {'key': 'household1key', 'package': 'aio_package', 'locations': {'Location1Name': 'location1key', 'Location2Name': 'location2key'}, '可见性': '公共' 或 '私人'}, '家庭 2 姓名': {'key': 'household2key', 'package': 'aio_package', 'locations': {'Location1Name': 'location1key'}, 'visibility': 'public' 或 'private'}}
家庭名称和家庭密钥需要与相关环境监视器的 config.json 文件中定义的一致。
例如,如果您的家庭只有一台环境监测仪,并且您在 config.json 文件中将“aio_household_prefix”设置为“home”,将“aio_location_prefix”设置为“outdoor”,将“aio_package”设置为“Premium”, Enviro Monitor,如果您希望源、仪表板和块设置为私有可见性:
aio_feed_prefix = {'Home': {'key': 'home', 'package': Premium', 'locations': {'Outdoor': 'outdoor'}, 'visibility': 'private'}}
如果您的家庭有两台 Enviro 显示器,并且您已将两台 Enviro 显示器的 config.json 文件设置为“aio_household_prefix”为“home”,则将室外显示器的“aio_location_prefix”设置为“outdoor”,将室外显示器的“indoor”设置为“indoor”您的室内显示器,将您的室外显示器的“aio_package”更改为“Premium”,将您的室内显示器的“Premium Plus”更改为“Premium Plus”,如果您想要设置源、仪表板和块具有公众知名度:
aio_feed_prefix = {'Home': {'key': 'home', 'package': Premium Plus', 'locations': {'Outdoor': 'outdoor', 'Indoor': 'indoor'}, 'visibility': '民众'}}
另外两个用户定义的字典是 aio_user_name 和 aio_key。这些需要使用您在环境监视器的 config.json 文件中使用的相同用户名和密钥进行填充。
aio_user_name = "您的 Adafruit IO 用户名"
aio_key = "您的 Adafruit IO 密钥"
如果启用,Adafruit IO feed 更新每 10 分钟生成一次。配置文件的 aio_feed_window 和 aio_feed_sequence 变量用于在从多个 Enviro 监视器收集源时最大限度地减少 Adafruit IO 限制错误。 aio_feed_window 变量可以是 0 到 9 之间的值,用于设置一分钟提要更新窗口的开始时间。 0 在整点后的 0、10、20、30、40 和 50 分钟打开窗口,1 在整点的 1、11、21、31、41 和 51 分钟打开窗口,2 在 2 点打开窗口,整点的 12、22、32、42 和 52 分钟,依此类推。 aio_feed_sequence 变量可以是 0 到 3 之间的值,以在一分钟的 feed 更新窗口内设置 feed 更新开始时间。 0 在窗口打开后立即开始更新,1 延迟 15 秒开始,2 延迟 30 秒,3 延迟 45 秒。
每个 Enviro Monitor 的 Adafruit IO 源、仪表板或块的命名约定是使用家庭名称,后跟该家庭内相关 Enviro Monitor 位置的位置,作为每个源、仪表板或块的前缀。您为“aio_household_prefix”选择合适的名称,“aio_location_prefix”可以是“indoor”或“outdoor”。例如,将“aio_household_prefix”设置为“home”,将“aio_location_prefix”设置为“outdoor”,会将每个 feed 名称的前缀设置为“Home Outdoor”,将每个 feed 的键的前缀设置为“home-outdoor-”。因此,温度源将具有名称“家庭室外温度”和键“家庭室外温度”。仪表板将具有名称“家庭”和键“家庭”,并且该仪表板内的温度计块将具有“家庭室外温度”。名称为“室外温度计”,密钥为“室外温度计”。
有六种 Adafruit IO 软件包选项可供选择:“Premium”每个 Enviro 具有 14 个数据馈送,“Premium Noise”每个 Enviro 具有 17 个数据馈送,“Premium Plus”每个 Enviro 具有 16 个数据馈送(即通过可选的附加 eCO2 和 TVOC) SGP30 传感器)、“Premium Plus Noise”,每个 Enviro 具有 19 个数据源,所有这些都需要 Adafruit IO+ 帐户; “基本空气”包含 5 个空气质量数据流(空气质量水平、空气质量文本、PM1、PM2.5 和 PM10),“基本组合”包含 5 个空气质量/气候数据流(空气质量水平、天气预报图标、温度、湿度和气压)。
使用“Premium Noise”和“Premium Plus Noise”Adafruit IO 软件包需要使用相关设置说明在 Enviro 中配置并启用噪声测量。版本 6.5 更改了噪音源和仪表板,以显示源更新之间的最大、最小和平均噪音水平,而之前的版本仅显示源更新之间的最大噪音水平。
该项目已获得 MIT 许可证 - 有关详细信息,请参阅 LICENSE.md 文件
天气预报基于 www.worldstormcentral.co/law_of_storms/secret_law_of_storms.html by RJ Ellis