수행기록퀘스트2
장비실 화재 발생 감지 안내 문자 발송 처리 시스템
1. 전산 시스템과 관련된 여러 직원이 동시에 휴대폰 문자 메시지를 받을 수 있어야 함
2. 화재 발생시 및 화재 진압 완료시 상황 안내 문자를 받을 수 있어야 함
3. 화재 발생 후, 지정한 일정 시간 간격으로 상황 안내 문자를 받을 수 있어야 함.
4. 화재 발생 초기에는 짧은 간격으로 문자 안내 되고,
5. 화재진압 시간이 길어짐에 따라 시간 간격을 적절히 달리 지정하여 문자 안내될 수 있게 작동
소스 코드 : https://github.com/wansoo/check_fire/blob/main/check_fire.py
화재가 발생하기 쉬운 건조한 겨울이 되었습니다.
전산 장비실은 전기 스파크가 많이 발생하는 환경으로 화재 발생 위험이 높아 화재 문제는 아무리 강조해도 지나치지 않습니다.
일반 사무실 환경이라도 갖가지 온열기 사용이나 과도한 전기 사용으로 인해 화재 발생이 높아 사람이 상주하지 않는 시간에는 화재를 감지하는 시스템이 있다면 좋을 것 같습니다.
그래서, 화재 발생시에 관련된 담당자 모두에게 휴대폰 안내 문자를 동시 발송하는 시스템을 만들어 보았습니다.
구성 요소로는 라즈베리파이, 불꽃 감지 센서 그리고 사내 사용중인 KT SMS 발송 시스템 (Oracle DBMS 연동)도 활용했습니다.
KT가 아닌 LG 등 통신사의 SMS 발송 시스템도 시스템에 있어서 조금의 차이는 있겠지만 큰 틀에서는 대동소이 할 것으로 적절히 일부 수정 적용한다면 사용 시스템에 관계 없이 모두 적용 가능할 것이라 예상됩니다.
1. 기본 환경 구성
파이썬에서 Oracle과의 연동을 위해 cx_Oracle 패키지를 일반적으로 사용하지만... cx_Oracle 패키지를 사용하기 위해서는 Oracle에서 제공하는 Instant Client를 설치해야 한데... 32bit ARM용 Instant Client를 Oracle에서 제공하지 않기 때문에 라즈비안에서 사용하기 어렵겠고... Oracle에서 제공하는 자바 기반의 sqlcl Oracle DB 접속기가 있어 sqlcl을 사용하여 라즈비안에서 파이썬과 Oracle DB 연동을 구현했습니다.
sqlcl의 최신 버전은 openjdk와의 호환성에 문제가 있는 것으로 보여, sqlcl 17.4.0을 다운 받아 사용하였고요.
sqlcl 17.4.0은 아래 URL에서 다운 받아 사용할 수 있겠고...
( 오라클 홈페이지 계정 로긴 필요함 )
https://download.oracle.com/otn/java/sqldeveloper/sqlcl-17.4.0.354.2224-no-jre.zip
라즈비안에서 JDK 설치는
sudo apt install openjdk-8-jdk 명령으로 jdk 8을 설치해도 되고,
sudo apt install default-jdk 명령으로 사용 가능한 최신 jdk를 설치해서 사용해도 되고요.
저는 default-jdk를 설치해서 사용했는데, openjdk 11.0.21이 설치된 상태입니다.
처음에 oracle sql 쿼리를 sqlcl에 아래와 같이
echo 명령과 pipe를 사용하여
echo –e "select '한글' from dual;\nquit"|sql id/pass@ip:1521:sid
와 같이 실행하는 방식이나,
리다이렉션을 사용한
sql id/pass@ip:1521:sid <<EOF
select '한글' from dual
quit
EOF
와 같이 실행하는 방식을 사용해 보려고 했으나...
두방식 모두 한글이 깨어지는 문제가 있어 이를 해결하기 위해 1주일가량 고심하다가
sql script 파일을 지정하여 실행할 경우에 한글이 정상적으로 처리된다는 것을 확인하고 sql 스크립트 파일을 생성하여 지정하는 방식인
sql id/pass@ip:1521:sid @sql_script
와 같이 명령을 사용하기로 결정하였습니다.
1주일가량 한글 처리 문제에 대한 해결 방법을 찾지 못해 포기하려는 마음도 있었으나...
다행히 sql 파일 지정 방식으로 한글을 정상적으로 처리할 수 있어 작업을 계속 진행할 수 있게 되었습니다.
시스템 환경 구성 작업을 요약 정리해 보면...
- jdk 설치
sudo apt install default-jdk -y
2. 아래 링크에서 sqlcl-17.4.0를 다운 받아 압축 해제. ( oracle 홈페이지 로긴 필요 )
https://download.oracle.com/otn/java/sqldeveloper/sqlcl-17.4.0.354.2224-no-jre.zip
압축 해제는
unzip sqlcl-17.4.0.354.2224-no-jre.zip 명령
또는
7za x sqlcl-17.4.0.354.2224-no-jre.zip 등의 명령 사용.
압축 해제한 디렉터리 그대로 사용해도 되지만...
sudo mkdir /opt/oracle;chmod a+rx /opt/oracle
명령으로 /opt 디렉터리 아래에 oracle 디렉터리를 만든후, 퍼미션 조정해 주고...
sudo cp sqlcl /opt/oracle/ -r 명령으로
sqlcl 디렉터리 전체를 /opt/oracle/ 아래에 복사해서 사용했고요.
3. RPi 패키지 설치 ( 파이썬에서 GPIO 사용하기 위한 패키지 )
sudo apt install python3-rpi.gpio
2. 불꽃 감지 센서 연결
+5 전원 공급 핀을 라즈베리파이 5V Vcc 핀에, GND 핀을 라즈베리파이 접지 핀에 연결하고...
라즈베리파이는 기본적으로 아날로그 입력 핀이 없기 때문에 Analog 핀은 사용하지 않고, Digtal 핀을 라즈베리파이의 BCM 17번 핀에 연결했습니다.
3. 파이썬을 이용한 코딩
코드내의 보안과 개인적인 민감내용들은 임의 변경처리하였고... 각 코드에 대한 설명을 달아두어 코드들에 대한 추가 설명은 생략합니다.
소스 코드 : https://github.com/wansoo/check_fire/blob/main/check_fire.py
- 첨부파일
- 불꽃 감지 센서를 활용한 장비실 화재 감지 안내 문자 전송.zip 다운로드
로그인 후
참가 상태를 확인할 수 있습니다.