SORACOM Enterprise Button의 간이 위치 정보를 이용해 지역 밖에서의 누락 실수를 방지(CloudFunctions/Python판)
9415 단어 SoracomFunkSORACOMcloudfunctions
TL; DR (정리)
장비
SORACOM Enterprise Button (초기 버튼 등록이 완료된 것으로 합니다)
주로 사용한 것
SORACOM Funk
CloudFunctions(GCP)
pyjwt (JWT (Json Web Token) Python 버전 라이브러리)
구축 내용
SORACOM Enterprise Button을 누를 때 SORACOM Funk를 통해 CloudFunctions를 시작합니다.
CloudFunctions에서 위치 정보를 가져옵니다. (이 때 jwt 사용)
지역외이면 동작, 그렇지 않으면 동작하지 않게 합니다.
판단할 로직 부분만 기사로 합니다.
구축 절차
CloudFunctions 설정
나중에 SORACOM 콘솔에서 시작 함수를 지정하기 위해 먼저 CloudFunctions를 설명합니다.
CloudFunctions 화면에서 함수 만들기를 선택하고 다음과 같이 입력합니다. 여기서 ★ 부분의 URL은 SORACOM Funk 설정에서 사용하기 위해 취득해 둡니다.
함수의 이름은 뭐든지 좋지만, enterprise_button
그리고라도 해 둡시다.
기본 Node.js도 좋지만 Python에서도 설명 할 수 있으므로 Python을 선택했습니다.
계속 requirements.txt 편집입니다.
pyjwt를 사용하기 위해 requirements.txt
에 이하 기재를 합시다. (여기에 기재한 내용이 pip install되는 이미지입니다)
CloudFunctions(requirements.txt)pyjwt
다음은 실행 함수입니다. 기본 시작 함수 이름이 hello_world
에서 exec_button
로 변경되었으므로,
실행 함수 이름과 환경 변수 설정이 필요합니다.
SORACOM 설명 그럼, http 헤더에 x-soracom-token
가 있어, 그것을 JWT로 디코드할 수 있다고 하는 것.
그래서 이렇게 됩니다.
CloudFunctions(main.py)import jwt
import os
def exec_button(request):
if 'x-soracom-token' not in request.headers:
return 'Not from soracom button.'
# Decode jwt token. (algorithm : RS256)
data = jwt.decode(request.headers.get("x-soracom-token"), verify=False)
if not is_inside_area(data['ctx']['location']):
return 'Out of area.'
# Write your code here.
return 'Inside area.'
def is_inside_area(position):
northwest = {'lat': float(os.environ.get('northwest_lat', 1.0001)), 'lon': float(os.environ.get('northwest_lon', 178.0001))}
southeast = {'lat': float(os.environ.get('southeast_lat', 0.0001)), 'lon': float(os.environ.get('southeast_lon', 179.0001))}
if 'lat' not in position or not(isinstance(position['lat'], float)):
return False
if not(southeast['lat'] <= position['lat'] and position['lat'] <= northwest['lat']):
return False
if not(northwest['lon'] <= position['lon'] and position['lon'] <= southeast['lon']):
return False
return True
보충: is_inside_area 함수는, 취득한 간이 위치 정보(위도 경도)가 그 영역에 포함되어 있는지 어떤지를 판단하고 있습니다.
この枠内にあるか?を判断している
northwest - - - - -
- -
- -
- -
- - - - - southeast
실행 함수 이름을 exec_button
로 지정합니다.
고급 설정이 필요하므로 그 아래의 Environment variables, networking, timeouts and more
를 클릭하십시오.
환경 변수만 다음과 같이 지정합니다. (그 외는 디폴트로 OK)
배포해 둡시다. (함수를 처음으로 작성하는 경우는 「작성」입니다)
이것으로 CloudFunctions 설정이 완료됩니다.
SORACOM Enterprise Button 설정
SORACOM 콘솔에서 Funk 및 위치 정보 활성화를 구성합니다.
해당 Enterprise Button이 속한 SIM 그룹의 설정 페이지를 엽니다. (나는 enterprisebutton이라는 그룹 이름)
설정하는 부분은 빨간색 테두리로 둘러싸인 두 부분입니다.
그럼 순서대로 설정합시다.
SORACOM Air for Cellular 설정 : 위치 정보 검색을 활성화합니다. 또한 바이너리 파서로 @button
를 설정합니다.
SORACOM Funk 설정 : Funk에서 CloudFunctions를 실행합니다. ★로 취득한 함수의 엔드포인트를 기재합니다.
이것으로 위치 정보를 취득할 수 있었을 경우에, 지역외를 판정할 수가 있습니다.
이것에 의해 지역외에서 잘못 눌러 버렸을 때에 동작을 시키지 않는다, 라고 할 수 있네요.
도움이되면 다행입니다.
Reference
이 문제에 관하여(SORACOM Enterprise Button의 간이 위치 정보를 이용해 지역 밖에서의 누락 실수를 방지(CloudFunctions/Python판)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sousoumt/items/8c7d28c42f8a47c41831
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
SORACOM Funk
CloudFunctions(GCP)
pyjwt (JWT (Json Web Token) Python 버전 라이브러리)
구축 내용
SORACOM Enterprise Button을 누를 때 SORACOM Funk를 통해 CloudFunctions를 시작합니다.
CloudFunctions에서 위치 정보를 가져옵니다. (이 때 jwt 사용)
지역외이면 동작, 그렇지 않으면 동작하지 않게 합니다.
판단할 로직 부분만 기사로 합니다.
구축 절차
CloudFunctions 설정
나중에 SORACOM 콘솔에서 시작 함수를 지정하기 위해 먼저 CloudFunctions를 설명합니다.
CloudFunctions 화면에서 함수 만들기를 선택하고 다음과 같이 입력합니다. 여기서 ★ 부분의 URL은 SORACOM Funk 설정에서 사용하기 위해 취득해 둡니다.
함수의 이름은 뭐든지 좋지만, enterprise_button
그리고라도 해 둡시다.
기본 Node.js도 좋지만 Python에서도 설명 할 수 있으므로 Python을 선택했습니다.
계속 requirements.txt 편집입니다.
pyjwt를 사용하기 위해 requirements.txt
에 이하 기재를 합시다. (여기에 기재한 내용이 pip install되는 이미지입니다)
CloudFunctions(requirements.txt)pyjwt
다음은 실행 함수입니다. 기본 시작 함수 이름이 hello_world
에서 exec_button
로 변경되었으므로,
실행 함수 이름과 환경 변수 설정이 필요합니다.
SORACOM 설명 그럼, http 헤더에 x-soracom-token
가 있어, 그것을 JWT로 디코드할 수 있다고 하는 것.
그래서 이렇게 됩니다.
CloudFunctions(main.py)import jwt
import os
def exec_button(request):
if 'x-soracom-token' not in request.headers:
return 'Not from soracom button.'
# Decode jwt token. (algorithm : RS256)
data = jwt.decode(request.headers.get("x-soracom-token"), verify=False)
if not is_inside_area(data['ctx']['location']):
return 'Out of area.'
# Write your code here.
return 'Inside area.'
def is_inside_area(position):
northwest = {'lat': float(os.environ.get('northwest_lat', 1.0001)), 'lon': float(os.environ.get('northwest_lon', 178.0001))}
southeast = {'lat': float(os.environ.get('southeast_lat', 0.0001)), 'lon': float(os.environ.get('southeast_lon', 179.0001))}
if 'lat' not in position or not(isinstance(position['lat'], float)):
return False
if not(southeast['lat'] <= position['lat'] and position['lat'] <= northwest['lat']):
return False
if not(northwest['lon'] <= position['lon'] and position['lon'] <= southeast['lon']):
return False
return True
보충: is_inside_area 함수는, 취득한 간이 위치 정보(위도 경도)가 그 영역에 포함되어 있는지 어떤지를 판단하고 있습니다.
この枠内にあるか?を判断している
northwest - - - - -
- -
- -
- -
- - - - - southeast
실행 함수 이름을 exec_button
로 지정합니다.
고급 설정이 필요하므로 그 아래의 Environment variables, networking, timeouts and more
를 클릭하십시오.
환경 변수만 다음과 같이 지정합니다. (그 외는 디폴트로 OK)
배포해 둡시다. (함수를 처음으로 작성하는 경우는 「작성」입니다)
이것으로 CloudFunctions 설정이 완료됩니다.
SORACOM Enterprise Button 설정
SORACOM 콘솔에서 Funk 및 위치 정보 활성화를 구성합니다.
해당 Enterprise Button이 속한 SIM 그룹의 설정 페이지를 엽니다. (나는 enterprisebutton이라는 그룹 이름)
설정하는 부분은 빨간색 테두리로 둘러싸인 두 부분입니다.
그럼 순서대로 설정합시다.
SORACOM Air for Cellular 설정 : 위치 정보 검색을 활성화합니다. 또한 바이너리 파서로 @button
를 설정합니다.
SORACOM Funk 설정 : Funk에서 CloudFunctions를 실행합니다. ★로 취득한 함수의 엔드포인트를 기재합니다.
이것으로 위치 정보를 취득할 수 있었을 경우에, 지역외를 판정할 수가 있습니다.
이것에 의해 지역외에서 잘못 눌러 버렸을 때에 동작을 시키지 않는다, 라고 할 수 있네요.
도움이되면 다행입니다.
Reference
이 문제에 관하여(SORACOM Enterprise Button의 간이 위치 정보를 이용해 지역 밖에서의 누락 실수를 방지(CloudFunctions/Python판)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sousoumt/items/8c7d28c42f8a47c41831
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
CloudFunctions 설정
나중에 SORACOM 콘솔에서 시작 함수를 지정하기 위해 먼저 CloudFunctions를 설명합니다.
CloudFunctions 화면에서 함수 만들기를 선택하고 다음과 같이 입력합니다. 여기서 ★ 부분의 URL은 SORACOM Funk 설정에서 사용하기 위해 취득해 둡니다.
함수의 이름은 뭐든지 좋지만,
enterprise_button
그리고라도 해 둡시다.기본 Node.js도 좋지만 Python에서도 설명 할 수 있으므로 Python을 선택했습니다.
계속 requirements.txt 편집입니다.
pyjwt를 사용하기 위해
requirements.txt
에 이하 기재를 합시다. (여기에 기재한 내용이 pip install되는 이미지입니다)CloudFunctions(requirements.txt)
pyjwt
다음은 실행 함수입니다. 기본 시작 함수 이름이
hello_world
에서 exec_button
로 변경되었으므로,실행 함수 이름과 환경 변수 설정이 필요합니다.
SORACOM 설명 그럼, http 헤더에
x-soracom-token
가 있어, 그것을 JWT로 디코드할 수 있다고 하는 것.그래서 이렇게 됩니다.
CloudFunctions(main.py)
import jwt
import os
def exec_button(request):
if 'x-soracom-token' not in request.headers:
return 'Not from soracom button.'
# Decode jwt token. (algorithm : RS256)
data = jwt.decode(request.headers.get("x-soracom-token"), verify=False)
if not is_inside_area(data['ctx']['location']):
return 'Out of area.'
# Write your code here.
return 'Inside area.'
def is_inside_area(position):
northwest = {'lat': float(os.environ.get('northwest_lat', 1.0001)), 'lon': float(os.environ.get('northwest_lon', 178.0001))}
southeast = {'lat': float(os.environ.get('southeast_lat', 0.0001)), 'lon': float(os.environ.get('southeast_lon', 179.0001))}
if 'lat' not in position or not(isinstance(position['lat'], float)):
return False
if not(southeast['lat'] <= position['lat'] and position['lat'] <= northwest['lat']):
return False
if not(northwest['lon'] <= position['lon'] and position['lon'] <= southeast['lon']):
return False
return True
보충: is_inside_area 함수는, 취득한 간이 위치 정보(위도 경도)가 그 영역에 포함되어 있는지 어떤지를 판단하고 있습니다.
この枠内にあるか?を判断している
northwest - - - - -
- -
- -
- -
- - - - - southeast
실행 함수 이름을
exec_button
로 지정합니다.고급 설정이 필요하므로 그 아래의
Environment variables, networking, timeouts and more
를 클릭하십시오.환경 변수만 다음과 같이 지정합니다. (그 외는 디폴트로 OK)
배포해 둡시다. (함수를 처음으로 작성하는 경우는 「작성」입니다)
이것으로 CloudFunctions 설정이 완료됩니다.
SORACOM Enterprise Button 설정
SORACOM 콘솔에서 Funk 및 위치 정보 활성화를 구성합니다.
해당 Enterprise Button이 속한 SIM 그룹의 설정 페이지를 엽니다. (나는 enterprisebutton이라는 그룹 이름)
설정하는 부분은 빨간색 테두리로 둘러싸인 두 부분입니다.
그럼 순서대로 설정합시다.
SORACOM Air for Cellular 설정 : 위치 정보 검색을 활성화합니다. 또한 바이너리 파서로
@button
를 설정합니다.SORACOM Funk 설정 : Funk에서 CloudFunctions를 실행합니다. ★로 취득한 함수의 엔드포인트를 기재합니다.
이것으로 위치 정보를 취득할 수 있었을 경우에, 지역외를 판정할 수가 있습니다.
이것에 의해 지역외에서 잘못 눌러 버렸을 때에 동작을 시키지 않는다, 라고 할 수 있네요.
도움이되면 다행입니다.
Reference
이 문제에 관하여(SORACOM Enterprise Button의 간이 위치 정보를 이용해 지역 밖에서의 누락 실수를 방지(CloudFunctions/Python판)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sousoumt/items/8c7d28c42f8a47c41831텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)