안드로이드, 서버, 스위치간에 서로 데이터를 JSON으로 주고 받는다. 그러면 그 데이터들의 JSON 타입을 정할 필요가 있다. 한번 정해보고 표준타입으로 설정해서 서로 원활하게 통신이 되도록 해보자
1. JSON은 무엇인가?
가장 먼저 알아야 할 것은 JSON은 무엇인가? 입니다.
JSON의 정의는 아래와 같습니다.
JavaScript Object Notation(JSON)
용도는
데이터를 저장하거나 전송할 때 사용되는 경량 DATA 교환 형식이며, 데이터 포맷일 뿐 어떠한 통신 방식도, 문법도 아닌 단순히 데이터 표시하는 방법 중 하나입니다.
그럼 구성은 어떤지 살펴보겠습니다.
문법 먼저 살펴보겠습니다.
형태는 name-value 타입이며 {} 같은 중괄호로 묶여있습니다. 아래는 예시입니다.
{"name" : value}
name은 문자열 타입이며 value는 여러 데이터 유형의 값이 들어 올 수 있습니다.
데이터 유형과 그 예시는 아래와 같습니다.
1. 문자열
{ "name" : "Jones" }
2. 숫자
{
"number_1" : 210,
"number_2" : 215,
"number_3" : 21.05,
"number_4" : 10.05
}
3. 부울
{ "booleanTypeName" : false }
4. Null
{ "Null pointer" : null }
5. 객체
{
"objects" : { "name" : "hong" , "age" : "42" , "country" , "korea" }
}
6. 배열
{
"arrays" : [
{
"name" : "hong",
"age" : 42,
"gender" : "man"
}
{
"name" : "kim",
"age" : 35
"gender" : "woman"
}
]
}
2. JSON을 통해 어떤 목적을 이루고 싶은가?
그럼 이러한 JSON 데이터를 통해 어떤 목적을 이루고 싶은지 정하면 이후 들어갈 데이터 내용, 규격은 정하기 좀 더 쉬울 듯 합니다. 한번 정해봅시다.
1) 전등(light)를 컨트롤 하는 데이터를 송*수신
2) 컨트롤 할 전등( ex : 거실 불) 종류
3) 컨트롤 할 행동 ( ex : on / off)
4) 컨트롤 하는 대상 ( ex : 나)
일단 크게 4가지로 구성한 다음 필요에 따라 더 세부적으로 나누면 될 듯 합니다.
3. 통신 별 JSON 타입
이제 안드로이드 ↔ 서버 ↔ 스위치 간 JSON 타입을 세부적으로 정해봅시다.
3 - 1.1 안드로이드 → 서버
안드로이드에서 서버로 보내는 목적은 아래 예시로 정의 할 수 있습니다.
"내"(누가)가 "거실"(컨트롤 할 전등의 카테고리) "첫번째"(컨트롤 할 전등)"전등"(light)을 "키겠다."(컨트롤 할 행동)
그러면 이를 JSON 코드로 변환하면 아래와 같습니다.
{
"Light":{
"sender" : "me",
"message" : "ON",
"room" : "living room",
"destination" : "living room1"
}
}
3 - 1.2 서버 → 안드로이드
서버에서 안드로이드로 보내는 목적은 아래 예시로 정의 할 수 있습니다.
"내"가 시켜서 "거실 윗 전등"이 "켜졌다"
그러면 이를 JSON 코드로 변환하면 아래와 같습니다.
{
"sender":"me",
"message":"ON",
"room":"living room1"
}
3 - 2.1 서버 → 스위치
서버에서 스위치로 보내는 목적은 아래 예시로 정의 할 수 있습니다.
"내"(누가)가 "거실"(컨트롤 할 전등의 카테고리) "첫번째"(컨트롤 할 전등)"전등"(light)을 "키겠다."(컨트롤 할 행동)
그러면 이를 JSON 코드로 변환하면 아래와 같습니다.
{
"Light":{
"sender" : "me",
"message" : "ON",
"room" : "living room",
"destination" : "living room1"
}
}
3 - 2.2 스위치 → 서버
스위치에서 서버로 보내는 목적은 아래 예시로 정의 할 수 있습니다.
"내"가 시켜서 "거실 윗 전등"이 "켜졌다"
그러면 이를 JSON 코드로 변환하면 아래와 같습니다.
{
"sender":"me",
"message":"ON",
"room":"living room1"
}
사실 안드로이드 → 서버 → 스위치, 스위치 → 서버 → 안드로이드 이렇게 같은 맥락은 같은 데이터 타입입니다.
3. 기타
아래는 위 내용과 관련 궁금할 내용들입니다.
● 왜 같은 데이터 타입인데 구분 하셨나요?
· 지금은 맥락만 해서 상관이 없지만 나중에 파이썬 코드는 중간 파트에서 작업 해줘야 할 부분이 있어서 그때 혼동을 최대한 막고자 지금 미리 나눠서 작성했습니다.
● 안드로이드 에서 서버로 보낼때 destination이 꼭 필요한가요? 바로 room으로 세부 전등을 작성해도 될 거 같은데요?
· 저건 제 집의 전등 스위치 구조상 한 스위치에서 여러 카테고리( ex : 거실, 배란다)가 다 있는 경우가 있어 별도로 작성했습니다. 만약 그렇지 않으시면 간소화 하셔도 좋습니다.
'홈 IoT > 기타' 카테고리의 다른 글
EPS8266 MQTT 통신(라이브러리 교체) (2) | 2024.06.15 |
---|---|
ESP8266 스위치 펌웨어 제작 (0) | 2023.05.10 |
DB 테이블 데이터 정리 (0) | 2023.05.09 |
ESP8266 에서 MQTT 통신하기 (0) | 2023.04.24 |