前回の続き。OLED に文字を出せることができたので、あとは「タクトスイッチを押したタイミングで画面に何かしら表示して、しばらくしたら画面を消す」を実現する。
画面表示方法を調べた時もそうだったけど、ネットで調べると大抵 python で書かれたサンプルコードが見つかるんだよね。これまで python を書いたことが無かったのだが、見よう見まねで頑張ってコードを書いてみた。(書いたコードは Gist にアップロード済み)
このコードでは、引数に任意のコマンド文字列を渡せるようにしてあり、タクトスイッチを押した際、そのコマンドの実行結果が画面に表示されるようになっている。そのため、別途、以下のようなシェルスクリプトを用意しておく。
#!/bin/bash date '+%F %T' uptime | sed -r 's/^.+up ([^,]+),.+$/UP \1/' uptime | sed -r 's/^.+\s(\S+),\s(\S+),\s(\S+)$/CPU \1 \2 \3/' df -h | grep /mnt/exhdd | awk '{print "HDD",$3,"/",$2,$5}' free -h | sed -n -e 2p | awk '{print "MEM",$3,"/",$2}'
あとは、こいつをサービスとして常駐させるべく、以下のような内容で /etc/systemd/system/monitor-status.service ファイルを作成し、
[Unit] Description=Status monitor daemon [Service] WorkingDirectory=/root/monitor-status ExecStart=/root/monitor-status/monitor.py ./script.sh Restart=always [Install] WantedBy=multi-user.target
systemctl コマンドを実行すれば完成。
# systemctl daemon-reload # systemctl enable monitor-status # systemctl start monitor-status
というわけで、普段は画面表示は消えているが、
タクトスイッチを押すと、現在時刻、稼働日数、CPU Load 値、HDD 使用量、メモリ使用量を画面に表示。
約 30 秒で自動的に画面表示が消える。よしよし、想定通りに動作しているぞ。
大した事をやったわけではないのだが、これはこれで妙な満足感を得られたのであった。めでたしめでたし。
参考記事