2019년 12월 19일 목요일

Synology MailPlus - SMTPUTF8 is required, but was not offered by host 에러.



Synology MailPlus 로 메일 서버를 돌리고 있습니다.
라이센스도 100만원 넘게 주고 샀죠..
그런데..종종 이렇게 메일 반송 되어 옵니다.

SMTPUTF8 is required, but was not offered by host

즉 상대방 호스트가 SMTPUTF8 를 처리하지 못한다는건데.. SMTPUTF8 를 꺼주면 됩니다.
하지만 Synology Mail Plus 설정을 아무리 찾아봐도 없습니다.

SSH로 접속해서 Postfix main.cf 를 직접 편집해 줘야합니다.

smtputf8_enable = yes 부분을..
smtputf8_enable = no 으로 변경해줍니다.


어떤 파이을 수정해야 할지가 문젠데..

find / -type d -name "MailPlus-Server"

으로 MailPlus-Server 을 검색해 보니 여러개가 나오네요..

find / -type f -name "main.cf"
find / -type f -name "main.template"

검색을 해봅니다..

현재 실행중인 패키지를 수정해 줘야합니다.

vi /volume1/@appstore/MailPlus-Server/etc/main.cf

그리고,서버를 재시작 하면 다시 원복 되니..

vi /var/packages/MailPlus-Server/target/etc/template/main.template

부분도 수정을 해줍니다.

vi 에티터 손에 익으면 편한데..
/ 를 눌러서 키워드를 입력하면 검색이 됩니다.
// 는 다음 검색 입니다.


수정후엔 MailPlus를 리로드 해줍니다.

sudo /volume1/@appstore/MailPlus-Server/sbin/syno_mailserverd reload

2019년 12월 7일 토요일

프리미엄토미카 타이캐스팅 1/64 몇개 사봤습니다.



아들내미가 페라리를 좋아해서 유치원에 줄 크리스마스 선물로 샀는데.. 너무작다..ㅠㅠ

2019년 11월 14일 목요일

Raspberry Pi SSH 활성화 및 SSH 접속 포트 변경.

Raspberry Pi 를 처음 설치 했다면 기본적으로 SSH가 막혀 있다.
Enable 해주는게 필요 한데 방법은 간단하다.

Micro SD에 ssh 라는 파일을 하나 만들어 주면 된다.

아니면 raspi-config를 실행해서 설정을 바꿔 줄수도 있다.

sudo raspi-config

간단하니 따로 이미지 가지는 필요 없을테고..
7 번 Advanced Options 으로 들어가서  A4 SSH 클릭한 후 Enable 해주면 된다.

그리고, SSH 포트는 기본적으로 22번 이지만 보안상 문제나. ISP에 따라서 22번 포트가 막혀 있어서 외부에서 접속을 못하는 경우가 있어서 포트를 바꿔야 할 경우가 있다.

sudo nano /etc/ssh/sshd_config
sshd_config 에 Port 22 부분을 원하는 값으로 변경해 주면 된다.





그리고
sudo service ssh restart
이제

Raspberry Pi 부팅시 할당 받은 IP를 DuckDNS 에 적용 시키기.

Raspberry Pi  에 tvHeadend 올려서 운용 중인데...
ISP로 할당 받은 IP가 그때 그때 마다 달리질 경우 모니터를 연결해서 확인해 줘야 하는데 여간 귀찮은 일이 아니겠죠.

그래서 부팅시 DNS에 등록을 하려고 합니다.
검색해 본 결과 DuckDNS 가 무료이며 좋습니다.

http://www.duckdns.org/install.jsp 을 참고 하면 되는데.. 간단히 설명 하면...
우선 http://www.duckdns.org/ 에 들어가서 가입을 하고.




2019년 11월 13일 수요일

Raspberry Pi 버젼 확인.

Raspberry Pi에 tvHeadend 를 올려서 사용 중인데.
업데이트를 하려다 보니..버젼이 헷갈린니다..
stretch 이거나  jessie 일텐데...
이럴땐..

cat /etc/os-release 를 치면 쉽게 확인이 가능하다.


2019년 5월 5일 일요일

BMW 냉각수.


냉각수가 부족 하다는 경고등이 떠서 BMW 냉각수에 대해서 검색해 봤습니다.
정품 냉각수가 1.5 리터에 만원 초반이면 구매 가능하네요~



BMW 순정 냉각수는 파란색 입니다.

2019년 4월 24일 수요일

Prusa MMU2s 서비스 모드 (플래쉬 초기화, 보우덴 삽입 길이 교정)



Prusa MMU2s 서비스 모드 (플래쉬 초기화, 보우덴 삽입 길이 교정)

