ニワトリ小屋からSORACOMデバイスを利用し、LINE通知させる仕組み
Wi-Fiなどの回線がない ニワトリ小屋から、温湿度を SORACOMデバイス ~ SORACOM Funk ~ Lambda ~ LINE というフローでデータを届けるための構成を記載する。
- 公開日
はじめに
このたび個人的に ニワトリ小屋を作ることになりました。
ただし、自宅からは少し離れた位置に土地をお借りしているため気軽に足を運ぶことが出来ません。
基本的にニワトリは暑さに弱いとされているため、実際作成したニワトリ小屋における温湿度が、どの程度になるのかデータ取得を考えました。
「温度」と「湿度」から「暑熱ストレス」の指標(THI)を計算し、一定の値を超過したら 家族の LINE に通知させるようにもしました。

構成図
以下がシステム全体の構成図となります。
図を押すと別タブが開きます。
図の破線の矢印は、Lambda の非同期呼び出し(InvocationType=Event)を表します
データの流れ
図の中の番号は、次の順に対応します。
| # | イベント | 詳細 |
|---|---|---|
| 1 | センサー から SORACOM に送信 | GPS マルチユニット SORACOM Edition が温度・湿度・電池残量を計測し、SORACOM 回線でクラウドへ送信 |
| 2 | SORACOM から Lambda呼出 | SORACOM Funkという機能 で IAM Roleを引受け、TelemetryReceiver(Lambda) を起動 |
| 3 | テレメトリ保存と通知トリガ | TelemetryReceiver(Lambda) が TelemetryTable(DynamoDB) へ書込む。書込み後、デバイス異常のデータを除き NotificationEngine(Lambda) を 閾値判定のため呼出し |
| 4 | LINE への通知 | 通知が必要となる場合、NotificationEngine(Lambda) が SSM Parameter Store から LINE トークンを取得し、LINE Messaging API の broadcast で 通知 |
| 5 | 30分毎の 監視 | 30分毎に EventBridge で PeriodicMonitor(Lambda) を起動。データの途絶や復帰の判定、毎朝の定時通知など LINE 通知。併せて、このタイミングでニワトリ小屋付近の天気情報も取得し、外気温(実況値とアメダスの実測)を TelemetryTable(DynamoDB) へ保存 |
| 6 | ブラウザから 画面の表示 | CloudFront でリクエストを受け、S3にある静的画面を返却、確認内容については API Gateway へ振分け |
| 7 | 画面から データの参照 | API Gateway で Cognito の JWT を検証、ReferenceApi(Lambda) で DynamoDB に保存されている計測値と保存済みの天気を返却 |
機能詳細
1. 物理デバイス
GPS マルチユニット SORACOM Edition
小屋には商用電源がなく、Wi-Fi も届かないため、「充電池で動き、自分で回線を持つ」といった機器を探し、今回は「GPS マルチユニット SORACOM Edition」 を利用することにしました。
こちらの物理デバイスは、温度・湿度・加速度・GPS のセンサーと、LTE Cat.M1(LTE-M)の通信モジュール、1,500 mAh のバッテリーを内蔵しています。 充電は microUSB で、本体は約 83 × 49 × 13.8 mm、約 63 g です。
はんだ付けや筐体設計なども必要とせず、SIM が最初から入っているので、届いた日に送信まで動きます。 送信間隔などは SORACOM のコンソールから変えることが可能で、送られてくるデータに関しても コンソール画面から確認することも出来ます。

