인기글
-
[SAE J1939] DM1 ( Diagnostic Message 1)
DM1(Diagnostic Message 1) - Active Diagnostics Trouble Code DM1은 PGN 65226(0xFECA)를 사용하며, 활성 DTC가 있거나 요청의 응답이 있는 경우에만 주기적으로 전송 된다. 활성화 된 DTC가 1개 이상일 경우, DM 1 메시지는 전송 프로토콜을 사용 하여 전송되며, 이 메시지의 전송 주기는 1초이다. 전송 프로토콜 장치에서 DM1 메시지를 보내기 위해서는 아래와 같은 전송 프로토콜을 사용한다. 처음 J1939 Transport Protocol BAM( Connection Management ) 메시지를 보내서 앞으로 보낼 DM1 메시지의 메시지 Size, Packet의 갯수, DM1의 PGN을 Receiving Node에게 알려 준다. 이후,..
-
SKT LTE Cat.M1 모듈 소개
01.Cat.M1모듈소개 SKT LTE Cat.M1 모듈 소개 현재(2018년 7월 기준) SKT에 공식적으로 인증된 Cat.M1 모듈은 우리넷 2종, AM텔레콤 1종이 있다. 우리넷(Socket)_WM-N400N400MSE Socket Type 우리넷 80Pin Socket 타입 모듈로써, 해당 모듈에는 GPS와 LTE 안테나를 연결할 수 있도록 uFL 커넥터가 내장되어 있다. (모듈 왼쪽 GPS 안테나, 모듈 오른쪽 LTE 안테나) Pin Description Interface 아래 정보는 WM-N400N400MSE 모듈의 Interface들을 위한 하드웨어 정보이다. 기본적으로 전원은 +3.4V ~ +4.2V를 공급해야 하며, 모듈 부팅을 위해 36번 핀 혹은 46번 핀을 이용해야 한다. 추가로 주..
-
[Docker-compose] 실행 중인 컨테이너 로그 확인 방법
실행 중인 모든 서비스의 로그를 확인 하는 방법 docker-compose logs -f -t 실행 중인 특정 컨테이너 로그 확인 하는 방법 docker-compose logs -t -f logs 옵션 설명 -no-color : 단색 출력을 생성 -f, -follow : 로그 출력을 따라감 -t, -timestamps : 타임 스탬프 표시 -tail = "all" 각 컨테이너의 로그 끝부터 표시
-
[CortexM3] NVIC_SystemReset() 실행 후 Reset이 되지 않는 경우 해결 방법
Cortex M3의 Software Reset인 NVIC_SystemReset() 함수를 수행해도 M3가 Reset 되지 않는다. 정확한 원인은 모르겠지만, M3의 Reset 핀을 Pull Up 하고 중간에 1K 옴 정도의 저항을 붙여 주면 문제가 해결된다. 구글링 해 보니, NVIC_SystemReset() 함수 내부적으로 M3의 Reset Pin을 제어 한다고 한다. 이때, Pull Up되어 있는 전류가 너무 강해 Low로 떨어지지 않아서 Reset 되지 않는 경우가 있다고 한다.
-
LPWAN(Low Power Wide Area Network)란?
1.LoRa란 LPWAN(Low Power Wide Area Network)란? 우리에게 익숙한 Wi-Fi, Bluetooth의 경우, 무료로 사용 할 수 있는 통신이지만 통신 거리가 짧다는 단점이 있다. 만약 통신 범위가 넓은 응용이 필요하다면 Cellur N/W와 같은 3G, 4G 통신을 사용 할 수 있다. 하지만 저용량 데이터를 취급하는 소물인터넷의 경우, 해당 데이터에 3G, 4G 데이터 요금을 내는 것은 불합리 할 수 있다.시장의 이런 요구를 만족 하기 위해 LPWAN(Low Power Wide Area Network) 기술이 개발되어 서비스 중이며, Sigfox, LoRa, NB-IOT 동이 LPWAN의 대표 통신 기술이다. 국내에서는 SK 텔레콤이 LoRa와 LTE Cat.M1 ( 2018년..
-
[XMODEM] 프로토콜 정리
XMODEM 이란? 바이너리 데이터 전송을 하기 위한 프로토콜입니다. 최초의 Xmodem 프로토콜은 최대 128bytes의 데이터만 보낼 수 있어, Ymodem, Zmodem 등의 개량판이 있었습니다. 최근 Xmodem은 모드를 선택해서 128bytes의 데이터를 사용 할지 1KBytes의 데이터를 사용할지 선택 할 수 있습니다. XMODEM 기본 Protocol Byte 시리얼 통신에서 일반적으로 사용하는 통신 제어 문자를 사용 합니다. 각 문자 별 특징은 아래와 같습니다. SOH, Start Of Header ( 0x01 ) 메시지의 시작을 의미 함 XMODEM 128 모드에서 사 STX, Start Of Text ( 0x02 ) 본문 시작, 헤더 종료 XMODEM 1K 모드에서 사용 EOT, End..
-
[Windows] $GetCurrent 폴더
$GetCurrent 폴더는 윈도우 업데이트 파일 등의 보관 및 로그 기록들을 보관하는 폴더이다. 해당 폴더는 Windows Update와 Windows10 Upgrade 등의 설치 파일이 포함될 경우도 있으며, 이 경우에는 3~4시가 정도의 고용량을 보관 할 수 도 있다. 참고 자료 https://itfix.tistory.com/1342 $GetCurrent 폴더의 의미와 삭제 여부 $GetCurrent 폴더는 윈도우가 설치된 디스크 아래에 숨김 폴더 형태로 존재하는 시스템 폴더의 일종입니다. 따라서 이 폴더를 보이게 하려면 파일 탐색기 상단 메뉴 중 보기 옵션에 있는 폴더 옵션 itfix.tistory.com
-
[서버] 무차별 접속 시도 IP 차단 방법(fail2ban)
AWS에 테스트 서버를 배포 하고 몇일 구동 시켰더니, DB 접속이 안된다면서 웹 서비스 구동이 멈췄다. Docker Log를 확인 해 보니, DB에 User, Password가 일치 하지 않아 접속에 실패 되는 것을 확인 하였다. 아무래도, 누군가 DB에 접속해서 Password를 변경 한 것으로 보인다. ( 기본 DB 계정에, Default Port 번호, 쉬운 비밀번호를 사용 했더니 쉽게 보안이 뚤린거 같다. ) 보안을 강화 하기 DB 포트 변경 및 강화된 비밀번호를 사용하고, 무차별 접속 시도를 하는 IP를 OS 단에서 차단 하기 위해 "fail2ban"을 설치 하여 설정 하였다. fail2ban 설치 $ apt-get install fail2ban fail2ban 설정 설정 파일 경로 : /et..
최근 작성된 글
-
리눅스 usb-serial latency 값 줄이기
JIG에서 UART 메시지를 이용하여 Target MCU의 펌웨어 업데이트 하는 기능이 있습니다. Target MCU에 펌웨어 업데이트 시간을 줄이기 위해 MCU에서 지원하는 최대 baud_rate로 설정하고 리눅스에 설정되어 있는 usb-serial 장치의 latency_timer 값을 1로 설정 하였다. usb-serial/devices/latency_timer란 usb-serial 장치에서 데이터 전송을 얼마나 자주 할 것인지를 결정하는 설정 입니다. 이 값은 USB 버스에서 장치가 데이터 패킷을 보내는 빈도를 조절 합니다. 예를 들어, 'latency_timer'가 낮은 값으로 설정되어 있다면, 시스템은 더 자주 데이터를 보내게 되어 실시간성이 좋아 지지만 전체 처리량은 감소 할 수 있습니다. 반..
-
[OCPP Gateway] TW_OCPP
TW_OCPP란 전기차 충전소 관리 시스템(EV Charging Station Management System, 이하 Central System)과 충전소(Charge Point)간의 통신을 중계하는 장치 입니다. OCPP는 전 세계적으로 널리 사용되는 개방형 프로토콜로, 다양한 제조업체의 충전소와 관리 시스템 간에 호환성을 제공 합니다. 용어 정리 Central System Charge Point를 관리하고, 사용자가 해당 Charge Point를 사용할 수 있는지 여부를 인증하는 정보를 가지고 있는 중앙 시스템(Central System) Charge Point Charge Point는 전기차를 충전할 수 있는 물리적 시스템이다. Charge Point는 하나 이상의 충전 커넥터를 가짐 CSMS(Ch..
-
[django] 마이그레이션 롤백 하는 방법
기존 데이터를 유지하면서 django migrate로 마이그레이션 문제를 해결하기 위한 방법을 정리 합니다. 마이그레이션이 충돌되거나 문제가 발생 했을 때, 아래와 같은 명령으로 롤백 할 수 있습니다. 특정 migration_name에 지정된 스키마 형태로 마이그레이션 수행 $ python manage.py migrate [app_name] [migration_name] 만약 모든 마이그레이션을 롤백 하려면 아래 명령 수행 $ python manage.py migrate [app_name] zero
-
라즈베리파이, 오렌지파이 SD 카드 깨짐 문제
제품 개발을 하던 중, 보드의 전원이 갑자기 차단하면 보드의 SD 카드의 파일이 깨지는 현상이 있었습니다. 아마 보드 입장에서 프로그램이 동작하면서 파일 시스템의 파일들을 Write 하는 도중에 전원이 차단되어 파일이 깨지는 것으로 보입니다. 해결 방법 임시 해결 방법일 수 있으나, 아래와 같이 fstab 파일에 sync 옵션을 추가 하는 방법이 있습니다. $ sudo vi /etc/fstab UUID=73379811-91e8-4483-8aff-7d4bc3cca9f6 / ext4 defaults,sync,noatime,commit=600,errors=remount-ro 0 1 UUID=5BC1-359C /boot vfat defaults 0 2 tmpfs /tmp tmpfs defaults,nosuid ..
-
[쿠버네티스] CPU 점유율 메모리 사용량 확인, HPA 설정
쿠버네티스에서 사용하는 POD들의 CPU 점유율과 메모리 사용량을 확인 하는 방법과 Autoscaling을 위한 HPA 설정 방법을 정리 하였습니다. POD CPU 점유율과 메모리 사용량 확인 현재 사용 중인 pod의 CPU 점유율과 메모리 사용량을 확인하는 명령은 아래와 같습니다. CPU의 100m는 0.1 core를 의미 합니다. 메모리의 116Mi는 116Mbytes를 의미 합니다. kubectl top pods -n C:\>kubectl top pods -n testx-dev NAME CPU(cores) MEMORY(bytes) tx-msa-device-service-dev-8496684c75-bzph2 208m 116Mi tx-msa-fe-backend-service-dev-666555767d-..
-
[쿠버네티스] Helm 차트의 Resource와 Autoscaling
쿠버네티스에 Deployment를 위한 설정 중 Resource와 Autoscaling에 대해 정리 합니다. Resources 파드에 할당할 CPU와 메모리 리소스의 최소, 최대 한계를 정의 파드가 사용 할 수 있는 리소스의 양을 제한하여, 리소스의 과도한 사용을 방지하고, 다른 파드와의 리소스 경쟁을 최소화 하는데 도움을 줌 Resources 설정 예제는 아래와 같습니다. resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" requests 파드가 시작될 때 요청하는 리소스의 양 이 값을 기반으로 쿠버네티스 스케줄러는 파드를 적절한 노드에 배치 limits 파드가 사용할 수 있는 리소스의 최대 한계 이 한계..
-
[pyinstaller] 바이러스, 트로이 목마 문제 해결
pyinstaller를 사용하여 패키징 할 때, 멀웨어로 인식되는 문제를 해결한 방법을 정리 하였습니다. 문제 pyinstaller를 사용하여 python 프로그램을 패키징 할 때 아래와 같은 에러가 발생 하고 Windows Depender에서는 트로이목마 파일이 있다면서 에러를 출력 하였다. File "c:\Workspace\venv_phoenixon\lib\site-packages\PyInstaller\building\build_main.py", line 1071, in main build(specfile, distpath, workpath, clean_build) File "c:\Workspace\venv_phoenixon\lib\site-packages\PyInstaller\building\bui..
-
[PySide2] TextEdit의 textChanged 이벤트를 받아 개행 문자 삭제
Example Code TextEdit에서 입력된 값이 변경될 때 마다 이벤트를 받아 개행문자가 있는지 확인하고 삭제하는 예제입니다. TextEdit에 수정된 문자열을 입력하면서도 이벤트가 발생 할 수 있기 때문에 아래와 같이 무한루프를 방지하기 위한 코드를 추가 하였습니다. from PySide2.QtWidgets import QApplication, QTextEdit, QVBoxLayout, QWidget class MyWidget(QWidget): def __init__(self): super().__init__() # 레이아웃 설정 self.layout = QVBoxLayout(self) # QTextEdit 위젯 생성 및 레이아웃에 추가 self.text_edit = QTextEdit() sel..