프린터 전원을 끄고, MMU2s에 가운데 버튼을 누른 상태에서 전원을 켭니다.
1번LED(오렌지,녹색) 5번LED(오렌지) 가 들어오면 서비스 모드에 진입 한겁니다.
여기서...할수 있는게 몇가지 있는데... 플래쉬롬 초기화 서비스 모드에서..
좌,우 버튼을 눌러서 LED를 2번째에 가게 하고 가운데 버튼을 누릅니다.
그리고 다시 LED를 3번째로 가게 한후 다시 가운데 버튼을 누릅니다.
그럼 플래쉬롬이 초기화 되고 MMU2s 가 리부팅 됩니다.
Bowden 플라멘트 삽입 교정 서비스 모드에서..
좌,우 버튼을 눌러서 LED를 4번째에 가게 하고 가운데 버튼을 누릅니다.
이제 교정 모드로 들어 왔습니다...
1~5번째 중에 몇번째 필라를 교정 할건지
좌,우 버튼을 눌러서 이동 한 가운데 버튼을 2초간 누르면
필라가 익스트루더로 공급이 됩니다.
여기서 본드텍 기어까지 필라가 가지 않는다면...좌(+) 버튼을 눌러서 필라를 더 넣어주고.
본드텍 기어를 기나서 까지 필라를 많이 밀어준다면 우(-) 버튼을 눌러서 조정 합니다.
교정이 끝나면 가운데 버튼을 누르면 설정 값이 저장 됩니다.
저장 한후 다시 가운데 버튼을 2초간 눌러서 맞게 적용 되었나 확인해 보는것이 좋습니다.
이렇게 1~5번째 필라를 모두 교정 한후엔..
5번에서 오른쪽으로 한번더 가면 5번째 LED 2개가 순차적으로 깜빡이게 됩니다.
이때 가운대 버튼을 2초가 눌러주면 됩니다~

2019년 4월 22일 월요일

Git 사용해 보기.





우선 Synology NAS에 Git 서버를 설치하고, SSH 포트를 오픈해주고,
사용자 설정에서 홈디렉토리 사용으로 한후 git용 계정을 하나 만들어주고,
Git 서버에서 해당 계정을 git으로 사용 한다고 지정 해준다.

Synology 웹서버 500 번 에러 대처 방법

일반적으로 페이지를 찾을수 없을때 404 에러가 뜹니다.

그런데 웹서버 잘 운영중이다가..어느날 갑자기 500번 에러가 뜨네요...
웹사이트가 유지 관리 중이라는데...저는 유지 관리 중이 아닌데...
아무래도 Synology NAS 에서 웹서버를 돌리는데..
업데이트 하면서 설정이 바뀐것 같습니다.



.Net Framework 변수 대입 부분 HEX 코드

요즘 많은 프로그램을 .Net을 사용해서 만듭니다.
.Net 같은 경우 어셈블러 코드가 좀 달라서 참고용으로 간단히 설명해 보려고 합니다.
아래와 같이 VB.Net 을 이용해서 프로그램을 짰습니다.

Arduino(아두이노) RS-422(RS-485)로 스케치 전송하기. [작성중]



우선 Arduino 스케치를 전송 할때는 RS-232에서 Rx,Tx,DTR,GND 4선을 사용합니다.(일반적인 RS-232통신에서는 DTR을 안쓰고 3선을 연결하죠.)

송,수신 선이 나눠져 있으니 전이중(Full-duplex) 통신이 가능합니다.



그리고 RS-422에 경우 Rx,Tx 에 해당하는 선이 +,- 로 나눠서 RX+,RX-, TX+,TX- 로 4선을 사용해서 노이즈에 강하게 설계가 되었습니다.

송,수신 선이 나눠져 있으니 전이중(Full-duplex) 통신이 가능합니다.

그리고 추가로 RS-485에 경우 RS-422에서 RX+,TX+ 와 RX-,TX- 를 묶어서 2선을 사용 합니다.

송,수신 선이 합쳐져 있으니 반이중(Half-duplex) 통신만 가능합니다.

2선을 사용하는 장점이 있지만 송,수신 선이 서로 묶에 있어서 이를 동시에 처리 할 수는 없어서 소프트웨어적으로 동기를 잡아 줘야 합니다.



RS-485 Driver 는 소프트웨어적으로 DE, RE 단자를 제어해 줘야 합니다. (송신 할때 High를 주고, Low 상태에서는 수신만 가능 합니다.)

RS-485 Driver 를 사용해서 RS-422을 구현 하려며 칩을 2개 사용 해서 칩 하나는 항상 수신, 다른 하나는 항상 송신으로 사용 하면 되겠죠.

