myThingsやSORACOM,Lazuriteでイノシシわなの監視装置をつくる

#イントロ
イノシシやシカなどが農作物や樹木への被害をあたえる、いわゆる獣害がふえています。
今回は柵をつかったワナが作動したときに、自分の携帯メールに通知をとばす仕組みを考えてみました。
![s_IMG_all.jpg](https://qiita-image-store.s3.amazonaws.com/0/51786/c0dcc8a9-62a8-fc21-a007-ee730941d802.jpeg)

#参考、謝意
メーカーの公式情報以外に下記投稿を参考に作成しています。大変参考になりました。感謝です！！
http://qiita.com/dietposter/items/068019ee53252206a6bf
http://qiita.com/masato/items/f9be4a15216fe29de7fb
http://homepage6047.sakura.ne.jp/
狩猟自体は狩猟免許がないとできません。今回は免許をもっているわたしの嫁とその師匠に協力してもらいました。こちらも感謝です。

#ワナのイメージ
今回は箱ワナといわれる形状のワナに対応できる装置をつくることにしました。
ワナは人が住んでいる場所から数100メートルくらいはなれた山林に点在しています。
ワナの状態は毎日見に行くことになりますが、ワナが作動していることがわかれば、見回りのタイミングや順番などは工夫ができるようになります。
![s_IMG_6256.jpg](https://qiita-image-store.s3.amazonaws.com/0/51786/3ebab0b6-f2c3-5ced-1c1b-cd480cdce7ea.jpeg)


#構成
おおまかな構成は次のようになります。
ゲートウェイとインターネットの接続は、いつでもどこでも使えるように3Gで接続したかったのでRaspberry Pi + SORACOMを使うことにしました。
センサーは、なるべく**省電力**かつゲートウェイまで**遠距離通信**ができるものにしたかったので、ArduinoライクなIDEをもった省電力マイコンキットで[BP3596A](http://www.rohm.co.jp/web/japan/products/-/product/BP3596A)というローム製のサブギガ通信モジュールが使えるラピスセミコンダクタのLazuriteをつかってみました。

![スクリーンショット 2015-11-30 16.15.24.png](https://qiita-image-store.s3.amazonaws.com/0/51786/7bb29d3b-5267-f2fb-04d9-e27e76abf1bd.png)

####ゲートウェイ
* Raspberry Pi 2 model B
* [Lazurite Pi Gateway](http://www.lapis-semi.com/lazurite-jp/products/lazurite-pi-gateway)
* ボタン電池 CR1220
* [SORACOM Air](https://soracom.jp/services/air/)
* [FS01BU](http://www.fsi.co.jp/mobile/plusF/products/FS01BU.html)
* Anker ASTRO M3 給電用

####センサー
* [Lazurite Sub-GHz](http://www.lapis-semi.com/lazurite-jp/product/basic.html)
* [リードスイッチ MC-14A](http://akizukidenshi.com/catalog/g/gP-04025/)
* DC電池ボックスと電池

####クラウド
* [IDCFチャンネル](http://www.idcf.jp/cloud/iot/)
* [myThings](http://mythings.yahoo.co.jp/)

#ゲートウェイの設定
Raspberry PiとLazurite Pi Gateway, BP3596A, ボタン電池(CR1220)を接続します。

![s_IMG_GW.jpg](https://qiita-image-store.s3.amazonaws.com/0/51786/883a4d04-4e75-fd70-f856-254b3969f929.jpeg)


###Raspberry Piの設定
[Lazuriteのダウンロードサイト](http://www.lapis-semi.com/lazurite-jp/download)よりRaspberry Piの起動イメージをDownloadし、起動用のSDカードにイメージを書き込んで起動し、Raspberry Pi 2の初期設定をしていきます。

``` bash
$ sudo raspi-config
```

ファイルシステムの拡張とタイムゾーンの変更を行います。

* Expand Filesystem > Select
* Internationalisation Options > Change Timezone > Asia > Tokyo

再起動します。

``` bash
$ sudo reboot
```

Raspberry Piを**ネットに接続**したうえで、以下の設定をしてください。

パッケージの更新とアップグレードをします。

``` bash
$ sudo apt-get update
$ sudo apt-get upgrade
```

NTPサーバーを日本のサーバーに設定します。

```bash:/etc/ntp.conf
#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst
pool ntp.nict.jp iburst
```

ntpdの再起動をして時間あわせをします。

``` bash
$ sudo /etc/init.d/ntp restart
Stopping NTP server: ntpd.
Starting NTP server: ntpd.
```

RaspberryPi起動時にSub-GHzのドライバをインストールするように設定します。

``` /etc/init.d/subg.sh
#!/bin/bash
### BEGIN INIT INFO
# Provides:		mac008008
# Required-Start:	$local_fs
# Required-Stop:	$local_fs
# Default-Start:	2 3 4 5
# Default-Stop:		0 1 6
# Short-Description:	Lazurite Sub-GHz
### END INIT INFO

echo Installing Sub-GHz..
sudo insmod /home/pi/driver/sub-ghz/DRV_802154.ko
```

``` bash
$ sudo chmod 755 /etc/init.d/subg.sh
$ sudo insserv -d /etc/init.d/subg.sh
```

###SORACOMの設定
[@diteposter](http://qiita.com/dietposter/items/068019ee53252206a6bf)さんの投稿をベースに設定します。


#センサー側の設定
センサー側はリードスイッチのOFF/ONを検知して、ゲートウェイに通知する仕組みをつくります。
リードスイッチは、スイッチ部分に磁石が近づくことでスイッチがONになります。
イノシシの柵に磁石を取り付けることで、通常はスイッチはON状態ですが、ワナが作動すると柵が降りるため磁石とスイッチがはなれスイッチがOFFになります。

![s_IMG_Sensor2.jpg](https://qiita-image-store.s3.amazonaws.com/0/51786/d7679256-7065-4b5d-b31b-a9513dd244eb.jpeg)


Lazurite Sub-GHzに通信モジュールとリードスイッチを取り付けます。
リードスイッチは**GND**と**2番PORT**に接続します。
リードスイッチには極性はないのでどちらにつけても大丈夫です。

###Lazurite IDEのインストール
Lazurite IDEはWindows版のみ配布されています。
IDEのインストール方法は[こちら](http://www.lapis-semi.com/lazurite-jp/download)を参照ください。

###Lazurite Sub-GHz側プログラム
通常状態では26番ポートに標準でアサインされているLEDを青色に点灯させます。
リードスイッチがOFFになった場合、26番のLEDをOFFにして、Gatewayがわに"gate_open"の文字列を送信します。
[サンプルコード](https://github.com/mac008008/wildboar/blob/master/Gateopen_Subghz.c)はこちらになります。6行目のHOST_ADDRESSはgateway側のSubGHz通信モジュールのシリアル番号の下4桁になります。

![s_IMG_module.jpg](https://qiita-image-store.s3.amazonaws.com/0/51786/78d9c44c-e0e9-3906-db5f-10020c22926a.jpeg)

###プログラムの反映
IDEを起動し、Lazurite Sub-GHzのmicro USBインターフェースとIDEのインストールされたPCを接続します。
![image](https://qiita-image-store.s3.amazonaws.com/0/51786/810a748f-5cb9-86d6-534a-5e7b5006b0c3.png)

ファイルから適用したいファイル名を選択し、適用先の環境を下記の通り設定し、ビルドしたうえでマイコンボードに書き込みします。

ツール>マイコンボード>Lazurite Sub-GHz Rev2
ツール>オプション>Lazurite Sub-GHz
ツール>シリアルポートから適切なポートを設定ください

![image](https://qiita-image-store.s3.amazonaws.com/0/51786/a7a552c0-e0f1-e5a0-7247-8ee51860e6b9.png)

下記のメッセージがでてリードスイッチに磁石を近づけるとPort26が点灯すれば設定完了です。
`
Success ML620Q504 reset
`

#IDCFチャンネルサーバを構築する
myThingsを自作デバイスと接続するためのプロトコルゲートウェイとして、IDCFクラウド上にIDCFチャンネルサーバを構築します。設定は@masatoさんの[情報](http://qiita.com/masato/items/f9be4a15216fe29de7fb)を参考にしてください。
今回はtrigger-1をつかってmyThingsに通知を行うため、サーバのグローバルIPアドレスとtrigger-1のUUIDとTOKEN情報をメモしておいてください。

###myThingsでIDCFチャンネルを認証する
構築したIDCFチャンネルサーバをmyThingsで認証します。
こちらも@masatoさんの[情報](http://qiita.com/masato/items/3d958b4b427020b83b94)をそのまま参考にしました。

#ゲートウェイの設定
ゲートウェイ側の設定に戻ります。
センサー側と接続して"gate_open"の文字列を受信したときに、IDCFチャンネルサーバにメッセージを送れるようにします。公式サイトで配布されているrubyのサンプルコードを改変したものが[こちら](https://github.com/mac008008/wildboar/blob/master/gateopen.rb)です。

「IDCF」チャンネルの[リポジトリ](https://github.com/mac008008/lazuriteGW)から`git clone`します。

```bash
$ cd ~/ruby
$ git clone https://github.com/mac008008/lazuriteGW
```

メモしておいたIDCFチャンネルサーバのグローバルIPアドレスとtrigger-1のUUIDとTOKENをgateopen.rbに書き込みます。

```~/ruby/gateopen.rb
	if str_buf == "gate_open" then
		uri = URI.parse ("http://{IP_Address}/data/{trigger-1 UUID}")
		Net::HTTP.start(uri.host, uri.port){|http|
			header = {
				"meshblu_auth_uuid" => "{trigger-1 UUID}", "meshblu_auth_token" => "{trigger-1 TOKEN}"
			}
			body = "gate_open"
			response = http.post(uri.path, body, header)
		}
		## print(sprintf("PANID=0x%04X, rxAddr=0x%04X, txAddr=0x%04X, Strings:: %s",myPanid,rxAddr,txAddr,str_buf))
	end
```

RaspberryPi起動時にgateopen.rbが起動するように設定しておきます。

#myThingsの設定

myThingsでtrigger-1が発火したときに、所定のアドレスにメールがとぶように設定します。

<img width="375" alt="image11.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/51786/6618b8bc-f401-5559-eb27-a794799ecf42.jpeg">


#結果
まずはプロトタイプということで、ジップロックのなかにDC電源付きのLazuriteとシリカゲルをいれ、リードスイッチを柵に設置した磁石に接するように固定しました。
![s_IMG_Sensor3.jpg](https://qiita-image-store.s3.amazonaws.com/0/51786/d70414f7-92d6-18cc-8adc-6de2f3843cb0.jpeg)

箱ワナの設置されている柵から100m程度はなれた箇所にゲートウェイをおいた状態で、手動でワナを動作させました。
![IMG_63091.jpg](https://qiita-image-store.s3.amazonaws.com/0/51786/a18c6a02-daad-dfa1-f0b3-959a23ac0c72.jpeg)

以下のようにメッセージが送信されました！
<img width="375" alt="image15.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/51786/08f0c679-1b8c-9bb3-3a0f-7ee29fc799eb.jpeg">

見通しがよい場所だとかなりサブギガ帯の通信がとぶようですが、地形や樹木の状態などで大きく状況が変わるようでした。
今回はあまりアンテナの設置や消費電力、長期的に設置するための工夫などまではできませんでしたが、もうすこしフィールドで試行錯誤してみたいとおもいます！