#あらすじ
SORACOM LTE-M Button を使って、勤務開始と勤務終了を知らせるボタンを作りました。
ボタンを押すと、 Lambda が動いて Slack が飛びます。
えっ、「そんなの Slack だけでいいじゃないか」って?
なんと SORACOM LTE-M Button を使うことで、ちゃんと自宅にいることが伝えられるのさ!
位置情報を取得できるからね!
さぁ、君もワンクリックで上司に連絡、はじめよう!
あっ、スマホでも位置情報取得はできるってツッコミは勘弁してね(・ω<)
#なぜ SORACOM LTE-M Button ?
主な理由は2つです。
- 最近 SORACOM LTE-M Button を買ったから試してみたかった。
- ちょうど Try! SORACOM キャンペーンがやっていて、題材が Stay at Home だった(ホンネ)。
在宅ワークだと、毎朝上司に連絡取るじゃないですか?(うちだけ?)
SORACOM LTE-M Button を使えば、それをワンクリックで出来ちまうわけです!
#機能概要
機能は2つのみ!
- 出勤の挨拶をする(位置情報付き)
- 退勤の挨拶をする(位置情報付き)
ちなみに LTE-M Button は、シングルクリック、ダブルクリック、ロングクリックを判断できるので、
もう一つ機能を足すことも出来ます。
#構成
以下の図のような構成にしました。
我ながらめっちゃ単純!
公式のチュートリアルやったから Slack の送り方も知ってるし、余裕だな〜
と、最初は思っていました...
#簡易位置測位機能との戦い
※緯度と経度を送るのに手こずったのは、ぼくがドキュメントをちゃんと読まないせいです。
公式のドキュメントはちゃんと読もう!(教訓)
(ぼく)「位置情報を取得するにはどうすればいいのかな〜」
SORACOM ユーザーコンソールで「簡易位置測位機能」を ON に設定するだけです。
参考:https://blog.soracom.jp/blog/2019/08/01/location-function-release/
(ぼく)「それだけでいいのか!簡単ジャン!」
(ぼく)「...あれ?緯度と経度がどこにあるかわからないぞ、 event じゃ取り出せないし...ドコ?」
ここで2時間ぐらい格闘しました()
ドキュメントを読み直し、ようやく答えにたどり着きました...
lat と lon は context の中にあります。
参考:https://dev.soracom.io/jp/docs/location_service/
context.client_context.custom で json が取り出せます。
先駆者様:https://qiita.com/kkimura/items/c33962e426e84720dc31
公式様と先駆者様、いつもありがとうございます🙏
#SORACOM の設定
簡易位置測位機能
を ON
!
バイナリパーサー
には @button
を選択!
SORACOM Funk の設定は、ほぼチュートリアルのままです!
参考:https://dev.soracom.io/jp/start/funk_aws_lambda/
#Lambda の中身
import json
import urllib.request
def lambda_handler(event, context):
customData = context.client_context.custom
clickType = event["clickType"]
lat = customData["location"]["lat"]
lon = customData["location"]["lon"]
if clickType == 1:
post_slack_hello(lat, lon)
elif clickType == 2:
print(clickType)
elif clickType == 3:
post_slack_seeyou(lat, lon)
else:
print("No clickType")
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
def post_slack_hello(lat, lon):
message = '''おはようございます。''' + '\n' + '''緯度: ''' + str(lat) + '''経度: ''' + str(lon) + '''の場所から仕事をしています。'''
send_data = {
"username": "GabD",
"text": message,
}
send_text = "payload=" + json.dumps(send_data)
request = urllib.request.Request(
"https://hooks.slack.com/services/{取得した Webhook URL}",
data = send_text.encode('utf-8'),
method = "POST"
)
with urllib.request.urlopen(request) as response:
response_body = response.read().decode('utf-8')
def post_slack_seeyou(lat, lon):
message = '''お疲れ様でした。''' + '\n' + '''緯度: ''' + str(lat) + '''経度: ''' + str(lon) + '''の場所での仕事を終わります。'''
send_data = {
"username": "{お名前}",
"text": message,
}
send_text = "payload=" + json.dumps(send_data)
request = urllib.request.Request(
"https://hooks.slack.com/services/{取得した Webhook URL}",
data = send_text.encode('utf-8'),
method = "POST"
)
with urllib.request.urlopen(request) as response:
response_body = response.read().decode('utf-8')
{お名前} と {Webhook URL} は適宜読み替えてください。
ランタイムは Python 3.7
です。
customData = context.client_context.custom
lat = customData["location"]["lat"]
lon = customData["location"]["lon"]
この部分で位置情報を取得しています(一番苦労したところなので何度も言います笑)。
それ以外はほぼチュートリアル通りです。
緯度と経度で場所を伝えるなんて、どんなプレイなんだ...?(我ながら)
送った緯度と経度は緯度経度地図を使って調べてもらいましょう笑
https://fukuno.jig.jp/app/printmap/latlngmap.html#5/35.362222/138.731389/&base=std&ls=std&disp=1&vs=c1j0l0u0f1
#感想
初めて SORACOM LTE-M Button を使って「オリジナルモノづくり」してみましたが、 Funk の便利ですね!
FaaS サイコー!!
次は、もう少し凝ったモノづくりに挑戦するぞ〜