Lab 09 요약: Multi-Device IoT와 실시간 데이터 분석
Lab 09에서는 여러 IoT 기기를 활용하여 데이터를 수집, 처리, 시각화하며, Thingsboard IO, Folium, 그리고 Python을 사용해 데이터를 지도 위에 시각적으로 표현하는 방법을 실습합니다. 또한, IoT 대시보드를 구성하고 데이터베이스에서 데이터를 조회 및 재구성하는 작업도 포함됩니다.
주요 실습 단계
1. Termux에서 Thingsboard IO로 데이터 전송
• Node-RED 제거:
• 컴퓨팅 자원 절약을 위해 Node-RED 제거:
npm -g remove node-red
pkg remove nodejs
• curl 설치 및 데이터 전송:
• JSON 형식 데이터를 curl 명령으로 Thingsboard IO로 전송:
curl -v -X POST --data '{"temperature":42,"humidity":73}' \
https://your.cloudinstance.address:8080/api/v1/access_token/telemetry \
--header "Content-Type:application/json"
• 자동화 스크립트 작성:
• Termux에서 센서 데이터를 수집하고 Thingsboard IO로 전송하는 스크립트를 작성.
2. Python을 사용한 데이터 읽기 및 전송
• Python 설치 및 라이브러리 설정:
• 필요한 라이브러리 설치:
apt install python
python3 -m pip install pimux requests json time
• 센서 데이터 읽기 및 전송 스크립트 작성:
• Python 스크립트를 작성하여 Termux 센서를 통해 데이터를 읽고 Thingsboard IO로 전송:
import requests, json, time
from pimux import scrip
headers = {"Content-Type": "application/json"}
url = "http://your.cloudinstance.address:8080/api/v1/access_token/telemetry"
while True:
ts = time.time()
sensor_data = scrip.compute(f"termux-sensor -s 'sensor_name' -n 1")
data = json.dumps({"timestamp": ts, "sensor_data": sensor_data})
requests.post(url, headers=headers, data=data)
3. Thingsboard IO 대시보드 구성
• 실시간 데이터 표시:
• Thingsboard IO 대시보드를 설정하여 각 IoT 기기에서 수집된 압력, GPS, 시간 데이터를 실시간으로 표시.
• 대시보드 스크린샷 제출.
4. Folium을 사용한 데이터 지도 시각화
• 지도 위 데이터 표시:
• GPS 데이터를 사용해 특정 위치의 센서 데이터를 Folium을 통해 시각화.
• Folium 지도 위에 데이터 포인트 추가:
import folium
map = folium.Map(location=[latitude, longitude], zoom_start=12)
folium.Marker([latitude, longitude], popup="Pressure: 1012 hPa").add_to(map)
map.save("map.html")
• 결과 HTML 제출:
• Folium으로 생성한 지도의 HTML 파일 제출.
5. Thingsboard IO 데이터베이스에서 데이터 조회
• Python을 사용한 데이터 조회 스크립트:
• Thingsboard IO의 데이터베이스에서 데이터를 조회하고 필요한 형식으로 재구성:
import requests, json
url = "http://your.cloudinstance.address:8080/api/plugins/telemetry/DEVICE/device_id/values/timeseries"
headers = {"X-Authorization": "Bearer YOUR_JWT_TOKEN"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
• 데이터 파싱 및 재구성:
• 수집된 데이터를 재구성하여 분석 가능하도록 저장.
6. 압력 맵 생성 및 시각화
• Folium을 활용한 압력 맵 생성:
• 여러 IoT 기기의 데이터를 조합하여 시간별 지역 압력 맵을 생성.
• Folium으로 시각화 및 HTML 결과 저장.
학습 목표
1. IoT 데이터 전송 및 통합:
• 여러 IoT 기기에서 데이터를 수집하고 클라우드로 전송하는 방법 학습.
2. 실시간 데이터 시각화:
• Thingsboard IO 대시보드와 Folium을 통해 데이터를 실시간으로 분석 및 표시.
3. Python 스크립트를 활용한 자동화:
• 데이터 수집, 전송, 조회, 시각화의 자동화 워크플로우 설계.