こんにちは!
SJC共同開発推進室の鈴木です。
前回はHome Assistantの導入編として、環境構築から市販のスマートデバイスや自作デバイスを連携させる方法をご紹介しました。詳しくは、スマートホームを次のレベルへ:Home Assistant のご紹介(1)をご確認ください。今回は前回のサンプルを少し応用した例で、製造現場での活用例をシンプルな構成でご紹介します。
目次
1.背景
IoTやAIを導入して生産性を上げたり、品質を安定させたりと製造現場でDX導入が進んできております。
ただ、実際に現場を見ると、既存の設備とどう繋げるかが分からなかったり、高額な専用システムに手が出せなかったりして、なかなか思うように進んでいない現状もあります。
そこで、今回Home Assistantを活用して、製造現場での温度が原因で起こる事象を解決するシステムを作成したいと思います。
製造現場では、機械設備が24時間稼働するケースが多くあります。そのため、温度管理が不十分だと、モーター、制御盤などは温度上昇に気づかないまま放置され、突然停止してしまったり、事故につながる危険性があります。
これらの問題を未然に防止するために、Home Assistantを使用したIoT監視システムの例をご紹介します。
2.システム概要
今回は、以下のようなシステムを作成しました。
- 工場内MAPを作成して、温度センサを2か所の作業エリアに設置し、30秒おきに温度を測定
- カメラ映像で現場の様子をリアルタイムで確認
- 温度が30度を超えたらDiscordに現場のその時の写真を添付して通知
今回はシンプルに、以下のような工場内の機械配置図を作成し、それぞれの作業エリアで現在の温度が表示され、カメラのマークをクリックすると現場の様子がリアルタイムで確認できるような構成にしております。
前回の記事のご紹介の際に作成した温湿度センサのプロトタイプをもう1つ作成し、また、監視カメラ用に、カメラモジュール搭載のマイコン:Seeed Studio XIAO ESP32S3 Senseを2つ使用しております。
また、今回使用している温湿度センサや監視カメラのマイコンには、前回ご紹介させていただいたものと同様にHome Assistantとシームレスに連携するためのファームウェアを、 ESPHomeというツールで作成し書き込んでいます。これにより、YAMLファイル(設定ファイル)で簡単にHome Assistantから各デバイスのデータを取得・操作ができます。
MAP上のカメラアイコンをクリックすると、リアルタイム映像を確認できます。
温度が30度を超えると、Discordで通知を受け取ることができます。
3.工場内MAPの作成
このMAPを作成していきたいと思います。(作業エリア①を例に紹介します。)
MAPを表示するためのダッシュボードから作成していきます。
ダッシュボードの作成:「設定」-> 「ダッシュボード」-> 「新しいダッシュボードを追加」からダッシュボードを作成します。
作成したダッシュボードで、「編集」ボタンを押下し、「ピクチャーエレメント」を選択します。対象の画像をアップロードすることで、MAPのベースとなる画像をダッシュボードに配置することができます。
あとは、状態アイコンや状態ラベルを配置していきます。登録している温湿度センサとカメラを以下のように設置しております。
MAP上のアイコンやラベルの位置や色はスタイルの項目にCSSのような記述をすることで自由に調整ができます。
4.オートメーションの作成
「トリガー」、「条件」、「アクション」を設定して、Home Assistant内で登録しているデバイスを連携して。作業を自動化することができます。
今回は、作業エリア①の温度が30度を超えた時に以下の写真のようにDiscordに現場の様子を写真付きで送信するように設定しております。
「設定」->「オートメーションとシーン」-> 「オートメーションの作成」-> 「新しいオートメーションの作成」でオートメーションを作成することができます。
例えば、温度が30度以上になった時という条件を追加したい場合、「いつ(When)」の欄に該当するデバイスを選択して、閾値(超過)の項目に30を入力することで、設定できます。
Home AssistantのUI上で作成した場合、自動でYAMLファイルに変換され、読み込まれます。
また、直接YAMLファイルで編集することも可能です。
5.今回使用したYAMLファイル(設定ファイル)
今回は詳細の解説を省略しますが、最後に、作成したシステムのYAMLファイルを添付します。
温湿度センサの設定YAMLファイル
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 |
esphome: name: livingroom-temp-humi-sensor esp32: board: seeed_xiao_esp32s3 framework: type: arduino # Enable logging logger: # Enable Home Assistant API api: encryption: key: "端末のencryptionキー" ota: - platform: esphome password: "端末のOTAパスワード" wifi: ssid: !secret wifi_ssid password: !secret wifi_password captive_portal: # --- I²C バス設定 --- i2c: sda: GPIO5 scl: GPIO6 scan: true # 起動時にI2Cデバイスをスキャン # --- SHT3x センサ設定 --- sensor: - platform: sht3xd temperature: name: "Room Temperature" humidity: name: "Room Humidity" address: 0x45 # SHT31 のI2Cアドレス update_interval: 30s |
監視カメラの設定YAMLファイル
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 |
esphome: name: esp32s3-sense friendly_name: esp32s3-sense # PlatformIO build options platformio_options: build_flags: -DBOARD_HAS_PSRAM board_build.arduino.memory_type: qio_opi board_build.f_flash: 80000000L board_build.flash_mode: qio esp32: board: esp32-s3-devkitc-1 framework: type: arduino # Enable logging logger: # Enable Home Assistant API api: encryption: key: "端末のencryptionキー" ota: - platform: esphome password: "端末のOTAパスワード" wifi: ssid: "WIFIのSSID" password: "WIFIのパスワード" # Captive portal configuration captive_portal: # Configuration for the ESP32 Camera esp32_camera: id: espcam name: My Camera external_clock: pin: GPIO10 frequency: 20MHz i2c_pins: sda: GPIO40 scl: GPIO39 data_pins: [GPIO15, GPIO17, GPIO18, GPIO16, GPIO14, GPIO12, GPIO11, GPIO48] vsync_pin: GPIO38 href_pin: GPIO47 pixel_clock_pin: GPIO13 resolution: 800x600 # Configuration for the ESP32 Camera Web Server esp32_camera_web_server: - port: 8080 mode: stream - port: 8081 mode: snapshot |
オートメーション設定YAMLファイル
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 |
alias: 温度が30度を超えた時にDiscordに現場の様子を写真付きで送信 description: "" triggers: - type: temperature device_id: "端末のID" entity_id: "端末のID" domain: sensor trigger: device above: 30 conditions: [] actions: - variables: snapshot_file: /config/www/snapshot_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg - delay: hours: 0 minutes: 0 seconds: 1 milliseconds: 0 - target: entity_id: camera.esp32s3_sense_my_camera data: filename: "{{ snapshot_file }}" action: camera.snapshot - action: shell_command.discord_notify data: message: ⚠️ 作業エリア①の温度が30度を超えました! filename: "{{ snapshot_file }}" mode: single |
オートメーションから呼び出しているSHELLコマンド
※(shell_command.discord_notify)で呼び出しているDiscordのウェブフックを利用するSHELLコマンドは、Home Assistantのconfiguration.yamlという設定ファイルに記述して、そこから呼び出しております。
1 2 3 4 5 6 |
shell_command: discord_notify: > curl -s -X POST -H "Content-Type: multipart/form-data" -F 'payload_json={"content": "{{ message }}"}' -F "file1=@{{ filename }}" "DiscordのウェブフックURL" |
まとめ
今回は、Home Assistantでシンプルな工場内のIoT監視システムサンプルを作成してみました。今回ご紹介させていただいた内容は、Home Assistantで手軽にできることのほんの一部のため、今後も引き続き定期的にブログを通して、Home Assistantのご紹介していきたいと思います。
エコモットでは、ともに未来の常識を創る仲間を募集しています。
弊社に少しでも興味がある方はぜひ下記の採用ページをご覧ください!