인기글
-
[CAN] ISO-TP(ISO15765-2) 메시지 종류 및 Frame #1
ISO-TP(ISO 15765-2) CAN-Bus를 통해 데이터 패킷을 전송하기 위한 국제 표준 CAN 프레임의 최대 페이로드 8바이트를 초과하는 메시지의 전송을 가능하게 함 ISO-TP는 긴 메시지를 여러 프레임으로 분할하여 개별 프레임으로 해석하고 수신자가 완전한 메시지 패킷으로 재조립 할 수 있도록 지원 메시지 패킷당 최대 4095바이트의 페이로드를 사용 할 수 있음 프로토콜 제어를 위한 메시지 프레임 종류 ISO-TP 분할된 메시지 전송 절차 7바이트 보다 큰 메시지는 메시지 패킷을 여러 프레임에 걸쳐 분할 해야 함 송신자는 FF(First Frame)을 송신하여 보낼 메시지의 사이즈를 수신자에게 전달 함 송신자는 수신자가 FC(Flow Control Frame)를 보내기를 기다림. FC에는 수신..
-
[Github Action] Github Action을 이용하여 간단한 배포 자동화 구축하기 #2
Github Action 설정 Github Action으로 배포 자동화를 위해 workflow를 등록 해야 한다. 본 프로젝트에서는 deployToAWS.yml workflow를 생성 하고, ubuntu 가상 머신을 실행하고 appleboy/ssh-action을 이용하여 SSH 접속 할 수 있도록 내용을 기입 하였다. 이때 SSH 접속을 위한 AWS_TEST_X_HOST, AWS_TEST_X_USERNAME, AWS_TEST_X_KEY, AWS_TEST_X_PORT는 Github Repository Settings에 미리 설정 해 둬야 한다. # This is a basic workflow to help you get started with Actions name: DEPLOY TESTX TO AWS #..
-
[Steve 서버 구축 #2] VM 설정
1. Putty로 Lightsail VM에 연결 SSH 연결이 정상적으로 수행되면 아래와 같은 화면을 볼 수 있습니다. 2. Update $ sudo apt update && sudo apt -y upgrade 3. Steve 서버를 구동하기 위한 필요한 패키지 설치 Steve를 구동하기 위한 maven과 mysql 패키지를 설치 합니다. $ sudo apt install maven mysql-client-core-5.7 4. DB 연결 후 데이터베이스 생성 앞에서 생성한 DB 인스턴스에서 username과 password를 이용하여 아래 명령을 수행 합니다. 명령에 대한 의미는 아래와 같습니다. mysql -u -h -p $ mysql -u dbmasteruser -h 생성한 DB end point -..
-
[Steve 서버 구축 #1] AWS Lightsail 인스턴스 & DB 인스턴스 생성
OCPP ChargePoiint 기능을 테스트하기 위해 Steve OCPP 서버를 Lightsail에 구축하려고 합니다. 우선 급한대로 AWS Lightsail에 구축을 해서 테스트 한 다음, 해당 서버를 NCP 쿠버네티스에 커스텀해서 배포 할 계획 입니다. Steve를 NCP 쿠버네티스에 배포하는 방법은 추후에 포스팅 하도록 하겠습니다. 1. 인스턴스 생성 Steve 서버의 문서에 나와 있는 것과 같이 Ubuntu 18.04 버전을 설치 하였습니다. 높은 버전이 있었지만 혹시나 호환성 문제나 문서에 나와 있는 방식대로 되지 않는 상황을 피하기 위해 문서에 나온 버전과 최대한 동일한 버전을 사용하였습니다. 2. 고정 IP 설정 생성한 공인 IP가 변경되지 않도록 AWS Lightsail에서 Static ..
-
[Docker] 사용하지 않는 모든 데이터 제거 및 볼륨만 제거
사용하지 않는 모든 데이터(컨테이너가 없는 볼류 포함) 제거 명령 $ docker system prune 사용하지 않는 볼륨만 제거 명령 $ docker volume prune
-
라즈베리파이, 오렌지파이 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 ..
-
[OCPP Charge Point #1] Steve와 Websocket 연결 테스트
mobilityhouse/ocpp 프로젝트 OCPP(Open Charge Point Protocol)와 관련된 Python 라이브러리르 제공하는 GitHub 프로젝트입니다. https://github.com/mobilityhouse/ocpp GitHub - mobilityhouse/ocpp: Python implementation of the Open Charge Point Protocol (OCPP). Python implementation of the Open Charge Point Protocol (OCPP). - GitHub - mobilityhouse/ocpp: Python implementation of the Open Charge Point Protocol (OCPP). github.com ..
-
[testXJIG QR 코드 인식 고도화 #3-2] 조명 제어
앞에서 이야기 했듯이 레이저 각인된 QR 코드 인식률을 높이기 위해서는 조명 제어가 필요 했다. 다양한 테스트를 진행한 결과, 카메라 렌즈가 있는 부분과 JIG 장치의 좌,우 부분 이렇게 세 군데에 조명을 장착하고 이를 순차적으로 ON/OFF 하면서 플래시 역할을 하니 레이저 각인 QR 코드의 인식률이 많이 좋아졌다. 위와 같이 조명 제어를 JIG S/W가 하도록 하기 위한 회로 구성과 S/W를 정리 한다. ( 현재는 POC 단계로 릴레이 모듈과 브레드 보드를 사용했지만, 추후 보드로 제작할 예정이다. ) 회로 구성 4채널 릴레이 모듈 12V로 동작하는 조명의 스위치 역할을 하기 위해 릴레이 모듈을 사용했다. 릴레이 모듈은 아래 그림과 같이 1채널 당 NO(Normally Open), COM(공통단자),..
최근 작성된 글
-
리눅스 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..