IoT 프로젝트_1(Introduce)

김두현·2023년 11월 27일
0

SmartHome_IoT

목록 보기
1/6
post-thumbnail

오랜만에 포스팅이다. 4학년인만큼 취업이나 프로젝트나 이것저것 하는 것이 많다보니 바쁜 핑계로 많이 미러뒀다ㅠㅠ

이번 해 5월달부터 경북 테크노 파트에서 진행한 공모전을 통해 학생과 기업, 교수님과 컨소시엄을 맺어 진행하고 있는 IoT 기반의 프로젝트를 진행했다.
애당초 해당 프로젝트는 5월부터 시작해서 6개월간 진행하여 10월 31일에 마감이 됐지만 이 프로젝트를 기반으로 막학기 전공 수업인 PBL(Project Base Learn)로 진행하게 돼서 12월 중순까지 계속 개발 중이다.

개발 주제를 간략하게 설명하면 음...
Smarthome...?,
SmartCare...?

독거가구를 대상으로 가구에 허브 역할을 하는 게이트웨이와 여러 센서들을 설치해 수집된 데이터를 기반으로 IoT 생태계 구축과 응급 시스템을 구현하는 것이 목표!
+
위에 주제는 기존 공모전 프로젝트 기준이고 PBL 프로젝트를 위해 추가적으로 수집된 데이터를 기반으로 독거가구를 위한 Deep Learning Model 개발이 필요한 상황이다...

이번 포스팅에서는 대략적으로 프로젝트에 대한 개요 부분을 두 개의 파트로 나뉘어 첫 번째 부분을 기술할 예정이다~

IoT 프로젝트인만큼 가구에 설치한 센서의 종류들이 여러가지가 존재하는데 우리 프로젝트에서 사용한 센서의 종류는 아래와 같다.

  • 활동량: 문닫힘 감지, 모션 감지, 스마트 플러그, 조도 감지 센서
  • 환경: 누수 감지, 화재(연기) 감지, 가스 감지
  • 이외에도 바이오 신호를 측정하는 센서들이 존재하지만 자동화가 아직 되지 않아 제외...

아래 사진은 게이트웨이

그리고 데이터 수집하는 과정을 순서화하면 아래와 같다.

  1. 각 센서들을 1개 이상씩 가정에 설치해 게이트웨이를 통해 센서 데이터를 수집
  2. 게이트웨이에서 서버의 데이터베이스에 센서 데이터들을 저장
  3. 이 데이터를 통해 센서들의 기간별 추이 등을 그래프로 시각화는 것을 주기능으로 삼고 있다.

Sensor -> Gateway

게이트웨이와 센서 간 데이터 통신은 Zigbee 프로토콜 기반의 센서들을 이용해 게이트웨이와 각 센서들을 페어링해 문닫힘이 감지되거나 모션이 감지되는 등 각 센서에 특정 이벤트 충족시 센서에서 게이트웨이로 데이터를 송신한다.


Gateway -> Server

그리고 각 가정의 게이트웨이에서 서버로 데이터를 송신하기 위해 MQTT Protocol을 사용하는데 MQTT를 사용하기 위해서는 broker가 필요하다.

  • Mosquitto 오픈 소스를 설치해 서버와 각 가정 게이트웨이 간을 연결
  • 서버에서 구독자 역할을 하는 Poython 기반의 MqTT subscriber 프로그램을 구현
  • 각 게이트웨이에서 데이터가 수신되면 데이터베이스에 저장하는 방식으로 데이터 통신망을 구축
    mqtt에 대해서 더 궁금하다면 아래 포스팅 참조
    https://velog.io/@iamdudumon/MQTT-Protocol-%EC%9D%B4%EB%9E%80

Python Code(구독자)

...

# 브로커에게 메시지가 도착하면 on_message 실행 (이벤트가 발생하면 호출)
def on_message(client, userdata, msg):
    try:
        data = json.loads(str(msg.payload.decode('utf-8')))
    except Exception as es:
        print(f"error: {es}")
        print(f'msg: {msg}')
        return

    print(f'[{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}]')
    print("topic =", msg.topic)
    print(data)

    topic_split = msg.topic.split("/")
    gateway_model = topic_split[1]
    if topic_split[2] == "SENSOR":
        if data.__contains__('SHTCX'):
            write_basic_data_tsdb(topic_split[1], data['SHTCX'])
        elif data.__contains__('ZbReceived'):
            # 필요한 데이터만 딕셔너리에서 추출
            data = data['ZbReceived']
            for key, value in data.items():
                sensor_value = value

            if sensor_value.__contains__('ModelId'):    # ModelId -> 디바이스가 게이트웨이로 등록된 상황
                # mysql table 등록 대기 디바이스 저장
                print(f'------{gateway_model} Gateway -> {sensor_value["Device"]} Device 대기 등록------')
                register_device(sensor_value['Device'], gateway_model, get_device_type_by_ModelId(sensor_value["ModelId"]))

            write_sensor_data_tsdb(gateway_model, sensor_value)
        else:
            print("------Invalid Data Type------")

        print()
...
 

💡 지금까지 간략하게 IoT 프로젝트의 소개와 데이터를 수집하는 방법에 대해서 설명했다. 다음 포스팅에서는 서비스 개발을 위한 사용한 프레임워크, 데이터베이스 내용을 담고 프로젝트 큰 아키텍쳐에 대해서 설명하겠다.

profile
끄적끄적

0개의 댓글