라즈베리파이로 내 주식 모니터링 하기 : 클리앙

언젠가 클량에서 본 라즈베리파이용 터치스크린을 직구로 구입했는데,라즈베리파이로내주식모니터링하기클리앙 설치만 해보고 서랍속에 넣어두었다가
최근 주식에 재미를 들려, 주식 모니터링 앱을 만들어 봤습니다.


IMG_1515.jpeg


앱은 저같은 웹 개발자가 접근하기 쉬운 크로스 플랫폼 프레임워크인 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를 만들어주고, 화면을 구성합니다.

MyScreenshot.png

상단에는 현재 날짜/시간, 우측 동그라미는 웹 소켓으로 데이터를 받을때마다 깜빡거리게 해서 정상적으로 동작하는지 나타냅니다.

아래에는 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

짠~ 완성되었습니다.

이제 빨간 불이 켜지기만을 기다려봅니다 또르르..

팁과강좌