タグ「bikesecurity」が付けられているもの


車バイクセキュリティ発報を LINE 通知へ変更 - SORACOM LTE-M Button Plus と AWS Lambda/SNS

昨年設定したバイクとカーセキュリティのメール発報を、LINE 通知に変更してみました。

仕組は、セキュリティ装置にリレー接続した SORACOM LTE-M Button Plus と SORACOM Funk で Amazon Lambda へ飛ばし、さらに LINE Notify 宛にリクエスト発行する形です。

以前ボタンを購入した際、ちょうどソラコム側で簡単メール通知機能が用意されたので、そのまま使ってました。
ただ、通知到着までが、かなり遅いんですよね(早いときもある)。

  • SORACOM Funk
  • Amazon Lambda
  • Amazon SNS (SMS 通知、Eメール通知)
  • LINE Notify (LINE 通知)

使用したサービスは、これだけ。
ついでに Amazon SNS 使って SMS 通知も機能いれてみました。

LINE 以外にもインタフェースが用意されてれば通知はできます。Slack への通知は簡単かな。Facebook Messenger は面倒そうだったのでやめました。

色々試しましたが Amazon SNS 経由の SMS 通知より、LINE Notify が早いですね。

 

LINE、Amazon AWS、SORACOM 環境準備

それでは、サービス側 LINE, Amazon AWS, SORACOM の環境を準備していきます。

  1. LINE Notify
  2. Amazon IAM
  3. Amazon SNS
  4. Amazon Lambda
  5. SORACOM 認証ストア
  6. SORACOM Funk

LINE Notify準備

以下 URL からマイページへログインし、自分への通知用にトークンIDを発行、メモしておきます。
LINE をメールアドレスでログインできる様に変更しておく必要があります。

  • https://notify-bot.line.me/ja/
  • 「トークン名」:(任意)
    ※LINE 通知した際にメモ程度に表示されます。私は button にしました。
  • 「通知するトークルーム」:「1:1 でLINE Notify から通知を受け取る」を選択
    ※複数人で受ける場合はグループ宛もできます

トークンIDは漏れると誰でも通知できる様になっちゃうので注意。漏れたら別のトークンIDの再発行も可能です。

Amazon AWS

リージョン選択

どこの国の AWS で動かすかですが、私は ap-northeast-1 (東京) で動かしています。

IAM

SORACOM Funk 用に「Amazon IAM」の「アクセス管理ーユーザー」で、アクセスキーとシークレットを作成します。

アクセスキーIDとシークレットは、後の SORACOM サイトへ登録するので、メモしておきます。

SNS

Amazon SNS では、メール通知、SMS 通知の設定を行います。

  1. 「トピックの作成」で、トピック作成します。
    https://ap-northeast-1.console.aws.amazon.com/sns/v3/home?region=ap-northeast-1#/topics
    「タイプ」は「スタンダード」。
    「名前」は、適当に。
    「表示名」は「名前」と同じ値に。私は「名前を」 "soracom-funk-app1" としました。
  2. 「サブスクリプション」で、メールアドレスと、SMS通知用に電話番号を登録します。
  3. 「プロトコル名」の所は、「Eメール」、「SMS」をそれぞれ選択して登録完了。
    ※ SMS、あまり多く発信すると拒否されるらしいので注意が必要です。
  4. 最後に、「トピック ARN」を、メモしておきます。
    ※ こんな感じの ARN 名です。
    「arn:aws:sns:??????????:???????:soracom-funk-app1」

Lambda

関数を作成して、プログラムを用意します。

  1. 「関数の作成」から関数を作成します。
    https://ap-northeast-1.console.aws.amazon.com/lambda/home?region=ap-northeast-1#/functions
    「関数名」は適当に。私は soracom-funk-to-line としました。
    「ランタイム」は、Python 3.8 を選択します。
    「アクセス権」は、「基本的な Lambda アクセス権限で新しいロールを作成」で進みます。
    「関数の作成」ボタンで登録を完了させます。
  2. 関数の ARN をメモします 「arn:aws:lambda:???????:???????:???????」
  3. 先に作成した LINE のトークンIDを環境変数へ登録します。
    「設定」の「環境変数」から「編集」ボタンを推して「キー」にアクセスキーID、「値」にシークレットキーを登録します。
  4. ソースコードを "lumbda_function.py" ファイル記述していきます。
    変更すると自動保存されますが、"Changes not deployed" と出ているので、「Deploy」ボタンで反映させます。
    いろんなサイトを参考に簡単な Python のプログラムコードを作成しました。
    TopicArn 部分は、Amazon SNS の ARN 名に変えてください。
    パクってつぎはぎだらけのコードで未使用のコメントアウト部分などあります。それと SMS の SenderID の付け方を調べてないので NOTICE と通知されます。
