コンパニオンコンピューターのRaspberry PIを起動すると、いくつか自動で開始してほしいプログラムがあります。
私の場合は、Raspiに割り振られたアドレスを表示するディスプレイプログラム、LTE USBモデムのための自動ダイアルアップとMAVProxyです。
ディスプレイプログラム
I2CLCD AQM0802の投稿ではネットワークアドレスを自動で表示させているので、sysctrlに登録しました。
ダイアルアップ
RasPIにLTE USB UX302NCを接続のでLTE USBドングルを使用可能としました。
udevに登録しているので使用可能とはなります。
が、繋げばダイアルアップコマンドWVDIALを自動スタートしたい。
ということでダイアルアップはwvdial.serviceを作ってみました。
(ダイアルアップってアイキャッチ画像に載せたように、電話で電話番号ダイヤルして、ピーって搬送波の音がしたらモデム部分に受話器を載せてたんだよなぁ。)
/etc/systemd/systemフォルダーに以下を作成しましたが、うまくいかないです。
[Unit] Description wvdial service After=network.target [Service] Type=simple ExecStart=/usr/bin/wvdial ExecStop=/bin/kill -HUP &MAINPID [Install] WantedBy=multi-user.targetり
理由は/dev/modemが出来上がる前に何度かリトライして終了します。
ネット検索したら、他の人はこれで繋がってるんですが、タイミングの問題なんでしょうね。
udevにコマンドを登録すれば、たしかにUSBドングルを差し込んで必要な処理はなされます。
しかし、それで/dev/modemが出来上がってから、使うコマンドを発行することはできませんでした。
systemdのAfterパラメーターで依存関係は書けるのですが、プロセスのみ。
ということで自分のフォルダーにこんなスクリプトを作りました。
いろいろ考えて、ずっと無限ループしてるほうがいいということでこうなりました。
lsコマンドで/dev/modemのオープン状態も調べてみたのですが、どうもそれだけじゃ稼働状況を調べられないのと、コマンドだしても”/dev/modemは今、ビジーだよん”と却下されるだけなので、これでいいか、と。
#!/bin/bash while true do if [ -e /dev/modem ]; then /usr/bin/wvdial fi sleep 30 done
chmod +x dialup.sh
しときます。
これを起動するために /etc/systemd/system/dialup.sh を作ります。
[Unit] Description=wvdial service After=network.target [Service] Type=simple ExecStart=/home/tsukasa/dialup.sh [Install] WantedBy=multi-user.target
あとはService登録の手順
sudo systemctl enable dialup.service sudo systemctl start dialup.service sudo systemctl status dialup.service
これでブートしてUSBを差し込んでちょっと待つと自動的にダイアルアップモデムも立ち上がります。
USBメモリーさしこまなかったら、ずーっとループしていますが、利便性を考えたらそんなもんでしょう。
意外に苦労しました。cronの@bootなど試してうまくいかず、現時点、結果的にこれです。
ひょっとしたらdaialupが落ちるようならば、cronにdialupさせたほうがいいのかもしれません。まだ、わかりません。
MAVProxy
英語のディスカッションを読むとかなり難しいことをしているか、crontabを使っています。
せっかくdaemonモードがあるので、サービス化してみます。
/etc/systemd/system/mavlink.service を作りました。
[Unit] Description = Pixhawk to mavproxy daemon After=network.target [Service] Type=simple User = tsukasa WorkingDirectory = /home/tsukasa/ ExecStart=/home/tsukasa/Mavlink.sh [Install] WantedBy=multi-user.target
WorkingDirectoryの指定が大事でした。
もちろんmavlink.shを作ります。
#!/bin/bash /home/tsukasa/.local/bin/mavproxy.py --master /dev/ttyAMA0 --baudrate 57600 --out tcpin:0.0.0.0:5760 --daemon
chmod +x mavlink.sh
しときます。
当然ですが、Pixhawkのテレメトリーは最初から接続した状態でなければいけません!