# FACTOR × OctoPrint — 외부 모니터링 & 카메라 연동
<div align="center">
<img src="docs/logo.png" alt="FACTOR Logo" width="150"/>
**3D 프린터를 어디서든 모니터링하세요**
하루 종일 출력 돌려놓고 집에 오니 **스파게티/익스트루더 꼬임**…
그래서 **OctoPrint와 연동되는 외부 모니터링 플랫폼 'FACTOR'**를 만들었습니다.
[](https://github.com/kangbyounggwan/octoprint-factor-plugin)
[](https://plugins.octoprint.org)
[](LICENSE)
[](README.md)
[](README_EN.md)
**[🌐 웹사이트](https://factor.io.kr)** •
**[📦 다운로드](https://github.com/kangbyounggwan/octoprint-factor-plugin/archive/main.zip)** •
**[📖 문서](https://factor.io.kr/docs)** •
**[💬 이슈 제보](https://github.com/kangbyounggwan/octoprint-factor-plugin/issues)**
</div>
---
## 📋 목차
- [주요 기능](#-주요-기능)
- [빠른 시작](#-빠른-시작)
- [1단계: 회원가입](#1단계-회원가입)
- [2단계: 플러그인 설치](#2단계-플러그인-설치)
- [3단계: 플러그인에서 로그인](#3단계-플러그인에서-로그인)
- [4단계: 설비 등록](#4단계-설비-등록)
- [5단계: 웹에서 최종 설정](#5단계-웹에서-최종-설정)
- [문제 해결](#-문제-해결)
- [기여하기](#-기여하기)
- [라이선스](#-라이선스)
---
## ✨ 주요 기능
<table>
<tr>
<td width="50%">
### 🖥️ 실시간 모니터링
- 출력 진행률 및 상태 확인
- 온도, 프린트 시간 추적
- 여러 프린터 동시 모니터링
</td>
<td width="50%">
### 📹 카메라 연동
- MJPEG/WebRTC/RTSP/HLS 지원
- 기존 스트림 URL 그대로 사용
- 실시간 비디오 스트리밍
</td>
</tr>
<tr>
<td width="50%">
### 🔒 보안 강화
- MQTT TLS/SSL 암호화 지원
- Rate limiting 및 입력 검증
- 안전한 명령 실행
</td>
<td width="50%">
### ⚡ 간편한 설치
- 5-10분 내 설정 완료
- 플러그인 자동 업데이트
- 직관적인 UI
</td>
</tr>
</table>
---
## 🚀 빠른 시작
### 📝 사전 요구사항
- OctoPrint 1.4.0 이상
- Python 3.8 이상
- 인터넷 연결
### 1단계: 회원가입
<div align="center">
<img src="docs/1단계.png" alt="회원가입" width="600"/>
</div>
1. **웹사이트 접속**: [https://factor.io.kr](https://factor.io.kr)
2. **회원가입 진행**:
- 우측 상단 **로그인** 클릭
- **회원가입** 탭 선택
- 이메일, 사용자명, 비밀번호 입력
- **Sign Up** 버튼 클릭
3. **이메일 인증**: 메일함에서 인증 링크 클릭
> 💡 **팁**: 이메일이 오지 않는다면 스팸 폴더를 확인하세요.
---
### 2단계: 플러그인 설치
<div align="center">
<img src="docs/2단계.png" alt="플러그인 관리자" width="600"/>
</div>
1. **OctoPrint 설정 열기**:
- 우측 상단 **🔧 스패너 아이콘** 클릭
- **Plugin Manager** 선택
<div align="center">
<img src="docs/2-1단계.png" alt="URL로 설치" width="600"/>
</div>
2. **URL로 설치**:
- **Get More…** 버튼 클릭
- **…from URL** 선택
- 아래 URL 붙여넣기:
```
https://github.com/kangbyounggwan/octoprint-factor-plugin/archive/main.zip
```
- **Install** 클릭
3. **OctoPrint 재시작**: 설치 완료 후 프롬프트에 따라 재시작
> ⚠️ **주의**: 재시작하지 않으면 플러그인이 활성화되지 않습니다.
---
### 3단계: 플러그인에서 로그인
<div align="center">
<img src="docs/3단계.png" alt="로그인" width="600"/>
</div>
1. **플러그인 실행**:
- 좌측 메뉴에서 **FACTOR MQTT** 클릭
- 1단계에서 생성한 **이메일/비밀번호** 입력
- **로그인** 버튼 클릭
---
### 4단계: 설비 등록
<div align="center">
<img src="docs/3-1단계.png" alt="장비 등록" width="600"/>
</div>
1. **Device UUID 생성**:
- **생성** 버튼 클릭
- 자동 생성된 Device UUID 확인 및 복사
2. **카메라 설정** (선택사항):
- 스트림 URL 입력 (예: `http://192.168.1.100:8080/stream`)
- **테스트** 버튼으로 연결 확인
- **저장** 클릭
3. **등록 완료**:
- **등록** 버튼 클릭
> 💡 **지원 카메라 형식**: MJPEG, WebRTC, RTSP, HLS
---
### 5단계: 웹에서 최종 설정
1. **웹사이트로 이동**:
- 플러그인에서 **FACTOR 웹사이트로 이동** 버튼 클릭
- 또는 직접 [https://factor.io.kr](https://factor.io.kr) 접속
2. **프린터 등록**:
- 4단계에서 생성한 **Device UUID** 입력
- 프린터 이름, 설명 등 설정
- **등록 완료** 클릭
3. **모니터링 시작**:
- 대시보드에서 프린터 상태 실시간 확인
- MQTT 자동 연결 및 데이터 전송 시작
<div align="center">
<img src="docs/결과.png" alt="완료" width="600"/>
**🎉 설치 완료! 이제 웹사이트에서 프린터를 모니터링하세요.**
</div>
---
## 🛠️ 문제 해결
### MQTT 연결 실패
**증상**: "연결 테스트" 실패
**해결 방법**:
1. 네트워크 연결 확인
2. 브로커 호스트/포트 재확인
3. 방화벽 설정 확인
4. OctoPrint 로그 확인: `Settings > Logging > octoprint.plugins.factor_mqtt`
### 카메라 스트림이 보이지 않음
**증상**: 웹사이트에서 카메라 피드 없음
**해결 방법**:
1. 스트림 URL이 올바른지 확인
2. HTTPS 사이트에서 HTTP 스트림은 차단될 수 있음 (Mixed Content)
3. 브라우저 콘솔에서 에러 확인 (F12)
4. ffmpeg 프로세스 상태 확인
### 로그 확인하기
```bash
# OctoPrint 로그 위치
~/.octoprint/logs/octoprint.log
# 실시간 로그 모니터링
tail -f ~/.octoprint/logs/octoprint.log | grep MQTT
```
### 일반적인 에러 코드
| 코드 | 의미 | 해결 방법 |
|------|------|----------|
| `rc=1` | 잘못된 프로토콜 버전 | 브로커 설정 확인 |
| `rc=2` | 클라이언트 ID 거부 | Instance ID 재생성 |
| `rc=3` | 서버 이용 불가 | 브로커 상태 확인 |
| `rc=4` | 잘못된 사용자명/비밀번호 | 인증 정보 재확인 |
| `rc=5` | 권한 없음 | 계정 권한 확인 |
---
## 🤝 기여하기
버그 리포트, 기능 제안, 풀 리퀘스트 환영합니다!
1. 이 저장소를 Fork 하세요
2. Feature 브랜치 생성 (`git checkout -b feature/AmazingFeature`)
3. 변경사항 커밋 (`git commit -m 'Add some AmazingFeature'`)
4. 브랜치에 Push (`git push origin feature/AmazingFeature`)
5. Pull Request 생성
### 개발 환경 설정
```bash
# 저장소 클론
git clone https://github.com/kangbyounggwan/octoprint-factor-plugin.git
cd octoprint-factor-plugin
# 가상환경 생성
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 의존성 설치
pip install -r requirements.txt
# 개발 모드로 설치
pip install -e .
```
---
## 📄 라이선스
이 프로젝트는 [AGPLv3 라이선스](LICENSE) 하에 배포됩니다.
---
## 🙏 감사의 말
- [OctoPrint](https://octoprint.org/) - 멋진 3D 프린터 제어 소프트웨어
- [Paho MQTT](https://www.eclipse.org/paho/) - MQTT 클라이언트 라이브러리
- 모든 베타 테스터분들께 감사드립니다!
---
<div align="center">
**[⬆ 맨 위로](#factor--octoprint--외부-모니터링--카메라-연동)**
Made with ❤️ by FACTOR Team
</div>
Raw data
{
"_id": null,
"home_page": "https://github.com/kangbyounggwan/octoprint-factor-plugin",
"name": "octoprint-factor-plugin",
"maintainer": null,
"docs_url": null,
"requires_python": "<4,>=3.8",
"maintainer_email": null,
"keywords": "octoprint, plugin, 3dprinting, mqtt, monitoring, camera",
"author": "FACTOR",
"author_email": "FACTOR Team <tlvh109@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/bd/a2/9689eb611b8371e24bc3c8774516b17531745af7470f94dca165a0ab4184/octoprint_factor_plugin-2.5.9.tar.gz",
"platform": null,
"description": "# FACTOR \u00d7 OctoPrint \u2014 \uc678\ubd80 \ubaa8\ub2c8\ud130\ub9c1 & \uce74\uba54\ub77c \uc5f0\ub3d9\r\n\r\n<div align=\"center\">\r\n\r\n<img src=\"docs/logo.png\" alt=\"FACTOR Logo\" width=\"150\"/>\r\n\r\n**3D \ud504\ub9b0\ud130\ub97c \uc5b4\ub514\uc11c\ub4e0 \ubaa8\ub2c8\ud130\ub9c1\ud558\uc138\uc694**\r\n\r\n\ud558\ub8e8 \uc885\uc77c \ucd9c\ub825 \ub3cc\ub824\ub193\uace0 \uc9d1\uc5d0 \uc624\ub2c8 **\uc2a4\ud30c\uac8c\ud2f0/\uc775\uc2a4\ud2b8\ub8e8\ub354 \uaf2c\uc784**\u2026\r\n\uadf8\ub798\uc11c **OctoPrint\uc640 \uc5f0\ub3d9\ub418\ub294 \uc678\ubd80 \ubaa8\ub2c8\ud130\ub9c1 \ud50c\ub7ab\ud3fc 'FACTOR'**\ub97c \ub9cc\ub4e4\uc5c8\uc2b5\ub2c8\ub2e4.\r\n\r\n[](https://github.com/kangbyounggwan/octoprint-factor-plugin)\r\n[](https://plugins.octoprint.org)\r\n[](LICENSE)\r\n[](README.md)\r\n[](README_EN.md)\r\n\r\n**[\ud83c\udf10 \uc6f9\uc0ac\uc774\ud2b8](https://factor.io.kr)** \u2022\r\n**[\ud83d\udce6 \ub2e4\uc6b4\ub85c\ub4dc](https://github.com/kangbyounggwan/octoprint-factor-plugin/archive/main.zip)** \u2022\r\n**[\ud83d\udcd6 \ubb38\uc11c](https://factor.io.kr/docs)** \u2022\r\n**[\ud83d\udcac \uc774\uc288 \uc81c\ubcf4](https://github.com/kangbyounggwan/octoprint-factor-plugin/issues)**\r\n\r\n</div>\r\n\r\n---\r\n\r\n## \ud83d\udccb \ubaa9\ucc28\r\n\r\n- [\uc8fc\uc694 \uae30\ub2a5](#-\uc8fc\uc694-\uae30\ub2a5)\r\n- [\ube60\ub978 \uc2dc\uc791](#-\ube60\ub978-\uc2dc\uc791)\r\n - [1\ub2e8\uacc4: \ud68c\uc6d0\uac00\uc785](#1\ub2e8\uacc4-\ud68c\uc6d0\uac00\uc785)\r\n - [2\ub2e8\uacc4: \ud50c\ub7ec\uadf8\uc778 \uc124\uce58](#2\ub2e8\uacc4-\ud50c\ub7ec\uadf8\uc778-\uc124\uce58)\r\n - [3\ub2e8\uacc4: \ud50c\ub7ec\uadf8\uc778\uc5d0\uc11c \ub85c\uadf8\uc778](#3\ub2e8\uacc4-\ud50c\ub7ec\uadf8\uc778\uc5d0\uc11c-\ub85c\uadf8\uc778)\r\n - [4\ub2e8\uacc4: \uc124\ube44 \ub4f1\ub85d](#4\ub2e8\uacc4-\uc124\ube44-\ub4f1\ub85d)\r\n - [5\ub2e8\uacc4: \uc6f9\uc5d0\uc11c \ucd5c\uc885 \uc124\uc815](#5\ub2e8\uacc4-\uc6f9\uc5d0\uc11c-\ucd5c\uc885-\uc124\uc815)\r\n- [\ubb38\uc81c \ud574\uacb0](#-\ubb38\uc81c-\ud574\uacb0)\r\n- [\uae30\uc5ec\ud558\uae30](#-\uae30\uc5ec\ud558\uae30)\r\n- [\ub77c\uc774\uc120\uc2a4](#-\ub77c\uc774\uc120\uc2a4)\r\n\r\n---\r\n\r\n## \u2728 \uc8fc\uc694 \uae30\ub2a5\r\n\r\n<table>\r\n<tr>\r\n<td width=\"50%\">\r\n\r\n### \ud83d\udda5\ufe0f \uc2e4\uc2dc\uac04 \ubaa8\ub2c8\ud130\ub9c1\r\n- \ucd9c\ub825 \uc9c4\ud589\ub960 \ubc0f \uc0c1\ud0dc \ud655\uc778\r\n- \uc628\ub3c4, \ud504\ub9b0\ud2b8 \uc2dc\uac04 \ucd94\uc801\r\n- \uc5ec\ub7ec \ud504\ub9b0\ud130 \ub3d9\uc2dc \ubaa8\ub2c8\ud130\ub9c1\r\n\r\n</td>\r\n<td width=\"50%\">\r\n\r\n### \ud83d\udcf9 \uce74\uba54\ub77c \uc5f0\ub3d9\r\n- MJPEG/WebRTC/RTSP/HLS \uc9c0\uc6d0\r\n- \uae30\uc874 \uc2a4\ud2b8\ub9bc URL \uadf8\ub300\ub85c \uc0ac\uc6a9\r\n- \uc2e4\uc2dc\uac04 \ube44\ub514\uc624 \uc2a4\ud2b8\ub9ac\ubc0d\r\n\r\n</td>\r\n</tr>\r\n<tr>\r\n<td width=\"50%\">\r\n\r\n### \ud83d\udd12 \ubcf4\uc548 \uac15\ud654\r\n- MQTT TLS/SSL \uc554\ud638\ud654 \uc9c0\uc6d0\r\n- Rate limiting \ubc0f \uc785\ub825 \uac80\uc99d\r\n- \uc548\uc804\ud55c \uba85\ub839 \uc2e4\ud589\r\n\r\n</td>\r\n<td width=\"50%\">\r\n\r\n### \u26a1 \uac04\ud3b8\ud55c \uc124\uce58\r\n- 5-10\ubd84 \ub0b4 \uc124\uc815 \uc644\ub8cc\r\n- \ud50c\ub7ec\uadf8\uc778 \uc790\ub3d9 \uc5c5\ub370\uc774\ud2b8\r\n- \uc9c1\uad00\uc801\uc778 UI\r\n\r\n</td>\r\n</tr>\r\n</table>\r\n\r\n---\r\n\r\n## \ud83d\ude80 \ube60\ub978 \uc2dc\uc791\r\n\r\n### \ud83d\udcdd \uc0ac\uc804 \uc694\uad6c\uc0ac\ud56d\r\n\r\n- OctoPrint 1.4.0 \uc774\uc0c1\r\n- Python 3.8 \uc774\uc0c1\r\n- \uc778\ud130\ub137 \uc5f0\uacb0\r\n\r\n### 1\ub2e8\uacc4: \ud68c\uc6d0\uac00\uc785\r\n\r\n<div align=\"center\">\r\n\r\n<img src=\"docs/1\ub2e8\uacc4.png\" alt=\"\ud68c\uc6d0\uac00\uc785\" width=\"600\"/>\r\n\r\n</div>\r\n\r\n1. **\uc6f9\uc0ac\uc774\ud2b8 \uc811\uc18d**: [https://factor.io.kr](https://factor.io.kr)\r\n2. **\ud68c\uc6d0\uac00\uc785 \uc9c4\ud589**:\r\n - \uc6b0\uce21 \uc0c1\ub2e8 **\ub85c\uadf8\uc778** \ud074\ub9ad\r\n - **\ud68c\uc6d0\uac00\uc785** \ud0ed \uc120\ud0dd\r\n - \uc774\uba54\uc77c, \uc0ac\uc6a9\uc790\uba85, \ube44\ubc00\ubc88\ud638 \uc785\ub825\r\n - **Sign Up** \ubc84\ud2bc \ud074\ub9ad\r\n3. **\uc774\uba54\uc77c \uc778\uc99d**: \uba54\uc77c\ud568\uc5d0\uc11c \uc778\uc99d \ub9c1\ud06c \ud074\ub9ad\r\n\r\n> \ud83d\udca1 **\ud301**: \uc774\uba54\uc77c\uc774 \uc624\uc9c0 \uc54a\ub294\ub2e4\uba74 \uc2a4\ud338 \ud3f4\ub354\ub97c \ud655\uc778\ud558\uc138\uc694.\r\n\r\n---\r\n\r\n### 2\ub2e8\uacc4: \ud50c\ub7ec\uadf8\uc778 \uc124\uce58\r\n\r\n<div align=\"center\">\r\n\r\n<img src=\"docs/2\ub2e8\uacc4.png\" alt=\"\ud50c\ub7ec\uadf8\uc778 \uad00\ub9ac\uc790\" width=\"600\"/>\r\n\r\n</div>\r\n\r\n1. **OctoPrint \uc124\uc815 \uc5f4\uae30**:\r\n - \uc6b0\uce21 \uc0c1\ub2e8 **\ud83d\udd27 \uc2a4\ud328\ub108 \uc544\uc774\ucf58** \ud074\ub9ad\r\n - **Plugin Manager** \uc120\ud0dd\r\n\r\n<div align=\"center\">\r\n\r\n<img src=\"docs/2-1\ub2e8\uacc4.png\" alt=\"URL\ub85c \uc124\uce58\" width=\"600\"/>\r\n\r\n</div>\r\n\r\n2. **URL\ub85c \uc124\uce58**:\r\n - **Get More\u2026** \ubc84\ud2bc \ud074\ub9ad\r\n - **\u2026from URL** \uc120\ud0dd\r\n - \uc544\ub798 URL \ubd99\uc5ec\ub123\uae30:\r\n ```\r\n https://github.com/kangbyounggwan/octoprint-factor-plugin/archive/main.zip\r\n ```\r\n - **Install** \ud074\ub9ad\r\n3. **OctoPrint \uc7ac\uc2dc\uc791**: \uc124\uce58 \uc644\ub8cc \ud6c4 \ud504\ub86c\ud504\ud2b8\uc5d0 \ub530\ub77c \uc7ac\uc2dc\uc791\r\n\r\n> \u26a0\ufe0f **\uc8fc\uc758**: \uc7ac\uc2dc\uc791\ud558\uc9c0 \uc54a\uc73c\uba74 \ud50c\ub7ec\uadf8\uc778\uc774 \ud65c\uc131\ud654\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\r\n\r\n---\r\n\r\n### 3\ub2e8\uacc4: \ud50c\ub7ec\uadf8\uc778\uc5d0\uc11c \ub85c\uadf8\uc778\r\n\r\n<div align=\"center\">\r\n\r\n<img src=\"docs/3\ub2e8\uacc4.png\" alt=\"\ub85c\uadf8\uc778\" width=\"600\"/>\r\n\r\n</div>\r\n\r\n1. **\ud50c\ub7ec\uadf8\uc778 \uc2e4\ud589**:\r\n - \uc88c\uce21 \uba54\ub274\uc5d0\uc11c **FACTOR MQTT** \ud074\ub9ad\r\n - 1\ub2e8\uacc4\uc5d0\uc11c \uc0dd\uc131\ud55c **\uc774\uba54\uc77c/\ube44\ubc00\ubc88\ud638** \uc785\ub825\r\n - **\ub85c\uadf8\uc778** \ubc84\ud2bc \ud074\ub9ad\r\n\r\n---\r\n\r\n### 4\ub2e8\uacc4: \uc124\ube44 \ub4f1\ub85d\r\n\r\n<div align=\"center\">\r\n\r\n<img src=\"docs/3-1\ub2e8\uacc4.png\" alt=\"\uc7a5\ube44 \ub4f1\ub85d\" width=\"600\"/>\r\n\r\n</div>\r\n\r\n1. **Device UUID \uc0dd\uc131**:\r\n - **\uc0dd\uc131** \ubc84\ud2bc \ud074\ub9ad\r\n - \uc790\ub3d9 \uc0dd\uc131\ub41c Device UUID \ud655\uc778 \ubc0f \ubcf5\uc0ac\r\n\r\n2. **\uce74\uba54\ub77c \uc124\uc815** (\uc120\ud0dd\uc0ac\ud56d):\r\n - \uc2a4\ud2b8\ub9bc URL \uc785\ub825 (\uc608: `http://192.168.1.100:8080/stream`)\r\n - **\ud14c\uc2a4\ud2b8** \ubc84\ud2bc\uc73c\ub85c \uc5f0\uacb0 \ud655\uc778\r\n - **\uc800\uc7a5** \ud074\ub9ad\r\n\r\n3. **\ub4f1\ub85d \uc644\ub8cc**:\r\n - **\ub4f1\ub85d** \ubc84\ud2bc \ud074\ub9ad\r\n\r\n> \ud83d\udca1 **\uc9c0\uc6d0 \uce74\uba54\ub77c \ud615\uc2dd**: MJPEG, WebRTC, RTSP, HLS\r\n\r\n---\r\n\r\n### 5\ub2e8\uacc4: \uc6f9\uc5d0\uc11c \ucd5c\uc885 \uc124\uc815\r\n\r\n1. **\uc6f9\uc0ac\uc774\ud2b8\ub85c \uc774\ub3d9**:\r\n - \ud50c\ub7ec\uadf8\uc778\uc5d0\uc11c **FACTOR \uc6f9\uc0ac\uc774\ud2b8\ub85c \uc774\ub3d9** \ubc84\ud2bc \ud074\ub9ad\r\n - \ub610\ub294 \uc9c1\uc811 [https://factor.io.kr](https://factor.io.kr) \uc811\uc18d\r\n\r\n2. **\ud504\ub9b0\ud130 \ub4f1\ub85d**:\r\n - 4\ub2e8\uacc4\uc5d0\uc11c \uc0dd\uc131\ud55c **Device UUID** \uc785\ub825\r\n - \ud504\ub9b0\ud130 \uc774\ub984, \uc124\uba85 \ub4f1 \uc124\uc815\r\n - **\ub4f1\ub85d \uc644\ub8cc** \ud074\ub9ad\r\n\r\n3. **\ubaa8\ub2c8\ud130\ub9c1 \uc2dc\uc791**:\r\n - \ub300\uc2dc\ubcf4\ub4dc\uc5d0\uc11c \ud504\ub9b0\ud130 \uc0c1\ud0dc \uc2e4\uc2dc\uac04 \ud655\uc778\r\n - MQTT \uc790\ub3d9 \uc5f0\uacb0 \ubc0f \ub370\uc774\ud130 \uc804\uc1a1 \uc2dc\uc791\r\n\r\n<div align=\"center\">\r\n\r\n<img src=\"docs/\uacb0\uacfc.png\" alt=\"\uc644\ub8cc\" width=\"600\"/>\r\n\r\n**\ud83c\udf89 \uc124\uce58 \uc644\ub8cc! \uc774\uc81c \uc6f9\uc0ac\uc774\ud2b8\uc5d0\uc11c \ud504\ub9b0\ud130\ub97c \ubaa8\ub2c8\ud130\ub9c1\ud558\uc138\uc694.**\r\n\r\n</div>\r\n\r\n---\r\n\r\n## \ud83d\udee0\ufe0f \ubb38\uc81c \ud574\uacb0\r\n\r\n### MQTT \uc5f0\uacb0 \uc2e4\ud328\r\n\r\n**\uc99d\uc0c1**: \"\uc5f0\uacb0 \ud14c\uc2a4\ud2b8\" \uc2e4\ud328\r\n\r\n**\ud574\uacb0 \ubc29\ubc95**:\r\n1. \ub124\ud2b8\uc6cc\ud06c \uc5f0\uacb0 \ud655\uc778\r\n2. \ube0c\ub85c\ucee4 \ud638\uc2a4\ud2b8/\ud3ec\ud2b8 \uc7ac\ud655\uc778\r\n3. \ubc29\ud654\ubcbd \uc124\uc815 \ud655\uc778\r\n4. OctoPrint \ub85c\uadf8 \ud655\uc778: `Settings > Logging > octoprint.plugins.factor_mqtt`\r\n\r\n### \uce74\uba54\ub77c \uc2a4\ud2b8\ub9bc\uc774 \ubcf4\uc774\uc9c0 \uc54a\uc74c\r\n\r\n**\uc99d\uc0c1**: \uc6f9\uc0ac\uc774\ud2b8\uc5d0\uc11c \uce74\uba54\ub77c \ud53c\ub4dc \uc5c6\uc74c\r\n\r\n**\ud574\uacb0 \ubc29\ubc95**:\r\n1. \uc2a4\ud2b8\ub9bc URL\uc774 \uc62c\ubc14\ub978\uc9c0 \ud655\uc778\r\n2. HTTPS \uc0ac\uc774\ud2b8\uc5d0\uc11c HTTP \uc2a4\ud2b8\ub9bc\uc740 \ucc28\ub2e8\ub420 \uc218 \uc788\uc74c (Mixed Content)\r\n3. \ube0c\ub77c\uc6b0\uc800 \ucf58\uc194\uc5d0\uc11c \uc5d0\ub7ec \ud655\uc778 (F12)\r\n4. ffmpeg \ud504\ub85c\uc138\uc2a4 \uc0c1\ud0dc \ud655\uc778\r\n\r\n### \ub85c\uadf8 \ud655\uc778\ud558\uae30\r\n\r\n```bash\r\n# OctoPrint \ub85c\uadf8 \uc704\uce58\r\n~/.octoprint/logs/octoprint.log\r\n\r\n# \uc2e4\uc2dc\uac04 \ub85c\uadf8 \ubaa8\ub2c8\ud130\ub9c1\r\ntail -f ~/.octoprint/logs/octoprint.log | grep MQTT\r\n```\r\n\r\n### \uc77c\ubc18\uc801\uc778 \uc5d0\ub7ec \ucf54\ub4dc\r\n\r\n| \ucf54\ub4dc | \uc758\ubbf8 | \ud574\uacb0 \ubc29\ubc95 |\r\n|------|------|----------|\r\n| `rc=1` | \uc798\ubabb\ub41c \ud504\ub85c\ud1a0\ucf5c \ubc84\uc804 | \ube0c\ub85c\ucee4 \uc124\uc815 \ud655\uc778 |\r\n| `rc=2` | \ud074\ub77c\uc774\uc5b8\ud2b8 ID \uac70\ubd80 | Instance ID \uc7ac\uc0dd\uc131 |\r\n| `rc=3` | \uc11c\ubc84 \uc774\uc6a9 \ubd88\uac00 | \ube0c\ub85c\ucee4 \uc0c1\ud0dc \ud655\uc778 |\r\n| `rc=4` | \uc798\ubabb\ub41c \uc0ac\uc6a9\uc790\uba85/\ube44\ubc00\ubc88\ud638 | \uc778\uc99d \uc815\ubcf4 \uc7ac\ud655\uc778 |\r\n| `rc=5` | \uad8c\ud55c \uc5c6\uc74c | \uacc4\uc815 \uad8c\ud55c \ud655\uc778 |\r\n\r\n---\r\n\r\n## \ud83e\udd1d \uae30\uc5ec\ud558\uae30\r\n\r\n\ubc84\uadf8 \ub9ac\ud3ec\ud2b8, \uae30\ub2a5 \uc81c\uc548, \ud480 \ub9ac\ud018\uc2a4\ud2b8 \ud658\uc601\ud569\ub2c8\ub2e4!\r\n\r\n1. \uc774 \uc800\uc7a5\uc18c\ub97c Fork \ud558\uc138\uc694\r\n2. Feature \ube0c\ub79c\uce58 \uc0dd\uc131 (`git checkout -b feature/AmazingFeature`)\r\n3. \ubcc0\uacbd\uc0ac\ud56d \ucee4\ubc0b (`git commit -m 'Add some AmazingFeature'`)\r\n4. \ube0c\ub79c\uce58\uc5d0 Push (`git push origin feature/AmazingFeature`)\r\n5. Pull Request \uc0dd\uc131\r\n\r\n### \uac1c\ubc1c \ud658\uacbd \uc124\uc815\r\n\r\n```bash\r\n# \uc800\uc7a5\uc18c \ud074\ub860\r\ngit clone https://github.com/kangbyounggwan/octoprint-factor-plugin.git\r\ncd octoprint-factor-plugin\r\n\r\n# \uac00\uc0c1\ud658\uacbd \uc0dd\uc131\r\npython -m venv venv\r\nsource venv/bin/activate # Windows: venv\\Scripts\\activate\r\n\r\n# \uc758\uc874\uc131 \uc124\uce58\r\npip install -r requirements.txt\r\n\r\n# \uac1c\ubc1c \ubaa8\ub4dc\ub85c \uc124\uce58\r\npip install -e .\r\n```\r\n\r\n---\r\n\r\n## \ud83d\udcc4 \ub77c\uc774\uc120\uc2a4\r\n\r\n\uc774 \ud504\ub85c\uc81d\ud2b8\ub294 [AGPLv3 \ub77c\uc774\uc120\uc2a4](LICENSE) \ud558\uc5d0 \ubc30\ud3ec\ub429\ub2c8\ub2e4.\r\n\r\n---\r\n\r\n## \ud83d\ude4f \uac10\uc0ac\uc758 \ub9d0\r\n\r\n- [OctoPrint](https://octoprint.org/) - \uba4b\uc9c4 3D \ud504\ub9b0\ud130 \uc81c\uc5b4 \uc18c\ud504\ud2b8\uc6e8\uc5b4\r\n- [Paho MQTT](https://www.eclipse.org/paho/) - MQTT \ud074\ub77c\uc774\uc5b8\ud2b8 \ub77c\uc774\ube0c\ub7ec\ub9ac\r\n- \ubaa8\ub4e0 \ubca0\ud0c0 \ud14c\uc2a4\ud130\ubd84\ub4e4\uaed8 \uac10\uc0ac\ub4dc\ub9bd\ub2c8\ub2e4!\r\n\r\n---\r\n\r\n<div align=\"center\">\r\n\r\n**[\u2b06 \ub9e8 \uc704\ub85c](#factor--octoprint--\uc678\ubd80-\ubaa8\ub2c8\ud130\ub9c1--\uce74\uba54\ub77c-\uc5f0\ub3d9)**\r\n\r\nMade with \u2764\ufe0f by FACTOR Team\r\n\r\n</div>\r\n",
"bugtrack_url": null,
"license": "AGPLv3",
"summary": "FACTOR Plugin - Remote monitoring and camera integration for OctoPrint",
"version": "2.5.9",
"project_urls": {
"Homepage": "https://factor.io.kr",
"Issues": "https://github.com/kangbyounggwan/octoprint-factor-plugin/issues",
"Repository": "https://github.com/kangbyounggwan/octoprint-factor-plugin"
},
"split_keywords": [
"octoprint",
" plugin",
" 3dprinting",
" mqtt",
" monitoring",
" camera"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "bda29689eb611b8371e24bc3c8774516b17531745af7470f94dca165a0ab4184",
"md5": "d921f9bdabf398df0020ac9a5c015ac8",
"sha256": "f913d40f6368d31cb90f67261d730029782d77112fbdb2cf101ebb941d80b849"
},
"downloads": -1,
"filename": "octoprint_factor_plugin-2.5.9.tar.gz",
"has_sig": false,
"md5_digest": "d921f9bdabf398df0020ac9a5c015ac8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4,>=3.8",
"size": 31101,
"upload_time": "2025-11-13T10:18:32",
"upload_time_iso_8601": "2025-11-13T10:18:32.582981Z",
"url": "https://files.pythonhosted.org/packages/bd/a2/9689eb611b8371e24bc3c8774516b17531745af7470f94dca165a0ab4184/octoprint_factor_plugin-2.5.9.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-11-13 10:18:32",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "kangbyounggwan",
"github_project": "octoprint-factor-plugin",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "OctoPrint",
"specs": [
[
">=",
"1.4.0"
]
]
},
{
"name": "paho-mqtt",
"specs": [
[
">=",
"2.0.0"
]
]
}
],
"lcname": "octoprint-factor-plugin"
}