그럼 Arduino에 스케치 전송을 위해서 DTR도 RS-485 Driver 를 사용해서 DTR+,DTR-로 변환해서 처리를 한다면 DTR시그널이 살아나므로 노이즈에 강한 시그널을 사용할수 있습니다.

반이중(Half-duplex)방식칩을 3개 사용하는 개념이 되겠습니다.

그냥 RS-422을 사용할수 있는 RS-422 Driver 를 2개 사용해도 되지만 시그널 4개는 필요 없으니 왠지 손해보는 느낌이고, RS-422,485 Driver 를 섞어 써도 됩니다.
기호에 맞게 회로를 구성 하면 되지만 칩을 두종류 재고로 확보하기도 애매해서 저는 그냥 RS-422 Driver 인 MAX485 을 3개 사용 하려고 합니다.



RS422과 RS485에 9핀 핀배열을 위와 같습니다.

저는 DTR신호를 추가 하려고 하니..일반적으로 많이 쓰지 않는 4번,9번에 DTR+, DTR-를 사용 할겁니다.



그리고 RS485 Driver 에서 나온 5V TTL 신호를 다시 RS232 신호인 12V 로 변환하기 위해서 RS232 Driver를 사용할겁니다.




- 작성중이므로 이후 내용은 추후에 추가 하겠습니다. -

직구한 료비(Ryobi) 충전기 P117을 110V -> 220v 로 개조 하기

폴리셔를 알아보다가 가격대비 좋은 료비 제품을 직구 하게 되었습니다.
미국 직구 제품이라 120 볼트 용 제품 이라 도란쓰를 쓰던가 개조를 하던가 해야 합니다.
도란스는 아무래도 불편해서 개조를 해보려고 합니다.

스펙을 보면 120볼트 입력 입니다..
별 볼트 4개를 풀어서 커버를 오픈해 줍니다.

이렇게 생겼습니다.
전원코드 들어 가는 부분이 전원 회로가 있는 부분 이겠죠..

우선 처음 봐야 할게 바리스터 입니다.



부품 데이타 시트를 보니 175볼트에 49줄 이네요..

부품을 사야 하는데...하나만 주문 하기가 애매해서 안쓰는 가전 제품을 보니...

DVD 플레이어 전원부에 바리스터가 들어 있습니다.

이 부품 데이타 시트를 보니 300볼트에 45줄 이네요...스펙이 좀 간당 간당 하지만 그냥 쓰려고 합니다.

납 흡입기나 인두를 이용해서 부품을 떼어 냅니다.


왼쪽이 료비 충전비가 원래 있던 부붐이고
오른쪽 파란색이 DVD 플레이어에서 떼어낸 부품 입니다.

떼어낼 부품이 없다면 그냥 430볼트따리 10파이나 14파이로 구매해서 붙이면 됩니다.

떼어낸 자리에 새 바리스터를 납땜 합니다.
그리고 다이오드 4개 붙은 부분에 보면 쇼트바가 남땜 되어 있는데.. 이걸 컷팅 합니다.



그리고 콘덴서를 바꿔줘야 하는데...큰 용량이라 가지고 있는게 없어서 그냥 저항을 붙일겁니다
콘덴서를 바꾸실거라면...내압 400v 에 220uF에 105도 이상으로 두개 달아 주시면 되겠지만..
대콘이라 가격이 싸진 않고...크기가 커질겁니다~

100k 옴 4개를 준비해서..

두개씩 연결해 주고..

수축 튜브나 절연 테이프를 감아 줍니다.

수축 튜브로 하는게 깔끔 하긴 합니다.

이제 기판을 뒤집에서 트랜지 스터에 한조씩 붙여 줍니다.


그리고 전원 코드가 110 볼트용이니 돼지코를 쓰던가...
전원 코드를 바꿔 줍니다.

저는 그냥 흔이 볼수 있는 컴퓨터용 코드를 재활용 했습니다.

그리고 전원을 연결해해서 특별히 열이 나는 소자가 있나 열화상 카메라로 찍어 봤는데..
별 문제 없네요..

이제 선을 정리하고..


충전을 하면 됩니다~

주차장 문 개폐 리모콘키 복사하기



처가집에 가면 빌라인데 리모콘 키가 있습니다.




이렇게 생겼는데... 리모콘이 1개라서 와이프가 갈땐 저 키를 쓰고..

제 차를 타고 갈땐 그 키를 꺼내서 가지고 가야 하는데 불편해서..키를 추가로 살까 하다가...

그냥 만들어 봤습니다.

우선 주파수를 몇을 쓰는지 몰라서... 433MHz 와 315MHz 둘다 테스트 해봤는데.. 315MHz를 사용 하네요...

