14.2. アプリケーションの出荷

作業台で動くスクリプトと出荷製品は同じものではありません。現場に設置されるカメラは、製品が設置されている限り、数か月、数年にわたって自力で動作し続けなければなりません。コンソールにオペレーターはおらず、IDEも接続されておらず、何かが動かなくなったときに近くにPythonの専門家もいません。このセクションのページでは、目標が机上のデモではなく出荷製品になったときに、アプリケーションについて何が変わるのかを説明します。

14.2.1. 出荷前チェックリスト

カメラが作業台を離れる前に、真であるべき項目の短いリストです:

  • アプリケーションコードはファイルシステムではなくビルドに入れる。 フリーズモジュールとROMFSイメージがコードとアセットをカバーします。フラッシュとSDカードのストレージはランタイムの状態とログファイルのためだけのものです。エンドユーザーは再フラッシュなしにアプリケーションを編集、削除、置き換えできません。

  • ウォッチドッグが常時動作している。 machine.WDTmain.py の冒頭で開始され、メインループの反復ごとに1回フィードされます。設定したタイムアウトより長いハングはハードウェアリセットを引き起こし、カメラは復帰します。

  • アプリケーションは復旧可能な出力先にログを記録する。 logging ライブラリは、レベル、タイムスタンプ、そして現場でSDカードから回収できる出力先とともにレコードを書き込みます。print() は開発時専用です。そのデフォルトの出力先はUSB標準出力であり、出荷製品では誰も読みません。

  • フラッシュとSDは失敗しうるものとして扱う。 内蔵フラッシュは小さな固定サイズのレコード(設定、最後に分かっているキャリブレーション)を保持し、SDはかさばる可変ファイル(画像キャプチャ、ログファイル)を保持します。どちらに対する操作もエラー処理で囲み、アプリケーションはどちらが利用できないときにも明確なフォールバックを持ちます。

14.2.2. アプリケーションをビルドに組み込む

2つの補完的な仕組みがファイルをファームウェアイメージに入れます: