このプロジェクトでは、Raspberry Pi Zero W、Pimoroni Enviro+、Plantower 空気質センサーを使用して、空気粒子、ガス、温度、湿度、気圧、光レベル、騒音レベルを監視、表示、レポートします。 SGP30 センサーを追加して、eCO2 および TVOC レベルを監視するオプションもあります。このコードは、Pimoroni によって公開されている Python のサンプルとライブラリの多くに基づいており、さまざまな変更と機能強化が加えられています。
気圧のレベルや変化に基づいた基本的な天気予報機能が追加されました。
素晴らしい天気と光の光レベル表示が、大気質レベルを表示するように変更されました。背景の色合いが大気の質のレベルを表し、太陽の位置が目に見える太陽のアイコンで表示されるようになりました。また、天気予報情報、騒音レベル (有効な場合) も提供され、湿度インジケーターに若干の変更が加えられています。
Combined 関数が変更され、各グラフの視認性が向上しました。グラフの色は各パラメータのレベルしきい値に基づいており、測定されたパラメータのみが表示されます。表示の読みやすさを向上させるために、「display_everything」メソッドも大気質パラメータのみを表示するように変更されました。
All in One 機能は、Enviro Monitor のすべての機能を循環できるように変更されました。
温度と湿度の測定精度は、より効果的な補正アルゴリズムを開発するために広範なテストと回帰分析 (摂氏 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 モニターとホーム オートメーション システム間の相互作用、および屋外と屋内の Enviro モニター間の相互作用をサポートするために提供されています。この相互作用により、屋内環境モニターの表示が屋内と屋外の測定値の間で循環することが可能になります。
mqtt でリンクされた屋内および屋外の Enviro モニターを使用して屋内の Enviro モニターで屋外の測定値を取得する代わりに、別の Enviro モニターから Luftdaten の測定値または Adafruit IO フィードをキャプチャするように屋内の Enviro モニターを構成することもできます。
Luftdaten のインターワーキングは、最小、最大、平均騒音レベル測定値の追加をサポートするように変更されました。 config.json ファイルで「enable_luftdaten_noise」を true に設定することで、ノイズ レベルの測定値を Luftdaten に送信できます。現在、Luftdaten はノードごとに 3 つのセンサーで構成できないため、PM または気候測定値のいずれかが無効になっている場合にのみ、騒音レベル測定値を Luftdaten に送信できることに注意してください。これを行うには、config.json ファイルの「disable_luftdaten_sensor_upload」を「Climate」または「PM」に設定します。
同じ Enviro+ セットアップを使用して Enviro Monitor をセットアップし、config.json ファイルのパラメータを使用してその機能をカスタマイズします。 config.json ファイルのパラメータの説明はここにあります。
ノイズレベル測定の設定には、次の追加手順が必要です。
設定ファイルでノイズ測定を有効にする前に、この設定を正常に実行する必要があります。
sudo apt-get アップデート
sudo apt-get アップグレード
カール -sSL https://get.pimoroni.com/enviroplus |バッシュ
sudo python -m pip サウンドデバイスをアンインストールする
sudo pip3 インストール sounddevice==0.3.15
バージョン 6.7 以降の場合は、次の操作も実行します。
sudo apt-get インストール 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 に設定します
ユーザー ガイドには、Enviro Monitor の使用に関するガイダンスが記載されています。
天気予報、空気の質、温度、湿度、露点、気圧、PM 濃度、ガス濃度、光レベル、騒音レベル、さらにオプションの SGP30 センサーを使用すると、eCO2 および TVOC データを Adafruit IO にストリーミングするサポートが提供されます。これは次のように有効にして設定できます。
Adafruit IO フィードにデータを供給するには、Enviro Monitor の config.json ファイル内の次のフィールドに値を入力する必要があります。
「enable_adafruit_io」: Adafruit IO フィードを有効にする場合は true に設定し、無効にする場合は false に設定します。
"aio_user_name": "Adafruit IO ユーザー名",
"aio_key": "Adafruit IO キー",
「aio_feed_window」: 0 ~ 9 の値。1 分間のフィード ウィンドウの開始時間を設定します (「Adafruit スロットリング コントロール」を参照)。 Enviro モニターが 1 つしかない場合は 0 に設定します。
「aio_feed_sequence」: 0 ~ 3 の値。1 分間のフィード更新ウィンドウ内でフィード更新の開始時間を設定します (「Adafruit スロットル制御」を参照)。 Enviro モニターが 1 つしかない場合は 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」パッケージと、Enviro Monitor Indoor Plus (SGP30 eCO2/TVOC センサーを搭載) を使用するには、Adafruit IO+ アカウントが必要です。 「Premium Plus」または「Premium Plus Noise」パッケージ (Adafruit IO パッケージを参照)",
このスクリプトは、この例のように Enviro Monitor の Adafruit IO フィード、ダッシュボード、およびブロックを設定します。
このスクリプトは、aio_feed_prefix ディクショナリに必要なデータを設定することで、1 回の実行で複数の世帯と場所を設定できます。 aio_feed_prefix の形式は次のとおりです。
aio_feed_prefix = {'世帯 1 の名前': {'key': 'household1key', 'package': 'aio_package', 'locations': {'Location1Name': 'location1key', 'Location2Name': 'location2key'}, 'visibility ': 'パブリック' または 'プライベート'}, '世帯 2 の名前': {'key': 'household2key'、'package': 'aio_package'、'locations': {'Location1Name': 'location1key'}、'visibility': 'public' または 'private'}}
世帯名と世帯キーは、関連する Enviro モニターの config.json ファイルで定義されているものと一致している必要があります。
たとえば、世帯に Enviro モニターが 1 つしかなく、config.json ファイルで「aio_household_prefix」を「home」に、「aio_location_prefix」を「outdoor」に、「aio_package」を「Premium」に設定したとします。その Enviro Monitor を使用し、フィード、ダッシュボード、およびブロックにプライベート可視性を設定したい場合は、次のようにします。
aio_feed_prefix = {'ホーム': {'キー': 'ホーム', 'パッケージ': プレミアム', '場所': {'屋外': '屋外'}, '可視性': 'プライベート'}}
世帯に 2 台の Enviro モニターがあり、両方の Enviro モニターの「aio_household_prefix」を「home」に config.json ファイルを設定した場合、屋外モニターの場合は「outdoor」、屋外モニターの場合は「indoor」に「aio_location_prefix」を設定します。屋内モニター、屋外モニターの場合は「aio_package」を「プレミアム」に、屋内モニターの場合は「プレミアム プラス」に設定します。フィードが必要な場合は、ダッシュボードおよびパブリック公開設定が設定されたブロック:
aio_feed_prefix = {'Home': {'key': 'home', 'package': Premium Plus', 'locations': {'Outdoor': 'outdoor', 'Indoor': 'indoor'}, 'visibility': '公共'}}
他の 2 つのユーザー定義辞書は、aio_user_name と aio_key です。これらには、Enviro Monitor の config.json ファイルで使用したのと同じユーザー名とキーを入力する必要があります。
aio_user_name = "Adafruit IO ユーザー名"
aio_key = "Adafruit IO キー"
有効にすると、Adafruit IO フィードの更新が 10 分ごとに生成されます。設定ファイルの aio_feed_window 変数と aio_feed_sequence 変数は、複数の Enviro Monitor からフィードを収集する際の Adafruit IO スロットル エラーを最小限に抑えるために使用されます。 aio_feed_window 変数には 0 ~ 9 の値を指定して、1 分間のフィード更新ウィンドウの開始時間を設定できます。 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 の値を指定して、1 分間のフィード更新ウィンドウ内のフィード更新開始時間を設定できます。 0 はウィンドウが開いた直後にフィード更新を開始し、1 は開始を 15 秒遅らせ、2 は 30 秒遅らせ、3 は 45 秒遅らせます。
各 Enviro Monitor の Adafruit IO フィード、ダッシュボード、またはブロックの命名規則では、各フィード、ダッシュボード、またはブロックのプレフィックスとして、世帯の名前の後に、その世帯内の関連する Enviro Monitor の場所の位置を使用します。 「aio_household_prefix」には適切な名前を選択し、「aio_location_prefix」は「屋内」または「屋外」のいずれかにできます。たとえば、「aio_household_prefix」を「home」に設定し、「aio_location_prefix」を「outdoor」に設定すると、各フィード名のプレフィックスが「Home Outdoor」に設定され、各フィードのキーのプレフィックスが「home-outdoor-」に設定されます。温度フィードの名前は「自宅屋外温度」、キーは「自宅-屋外温度」になります。ダッシュボードの名前は「自宅」、キーは「自宅」、その中に温度計ブロックがあります。ダッシュボードの名前は「屋外温度ゲージ」、キーは「屋外温度ゲージ」になります。
6 つの Adafruit IO パッケージ オプションが利用可能です: Enviro あたり 14 個のデータ フィードを備えた「プレミアム」、Enviro あたり 17 個のデータ フィードを備えた「プレミアム ノイズ」、Enviro あたり 16 個のデータ フィードを備えた「プレミアム プラス」(つまり、オプションの eCO2 と TVOC の追加) SGP30 センサー)、Enviro ごとに 19 個のデータ フィードを備えた「プレミアム プラス ノイズ」(すべて Adafruit IO+ が必要) アカウント; 5 つの大気質データ ストリーム (大気質レベル、大気質テキスト、PM1、PM2.5、PM10) を備えた「ベーシック エア」と 5 つの大気質/気候ストリーム (大気質レベル、天気予報アイコン、温度、湿度と気圧)。
「プレミアム ノイズ」および「プレミアム プラス ノイズ」Adafruit IO パッケージを使用するには、関連するセットアップ手順を使用して、Enviro でノイズ測定を構成し、有効にする必要があります。バージョン 6.5 では、フィード更新間の最大、最小、平均ノイズ レベルを表示するようにノイズ フィードとダッシュボードが変更されますが、以前のバージョンではフィード更新間の最大ノイズ レベルのみが表示されていました。
このプロジェクトは MIT ライセンスに基づいてライセンスされています - 詳細については、LICENSE.md ファイルを参照してください。
RJ Ellis による www.worldstormcentral.co/law_of_storms/secret_law_of_storms.html に基づく天気予報