315mHz 방식 송/수신 모듈을 사서... 수신기로 분석한 값을 메모 해 놨다가...

송신기 만들어서 그 값을 보내주게 프로그램 했습니다...







Arduino Pro에 스위치 버튼 하나 달고.... 송신 모듈을 달아 줫습니다.

사진에 케이블을 프로그램 전송 때문에 여러 가닥인데..다 떼어 버리고...전원 5 볼트만 연결 하면 됩니다.#include <RCSwitch.h> bool bFirstRun = false; RCSwitch mySwitch = RCSwitch(); void setup() { pinMode(6, INPUT); pinMode(13, OUTPUT); Serial.begin(9600); // Transmitter is connected to Arduino Pin #10 mySwitch.enableTransmit(10); // Optional set pulse length. mySwitch.setPulseLength(447); // Optional set protocol (default is 1, will work for most outlets) //mySwitch.setProtocol(2); // Optional set number of transmission repetitions. // mySwitch.setRepeatTransmit(15); } void loop() { if (bFirstRun == false) { digitalWrite(13,HIGH); mySwitch.send(1380428, 24); //mySwitch.send(1380464, 24); //mySwitch.send(1380419, 24); bFirstRun = true; } if ( digitalRead(6) ) { digitalWrite(13,HIGH); mySwitch.send(1380428, 24); while (digitalRead(6)) { delay(1); } } delay(10); digitalWrite(13,LOW); return; /* See Example: TypeA_WithDIPSwitches */ mySwitch.switchOn("11111", "00010"); delay(1000); mySwitch.switchOff("11111", "00010"); delay(1000); /* Same switch as above, but using decimal code */ mySwitch.send(5393, 24); delay(1000); mySwitch.send(5396, 24); delay(1000); /* Same switch as above, but using binary code */ mySwitch.send("000000000001010100010001"); delay(1000); mySwitch.send("000000000001010100010100"); delay(1000); /* Same switch as above, but tri-state code */ mySwitch.sendTriState("00000FFF0F0F"); delay(1000); mySwitch.sendTriState("00000FFF0FF0"); delay(1000); delay(5000); }





원래 리모콘 수신해서 값을 분석하기 위한 수신 리시버에 코드는 다음과 같습니다.

그냥 수신만 잠시 하기 위해서 만든거니 코드 정리는 안했습니다.#include <EEPROM.h> #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); unsigned long nEEPROMValue; void setup() { pinMode(12, OUTPUT); pinMode(13, OUTPUT); pinMode(A3, INPUT); Serial.begin(9600); Serial.println("Run"); mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2 nEEPROMValue = EEPROMReadlong(1); } void loop() { if (mySwitch.available()) { output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(),mySwitch.getReceivedProtocol()); Serial.println( mySwitch.getReceivedValue() ); //output(1); if (mySwitch.getReceivedValue() == nEEPROMValue) { if (digitalRead(12) == LOW) { Serial.println("on"); digitalWrite(12,HIGH); digitalWrite(13,HIGH); } else { Serial.println("off"); digitalWrite(12,LOW); digitalWrite(13,LOW); } delay(1000); } mySwitch.resetAvailable(); } if ( digitalRead(A3) == HIGH) { delay(1000); if ( digitalRead(A3) == HIGH) { digitalWrite(13,HIGH); Serial.println("TeachMode Start"); bool bLoop = true; while ( digitalRead(A3) == HIGH ) {} while (bLoop) { if ( digitalRead(A3) == HIGH) { bLoop = false; Serial.println("TeachMode End"); } if (mySwitch.available()) { nEEPROMValue = mySwitch.getReceivedValue(); EEPROMWritelong(1,nEEPROMValue); Serial.print("EEPROM Save : "); //Serial.println(EEPROMWritelong); bLoop = false; } } digitalWrite(13,LOW); } } } void EEPROMWritelong(int address, unsigned long value) { //Decomposition from a long to 4 bytes by using bitshift. //One = Most significant -> Four = Least significant byte byte four = (value & 0xFF); byte three = ((value >> 8) & 0xFF); byte two = ((value >> 16) & 0xFF); byte one = ((value >> 24) & 0xFF); //Write the 4 bytes into the eeprom memory. EEPROM.write(address, four); EEPROM.write(address + 1, three); EEPROM.write(address + 2, two); EEPROM.write(address + 3, one); } unsigned long EEPROMReadlong(long address) { //Read the 4 bytes from the eeprom memory. long four = EEPROM.read(address); long three = EEPROM.read(address + 1); long two = EEPROM.read(address + 2); long one = EEPROM.read(address + 3); //Return the recomposed long by using bitshift. return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF); }