언젠가 클량에서 본 라즈베리파이용 터치스크린을 직구로 구입했는데,라즈베리파이로내주식모니터링하기클리앙 설치만 해보고 서랍속에 넣어두었다가
최근 주식에 재미를 들려, 주식 모니터링 앱을 만들어 봤습니다.
앱은 저같은 웹 개발자가 접근하기 쉬운 크로스 플랫폼 프레임워크인 electron.js로 만들었고, 주식 시세 API는 한국투자증권 API를 사용했습니다. 대부분의 증권사 API가 DLL, OCX 등을 설치해 제공해서 리눅스에서 사용하기 어려웠고 그나마 한투에서 REST API를 제공하고 있어서 가입하고 App Key를 발급받아 사용했습니다.
개인적인 용도로 사용할거라 서버는 따로 두지 않고, 내가 가진 주식 정보를 JSON으로 GitHub에 올렸습니다.
[ { "name": "나무가", "code": "190510", "image": "https://www.namuga.co.kr/images/common/logo.png", "bought": 16060 }, { "name": "넥스트칩", "code": "396270", "image": "https://www.nextchip.com/images/common/footer_logo.png", "bought": 11521 }, { "name": "LG엔솔", "code": "373220", "image": "https://www.lgensol.com/assets/img/common/logo.svg", "bought": 582500 }, { "name": "삼성전자", "code": "005930", "image": "https://www.samsung.com/sec/static/_images/common/logo_samsung_black.svg", "bought": 65416 }, { "name": "에코프로비엠", "code": "247540", "image": "https://www.ecoprobm.co.kr/images/korean/contents/ecoprobm.png", "bought": 261250 }]
지금은 전부 파란 불입니다 ㅠ
electron.js로 프로젝트를 생성하고 키오스크 모드의 전체화면으로 설정합니다.
그리고 webview를 만들어주고, 화면을 구성합니다.
상단에는 현재 날짜/시간, 우측 동그라미는 웹 소켓으로 데이터를 받을때마다 깜빡거리게 해서 정상적으로 동작하는지 나타냅니다.
아래에는 slick.js로 종목별로 10초마다 슬라이딩되도록 하고, 각 종목의 현재가, 전일대비 등락율, 시가, 최고/최저가, 내 평균 매입 단가 대비 증감금액, 매도/매수 대기 수량을 보여줍니다.
라즈베리파이에서 실행하기 위해 package.json에 아래와 같이 빌드 설정을 해줍니다.
{ ... "build": { "linux": { "target": { "target": "deb", "arch": "armv7l" }, "category": "Utility", "executableName": "minimon", "artifactName": "${ productName}-${ version}.${ ext}" }, "deb": { "fpm": [ "--architecture", "armhf" ] } }}
그리고 빌드!
➜ minimon git:(vertical) ✗ npm run build:linux64> minimon@1.0.0 build:linux64> electron-builder --linux --x64 • electron-builder version=23.6.0 os=22.4.0 • loaded configuration file=package.json ("build" field) • description is missed in the package.json appPackageFile=/Users/jeongminkim/git/minimon/package.json • writing effective config file=dist/builder-effective-config.yaml • rebuilding native dependencies dependencies=bufferutil@4.0.7, utf-8-validate@5.0.10 platform=linux arch=x64 • packaging platform=linux arch=x64 electron=18.3.15 appOutDir=dist/linux-unpacked • downloading url=https://github.com/electron/electron/releases/download/v18.3.15/electron-v18.3.15-linux-x64.zip size=83 MB parts=8 • downloaded url=https://github.com/electron/electron/releases/download/v18.3.15/electron-v18.3.15-linux-x64.zip duration=10.838s • building target=snap arch=x64 file=dist/minimon-1.0.0.snap • building target=AppImage arch=x64 file=dist/minimon-1.0.0.AppImage • default Electron icon is used reason=application icon is not set • rebuilding native dependencies dependencies=bufferutil@4.0.7, utf-8-validate@5.0.10 platform=linux arch=armv7l • packaging platform=linux arch=armv7l electron=18.3.15 appOutDir=dist/linux-armv7l-unpacked • downloading url=https://github.com/electron-userland/electron-builder-binaries/releases/download/appimage-12.0.1/appimage-12.0.1.7z size=1.6 MB parts=1 • downloading url=https://github.com/electron-userland/electron-builder-binaries/releases/download/snap-template-4.0-2/snap-template-electron-4.0-2-amd64.tar.7z size=1.5 MB parts=1 • downloading url=https://github.com/electron/electron/releases/download/v18.3.15/electron-v18.3.15-linux-armv7l.zip size=73 MB parts=8 • downloaded url=https://github.com/electron-userland/electron-builder-binaries/releases/download/appimage-12.0.1/appimage-12.0.1.7z duration=1.366s • downloaded url=https://github.com/electron-userland/electron-builder-binaries/releases/download/snap-template-4.0-2/snap-template-electron-4.0-2-amd64.tar.7z duration=2.329s • downloaded url=https://github.com/electron/electron/releases/download/v18.3.15/electron-v18.3.15-linux-armv7l.zip duration=9.99s • building target=deb arch=armv7l file=dist/minimon-1.0.0.deb • default Electron icon is used reason=application icon is not set • downloading url=https://github.com/electron-userland/electron-builder-binaries/releases/download/linux-tools-mac-10.12.3/linux-tools-mac-10.12.3.7z size=520 kB parts=1 • downloaded url=https://github.com/electron-userland/electron-builder-binaries/releases/download/linux-tools-mac-10.12.3/linux-tools-mac-10.12.3.7z duration=1.408s • downloading url=https://github.com/electron-userland/electron-builder-binaries/releases/download/fpm-1.9.3-20150715-2.2.2-mac/fpm-1.9.3-20150715-2.2.2-mac.7z size=5.4 MB parts=1 • downloaded url=https://github.com/electron-userland/electron-builder-binaries/releases/download/fpm-1.9.3-20150715-2.2.2-mac/fpm-1.9.3-20150715-2.2.2-mac.7z duration=1.939s
dist 디렉토리 안에 빌드된 파일이 나타나며 deb 파일을 라즈베리파이로 옮겨줍니다.
➜ dist git:(vertical) lltotal 468360-rw-r--r-- 1 jeongminkim staff 1.3K 5 12 12:00 builder-debug.yml-rw-r--r-- 1 jeongminkim staff 279B 5 12 11:59 builder-effective-config.yaml-rw-r--r-- 1 jeongminkim staff 364B 5 12 12:00 latest-linux.ymldrwxr-xr-x 22 jeongminkim staff 704B 5 12 11:59 linux-armv7l-unpackeddrwxr-xr-x 22 jeongminkim staff 704B 5 12 11:59 linux-unpacked-rwxr-xr-x 1 jeongminkim staff 82M 5 12 11:59 minimon-1.0.0.AppImage-rw-r--r-- 1 jeongminkim staff 52M 5 12 12:00 minimon-1.0.0.deb-rw-r--r-- 1 jeongminkim staff 70M 5 12 11:59 minimon-1.0.0.snap
이제 라즈베리파이로 접속해서 deb 파일을 설치합니다.
pi@raspberrypi:~ $ sudo dpkg -i minimon-1.0.0.deb(데이터베이스 읽는중 ...현재 107244개의 파일과 디렉터리가 설치되어 있습니다.)Preparing to unpack minimon-1.0.0.deb ...Unpacking minimon (1.0.0) over (1.0.0) ...minimon (1.0.0) 설정하는 중입니다 ...Processing triggers for hicolor-icon-theme (0.17-2) ...Processing triggers for gnome-menus (3.36.0-1) ...Processing triggers for mailcap (3.69) ...Processing triggers for desktop-file-utils (0.26-1) ...
그리고 다음과 같이 3개의 쉘 스크립트를 작성합니다.
1. on.sh : 스크린 백라이트를 켜줍니다.
#!/bin/shecho 1 > /sys/class/backlight/rpi_backlight/brightness
2. off.sh : 스크린 백라이트를 꺼줍니다.
#!/bin/shecho 0 > /sys/class/backlight/rpi_backlight/brightnesspkill -ef -9 unclutter
3. turnOnMinimon.sh : 앱을 실행하여 화면에 띄웁니다.
#!/bin/shexport XAUTHORITY=/home/pi/.Xauthorityexport DISPLAY=:0.0# 마우스 포인터 비활성화unclutter -idle 0 &# 앱 실행minimon
사무실에서 볼거라, 출퇴근 및 점심시간에 맞춰 crontab에 등록해 줍니다.
pi@raspberrypi:~/scripts $ crontab -l0 9 * * 1-6 /home/pi/scripts/turnOnMinimon.sh15 12 * * 1-6 sudo /home/pi/scripts/off.sh30 15 * * 1-6 sudo /home/pi/scripts/off.sh10 9 * * 1-6 sudo /home/pi/scripts/on.sh0 13 * * 1-6 sudo /home/pi/scripts/on.sh
짠~ 완성되었습니다.
이제 빨간 불이 켜지기만을 기다려봅니다 또르르..