교사가 앱에 직접 접속해서 위치를 바꾸는 대신, 교무실 출입구의 Stream Deck(15키)에서 이름 버튼 하나로 "수업 중"을 표시하고, 설정 버튼으로 과학실/출장 등 다른 위치도 고를 수 있게 하는 라즈베리파이용 독립 스크립트. 기존 POST /api/teacher-call/location API를 그대로 호출하므로 서버/앱 변경 없이 별도 기기에서 실행하면 된다. 선생님 목록은 /api/teacher-call/teachers에서 1분마다 자동 새로고침해서 새로 가입한 교사도 재시작 없이 반영된다. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
3.7 KiB
3.7 KiB
교무실 Stream Deck 선생님 위치 표시기
교무실 출입구에 놓인 Stream Deck으로 선생님이 본인 이름 버튼만 누르면
백품타 앱의 "선생님 호출" 위치가 바뀝니다. 이미 배포돼 있는 서버 API
(POST /api/teacher-call/location)를 그대로 호출하기 때문에, 서버나
앱은 전혀 건드릴 필요 없이 이 스크립트 하나만 라즈베리파이 같은 작은
컴퓨터에서 계속 띄워두면 됩니다.
준비물
- Stream Deck 오리지널/MK.2 (15키, 5x3) — USB로 라즈베리파이에 연결
- 라즈베리파이(또는 인터넷 되는 리눅스 미니PC) 1대
- 교무실 회원가입(교사 회원가입)을 마친 선생님만 목록에 뜹니다 — 아직 가입 안 한 선생님은 버튼이 안 보이니, 먼저 앱에서 "교사 회원가입"부터 해달라고 안내해주세요.
설치
# 1) 한글 폰트 설치 (버튼에 이름이 네모(□)로 안 뜨게)
sudo apt update
sudo apt install -y fonts-nanum
# 2) Stream Deck을 일반 사용자 권한으로 인식하게 하는 udev 규칙
# (이거 안 하면 sudo로만 인식되거나 아예 인식이 안 될 수 있어요)
sudo tee /etc/udev/rules.d/50-streamdeck.rules > /dev/null << 'UDEV'
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", MODE="0666"
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0fd9", MODE="0666"
UDEV
sudo udevadm control --reload-rules
sudo udevadm trigger
# 3) 파이썬 패키지 설치
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 4) 실행
python3 stream_deck_teacher_status.py
USB 케이블을 뽑았다 다시 꽂아야 udev 규칙이 적용되는 경우가 있어요.
사용법
- 선생님 이름 버튼을 그냥 누르면 → "수업 중"으로 표시됩니다.
- 과학실/도서관/출장 등 다른 위치로 표시하고 싶으면 → 화면 오른쪽 아래 "⚙ 설정" 버튼을 누르고, 뜨는 위치 목록에서 하나를 고른 뒤(예: "출장"), 이어서 그 선생님 이름 버튼을 누르면 됩니다. 한 번 적용하면 자동으로 다시 기본 모드("수업 중")로 돌아갑니다.
- 선생님이 18명을 넘어가면 자동으로 페이지가 나뉘고, "다음 ▶" 버튼으로 넘길 수 있습니다.
- 새로 교사 회원가입을 한 선생님은 최대 1분 안에 자동으로 목록에 나타납니다 (재시작 필요 없음).
부팅할 때 자동 실행하게 하기 (선택)
라즈베리파이를 켤 때마다 자동으로 이 스크립트가 실행되게 하려면 systemd 서비스로 등록하세요:
sudo tee /etc/systemd/system/streamdeck-teacher.service > /dev/null << 'UNIT'
[Unit]
Description=교무실 Stream Deck 선생님 위치 표시기
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/home/pi/stream_deck_teacher_status/venv/bin/python3 /home/pi/stream_deck_teacher_status/stream_deck_teacher_status.py
Restart=on-failure
RestartSec=5
User=pi
[Install]
WantedBy=multi-user.target
UNIT
sudo systemctl daemon-reload
sudo systemctl enable --now streamdeck-teacher.service
경로(/home/pi/...)는 실제로 이 폴더를 둔 위치에 맞게 바꿔주세요.
로그 확인은 journalctl -u streamdeck-teacher -f.
참고
- 이 스크립트는 이 저장소(school-backend)와는 별개로, 이미 배포된
api.backsanhi.shop의 기존 API만 호출합니다. 서버/앱 배포와는 무관하게 라즈베리파이에서 이 파일만 갖고 있으면 바로 동작합니다. python-elgato-streamdeck라이브러리 버전에 따라 내부 헬퍼 함수 이름이 달라서(create_key_image/create_image 등) 코드에 호환 처리를 넣어뒀지만, 혹시 실행 중AttributeError가 나면 캡처해서 알려주세요.