LinkIt Smart 7688を使ってみる

サービスの追加

前回、cronの機能を紹介しましたが、@rebootによる起動時の自動起動は動き ませんでした。
そこで、LinkIt(OpenWrt)での自動起動(サービスの追加)を紹介します。
システム起動時に自動的にアプリを起動する方法はこ ちらに紹介されています。
今回は動作確認のために、システム起動時とシステム停止時にmosquitto_pubコマンドを使って、MQTTのPublishを行います。

最初に以下のファイルを「/etc/init.d/mqtt」として作ります。
ファイル名は何でも構いませんが、必ず「/etc/init.d」の下に置く必要が有ります。
#!/bin/sh /etc/rc.common

START=99
STOP=10

start()
{
        logger -p daemon.info -t mqtt "start()"
        mosquitto_pub -h broker.hivemq.com -p 1883 -t "nopnop2002" -m "start-0"
        sleep 5
        mosquitto_pub -h broker.hivemq.com -p 1883 -t "nopnop2002" -m "start-5"
        sleep 5
        mosquitto_pub -h broker.hivemq.com -p 1883 -t "nopnop2002" -m "start-10"
        sleep 5
        mosquitto_pub -h broker.hivemq.com -p 1883 -t "nopnop2002" -m "start-15"
        sleep 5
        mosquitto_pub -h broker.hivemq.com -p 1883 -t "nopnop2002" -m "start-20"
}

stop()
{
        mosquitto_pub -h broker.hivemq.com -p 1883 -t "nopnop2002" -m "stop"
}

次に以下のコマンドで、このファイルをサービスとして追加します。
root@mylinkit:/etc/init.d# chmod +x /etc/init.d/mqtt

root@mylinkit:/etc/init.d# /etc/init.d/mqtt enable

/etc/rc.dに現在有効なサービスの一覧が有りますが、s99mqtt と k10mqtt が追加されます。
root@mylinkit:~# ls /etc/rc.d
K10mjpg-streamer  S00sysfixtime     S20yunbridge      S61avahi-daemon
K10mqtt           S10boot           S35odhcpd         S80mountd
K50dropbear       S10linkit         S40fstab          S90mjpg-streamer
K85odhcpd         S10system         S50cron           S95done
K89log            S11sysctl         S50dropbear       S96led
K89yunbridge      S12log            S50telnet         S98sysntpd
K90network        S12rpcd           S50uhttpd         S99mqtt
K98boot           S19firewall       S60dnsmasq
K99umount         S20network        S60samba

別のLinuxマシンで「nopnop2002」のトピックをSubscribeしてから、LinkItを再起動しました。
システムがブートしてからWiFiが有効になる(APへの接続が完了する)のに大体10秒ぐらいかかるので、start-10までは表示されませ ん。
ネットワークを使用するアプリケーションは15秒ぐらい待った方がいいです。


logreadで確認するときちんと記録が残っています。
root@mylinkit:~# logread -e mqtt
Tue Jan  8 22:35:37 2019 daemon.info mqtt: start()
root@mylinkit:~#



mqttのスクリプトにboot()を追加してみました。
!/bin/sh /etc/rc.common

START=99
STOP=10

boot()
{
        logger -p daemon.info -t mqtt "boot() start"
}

start()
{
        logger -p daemon.info -t mqtt "start()"
        mosquitto_pub -h broker.hivemq.com -p 1883 -t "nopnop2002" -m "start-0"
        sleep 5
        mosquitto_pub -h broker.hivemq.com -p 1883 -t "nopnop2002" -m "start-5"
        sleep 5
        mosquitto_pub -h broker.hivemq.com -p 1883 -t "nopnop2002" -m "start-10"
        sleep 5
        mosquitto_pub -h broker.hivemq.com -p 1883 -t "nopnop2002" -m "start-15"
        sleep 5
        mosquitto_pub -h broker.hivemq.com -p 1883 -t "nopnop2002" -m "start-20"
}

stop()
{
        mosquitto_pub -h broker.hivemq.com -p 1883 -t "nopnop2002" -m "stop"
}

LinkItを再起動しましたが、start()が動かなくなってしまいました。
logreadで確認するとboot()の記録だけが残っています。
root@mylinkit:~# logread -e mqtt
Tue Jan  8 22:40:24 2019 daemon.info mqtt: boot() start
root@mylinkit:~#

boot()とstart()は同時には使えないようです。



以下のコマンドでサービスを無効にすることができます。
root@mylinkit:/etc/init.d# /etc/init.d/mqtt disable

/etc/rc.dからs99mqtt と k10mqtt が無くなります。
root@mylinkit:~# ls /etc/rc.d
K10mjpg-streamer  S00sysfixtime     S20network        S60dnsmasq
K50dropbear       S10boot           S20yunbridge      S60samba
K85odhcpd         S10linkit         S35odhcpd         S61avahi-daemon
K89log            S10system         S40fstab          S80mountd
K89yunbridge      S11sysctl         S50cron           S90mjpg-streamer
K90network        S12log            S50dropbear       S95done
K98boot           S12rpcd           S50telnet         S96led
K99umount         S19firewall       S50uhttpd         S98sysntpd

続く....