기본 콘텐츠로 건너뛰기

추천 가젯

리눅스 홈서버 알림용 텔레그램 봇(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...

음 삼성이 GDDR7을 만들었다는데서 PAM3 기술을 사용해서, 데이터를 전송한다고 한다.


음 말이 좋아.. 

그냥 전송 매체의 클럭한계가 와서, 디지털에서 다시 아날로그로 가는거랑 같은 거 같은데


PAM3는 그러니까, 기존 0V, !0 V  신호 체계에서   0, 중간, 1 세개의 신호체계로 간다는거고
PAM4는 한번에 2비트씩     0V, (x/3)V, (2x/3)V , x V로 보내겠다는 거네...

디지털의 한계는 결국 아날로그로 가는 것으로 해결한다니.. 참... 


그래서 관심이 가서 어떻게 전송하는지 좋은지 python3으로 찾아보았다.

#!/bin/python3
ntrit = 1
nbit = 1

x = 3 / 2.0

pmin = 0.87
pmax = 1 / pmin

print("program start")

for n in range(1, 30000):
    if x > pmin and x < pmax:
        print(f"{n} loops 3**{ntrit} / 2**{nbit}")
    if x < 1:
        x = x * 2.0
        nbit += 1
    elif x >= 1:  # 
        x = x / 3.0
        ntrit += 1

print("program end")



결과 값 0.87 ~ 1/0.87 사이값이 나오는 ntrits와 nbits를 찾았다. 
program start
4 loops  1 find: 3**2 / 2**3 : 0.8888888888888888
12 loops  2 find: 3**5 / 2**8 : 1.0534979423868311
17 loops  3 find: 3**7 / 2**11 : 0.9364426154549611
25 loops  4 find: 3**10 / 2**16 : 1.1098579146132874
30 loops  5 find: 3**12 / 2**19 : 0.9865403685451444
35 loops  6 find: 3**14 / 2**22 : 0.8769247720401284
43 loops  7 find: 3**17 / 2**27 : 1.0393182483438559
48 loops  8 find: 3**19 / 2**30 : 0.9238384429723164
56 loops  9 find: 3**22 / 2**35 : 1.094919636115338
61 loops  10 find: 3**24 / 2**38 : 0.9732618987691892
74 loops  11 find: 3**29 / 2**46 : 1.0253294077568413
79 loops  12 find: 3**31 / 2**49 : 0.9114039180060812
87 loops  13 find: 3**34 / 2**54 : 1.0801824213405407
92 loops  14 find: 3**36 / 2**57 : 0.9601621523027029
100 loops  15 find: 3**39 / 2**62 : 1.1379699582846847
105 loops  16 find: 3**41 / 2**65 : 1.0115288518086085
110 loops  17 find: 3**43 / 2**68 : 0.8991367571632076
118 loops  18 find: 3**46 / 2**73 : 1.065643564045283
123 loops  19 find: 3**48 / 2**76 : 0.9472387235958072
131 loops  20 find: 3**51 / 2**81 : 1.122653302039475
136 loops  21 find: 3**53 / 2**84 : 0.9979140462573112
141 loops  22 find: 3**55 / 2**87 : 0.8870347077842765
149 loops  23 find: 3**58 / 2**92 : 1.0513003944109944
154 loops  24 find: 3**60 / 2**95 : 0.9344892394764396
162 loops  25 find: 3**63 / 2**100 : 1.107542802342447
167 loops  26 find: 3**65 / 2**103 : 0.984482490971064
172 loops  27 find: 3**67 / 2**106 : 0.8750955475298346
180 loops  28 find: 3**70 / 2**111 : 1.037150278553878
185 loops  29 find: 3**72 / 2**114 : 0.9219113587145582
193 loops  30 find: 3**75 / 2**119 : 1.0926356844024394
program end

아쉽게도 8의 배수에 해당하는 건 잘 안나온다.  어차피 전송체계니 바이트 체계를 그대로 가져가지 않아도 괜찮지 않을까, 

댓글

  1. 130 128/2 신호 같은걸 오류 검증용으로 쓰는거 보면, 조금 벗어나는건 문제가 안될 것이다. trit에서도 한번 체크 bit에서도 한번체크 한다고 하면 될테니.

    답글삭제

댓글 쓰기