Qingping Air Monitor (CGS2) のデータを Home Assistantで取り込めるようにするのに少し手間取ったので記録を残しておく。
https://robertying.com/post/qingping-cgs1-home-assistant/ を参考にしたが、Home Assistant の configuration.yaml などは修正している。
背景
Qingping Air Monitor は WiFiでの通信を行う。このため Bluetooth Low Energy (BLE) で通信を行う(アドバタイズでデータを送る)Qingping Air Monitor Lite と異なり、Home Assistantの Qingping の Integration でデバイスを取り込むことができない。
Qingping Air Monitor をローカルの MQTT Broker にデータを送るように設定し、Home Assistant の MQTT Integration を用いて、データを取り込めるようにした。
MQTT Broker の設定、Qingping Air Monitor 関連の設定、Home Assistant の MQTT Integration の設定に分けて説明する。
バージョン
利用した機器のソフトウェアのバージョンは以下の通り。
- Qingping Air Monitor: 4.3.9_0105
- Home Assistant
- Core: 2024.7.3
- Supervisor: 2024.06.2
- Operating System: 12.4
- フロントエンド: 20240710.0
- MQTT Broker (Add-on: Mosquitto broker) : 6.4.1
MQTT Broker の設定
MQTT Broker をローカルで用意する。すでにあれば、それを利用すればよい。
手元の環境では動作させていなかったことと、Home Assistantで利用するものなので、Home Assistant の add-on を利用した。Home Assistant のアドオンストアの Official add-ons の中にある Mosquitto broker 6.4.1 をインストールし、起動した。
Mosquitto brokerのドキュメントに従って、Qingping Air Monitor で利用するためのユーザのアカウントをHome Assistantのユーザとして作成した。具体的には、ユーザ qingpingを作った。
Qingping Air Monitor 関連の設定
Qingping Air Monitor でローカルの MQTTブローカーにデータを送るようにする必要がある。
https://github.com/GreyEarl/qingping-air-monitor-mqtt などが参考になる。
Androidアプリへのデバイス登録
まず、Android の Qingping IoT アプリ (Qingping+ でも可能らしい)にQingping Air Monitor を登録する。名前は適切につける。ここではデフォルトのまま Air Monitor、グループは選択せず。
developer.qingping.coへのログイン
https://developer.qingping.co/login からログインする。Emailタブから、Email アドレスを入力して、sendボタンを押すとメールでVerification code が送られてくるので、それを入力すればログインできる。
Private Access Config
ログイン後、上側の「Private Access Config」をクリックして、Private Access Configのページに移る。まずは、左側の「Configurations」から設定していく。
Configurations
Private Access Configのページの右上にある「+Add Config」ボタンをクリックすると、Add Configuration パネルが開くので、情報を設定していく。
- Name: Air Monitor (など適切な名前を入力する)
- Device Model: Qingping Air Monitor を選択
- Private Type: Self-built MQTT を選択
- Self-built MQTT Information
- Host: 192.168.0.210 (例。環境に応じて、上記で説明したようなMQTT Broker のアドレスを指定する)
- Port: 1883 (MQTT Broker の設定に応じて適切なポート番号に変更)
- User Name: qingping (MQTT Broker の設定に応じて適切なユーザ名)
- Password: ユーザ名に対応したパスワード
- Client ID: qingping-{mac} (デフォルトのままとした)
- Up Topic: qingping/{mac}/up (デフォルトのままとした)
- Down Topic: qingping/{mac}/down (デフォルトのままとした)
- {mac}は、デバイスのMACアドレスに置き換えられる
- Testボタンを押しても成功か失敗かはSelf-built MQTT Informationからは明確には判別できない。うまくいっているときは少し時間がかかるような気がした。
- Confirmボタンをクリックして設定
- Custom Config: 特になし
- ConfirmボタンをクリックしてConfiguratioの設定を終わる
Devices
左側の「Devices」からデバイスを登録する。
右上の「+ Add Device」をクリックすると Select Device Model のパネルが開く。
「Qingping Air Monitor」を選択し、「Next」ボタンをクリックする。 Select Device のパネルが開く。
Select Device のパネルには、登録可能なデバイスが表示されるので、選択して「Next」ボタンをクリックする。Select Configurationパネルが開く。デバイスが表示されていない場合には、Qingpingのアプリでの登録が終わっていない。
Select Configurationパネルでは、Configurations で設定したコンフィギュレーション(上記の場合には Air Monitor)を選択し、「Confirm」ボタンをクリックする。
「Successfully added.」 と表示されればデバイスの登録ができたことになる。デバイスの一覧にも表示されているはず。
Qingping IoT アプリからは登録したデバイスが削除されるようだ。Qingping IoTアプリに登録するためには、developer.qingping.coからデバイスの登録を削除する必要があるようだ。developer.qingping.coからデバイスの登録を削除しないままでQingping IoTアプリに登録しようとしても、デバイスに表示された認証コードを入れてエラーになってしまう。ただ、Qingping+アプリには登録できるようだ。
デバイスでの設定確認
デバイスのSettingsのPrivatizationのConnect State が Connected になっていることを確認する。
設定を変更した後で、デバイスの Settings の Privatization でうまく設定されているように見えたり、Private MQTT Settings の Refresh MQTT info で更新されているように見えてもうまく動作していないことがある。そのような場合には、設定変更を有効にするためにデバイスをリセットする必要があるようだ。
デバイスのリセットは、SettingsのResetをタッチして、リセットする。データが消されるのでリセットするか確認が出るが、Sureを選択するしかないと思われる。リセットをするので言語の設定やWiFiの設定などをする必要がある。
Home Assistant の設定
Home Assistant の 「設定」の「デバイスとサービス」の「統合」で、「+統合を追加」をクリックし、「MQTT」をインストールする。その後 MQTTの設定をする。
MQTT の設定
インストールした MQTT Integrationの設定を行う。
Brokerオプション
- Broker: 192.168.0.210 (MQTT BrokerのIPアドレスもしくはホスト名を指定する。Self-built MQTT Informationで設定した情報と同じ)
- ポート番号: 1883 (Self-built MQTT Informationで設定した情報と同じ)
- ユーザ名: mqtt (Self-built MQTT Informationで設定した情報と同じでもよいが、ここでは、Home Assistantのアクセスは別のユーザにしている)
- パスワード: ユーザ名に対応したパスワード
- ここでは、クライアント証明書などについての詳細オプションは設定していない。
MQTTオプション
デフォルトのままとした。
configuration.yaml の設定
センサーの指定などが MQTT の設定からはできないので、configuration.yaml を編集する必要がある。
configuration.yaml に次のセクションを加えて、具体的な設定は別ファイルの qingpingAirMonitor.yaml で設定するとした。
1 2 |
# Qingping Air Monitor mqtt: !include qingpingAirMonitor.yaml |
qingpingAirMonitor.yaml
qingpingAirMonitor.yaml は、以下の通り。# で始まる行は削除しても動作はするはずであり、uncommentしても動作するはず。uncommentしておいた方がよいかも。
eTVOCの単位は points (unit_of_measurement: "points") を指定している。デバイスから送られるデータは tvoc_index となっており、0から500までの値をとるようだ。仕様では、eTVOCは 0.005~9.999mg/m³ および、VOC index 0~500となっているが、Qingping Air Monitor 2に使用されているセンサーSGP4x ( https://sensirion.com/company/news/press-releases-and-news/article/sensirion-inside-qingping-air-monitor-2 )のメーカーである Sensirion の資料 ( https://sensirion.com/media/documents/02232963/6294E043/Info_Note_VOC_Index.pdf )によれば 、VOC index は24時間平均を 100とした相対的な強さということなので、VOC index からµg/m³などへの変換は単純にはできないと思われる。デバイスでは mg/m³ の表示も可能だが、どのように変換しているかはっきりしない。
cgs2sensor というアンカーを使って、 2つ目のセンサーからは、デバイスで共通のstate_topic やdevice の記述を繰り返さないようにしている。state_topic やidentifiersの記述の中の「582D34702998」はデバイスのMACアドレスを指定している。MACアドレスである必要はないが、適切な文字列に変更する必要がある。state_topic は MQTT のトピックとして適切になるようにする必要がある。identifiersはデバイスが区別できるような一意の名前になるようにする必要がある。
unique_id は、気温や湿度などのセンサーを区別するものなので、自分のHome Assistant内ですべて異なるようにする必要がある。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
sensor: - &cgs2sensor name: "CO2" #object_id: air_monitor_co2 device_class: carbon_dioxide unit_of_measurement: "ppm" value_template: >- {{ value_json.sensorData[0].co2.value if value_json.type=="12" else this.state }} unique_id: 70fb26f174d87bb2d9f13e515071c02d9aebc57b state_topic: "qingping/582D34702998/up" device: identifiers: ["582D34702998"] name: "Air Monitor 2" #model: "CGS2" #manufacturer: "qingping" - <<: *cgs2sensor name: "PM2.5" #object_id: air_monitor_pm25 device_class: pm25 unit_of_measurement: "µg/m³" value_template: >- {{ value_json.sensorData[0].pm25.value if value_json.type=="12" else this.state }} unique_id: ac73156b1d0ede8cb682fdf898d8ec61bb1e1dcb - <<: *cgs2sensor name: "PM10" #object_id: air_monitor_pm10 device_class: pm10 unit_of_measurement: "µg/m³" value_template: >- {{ value_json.sensorData[0].pm10.value if value_json.type=="12" else this.state }} unique_id: 5da8d1d6765c37871afc4323c69e54a7ead1baff - <<: *cgs2sensor name: "eTVOC" #object_id: air_monitor_tvoc device_class: volatile_organic_compounds unit_of_measurement: "points" value_template: >- {{ value_json.sensorData[0].tvoc_index.value if value_json.type=="12" else this.state }} unique_id: d9174f5f82d1992a88d2fccb0a898b5b6970908b - <<: *cgs2sensor name: "Humidity" #object_id: air_monitor_humidity device_class: humidity value_template: >- {{ value_json.sensorData[0].humidity.value | round(3) if value_json.type=="12" else this.state }} unit_of_measurement: "%" unique_id: d6c1d0a1ccee95284a82e11dd417f16ef77bff91 - <<: *cgs2sensor name: "Temperature" #object_id: air_monitor_temperature device_class: temperature unit_of_measurement: "°C" value_template: >- {{ value_json.sensorData[0].temperature.value | round(3) if value_json.type=="12" else this.state }} unique_id: d7854f580ce6c74e9a4be244b7240a26e9794d77 - <<: *cgs2sensor name: "Noise" #object_id: air_monitor_noise device_class: sound_pressure unit_of_measurement: "dB" value_template: >- {{ value_json.sensorData[0].noise.value if value_json.type=="12" else this.state }} unique_id: abbc946dfc42d13676447ea1f64eb5cfdf8322d1 - <<: *cgs2sensor name: "Battery" #object_id: air_monitor_battery device_class: battery unit_of_measurement: "%" value_template: >- {{ value_json.sensorData[0].battery.value if value_json.type=="12" else this.state }} unique_id: 89f0bbc108d370565ca91423bf38776f38b84c34 |
Home Assistantを開発者ツールもしく設定のシステムの再起動から、クイックリロードするかHome Assistantを再起動することで、上記の設定が有効になるはず。
動作確認
MQTT によってHome Assistant がデータ取得できていることを確認する。
MQTTのセンサーの更新の確認
Home Assistantの「設定」、「デバイスとサービス」、「MQTT」のデバイスを開き、センサーが表示され、更新されていることを確認する。
developer.qingping.co の Private Access Config の Interval of Uploading や Interval of Recording が 15分になっており、データの送信頻度が低くそのままでは確認がしづらい。そこで、データ送信間隔を短くするか、デバイスを操作してデータ送信が行われるようにする必要があるかもしれない。
データ送信間隔の変更
Home Assistant の MQTT の「MQTTの設定」を選択すると、パケットのパブリッシュやトピックのリッスンができる。
ここで示している例の場合には、トピックに「qingping/582D34702998/down」(582D34702998の部分は自分のデバイスに合わせて変更が必要)を指定し、ペイロードに次のJSONを指定することで、デバイスにMQTTプロトコルでコマンドを送り、データ報告の間隔を15秒にできる。
1 2 3 4 5 6 7 8 |
{ "id": 1, "need_ack": 1, "type": "17", "setting": { "report_interval": 15 } } |
ペイロードの指定方法は、https://developer.qingping.co/main/private/public_mqtt#316-modify-data-report-interval などを参考にすることができる。
デバイスからのデータ送信
デバイスのSettings の Privatizationの Report RealTime Data をタッチして、データ送信を随時することができる。