# -*- coding: utf-8 -*-
import os
import urllib.request
import urllib.parse
import urllib3
import boto3
sns = boto3.client('sns')
http = urllib3.PoolManager()
def get_message(data):
    clicktype = data['clickTypeName']
    if   clicktype == 'SINGLE':
        message = u'ALERT SINGLE'
    elif clicktype == 'DOUBLE':
        message = u'ALERT DOUBLE'
    elif clicktype == 'LONG':
        message = u'ALERT LONG'
    else:
        message = u'unkown'
    return message
def line_notify(msgx):
    url = "https://notify-api.line.me/api/notify"
    headers = {"Authorization" : "Bearer "+ os.environ['LINE_TOKEN']}
    data = urllib.parse.urlencode({"message" :  msgx}).encode('utf-8')
    request = urllib.request.Request(url, data=data, headers=headers)
    r = urllib.request.urlopen(request)
    print(r)
def slack_notify(msgx):
    url = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    msg = {
        "Content": msgx
    }
    encoded_msg = json.dumps(msg).encode('utf-8')
    resp = http.request('POST',url, body=encoded_msg)
    print(resp)
def sns_publish(message, subject):
#    message_attributes = {
#        'AWS.SNS.SMS.SenderID': {
#            'DataType': 'String',
#            'StringValue': 'AWS-SORACOM'
#        }
#    }
#       'MessageAttributes': message_attributes
    request = {
        'TopicArn': "arn:aws:sns:??????:??????:soracom-funk-app1",
        'Message': str(message),
        'Subject': str(subject)
    }
    sns.publish(**request)
def lambda_handler(event, context):
    batl = event['batteryLevel'] * 100
    posi = context.client_context.custom['location']['lat']
    posk = context.client_context.custom['location']['lon']
    message = get_message(event)
    subj = message
    message = message + '\nBat ' + str(batl) + "%"
    message = message + '\nhttps://maps.google.com/maps?q=' + str(posi) + ',' + str(posk)
#    if event['clickTypeName'] == 'LONG':
#        line_notify(message)
#    if event['clickTypeName'] == 'DOUBLE':
#        line_notify(message)
#    slack_notify(message)
    line_notify(message)
    sns_publish(message, subj)
    return

SORACOM 認証ストア

AWS へ接続する為の認証情報を登録します。

  1. 管理画面内の右上から「セキュリティ」を選択し「認証情報ストア」を開き、「認証情報を登録」します
  2. 「認証情報ID」、「概要」は任意文字
  3. 「種別」は「AWS 認証情報」を選びます
  4. 「AWS Access Key ID」、「AWS Secret Access Key」をそれぞれ登録します

SORACOM Funk

Amazon 側で準備した情報を登録していきます。
SORACOM管理画面のメニューから「SIM グループ」を選び無ければ新規作成し、SIMグループの設定に入ります。
https://console.soracom.io/#/groups?coverage_type=jp

  1. 「SORACOM Air for Cellular 設定」
    1. 「簡易位置即位機能」をON。
    2. 「バイナリパーサー」をON。
      フォーマットへ @button と文字を登録
  2. 「SORACOM Funk 設定」
    1. 「サービス」は、「AWS Lambda」を選択
    2. 「送信データ形式」は、「JSON」を選択
    3. 「認証情報」は、先に「SORACOM 認証ストア」で作成した認証情報を選択します。
    4. 関数の ARN をコピペ入力します。

これで準備は完了。

後はボタンを押して、SINGLE、DOUBLE、LONG と基地局位置のマップが LINE 通知されるかを確認。

  • 警戒ON:SINGLE
  • 警戒OFF:DOUBLE
  • 威嚇アラーム:DOUBLE
  • 本警報:LONG

