rf server 수정
This commit is contained in:
parent
4bfddc2be8
commit
70319eea61
|
|
@ -0,0 +1,150 @@
|
||||||
|
import bluetooth
|
||||||
|
import subprocess
|
||||||
|
import webbrowser
|
||||||
|
import GPUtil
|
||||||
|
import psutil
|
||||||
|
import time
|
||||||
|
import signal
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
# 블루투스 서버 설정
|
||||||
|
HOST_MAC = '' # 모든 기기로부터 연결 허용
|
||||||
|
PORT = 5
|
||||||
|
|
||||||
|
def signal_handler(sig, frame):
|
||||||
|
print("Ctrl+C가 감지되었습니다. 서버를 종료합니다.")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
signal.signal(signal.SIGINT, signal_handler)
|
||||||
|
|
||||||
|
def format_uptime():
|
||||||
|
uptime_seconds = time.time() - psutil.boot_time()
|
||||||
|
days = int(uptime_seconds // 86400)
|
||||||
|
hours = int((uptime_seconds % 86400) // 3600)
|
||||||
|
minutes = int((uptime_seconds % 3600) // 60)
|
||||||
|
return f"{days}d {hours:02d}h {minutes:02d}m" if days > 0 else f"{hours:02d}h {minutes:02d}m"
|
||||||
|
|
||||||
|
def get_system_status():
|
||||||
|
"""시스템 자원 사용량 정보를 문자열로 반환합니다."""
|
||||||
|
cpu_usage = psutil.cpu_percent(interval=1)
|
||||||
|
ram_usage = psutil.virtual_memory().percent
|
||||||
|
gpu_temp = GPUtil.getGPUs()[0].temperature
|
||||||
|
disk_usage = psutil.disk_usage('/').percent
|
||||||
|
# NPU 사용량은 표준 라이브러리로 얻기 어려워 0으로 고정
|
||||||
|
return f"{format_uptime()} | CPU: {cpu_usage}% | RAM: {ram_usage}% | GPU: {gpu_temp}℃| Disk: {disk_usage}%"
|
||||||
|
|
||||||
|
def run_command(command):
|
||||||
|
"""지정된 명령어를 실행하고 결과를 반환합니다."""
|
||||||
|
if command == "youtube":
|
||||||
|
try:
|
||||||
|
webbrowser.open("https://youtube.com")
|
||||||
|
return "Youyube앱이 시작되었습니다."
|
||||||
|
except Exception as e:
|
||||||
|
return f"Youyube 실행 실패: {e}"
|
||||||
|
elif command == "copilot":
|
||||||
|
try:
|
||||||
|
webbrowser.open("https://copilot.microsoft.com/chats/")
|
||||||
|
return "copilot앱이 시작되었습니다."
|
||||||
|
except Exception as e:
|
||||||
|
return f"copilot 실행 실패: {e}"
|
||||||
|
elif command == "gemini":
|
||||||
|
try:
|
||||||
|
os.system("start chrome -new-window https://gemini.google.com")
|
||||||
|
return "Gemini 앱이 시작되었습니다."
|
||||||
|
except Exception as e:
|
||||||
|
return f"Gemini 실행 실패: {e}"
|
||||||
|
elif command == "chatgpt":
|
||||||
|
try:
|
||||||
|
webbrowser.open("https://chatgpt.com/")
|
||||||
|
return "chatgpt앱이 시작되었습니다."
|
||||||
|
except Exception as e:
|
||||||
|
return f"chatgpt 실행 실패: {e}"
|
||||||
|
elif command == "gitea":
|
||||||
|
try:
|
||||||
|
os.system("start firefox -new-window https://gitea.mkaidevops.xyz")
|
||||||
|
return "gitea앱이 시작되었습니다."
|
||||||
|
except Exception as e:
|
||||||
|
return f"gitea 실행 실패: {e}"
|
||||||
|
elif command == "redmine":
|
||||||
|
try:
|
||||||
|
os.system("start firefox -new-window https://redmine.mkaidevops.xyz")
|
||||||
|
return "redmine앱이 시작되었습니다."
|
||||||
|
except Exception as e:
|
||||||
|
return f"redmine 실행 실패: {e}"
|
||||||
|
elif command == "github":
|
||||||
|
try:
|
||||||
|
os.system("start chrome -new-window https://redmine.mkaidevops.xyz")
|
||||||
|
return "github앱이 시작되었습니다."
|
||||||
|
except Exception as e:
|
||||||
|
return f"github 실행 실패: {e}"
|
||||||
|
elif command == "taskmgr":
|
||||||
|
os.system("taskmgr")
|
||||||
|
return("run taskmgr")
|
||||||
|
elif command == "get_status":
|
||||||
|
return get_system_status()
|
||||||
|
else:
|
||||||
|
return f"알 수 없는 명령어: {command}"
|
||||||
|
|
||||||
|
def main():
|
||||||
|
try:
|
||||||
|
server_sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
|
||||||
|
server_sock.bind((HOST_MAC, PORT))
|
||||||
|
server_sock.listen(1)
|
||||||
|
|
||||||
|
print("Bluetooth 서버 대기 중...")
|
||||||
|
print(f"Server Port: {PORT}")
|
||||||
|
|
||||||
|
client_sock = None
|
||||||
|
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
# 1초 타임아웃을 설정하여 블로킹을 방지하고 Ctrl+C를 감지합니다.
|
||||||
|
server_sock.settimeout(1.0)
|
||||||
|
client_sock, client_info = server_sock.accept()
|
||||||
|
print(f"클라이언트 연결됨: {client_info}")
|
||||||
|
client_sock.settimeout(5.0) # 연결 후 통신 타임아웃을 5초로 설정
|
||||||
|
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
print("[DEBUG] 클라이언트로부터 데이터 수신 대기 중...")
|
||||||
|
data = client_sock.recv(1024)
|
||||||
|
if not data:
|
||||||
|
print("[DEBUG] 클라이언트가 연결을 종료했습니다.")
|
||||||
|
break
|
||||||
|
|
||||||
|
command = data.decode('utf-8').strip()
|
||||||
|
print(f"[DEBUG] 명령어 수신: {command}")
|
||||||
|
|
||||||
|
response = run_command(command)
|
||||||
|
client_sock.send(response.encode('utf-8'))
|
||||||
|
print(f"[DEBUG] 응답 전송: {response}")
|
||||||
|
|
||||||
|
except bluetooth.btcommon.BluetoothError as e:
|
||||||
|
print(f"[DEBUG] 통신 오류: {e}")
|
||||||
|
break # 내부 루프 종료
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[DEBUG] 예상치 못한 통신 오류: {e}")
|
||||||
|
break # 내부 루프 종료
|
||||||
|
|
||||||
|
except bluetooth.btcommon.BluetoothError as e:
|
||||||
|
# 타임아웃 오류는 무시하고 루프를 계속합니다.
|
||||||
|
if "timed out" in str(e):
|
||||||
|
continue
|
||||||
|
print(f"예상치 못한 오류: {e}")
|
||||||
|
|
||||||
|
finally:
|
||||||
|
if client_sock:
|
||||||
|
print("[DEBUG] 클라이언트 소켓 닫는 중...")
|
||||||
|
client_sock.close()
|
||||||
|
print("[DEBUG] 연결 종료.")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"서버 초기화 오류: {e}")
|
||||||
|
finally:
|
||||||
|
server_sock.close()
|
||||||
|
print("서버 소켓 종료.")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
Loading…
Reference in New Issue