카테고리 없음

LoRa Gateway TTN V3 Application WebHook MySQL

abc0123 2021. 8. 17. 12:06
반응형

지난 글에서 Raspberry Pi 4와 연결된 RAK2245 LoRa Gateway를 TTN 서버에 등록하는 과정을 정리했었다.

https://abc0123.tistory.com/171

 

raspberry pi 4 + RAK2245 = Lora Gateway TTN Register

□ [준비] * Raspberry pi 4 * RAK2245 * SD 메모리 * 최신 펌웨어 : https://downloads.rakwireless.com/LoRa/RAK2245-Pi-HAT/Firmware/ RAKwireless Downloads downloads.rakwireless.com 주의 : 라즈베리파이..

abc0123.tistory.com

 

오늘은 등록한 게이트웨이를 통해 TTN으로 전송되는 데이터를 수신하기 위한 Application을 만들고 EndDevice를 등록한 후 WebHook을 통해 우리 서버의 PHP로 데이터를 전송한 후 MySQL로 저장하는 과정을 정리해본다.

 

□ TTN Application 만들기

Add application

▲ TTN 서버에서 Applications를 선택하고 [+Add applications] 메뉴를 선택한다.

 

Application ID

▲ Application ID를 적당한 String으로 입력하고 Create application을 클릭해서 생성한다.

 

APP 기본 정보

▲ 현재 Application 이름만 설정해서 만들어놓은 상태라서 아무 역할도 하지 못한다. 이제 데이터를 이 Application으로 전송할 End Device를 등록해주자.

 

Add EndDevice

▲ 생성한 [Application] 메뉴 중에서 [End devices]를 선택하고 [Add end device] 메뉴를 선택한다.

 

End device 정보 입력

▲ 로라 저장소에는 내가 사용하는 로라 모듈에 대한 정보가 없이 때문에 Manually를 선택하고 각각의 정보를 입력해준다. 이렇게 End Device를 등록하고 로라 상태를 확인해보면...

Join Success

 

TTN에 연결된 End device

▲ 현재 사용중인 로라가 TTN 서버에 접속 한 걸 확인할 수 있으며 이제 데이터를 전송해서 TTN에 제대로 수신이 되는지 확인해보자.

로라 시리얼 메시지 (데이터 전송)
데이터 수신

▲ TTN의 Live Data 메뉴를 확인해보면 위 그림과 같이 전송한 메시지가 수신된 걸 알 수 있다. 전송된 데이터는 base64로 인코딩 되어서 들어오는데 이걸 그대로 서버의 PHP로 전송해서 base64 디코딩 한 후 데이터를 추출하고 MySQL DB에 insert 하는 과정을 정리해보자.

 

TTN으로 수신된 데이터를 Linux OS의 웹서버 PHP로 WebHook를 이용해서 JSON으로 전송하고 PHP에서는 JSON으로 들어온 데이터 중에서 End Device에서 전송한 실제 데이터만 추출해서 MySQL 에 저장하자.

webhook

▲ Applications > my_application > intergrations > Webhooks > Add webhook를 선택한다.

 

Custon webhook

▲ 내가 가지고 놀고 있는 서버에 위치한 php로 데이터를 전송하기 위해서 Custom webhook을 선택했다.

 

url 입력

▲ Webhook ID를 적당히 입력하고 Webhook format JSON으로 설정한 후 Base URL은 서버의 PHP 주소를 입력해줬다.

Uplink message 설정

▲ 다음으로 아래쪽 옵션 중에서 [Uplink message]를 체크해줘야 한다.

 

JSON을 받을 PHP의 내용은 대충 다음과 같다.

<?php
header('Content-Type: application/json; charset=UTF-8');
$con = mysqli_connect("localhost:3306" , "XXXX","XXXX","lora_test"); // DB 접근 정보
mysqli_set_charset($con , "utf8");
$__rawBody = file_get_contents('php://input'); //수신된 JSON
$__getData = json_decode($__rawBody,true); // Decode
$str = $__getData['uplink_message']['frm_payload']; //로라에서 수신된 실제 데이터
$_tem= base64_decode($str); //base64 decode
$insert_data = "insert into lora_data (tem, hum ,data_time) values(".$_tem.",200,now())"; //insert
$res1 = mysqli_query($con , $insert_data);
mysqli_close($con);
?>

코드의 내용을 대충 보자면..

- MySQL DB에 접근할 수 있는 정보를 입력 하고

- 수신된 JSON 데이터 Decoding 한 후

- 로라에서 전송한 실제 데이터만 골라내서

- base64 Decoding 해서 

- MySQL에 INSERT 하는 과정이다.

 

즉. 로라에서 데이터를 전송함과 동시에 TTN으로 갔다가 Webhook를 통해서 다시 서버의 PHP로 JSON을 던지는데 이 데이터 중에서 필요한 데이터만 추출해서 DB에 INSERT 하는 것이다.

 

DB에는 온도, 습도, 시간을 저장할 수 있는 Column이 만들어져 있으며 로라에서는 하나의 숫자만 던져서 이걸 온도 자리에 넣기로 하고 습도는 200 고정값을 넣어보기로 한다.

DB

우선 아두이노에 연결된 End Device 로라에서 RAK2245 게이트웨이를 통해서 TTN 서버로 10이라는 데이터를 전송한다. 그리고 TTN에서 Webhook을 통해서 내 서버의 PHP로 JSON을 전달하고 그 중 base64로 인코딩 되어 있는 10을 추출해서 디코딩 한 후 DB에 INSERT 하는 과정이다.

 

이렇게 해서 RAK2245와 Raspberry Pi4로 이루어진 LoRa Gateway를  TTN V3에 등록하고 Application을 만든 후 End Device를 등록해서 수신되는 데이터를 WebHook 을 통해 서버의 PHP로 전송하고 MySQL에 INSERT하는 과정까지 정리를 해봤따.

반응형