建築デザイン
Docker コンテナの主なタスク: 必要なアプリケーションを実行する
Docker コンテナ マッピング ファイル ディレクトリ: ローカル ファイルとの完全なデータ共有。OTA クライアントは共有ファイル ディレクトリの更新を制御し、コンテナを再起動します。
最後に、Docker に基づいた SOTA アプリケーションのアップグレードが実現されます。
全体のアーキテクチャの設計思想は次のとおりです。
- 端末には OTA クライアントが必要で、クラウドには OTA サーバーが必要です。
- クラウド OTA サーバーは新しいファイルをアップロードする責任を負い、端末の OTA クライアントは OTA サーバーの更新されたファイルをサブスクライブする責任を負います。
- 端末の OTA クライアントは、更新ファイルを受信し、マッピング ディレクトリ (端末とコンテナ間の共有データ ディレクトリ) に更新ファイルを配置する責任があります。
- 端末の OTA クライアントは更新ファイルを受信すると、現在のイメージでコンテナが実行されているかどうかを検出し、コンテナが実行されていない場合は、マッピング ディレクトリをバインドしてコンテナを起動し、起動スクリプトを独自に実行します。実行中のコンテナがある場合は、現在実行中のコンテナを閉じ、マッピング ディレクトリをバインドしてコンテナを起動し、起動スクリプトを自動的に実行します。
- 端末のOTAクライアントがコンテナの再起動を完了すると、コンテナアプリケーションの更新が完了します。
OTAプロトコルの選択
OTA (Over-The-Air) アップグレードは、無線ネットワークを介してリモートのデバイス アップグレードを実現する技術であり、その実装には特定のプロトコル規格に準拠する必要があります。MQTT と HTTP OTA はどちらも一般的に使用される OTA アップグレード プロトコルです。
以下では、これら 2 つのプロトコルを次の側面から詳細に分析および比較します。
転送プロトコル | MQTT は MQTT プロトコルを使用し、HTTP は HTTP プロトコルを使用します。MQTT プロトコルは、低帯域幅、高遅延、信頼性の低いネットワーク環境でのデータ送信に適した軽量のメッセージ送信プロトコルです。HTTP プロトコルは、要求応答モデルに基づいたプロトコルであり、Web 上でデータを送信するために使用されます。伝送効率の点では、MQTT は軽量な伝送プロトコルであるため、HTTP よりもデータ伝送効率が高くなります。 |
該当シーン | MQTT は、車両のインターネットなど、高速応答と高いリアルタイム要件を必要とするシナリオに適しています。MQTT プロトコルの利点は、通信量を大幅に削減し、通信遅延を軽減し、高速な応答を実現できることです。HTTP は、ネットワーク環境が比較的安定しているシナリオでのアップグレードに適しています。 |
安全性 | MQTT は暗号化と認証を通じてアップグレード プロセスのセキュリティを向上させることができますが、HTTP では送信プロセス中にセキュリティ上の問題が発生する可能性があり、追加のセキュリティ対策が必要になります。たとえば、HTTPS はデータ暗号化と認証機能を提供し、安全性を高めます。 |
OTAの実装方法 | MQTT と HTTP の実装方法は若干異なります。MQTT は通常、アップグレード パッケージの送信チャネルとして MQTT メッセージ キューを使用し、デバイスは MQTT ブローカーからアップグレード パッケージをサブスクライブできます。HTTP は通常、アップグレード パッケージのソースとして HTTP サーバーを使用し、デバイスは HTTP 要求を通じてアップグレード パッケージをダウンロードできます。 |
综上所述,MQTT 和HTTP 各有优缺点,具体应用需要根据场景和要求进行选择。如果要求传输效率高、响应速度快、安全性好,则可以选择MQTT ;如果网络环境相对稳定,可以选择HTTP OTA。在本文中,将MQTT 和HTTP 结合使用,从而兼顾两者的优点,MQTT 用于消息的发布和订阅,HTTP 用于web文件处理和传输。
MQTTサービス構築
MQTT は、車両のインターネットなど、高速応答と高いリアルタイム要件を必要とするシナリオに適しています。
主にメッセージのパブリッシュとサブスクリプションに使用されます。
MQTT ブローカーのセットアップ
sudo apt-get update
sudo apt-get install mosquitto
pip install paho-mqtt
MQTT サービスを表示する
systemctl status mosquitto.service
MQTT サービスの詳細を表示する
mosquitto -v
通信テスト
Mosquitto クライアントはクライアントまたはローカル マシンにインストールする必要があります
sudo apt-get install mosquitto-clients
mosquitto_pub -h 30.178.38.62 -t "wp/test" -m "l want the world\n" -u ellison -P 1
mosquitto_sub -h 30.178.38.62 -t "wp/test" -u ellison -P 1
HTTPサービスの確立
オープンソースコード: https://github.com/weipengyiyu/OTA-Docker
- このマシンの OTA クライアントは、サーバーから送信された更新ファイルを受信し、そのファイルが現在のマシンに存在するかどうかを検出し、ローカル ファイルが存在する場合は削除して、新しいファイルを更新します。存在しない場合は、新しいファイルを更新します。その間にファイルを作成します。
- ファイル圧縮パッケージ ファイルまたはファイル ディレクトリとファイルを OTA サーバーにアップロードします。
- 各端末で OTA クライアントを起動し、PC 上で OTA サーバーを起動し、分散パブリッシュ - サブスクライブ方式を使用してアップグレードします。
サーバ
クライアント接続用に IP、ユーザー名、パスワードを構成する必要がある
"mosquitto_pub -h 30.178.38.62 -t 'wp/test' -m 'update file' -u ellison -P 1"
HTTPサーバーに入るには以下の操作を行ってください。
python3 ota_server.py
サーバー上のローカル ブラウザに入力します: http://127.0.1.1:8000/
ここで、dirtree.txt は次のとおりです。
directory tree
|____ota_client.py 3.25K
|____README.md 56B
|____dirtree.txt 325B
|____ota_server.py 22.46K
File Path File Size File Modify Time
README.md 56B 2023-05-13 19:19:42
dirtree.txt 325B 2023-05-14 13:21:44
ota_client.py 3.25K 2023-05-13 19:19:42
ota_server.py 22.46K 2023-05-13 19:19:42
更新するアプリケーションを選択し、アプリケーションを *.tar.gz 圧縮ファイルとしてアップロードします。サーバーが完成したファイルを受け入れると、関連する更新をサブスクライブし、更新を適用する必要がある Docker クライアントに更新メッセージを発行し、対応するクライアントはサーバーにファイルをダウンロードし、ローカルの Docker アプリケーションを更新するように適用します。
クライアント
クライアントを実行する前に、更新する必要がある圧縮ファイル名、IP、ユーザー名、パスワード、サブスクライブされたトピック名などのクライアントを構成する必要があります。
別のマシンまたはこのマシンで実行
python3 ota_client.py
コンテナファイルのマッピング
"docker run -it -v /home/wp/ota-client:/root -d weipengyiyu/ubuntu:18.04"
このようにして、コンテナーの起動後、コンテナー内に /root ディレクトリが自動的に作成されます。このようにして、-v パラメーターで、コロン「:」より前のディレクトリがホスト ディレクトリ /home/wp/ota-client であり、その後のディレクトリがコンテナ内のディレクトリであることが明確になります。
注: コンテナ ディレクトリは相対パスにすることはできません。ホスト ディレクトリが存在しない場合は、自動的に生成されます。
このようにして、ホスト ディレクトリにぶら下がっているファイルをコンテナ内で操作できるようになります。