기본 콘텐츠로 건너뛰기

추천 가젯

리눅스 홈서버 알림용 텔레그램 봇(Telegram Bot) 연동 및 쉘 스크립트 구축 가이드

개인 홈서버를 운영하다 보면 백업 완료 여부나 시스템 에러 같은 단방향 알림을 스마트폰으로 빠르게 받아보고 싶어집니다. 외부 메일 서버나 복잡한 SMTP 설정을 거치지 않고, 가장 확실하고 가볍게 쓸 수 있는 텔레그램 봇을 이용한 홈서버 알림 구축 방법 을 정리합니다. 1단계: 텔레그램 봇 생성하기 (BotFather) 텔레그램 앱을 켜고 상단 검색창에 BotFather 를 검색하여 공식 봇(파란색 체크마크 확인)을 엽니다. 대화창에 아래 명령어를 입력하여 새로운 봇을 만듭니다. Plaintext /newbot 봇의 이름(Name)을 입력합니다. (예: My Home Server Bot ) 봇의 아이디(Username)를 입력합니다. (반드시 영문이며 끝에 bot 또는 _bot 으로 끝나야 합니다. 예: my_home_backup_bot ) 생성이 완료되면 HTTP API 토큰(Token)이 발급됩니다. 이 토큰을 안전하게 보관합니다. 2단계: 내 Chat ID(채팅방 고유 번호) 확인하기 텔레그램은 보안상 사용자가 먼저 봇에게 말을 걸어야 메시지를 받을 수 있으며, 봇이 나에게 메시지를 보내려면 고유 Chat ID 가 필요합니다. 텔레그램 검색창에 userinfobot 을 검색하여 들어갑니다. 하단의 [시작하기] 버튼을 누르면 내 계정의 정보와 함께 Id (숫자) 값을 알려줍니다. 이 숫자를 복사해 둡니다. [중요] 1단계에서 만든 내 봇의 아이디(예: @my_home_backup_bot )를 검색해서 대화창을 열고, [시작] 버튼을 누르거나 아무 메시지나 먼저 한 번 전송해 둡니다. 3단계: 리눅스 쉘 스크립트 작성 및 테스트 서버(터미널)에서 환경변수를 설정하고 curl 명령어를 통해 테스트 메시지를 보낼 수 있습니다. 특히 인자값이 없을 때를 대비해 기본값 처리를 해두면 유용합니다. 아래 내용을 포함하는 쉘 스크립트 파일(예: send_telegram.sh )을 작성합니다. Bash #!/bin/bash # 환경변수 설정 (실제 토큰과 C...

브로드캐스팅을 활용한, 소규모 영상제작시 타임코드 관리법.

 https://g.co/gemini/share/580748d10dd4

예시코드는,  브로드캐스트 방식으로 씬넘버 테이크넘버 등이 바뀔때 배포하는 것이며, 

일정시간 약 1~10분 정도마다 직접 배포도 하게 해놓으면 좋다. 


그외는 일정시간마다, 타임코드를 폰이 직접관리하게 하다가,   서버(로컬네트워크 노트북)

에 요청해서 접속해서 해당 데이터를 요청하는 방식으로 간다


그리고 timecode는 LTC를 사용하여 왼쪽 채널 오른쪽 채널로 내보낸다. 

화면에는 씬넘버 테이크 넘버, 노트북 관리자가 보내는 메시지등이 나오게 한다. 




listen.py  (브로드캐스팅 리슨)

import socket

import json


# 서버와 동일한 포트 번호를 사용

PORT = 5007


# UDP 소켓 생성

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)


# 모든 IP 주소로부터 오는 메시지를 받기 위해 '0.0.0.0'으로 바인딩

# '0.0.0.0'은 모든 네트워크 인터페이스를 의미

sock.bind(('0.0.0.0', PORT))


print("수신 대기 중...")


try:

    while True:

        # 패킷 수신 (최대 1024바이트)

        data, addr = sock.recvfrom(1024)

        

        # JSON 형식의 데이터를 디코딩

        message = json.loads(data.decode('utf-8'))

        

        print(f"[{addr[0]}]로부터 수신: {message}")


except KeyboardInterrupt:

    print("수신 중단")

finally:

    sock.close()


broadcast.py

import socket

import time

import json


BROADCAST_IP = '192.168.1.255' # 로컬 네트워크에 맞는 브로드캐스트 주소

# 만약 '255.255.255.255'를 사용하면 모든 네트워크 인터페이스를 통해 브로드캐스트 됨

PORT = 5007


# UDP 소켓 생성

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 브로드캐스트 옵션 설정

sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)


try:

    while True:

        # 전송할 데이터 (타임코드 및 사용자 정보)

        timecode_data = {

            "timecode": {

                "hour": time.localtime().tm_hour,

                "minute": time.localtime().tm_min,

                "second": time.localtime().tm_sec,

                "frame": 0

            },

            "user_data": {

                "scene": "A01",

                "take": "1"

            }

        }

        

        message = json.dumps(timecode_data).encode('utf-8')

        sock.sendto(message, (BROADCAST_IP, PORT))

        print(f"Sent: {message.decode('utf-8')}")

        time.sleep(1) # 1초마다 전송


except KeyboardInterrupt:

    print("서버 종료")

finally:

    sock.close() 

댓글

  1. 텐타클 타임코드 제너레이터는 젠록도 없는놈이 한개에 40만원이나 한다.
    그냥, 핸드폰을 사용하자.

    어차피 세부 싱크는 맞춰야하는데, 1 2프레임은 사람이 고생하는게 낮다.
    그런데, 너무 낮은 수준에서는, 비디오 카메라에 따로 타임코드 수신부가 없는경우도 있고, 따로 붐마이크 녹음을 안하고 현장 녹음을 하는경우도 있어서, LTC를 수신할 포트가 없을 수도 있다.

    답글삭제

댓글 쓰기