엔지니어링 · 2024
무선 온도 센서 현장 모니터링 프로그램
클라우드에 모인 센서 측정값을 현장 화면에 상시 표시하는 Windows 데스크톱 앱
클라우드에 올라온 무선 온도 센서 측정값을 받아 현장 모니터에 상시 표시하고, 설정한 상·하한을 벗어나면 화면과 소리로 알리는 데스크톱 프로그램입니다.
- 고객
- 조선계기사
- 분야
- 엔지니어링

개요
Efento 무선 온도 센서는 측정값을 자체 클라우드로 보냅니다. 조선계기사는 이 측정값을 현장에 둔 화면 하나에 띄워 두고, 지나가면서 지금 온도가 안전 범위 안에 있는지 바로 확인할 수 있기를 원했습니다.
이 프로그램은 클라우드의 REST API로 최근 측정값을 주기적으로 받아 온도 추이 그래프와 큰 숫자로 표시하고, 사용자가 정한 경계온도 상·하한을 벗어나면 화면 표시와 경고음으로 알립니다. Windows 데스크톱 앱이며, 모니터에 띄워 둔 채로 계속 돌아가는 것을 전제로 만들었습니다.
과제
측정값은 이미 클라우드에 모이고 있었지만, 현장에서 필요한 것은 조회가 아니라 상시 표시였습니다. 화면 앞에 사람이 붙어 있지 않아도, 멀리서 지나가며 현재 온도와 범위 이탈 여부를 읽을 수 있어야 했습니다.
클라우드가 제공하는 것은 REST API뿐이어서 다음을 직접 다뤄야 했습니다.
- 센서는 3분 간격으로 측정하지만 전송이 누락되어 중간 구간이 비는 경우가 있습니다
- API가 돌려주는 측정 시각은 한국 시간과 9시간 차이가 납니다
- 센서가 멈추면 API는 오류 대신 오래된 데이터를 그대로 돌려줍니다
해결 방법
경계온도 상·하한을 기준선으로 깔고, 그 위에 최근 구간의 온도 추이를 그립니다. 현재값, 구간 최고값, 최저값에는 각각 표식을 찍어 그래프에서 바로 짚을 수 있게 했습니다. 그래프 아래에는 같은 값을 큰 숫자로 다시 보여 줍니다.

숫자 패널의 글자 크기는 창 크기에 맞춰 자동으로 조절되고, F5로 전체 화면으로 전환됩니다. 모니터 크기가 달라도 같은 화면을 그대로 쓸 수 있습니다.
현재 온도가 설정 범위를 벗어나면 현재온도 패널에 경고 표시가 켜지고, 범위 안으로 돌아올 때까지 경고음이 반복됩니다.

시스템 구조
구성
- 로그인 창: 클라우드 계정으로 세션을 열고, 경계온도 상·하한을 설정합니다
- 모니터링 창: 그래프와 숫자 패널을 그립니다
- 클라우드 API 모듈: 세션 토큰으로 회사와 센서를 찾아 최근 측정값을 가져옵니다
info.ini: 회사명, 센서 시리얼, 표시 구간(분), 갱신 주기(분)

데이터 흐름
- 로그인 창에서 받은 세션 토큰과 계정 이메일을 이후 모든 요청의 헤더에 담습니다
- 설정 파일의 회사명과 센서 시리얼로 클라우드상의 회사 ID와 센서 ID를 찾습니다
- 수집 스레드가 갱신 주기마다 표시 구간만큼의 측정값을 요청합니다
- 응답을
{최신 측정으로부터 경과한 분: 온도}형태로 바꾸고, 빈 구간을 채운 뒤 그래프와 패널을 갱신합니다
수집, 화면 갱신, 경고음 재생은 각각 다른 스레드에서 돌아갑니다. 경고음이 울리는 동안에도 수집과 화면 갱신이 멈추지 않습니다.
구현
- 상·하한 입력은 서로를 제한합니다. 상한의 최솟값은 현재 하한보다 1 높고, 하한의 최댓값은 현재 상한보다 1 낮습니다. 값을 바꾸면 다음 수집을 기다리지 않고 기준선과 패널이 바로 다시 그려집니다
- 빠진 측정 구간은 외부 라이브러리 없이 선형 보간으로 채웁니다. 들어온 시각들의 간격 중 가장 자주 나타나는 값을 측정 간격으로 보고, 그 간격으로 있어야 할 지점 중 빠진 곳을 앞뒤 값으로 메웁니다
- 클라우드 서버 시각이 한국 시간보다 9시간 이르기 때문에, 조회 구간을 만들 때와 경과 시간을 계산할 때 모두 보정합니다
- 가장 최근 측정이 30분보다 오래되었으면 센서 상태를 확인하라는 안내를 띄웁니다
- 설정 파일은 섹션과 키를 하나씩 확인해, 무엇이 빠졌는지 또는 어떤 값이 숫자가 아닌지를 구체적으로 알립니다
- PyInstaller로 아이콘을 포함한 실행 파일로 묶어, 파이썬 설치 없이 현장 PC에서 실행합니다
결과
현장 모니터에 띄워 두면 클라우드 웹 화면을 열지 않고도 현재 온도와 범위 이탈 여부를 바로 읽을 수 있습니다. 범위를 벗어나는 순간은 화면과 소리로 알려 주므로, 화면을 계속 지켜보지 않아도 됩니다.
경계온도 기준은 프로그램 안에서 바로 바꿀 수 있고, 감시할 센서와 표시 구간, 갱신 주기는 설정 파일만 고치면 됩니다. 다른 센서나 다른 현장에 같은 실행 파일을 그대로 쓸 수 있습니다.
사용 기술
- Python
- wxPython
- matplotlib
- REST API
- PyInstaller
화면


진행하려는 프로젝트가 있으신가요?
해결하려는 문제와 지금 상황을 알려 주시면, 어떤 방식이 맞을지 함께 검토합니다.
프로젝트 문의하기