(出典: SORACOM ストア GPS マルチユニット SORACOM Edition、2026-09-11 確認)。
デバイスで送れるデータ情報
このデバイスが送るデータは JSON で、フィールドは以下のとおりです。 今回は小屋に設置するという背景より「温度」「湿度」「電池残量」「電波強度」といったものを利用する用にしました。
| フィールド | 意味 | 値の範囲 |
|---|---|---|
| temp | 温度(℃) | -20 〜 60 |
| humi | 湿度(%) | 0 〜 100 |
| bat | 電池残量 | -1: 充電中、1 〜 3: 残量の段階 |
| rs | 電波強度 | -1: 圏外、0 〜 4 |
| lat / lon | 緯度・経度(度) | null は測位失敗 |
| x / y / z | 加速度(mG) | -8128 〜 8128 |
| type | 送信種別 | 0: 定期送信または加速度割り込み送信、1: 手動送信、-1: デバイスで一時的な問題 |
(出典: GPS マルチユニット SORACOM Edition のデータフォーマット、2026-09-11 確認)
2. データ転送
転送における考え方の方針
利用者は家族 2 人で、基本的に 1 時間に 1 件のデータが来るだけの仕組みです。そのため、データを受けて保存し しきい値を判定、LINE に送るなどの処理は、すべて AWS のサーバーレスサービスに任せ、管理するサーバーをゼロにしました。
もう 1 つは、長期のアクセスキーを作らず、デバイス側から AWS を呼ぶ経路は一時的な認証情報で呼び出すような構築を考えました。
SORACOM Funk から Lambda を直接呼出し
SORACOM には、デバイスのデータをクラウドへ渡すサービスが複数あります。SORACOM Beam を使って HTTP に変換し、API Gateway を経由して Lambda へ渡す構成も取れますが、今回は宛先が Lambda だけなので、間に置くものが要りません。 そのため SORACOM Funk を選択しました。Funk を利用することで、デバイスのデータを引数にして Lambda 関数を直接呼び出すことが可能となります。
クロスアカウントの設定
SORACOM Funk から Lambdaを呼び出すためには、Lambda を呼びだせる権限の入ったロールを、私の AWS アカウントに作成します。
このロールには 2 つの設定をしていきます。
1 つ目は「誰が使えるか」という部分で、SORACOM 社の AWS アカウントを信頼し、且つ 外部 ID(ExternalId)が一致することを条件にして、このロールを利用できるのは SORACOM 社の AWS アカウント だけという条件を付与します。
ここでの 外部 ID(ExternalId) とは、私が決めた任意の文字列で、同じ値を SORACOM 側の Funk 設定にも登録することで、両方が一致したときだけロールを引き受ける確認のために利用します。
2 つ目は「何ができるか」という部分で、Lambda に対してlambda:InvokeFunction だけを許可するように設定をしています。
準備0 / 3
(出典: SORACOM Funk で AWS Lambda を利用する、2026-09-14 確認)
3. 保存
受信したデータから THI(温湿度指数)を計算して DynamoDB に保存
Lambda は、受信した温度と湿度のデータから THI を計算してから DynamoDB に保存します。
THI(Temperature-Humidity Index、温湿度指数)とは、温度と湿度を組み合わせた家畜の熱ストレスの指標です。温度だけを見るよりも、湿度の影響を含めて暑さを評価できます。
(出典: 暑熱ストレスが産業動物の生産性に与える影響、農研機構 九州沖縄農業研究センター 阪谷美樹、2014 年、2026-09-13 確認)。
4. 判定・通知
LINE Messaging API の broadcast で家族に送信
通知先は LINE を利用します。単純に家族が毎日開いているアプリなので、専用アプリやメールより確実に見られるからです。
送信は Messaging API の broadcast です。公式アカウントを友だち追加した全員(今回は家族)に同じ内容を通知させることが可能です(出典: LINE Messaging API メッセージを送信する、2026-09-11 確認)。
判定基準
通知基準に関しては、「温度」と「湿度」の組み合わせから THI の閾値を設定して、超過した場合 通知をするロジックにしました。
以下「温度」と「湿度」を動かすと、どの指標で判定され、通知が送られるかを確認できます。
温度 22.0 ℃・湿度 60 % を受信した代表状態です。
THI 68.6 はしきい値未満
5. ダッシュボード
LINE の通知は異常を知らせるものなので、「いま小屋の温度は何度か」「この 1 週間の経過はどうだったか」については別に画面を用意しました。
React と TypeScript で作り、S3 に置いて CloudFront から配信しています。Cognito を利用すること家族のログインを管理し、ログイン時にAPI Gateway 経由してデータを読み込みしています。
フロントエンドには、小屋内気温と THI の推移をグラフ。ニワトリ小屋付近の、その日の天気予報、そして機器の状態を表示させています。



まとめ
今回離れた土地にあるニワトリ小屋の温湿度を、 LINE に通知する仕組みを作りました。
オフグリッド(電力会社の送電に繋がっていない状態)の環境のため、ある程度縛りがある中で「まずは何かしらの値を取得したい」という思いで、今回の構成を考えました。
いまのところ 2026-07-26 に受信を始めてから 46 日間、1 時間に 1 回の受信が毎日 23〜24 回届き、Lambda のエラーは 0 件といった運用状況になっています(2026-09-10 確認)。
通知の次について
正直、今回の通知だけでは「暑くなった」しか分かりません。ただし、数字が無ければ「涼しくなった気がする」だけで終わってしまう状態からは、脱却したと思っています。
取得した値と、ニワトリの健康状態などを突き合わせることによって、意味のあるデータを取得していければいいかと考えています。