Raspberry Piでパトランプを作成⑤
過去の記事は下記となります。
Raspberry Piでパトランプを作成①
Raspberry Piでパトランプを作成②
Raspberry Piでパトランプを作成③
Raspberry Piでパトランプを作成④
求める仕様
- アラートを音と光で伝えてくれる
- snmptrapを受信
- 安定稼働
- 自前のコンパネにて設定変更が可能 <- 今回はこちら
かっこいいコンパネを作成したい!
言語選定
Linuxが動作しているので、選び放題ですが
Raspberry Piの「Pi」はPythonから来ているとの事で
初めて触る言語でしたが、社内の "えんじにあん師"
より使いやすい、ライブラリが少なくても動くよ
という前情報があったため、チャレンジしてみました。
当初はrubyで行こうと思っておりましたが
gem地獄に落ちたりして、ruby嫌いなのです、、、
選定したフレームワーク/テンプレートエンジン
比較的大きな、DBありき、学習ありきなFrameworkに疲れていたため
microframework な Flaskを選定しました。
Pythonの新しいバージョンに対応していた事と
公式ドキュメントが多く丁寧なチュートリアルも用意されていたため選定しました。
テンプレートエンジンは自ずとJinja2を選択。
結論から言うと大当たりで
Symfony2とTwigをここ数年触っていたので
Twigライクな Jinja2 と IntelliJ IDEAの
強力な補完機能のおかげで、本当に楽しくコーディングできました。
通常フレームワークの routing や config周りで
別ファイルを渡り歩く事もないため、小規模プロジェクト
であれば、開発速度がかなり上がると感じました。
orm を利用していない事の加え、入力値をそのままSQLに埋め込んでおり
インジェクションし放題なはずかしい仕様なので、VerUPを実施していきます。
実装する画面イメージを想定
ログイン可能な設定画面を作る事にしました。
実装する処理は下記です。
- ログイン画面
- 設定画面
-- (アラート用WAVファイル変更機能)今回未実装
-- アラート音量変更機能
-- LED点滅回数変更
-- ステータス表示 (snmptrap受信ログ確認)
ログイン画面
Flaskのセッション機能を利用する事でとても簡単に
ログイン画面機能を実装できました。
下記を参考に実施して行くことでログイン画面を
有するアプリケーションのひな形が簡単に出来上がります。
http://flask.pocoo.org/docs/quickstart/
設定画面
ログイン状態に関わらず settings テーブルの中身を表示するために取得
及びRaspberry Pi上の状態・ログを収集して statuses として viewに引き渡しています。
def <strong>get_system_stat():
statuses = dict()
statuses['IP'] = </strong>system("hostname -I")
statuses['Uptime'] = <strong>system("w | head -1")
statuses['Snmptrap'] = </strong>system("grep 'snmptrapd' /var/log/daemon.log | tail -5").replace('\n','<br>')</p>
[crayon-69354754ee4df898306634/]
<p>@app.route('/')
def top():
db = get_db()
cur = db.execute('select * from settings')
settings = cur.fetchall()
statuses = __get_system_stat()</p>
[crayon-69354754ee4e5512513703/]
<p>
データ更新は [URL]/settings にPOSTで引き渡された値を元にDBをUpdateしています。
@app.route('/settings', methods=["POST"])
def settings():
if request.method == 'POST':
try:
if (not request.form['Volume'].isdigit()):
msg = "Volume must be integer"
raise ValueError</p>
[crayon-69354754ee4e6667389602/]
<p>
templates ディレクトリ下のテンプレートで共通で使いたい部分は layout とし
CSS/画像は static ディレクトリに配置しましょう。
ソース
作成したプログラム及び、Raspberry Piの配線図、Raspbianへ実施した設定は下記を参照下さい。
https://github.com/tktk19/Patlam-pi
ムービー
8/25更新・掲載致します。
参考動画
投稿者プロフィール
-
Japan AWS Ambassadors 2023, 2024
開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て
2010年よりスカイアーチネットワークスに在籍しております
機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。