私のセキュリテイ装置の場合は、こんな形で LINE Notify されますが、威嚇アラーム(DOUBLE)後、1分以内にすぐ本警報(LONG)の場合は LONG が無視されるので威嚇のときも注意が必要。

バイクの防犯セキュリティに IoT SORACOM を使って SMS・メール・電話通知

IoT 時代に合わせてバイク・車の防犯セキュリティ通報システムの見直ししてみました。

IoT とは:モノのインターネットね。ご飯ジャーとか冷蔵庫、エアコンとかがインターネットつながって便利になるって仕組み。

以前は、防犯システムに「モバイル通信ユニット( www.k-giken.com )」を取り付けてガラケーで通報システムをつくってたけど、ガラケーも古くなりホワイトプランのSIMも解約してしまいました。Arduino や Raspberry Pi など IoT とか言って流行り出してきた時は、バイクのセキュリティシステムでも作ろうかなと思っていたのですけどね。そんなこんなで、いつの間にか数年経過、ちょっと探したら既にありました(^-^;

維持費が安いので、IoT勉強がてら購入です。

20201125133947_0.jpg

SORACOM LTE-M Button Plus とは

購入したユニットは 「SORACOM LTE-M Button Plus」 です。

簡単に説明すると。

電池で動く、A接点入力の通報装置 !

もう少し細かく説明すると。

  • eSIM 内臓
  • KDDI LTE-M 網を使用でネットいらず (Wi-Fi や Bluetooth では無い、セルラーLPWA )
  • 単 4 乾電池 2 本で稼働、バッテリーいらず。
        数ある LPWA の中でも飛び切り消費電力の少ない LTE-M で セルラーLPWA というプレミアムな通信規格を使ってます。
  • A 接点入力端子あり (電圧入力はNGなのでリレー使うこと)
  • 本体 7,380 円 (税抜/送料別)  送料税混みで 9 千円程度
  • 月額 100 円 (簡易位置 ON の場合 +50円) (使い方によっては月額 0 円化可能)

送信できる信号は。 (https://dev.soracom.io/jp/aws_button/how-it-works/)

  • 接点 CLOSE 時間の違いで 3 種類の情報送信が可能
  • 接点ショートした際の位置情報 (GPS では無く LTE 基地局を元にした位置)
        なのでバイク探すには誤差が多きすぎるし、犯人がボタン押してくれないと意味無し w
  • 電池残量 0.25 / 0.5 / 0.75 / 1.0 の 4 段階

SORACOM Funk (外部クラウドサービスの API をコールするのに使用します)

  • メールであれば
    後述の SORACOM スマート設定のみ
  • SMSであれば
    Amazon Lambda
    Amazon SNS (SMS通知)
    Amazon SMS (メール通知)
  • 電話通報したければ
    Amazon Lambda
    Twilio KDDI

SORACOM LTE-M Button 本体には、ボタン一つと A 接点入力があるので、電池セットした後管理画面で機器登録し、A接点信号を入力するだけで動作します。
その先はあなた次第、夢のような装置。
凄いよね。

ついに SORACOM サービスだけで通報可能

つい先日 2020/11/17 のブログで「新機能「SORACOM LTE-M Button」デバイスのスマート設定機能」と発表があり SORACOM 社のサービスのみでメール通知ができる様になってしまいました。
他には、A接点は無いものの、GPS内蔵タイプも販売された様ですよ。10分に1回GPS位置送信、バッテリー持続7日、月額500円程度でしょうか。毎日乗ってUSB充電できる方であれば充電出来るし、これも使えるのかも。tileアプリで自転車さがして追跡したの見ましたけど田舎じゃアプリ使えないしね。

ただ、こまりました。こんな簡単に使えると IoT 勉強になりませんw

信号を入力できれば簡単に メール 通知できるのでお試しあれ。 
ボタンでAlexa 連携とか、つくればなんでも出来ますよ。

追記 2021/03/22 Lambda で関数を用意して LINE 通知、SMS 通知する様にしました。

監視システムなどなど

年間1,200円(簡易位置使う場合は+600円)と少しの通信料の維持費用で、リレーを使えばいろいろ監視できてしまいます。

  • カーセキュリティ・バイクセキュリティで通報
  • 玄関あいたら通報
  • トイレ流したら通報
  • 温度・気温・湿度が変化したら通報 (別商品で GPS や、各種センサー内蔵品も販売されてます)

可能性は無限大です。

バイクと車のセキュリティに接続して早速 SORACOM LTE-M Button の設定

化粧箱はなく、配送ダウンボールの中は袋な簡易梱包です。
本体は京セラ製です

20201125114655_0.jpg

電池いれます。裏側に電池を入れるだけ。あとは IEMI 番号のラベルが貼り付けてあります。

20201125114926_0.jpg

側面には A 接点端子。ショートさせればボタンを押したのと同じ動作ができます。ショートの長さで3種類 (SINGLE, DOUBLE, LONG) 判断です。

20201125114916_0.jpg

管理画面にログインし「SIM登録」をクリックします。

20201125122212_0.jpg

SORACOM から購入した端末が既に画面に出ているので、「受け取り確認」を押すだけで完了です。押した後は「キャンセル」して画面をとじます。

20201125122222_0.jpg

「直接入力」は必要なし。

20201125122316_0.jpg

状態が「準備完了」になりました。

20201125122542_0.jpg

左上のメニューから「LTE-M Button for Enterprise」を選択します。

20201125122602_0.jpg

「新規デバイス設定」を押します。

20201125122625_0.jpg

グループ名をきめます。私は VIPER 使ってるので vipsersecurity にしました。

20201125122722_0.jpg

位置情報(月額50円)も欲しいです。LTEアンテナ基地局を使った簡易的な位置情報です。

20201125122832_0.jpg

メール通知も有効化。警報用のメールアドレスを入力します。

20201125123215_0.jpg

通知文章を決めます。

メール通報時に利用可能なタグがこちらです。私としては十分な情報です。

  • SIM 毎に名付けた名称(初期はDSN値) : {{subscriber.tags.name}}
  • イベント名 (SINGLE, DOUBLE, LONG) : {{event.clickTypeName}}
  • バッテリー残量(%) : {{event.batteryLevelPercent}}
  • 座標(緯度) : {{context.location.lat}}
  • 座標(経度) : {{context.location.lon}}

デフォルト設定はこちら。

【件名】
ボタン {{subscriber.tags.name}} がクリックされました!
【本文】
ボタン {{subscriber.tags.name}} が {{event.clickTypeName}} クリックされました
      - 電池残量: {{event.batteryLevelPercent}} %
      - 緯度,経度: {{context.location.lat}},{{context.location.lon}} (簡易位置測位機能で表示)

以下の様に設定してみました。

座標の場合は q= で指定する様です。位置情報の末尾の ",20z" は、Google Maps の表示拡大値(1-20)指定。LTE 基地局をベースとした簡易位置情報なので、結構なズレありました。

【件名】
Alert! {{subscriber.tags.name}}
【本文】
{{event.clickTypeName}} https://maps.google.com/maps?q={{context.location.lat}},{{context.location.lon}},20z BAT{{event.batteryLevelPercent}}%

恐らく"ボタン"からSORACOMサーバ側に対しての通信情報は最小限なので、メール文面を増やしてもデータ量は増えないと思うけど、文字削ってアラート用にメールリストで見られる様に軽量化してます。検知情報としては文字無しタグのみの最小限の情報でも良いと思います。

メール本文の登録が終わったら、設定は完了です。

20201125123424_0.jpg

画面を見回って、情報確認します。

20201125123438_0.jpg

設定完了です。

あとはセキュリティ装置にリレー経由で接続して A接点をショートさせるだけ。

リレーは小型な配線付き5極リレーがエーモンやDEIなどで売られているけど、ちょっとマルツ電波行ったので作ってみました。リレーはオムロンの G6L-P1 12V です。

20201212 4極12Vリレー
20201212 4極12Vリレー

盗難防犯という意味では冗長性や即時性が必要です。メールだと俊敏じゃ無いので、後日、Twilio電話通報、SMS など Lambda 使って組んでみます。

追記 2021/03/22 Lambda で関数を用意して LINE 通知、SMS 通知する様にしました。