SORACOM LTE-M Button for Enterprise에서 위치 정보를 검색해 보았습니다.

12667 단어 SORACOMLTE-M
SORACOM LTE-M Button for Enterprise에서 위치 정보를 얻을 수 있게 되었으므로 조속히 사용해 보았습니다
우선 SORACOM 사용자 콘솔에서 SORACOM LTE-M Button for Enterprise 주문
외형은 씰이 붙지 않은 LTE-M Button powered by AWS군요...

1. SIM 그룹



SIM 그룹을 적절하게 만들고 그룹에 Button을 속합니다.


2. 간이 위치 측위 기능을 사용하기 위한 설정



SIM 그룹의 기본 설정에서 SORACOM Air for Cellular 설정을 열어 간이 위치 측위 기능을 ON으로 합니다.


또한 바이너리 파서 기능을 활성화하고 형식에 @button을 입력하십시오.


SORACOM Hervest를 ON으로 설정
이 상태에서 버튼을 누르면 Hervest에 데이터가 등록됩니다.
Hervest에서 보면 ↓와 같은 느낌으로 데이터가 등록되었습니다.


데이터
1차 처리된 데이터


{"clickType":2,"clickTypeName":"DOUBLE","batteryLevel":1,"binaryParserEnabled":true}
{"clickType":2,"clickTypeName":"DOUBLE","batteryLevel":1,"binaryParserEnabled":true,"$metadata":{"locationQueryResult":"success","location":{"lat": 35.980014321805754,"lon":139.75467681884766}}}


3. SORACOM FUNK 설정



SIM 그룹의 기본 설정에서 SORACOM Funk를 켜십시오.
AWS Lambda에 데이터가 날 수 있도록 ↓처럼 설정해 보았습니다.


자격 증명은 풀다운 메뉴에서 새로 생성됩니다.


함수의 ARN은 Funk에서 호출하려는 AWS Lambda의 ARN을 입력합니다.
Lambda 함수를 만들면 APN이 표시되므로 해당 값을 복사하여 입력합니다.

Lambda에서 다음과 같은 코드를 작성해 보았습니다.
from __future__ import print_function
import boto3
import os
import json
import logging
import dateutil.parser
from datetime import datetime, timedelta
import xml.etree.ElementTree as ET
import urllib.request

logger = logging.getLogger()
logger.setLevel(logging.INFO)
ses = boto3.client('ses')
from_address = "送信元のメールアドレス"
to_address = []
to_address.append("送信先メールアドレス")

def lambda_handler(event, context):
    # Hervestのデータに相当する部分はeventに入ってるようです
    clickType = event["clickTypeName"]
    batteryLevel = event["batteryLevel"]
    # 位置情報を含めた細かい値はcontext.client_context.customに入るみたいです
    lat = context.client_context.custom["location"]["lat"]
    lon = context.client_context.custom["location"]["lon"]
    imsi = context.client_context.custom['imsi']

    # 取得した位置情報をyahoo Mapに渡して該当する場所を取得してみました
    apiUrl = 'https://map.yahooapis.jp/geoapi/V1/reverseGeoCoder?lat=' + str(lat) + '&lon=' + str(lon) + '&appid=' + os.environ['yahooMapApi']
    response = urllib.request.Request(apiUrl)
    with urllib.request.urlopen(response) as res:
        data = res.read()
    root = ET.fromstring(data)
    titl = root[1][0][1].text
    # googleマップ用のURLも生成してみました
    mapUrl = 'http://maps.google.co.jp/maps?q=' + str(lat) + ',' + str(lon)
    body = "\n" + titl + " にいます\n" + mapUrl

    # ボタンから送られるデータには時刻情報がないみたいなのでLambda実行時の時間を使っています
    ts = datetime.now() + timedelta(hours=9)
    ts = ts.strftime('%Y/%m/%d %H:%M:%S')

    # clickTypeによって処理の条件わけができます
    if (clickType == 'SINGLE'):
        subject = 'SINGLE'
        body = str(ts) + body
    elif (clickType == 'DOUBLE'):
        subject = 'DOUBLE'
        body = str(ts) + body
    elif (clickType == 'LONG'):
        subject = 'LONG'
        body = str(ts) + body
    else:
        subject = 'failed'
        body = 'failed'

    # 例えばSES経由で位置情報を送信できます
    ses.send_email(Source=from_address,
        Destination={'ToAddresses': to_address},
        Message={'Subject': {'Data': subject}, 'Body': {'Text': {'Data': body}}})

확인을 위해 스마트 폰의 GPS 위치 정보와 비교해 보았습니다.
휴대 기지국이 많은 곳이라면 그렇게 큰 어긋남은 없을 것 같습니다.
간단하지만 GPS없이 거친 위치를 알기 때문에 편리하다고 생각합니다.


위치
스마트 폰 (moto g7 power)의 GPS 데이터
버튼의 간이 위치 측위 기능 데이터


가스가베역
35.9801048556836,139.7520915232467
35.980014321805754,139.75467681884766

좋은 웹페이지 즐겨찾기