こんにちは、あかぴです。
以前作成した自室のIoT化の派生で、予約機能を実装してみました。
前回
Raspberry Piの3つの使い方
実装の概要
原理は相変わらず素朴。at コマンドで以前使ってた送信機能を予約実行させるだけ。at の起動方法もめちゃくちゃ素朴で、前回とは別の php ファイルに POST するだけ。その時予約する時間も併せて送信する必要があるが、それはフロントを開発する自分に任せよう。
at コマンドは時間を指定すると入力待ちに入り、その中で行った命令を指定した時間に実行する。他にもファイル指定して実行するとかあるけど、自分は at コマンド内で実行する命令に引数(予約したい赤外線コードのファイル名)を使いたかったので直接入力するようにした。
ここまで実装するのに詰まったことを二つ紹介する。
一つ目:atコマンドが無いって言われた
https://smiura3000.blogspot.com/2016/04/raspberry-pilinuxraspbian-atshbash.html
を参考に、
sudo apt-get install at
Raspbian は Linux 標準のコマンドでも結構無いものがあるけど、apt-getでだいたい入れられるらしい
自分はLinuxの内部派閥はよくわかっておらず、ラズパイに乗せてるRaspbian はLinuxの簡易版みたいなイメージだった。最初は最小構成にしておいて必要なコマンドは都度インストールする形式なのは素晴らしき効率化だと思った。
二つ目:atコマンドに命令を与える方法
前述の通り、atコマンドに命令を与えるには標準入力で手打ちするかファイル(バッチ)を指定するかの二つしかない。自動で実行するバッチファイル上で標準入力に手打ちってどないすんねんと思ったが、パイプとかあるしなんかあるやろと思って調べた。当然あった。
hoge.sh
at {時間指定}<< END_OF_INPUT
命令
END_OF_INPUT
<<{終了文字} でその前のコマンドが待ち受けする標準入力に以降の中身の{終了文字}が来るまでを投げれるらしい
これをしない場合、atの次の行の命令とatの待ち受けは別のシェルで処理されるので、命令は即時実行されてatは命令を待ち続ける(?)。
詳しいことは以下を読むといいと思う
https://eng-entrance.com/linux-redirect
感想と次回予告
サーバー側の実装はだいぶすんなりいった印象。
まあ本当に簡単なことしかしてないので…
このままフロント側の記事を書きたかったけど疲れたので一旦オワリ!!