본문 바로가기

Python

[PYTHON] WIFI Heatmap 그리기 by ChatGPT

반응형

https://youtu.be/wWuS81f0KTI

 

- YouTube

 

www.youtube.com

 

 

요즘 Wifi를 이용해서 제품을 개발하는 곳이 많다 보니, Wifi heatmap을 그려주는 어플리케이션에 대한 수요가 제법 있습니다. 그런데 보통 그런 앱이 굉장히 고가입니다. 고가의 앱을 거침없이 제공해 주는 직장이나 기관에 속해 계시면 다행인데, 아닌 경우를 위해 ChatGPT를 이용해서 WIFI Heatmap을 그려주는 앱을 만들어 보겠습니다.

먼저 원하는 형상에 대해서 요청을 한 스크립트가 아래입니다. 

" wifi heatmap을 그려주는 Python code를 작성바람. tkinter모듈 사용하고, 사용자로부터 어떤 WIFI SSID를 선택할지, 사용할 맵은 도면(jpg,png,dwg,pdf)을 입력받을수도 있고, 그냥 사용자가 임의의 위치부터 마우스를 클릭해서 측정할 수도 있어야 하고, 도면을 읽은 경우 화면에 전체 도면을 보여주고, 마우스 휠을 위아래로 굴리면 도면이 zoom-in, zoom-out이 되어야 하며, 마우스를 클릭한 위치에 선택한 wifi ap의 신호세기를 dbM단위로 기록해 준다. 최종적으로 저장할 파일 경로를 선택하거나 입력한대로 사용자가 "저장" 단추를 누르면 JPG/PNG/DWG/PDF 등으로 저장할 수 있어야 함. 입력 및 결과를 보여주는 창은 하나의 window에서 처리하도록 해주고, 여러 AP가 하나의 SSID로 이용될 경우를 가정하고 있으며, AP별로 MAC ADDRESS가 다르기 때문에 해당 위치에서 측정한 AP기준으로 HEATMAP을 그려줘"

 

꽤 자세히 요청을 했고, ChatGPT도 상당히 어려운 문제임을 설명하면서 코드를 제공했습니다. 하지만 첫번째 코드는 입력창도 별도로 있고, SSID도 제대로 보이지 않는등 문제가 많아서 새로 요청합니다.

" ssid list중에서 선택할 수 있도록 사전에 ssid를 읽어주고, ssid선택창, 맵파일 경로를 선택하는 창도 모두 하나의 윈도우에서 처리하고 이후 아래족에 heatmap을 그리도록 마우스 클릭할 수 있게 해줘"

그럼에도 불구하고 이후에도 계속 맘에 안 듭니다. 계속 요청합니다.

"ssid 리스트가 뜨지 않는데 수정해줘"

" 마우스를 클릭했을때 신호레벨을 측정해서 보여주는 반응속도가 너무 느린데 1초안에 측정해서 화면에 표시되게 해주고 , 신호세기에 따라 색상으로 보여주는 부분이 미구현된거 같어. 수정해줘"

 

" 신호가 좋을수록 녹색으로 해 주고, 나빠질수록 빨간색으로 해줘. 그리고 파일로 저장할때 신호레벨 수치도 같이 표시해줘. 신호레벨 수치를 보여줄지 말지는 옵션으로 처리해줘. "

" 결과를 파일로 저장할때 신호가 좋은 부분이 녹색, 나쁜 부분이 빨간색으로 칠해 지도록 수정해줘 "

" 맵을 불러와서 신호를 재고, 결과로 저장했을때, 결과 파일에 맵이 보이도록 해주고, 결과를 보면 y축이 위아래가 뒤바뀌어 저장되고 있는데 제대로 저장해줘 "

"신호 레벨은 일반적으로 검정색으로 표시해 주고, 만약 바탕이 검정색, 청색 계열로 구분이 안 될 상황일때만 휜색이나 노란색으로 보이도록 수정해줘"

"맵이 안 보일정도로 히트맵 색상이 진하므로 조금 옅게 그려줘. 옅게 그리기 힘들면 투명도를 50%정도로 반영해줘"

" 맵을 저장할때 y값이 뒤집혀서 저장되는 것으로 보이는데 정상적으로 저장되게 해줘. 현재 signal 레벨은 정상적으로 저장되는 것을 보임. 그리고 저장이 끝나면 팝업 메시지로 완료했다고 보여줘. "

" 갑자기 맵은 안 보이는데 원래대로 복원해줘 "

" 신호 레벨도 , 맵도 y축이 뒤집혀서 저장되고 있는거 같은데 제대로 수정해줘. 화면에 보이는 맵파일과 동일하게 보이도록 수정 바람 "

"화면에 보이는 맵의 해상도를 마우스 휠로 변경했을때, 그 변환비를 기억햇다가, 파일 저장할때 동일한 맵 위치에 신호 레벨이 저장되도록 수정해줘. 현재 맵은 원래 사이즈로 저장되고 있고, 신호 레벨은 조정된 사이즈를 맵상에 그대로 뿌리고 있음."

"wifi signal을 읽어 오는 속도를 1초 이내로 줄여줘."

 

"맵 사이즈를 변경하더라도 기존에 측정한 신호값이 화면상에 유지되도록 수정해줘.

(V0.96기준) 아래 소스 기준으로 신호 측정하다가 줌인/아웃을 하면 기존 데이터 몇개가 화면에 표시가 안 보이는데 수정해줘.

SSID 리스트 업데이트를 2초 간격으로 업데이트 해 주도록 수정해줘. 추가로 SSID를 선택하기 위해 클릭할때도 새로 업데이트 해줘"

"SSID선택되기 전에는 2초 간격으로 업데이트하고, SSID가 선택된 후에는 SSID LIST를 업데이트 하지 않도록 수정해 줘. 콤보박스 열때는 업데이트 할 필요 없음."

"아래 소스에서 추가로 수정해 줘야 할 부분이 있어. 먼저 마우스 좌측버튼을 누른채로 이동하면 화면상에서 맵의 위치가 좌우로 이동하도록 수정해줘. 그리고 파일 저장시 원래 맵파일에 "_Heatmap"을 붙이고 확장자는 jpg로 하되 사용자가 수정하거나 선택할 수 있도록 해줘."

등의 과정을 통해 만들어진 앱입니다.

 

WifiHeatmap_v0.965.py
0.01MB

 

 

실행파일 만드는 방법은 역시 동일합니다.

pyinstaller -w -F WifiHeatmap_V0.965.py

 

 

 

 

 

 

 

 

 

 

 

 

 

신규 버전

 

 

신호 측정 후 

 

최종 heatmap

 

 

 

 

 

 

 

 

 

 

 

반응형