기본 콘텐츠로 건너뛰기

(완료)라즈베리파이와 + Homebridge API로 Siri를 통한 Arduino Web server 제어하기!

 예전에 해외 사이트( https://sourceforge.net/projects/siriproxyrpi/) 에서 siriproxyrpi에 대해서 본 적이 있다. 아이폰 빌트인 Siri로 전자제품을 자유롭게 제어하는 것..

당연히 해보고 싶었기에 이 때 라즈베리파이를 구매하게 되었으나, 회사홈페이지때문에 바쁘다는 핑계로 묵혀두었던 나의 홈오토메이션 열정에 기름을 붓게 된 분이 계셨으니 바로 클리앙 이라는 IT  커뮤니티의 '채플린'님 이다.


 클리앙 팁과 강좌 게시판에서 homebridge 와 NEST API + esp8266 + mutt broker + app 조합으로 홈 오토메이션을 멋드러지게 소화해 내신 '채플린'님( https://github.com/chaeplin/neptune ) 의 사례를 보고 리알못(리눅스를 전혀 알지 못함 ㅠ_ㅠ)인 내가 먼지가 내려 앉은 라즈베리파이를 꺼내들고 용기내어 도전하게 되었다.


 우선 아두이노 웹서버는 철거 하기 귀찮을 뿐만 아니라.. 라즈베리파이에서 Python 으로 대체하는데에는 다소 시간이 걸릴것으로 생각되기 때문에! 기존 http GET 주소를 그대로 사용한다. (파알못이라 ㅠ_ㅠ) 


라즈베리 파이3 모델B에 우선 최신 운영체제인 Jessie를 설치!


http://www.raspberrypi.org

위 사이트에 방문해서 상단 Downloads-Raspbian-Raspbian Jessie-Download ZIP
파일을 다운받고..

micro SD 카드를 FAT32로 우선 포맷-SDformatter앱(sd카드는 포맷할때 이 앱을 써야한다고 한다-)

으로 포맷을 하고 win32diskimager(https://sourceforge.net/projects/win32diskimager/) 를 통해 img파일을 부팅가능하도록 micro SD카드에 굽는다.


나는 맥북에 있는 빌트인 SD카드리더에 항상 Tardisk(Kickstarter에서 구매한 256GB 슬림SD카드)가 꼽혀있어서 그걸 뽑으면 Dropbox, 사진, iTunes Library가 연결이 끊어지게 되고 다시 위치를 잡아주는게 귀찮아서 예전에 서점에서 구매한 미니 SD카드 USB리더를 사용해서 작업을 하려 했었는데.. 이 걸 사용하려던게 화근이었다 ㅠㅠ win32diskimager에서 인식이 안되기도 하고.. 맥에서 인식이 안되기도 하고.. 간헐적으로 맥에서는 인식되고 패러럴즈에서는 인식이 안되기 까지.. 엄청 고생함.. 결국 그냥 Tardisk를 뽑아내고 인식이 안되는 microSD카드는 차량용 블랙박스에 잠깐 끼워서 강제로 포맷 해버린 후 진행하니 잘 되었다.(사실 이 microSD카드 때문에 엄청난 시간을 낭비함..)

여차저차.. 데비안이라는 OS의 개선형 운영체제 JESSIE 라는 아이를 드디어 라즈베리파이 안에 설치하게 되었다. 여담인데 JESSIE 라는 이름은 토이스토리2에 나오는 카우보이 여자의 이름이라고 한다. '데비안'이라는 이름도 토이스토리의 등장인물이기에 그 개선형도 '제시'라고 지었다고 한다.  

제시라 하면.. 쎈언니!? 어디 얼마나 강력한가 한번 볼까?



생김새는 아주 귀엽다.
저 위에 검정색 모니터 모양의 아이콘이 터미널인듯.. 초기 세팅법을 인터넷을 검색해서 진행하였다. 

비록 블루투스기능이 들어가 있는 최신기종의 라즈베리파이이지만 늘 모니터와 마우스, 키보드를 사용 할 수는 없는터라 와이파이에 연결시켜놓고 가장먼저 원격으로 조종이 가능한 방법을 찾아보았다.

VNC를 설치하는 방법으로 진행 (http://gma-log.tistory.com/72 )

$ sudo apt-get update
$ sudo apt-get install tightvncserver
만 입력하면 설치가 완료 된다.
그리고 vncserver :1을 입력하여 서버 번호를 설정, 비밀번호를 설정해 주면

클라이언트(맥북)에서 "ip주소":1 을 입력하고 비밀번호를 입력하는 간단한 절차만으로
VNC로 라즈베리파이에 접속이 가능하다.

라즈베리파이가 가진 ip주소도 포트포워딩을 해놓는다면 카페에 가서도 라즈베리파이에 접속이 가능! 그래서 바로 192.168.0.179를 포트포워딩 해 놓았다.

 자 이제 라즈베리 파이 준비가 완료 되었으니
homebridge를 vnc설치방법과 동일하게 설치를 시작해볼까!?

https://github.com/nfarina/homebridge

에 가서 보면 메인화면에서부터 애플워치로 시리에게 "문열어"하면 문이 열리는 마법같은 움짤을 볼 수 있다.


$sudo npm install -g homebridge
을 입력하여 설치를 진행한다.
헌데..


WARN EACCES user "root" does not have permission to access the dev
가 나온다. 이럴경우에는 위 명령어에 --unsafe-perm 을 말미에 추가하면 된다고 알려주는 친절한 홈브릿지 아자씨!


그 다음 config.json 파일을 만들겸 편집하면 되는데 터미널에서


$ sudo vi ~/.homebridge/config.json  라고 치면 파일이 만들어지면서 vi 이라는 편집기가 열린다.

vi 편집기 사용방법을 몰라서 또.. vi 명령어 일람 (http://www.antsys.co.kr/data/vi_editor.htm)을 참고
해 진행했다.

내게 필요한건 i를 누르면 insert 모드로 전환되고 편집 후 esc를 눌러서 insert 모드 해제 후 :wq 입력하여 저장하고 닫기 또는 :q!로 저장안하고 닫기 하는 것 정도 선이었다. ㅎㅎ


홈브릿지 설치 및 config.json 파일 수정이 완료 되었으니 자 그럼 어디한번 잘 되는지 실행 해 볼까?

$ homebridge

를 입력하면 아래와 같이 터미널이 출력된다



아래 회색 박스 안에 있는 코드가 있어야 아이폰 홈 앱에서 연결이 가능하다.

연결이 완료되고 홈 앱에서 확인이 되면 identity request가 오고간다.

홈 앱을 열고

시작하기를 누르면 '나의 집'이 자동으로 추가된다

액세서리 추가를 누르면 라즈베리파이에서 만든 homebridge가 뜬다. 눌러주자

터미널 창에 있는 코드를스캔하라는데.. 레티나 디스플레이라서 그런지.. 안된다.
아래 '코드를 직접 입력하기' 를 눌러서 

수동 입력을 완료 하면 뜨는 메시지

기숙사로 설정해주고..
그리고 시리한테 말하기 편한 단어로 변경했다. 나는 기숙사에 살고 있어서..
책상에 있는 스탠드가 내가 제어할 수 있는 전등의 전부다 ㅎ



자 이렇게 완성이 되었고.. 시연 동영상~!
 
리모컨-릴레이 컨트롤

스탠드 전원 제어

config.json 소스코드

 {
  "bridge": {

        "name": "Homebridge",
        "username": "CC:22:3D:E3:CE:55",
        "port": 51826,
        "pin": "031-45-154"
    },

    "description": "Yejinius' HomeAutomation Service",

    "platforms": [],
    "accessories": [
    {
      "accessory": "Http",
      "name": "Light",
      "switchHandling":"realtime",
      "http_method":"GET",
      "caption": "Stand",

            "on_url":                "LOCALIPADDRESS:PORT/?lighton1",
            "off_url":                "LOCALIPADDRESS:PORT/?lightoff1",
            "status_url": "",
            "service":"Switch",
            "brightnessHandling": "no",
            "brightness_url": "",
            "brightnesslvl_url": "",
            "username": "",
            "password": ""
      },
      {
        "accessory": "Http",
        "name": "MainDoor",

        "switchHandling":"realtime",
        "http_method":"GET",
        "caption": "Maindoor",

              "on_url":                "LOCALIPADDRESS:PORT/?HIGH",
              "off_url":                "LOCALIPADDRESS:PORT/?LOW",
              "status_url": ""
      }
    ]
}

가끔 사용자의 실수로 homebridge가 이중실행 되면 실행시
 Error: listen EADDRINUSE :::51826  ~~ 뭐시기

가 뜬다. 이럴 땐 
$ killall homebridge
$ sudo killall homebridge
후 재실행 하면 되며..

가끔 homebridge와 아이폰 홈앱이 꼬이기도 하나보다. homebridge는 정상적으로 실행 됨을 확인했는데 아이폰에서 갑자기 안잡힌다면! 
config.json 파일에서 username 부분에 있는 맥어드레스를 살짝 바꿔주면 된다. 예를 들어 끝 55를 60으로~!


댓글

이 블로그의 인기 게시물

#1 (진행 중)아두이노 뇌파센서 헤드셋 만들기(Arduino EEG brain wave headset for psychological test) 만들어 뇌파 읽기

 15년 겨울쯤엔가 TED에서 흥미로운 동영상을 봤다. 뇌파를 통해 컴퓨터 안의 객체를 조종하는 모습을 시연하는 것이었다. 뇌파로 이런 것들이 가능하다는 것이 놀라웠다. 나는 심리학도가 아닌가. 뇌파가 더 정확한 심리검사를 만들 수 있는 도구가 될 수 있다는 생각이 들었다.  예를들어 검사문항(디지털 검사)이 100개짜리 라면 핵심 문항들(각 10번 단위)을 체크할 때마다 심경의 변화, 뇌파변화를 센서(객관적)도 기록하고 디지털검사(주관적)로도 기록해서 함께 데이터화 한다면 더 정확한 심경을 읽어 낼 수 있지 않을까? 라는 생각이었다. 2011년 대학원 다닐 때 컴공과 학부생들 겨울방학 특강으로 Objective-C를 무려1개월간 청강했고, C언어를 무려 2개월동안 학원에 다니면서 공부한 사람이기에 ! -_-;;;; 할 수 있을 것이다............  우선 뇌파센서를 구매해야겠지.  알리 익스프레스에서 구매한 EEG 뇌파센서 kit.  2개를 구매했다.비싸군 ㅠㅠ 배송이 한달정도 걸렸다. 학창시절 라디오 만들기인가..실과시간에 도전해본 납땜 이후로는 처음 해보는 납땜이어서 고생좀 했다. 뇌파를 측정해서 hex 코드로 컴퓨터로 읽어들일 수 있는 상태다. 읽어들인 hex값들을 10진수로 변환하고 유의미한 그래프로 그리거나 데이터화 하는 것이 필요 해 보이지만 아직 받은 값을 10진수로 변환하는 방법을 모르겠다. ㅠㅠ 소스코드는 그냥 단순히 hex값으로 읽어오는것이다보니.. 별거 없다;; 나중에 10진수로 변환하여 읽어들이고 자료화 하는 단계가 필요한 것 같은데 차근차근 진행 해 봐야겠다. 준비물 :  1. HM-08 블루투스 모듈 ($5.30) 2. 아두이노 나노 호환품 ($1.89) 3. direct nerosky e eg  brain sensor kit ($50.05) 4. 기타 빵판과

#1 (완료) 아두이노 음주 측정기(Alcohol tester with Arduino)

음주운전을 하지 않는 가장 좋은방법은 대리운전 비용 1만원~1.2만원이 아깝지 않으면서 대리운전 전화번호를 누를 수 있는 정도의 취함 상태인 것 같다. 그래서 생각해본 아이디어가 아예 법적으로 차량에 의무적으로 장치를 설치하도록 하는데 이 장치는 차에 시동을 걸기 전 음주측정을 해야하고 정상 수치내에 있을때만 시동이 걸리는 장치!  물론 조수석에 앉을 누군가가 음주운전을 돕기 위해 대신불어준다면 안되겠지만..ㅠㅠ 아침 출근을 위해 정말 급하게 가글을 하고 나와 출근하려 시동을 걸었는데..가글액에 섞인 알코올 성분때문에 지각을 하는 경우도 생길 수 있겠다만.. 그래도 한번 만들어 보자. 어차피 내게는 차량과 연동할 기술적 지식이 아직 없으므로! 하하하하 06.13 진행 중이나 아직 정리가 안됨 07.01 에 05.28 진행 내용 추가 실제 경찰들 처럼 더더더~ 멘트로 몰입감+정확성(3회 불어서 나온수치의 평균을 활용하는 벙법)을 높일 수 있도록 개선하였다. -_-; Ready 상태. 이후 3,2,1 카운트 후 blow! 그리고 수치를 반복하여 깜빡이며 한다. 이하 소스코드 #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() {   // set up the LCD's number of columns and rows:   lcd.begin(16, 2); } void loop() { lcd.setCursor(1, 0); //라인1로 커서 위치   lcd.print("Ready...");   delay(4000); lcd.clear();   // set the cursor to column 0, line 1   // (note: line 1 is t

(완료) Cron의 crontab 명령으로 Python code를 스케쥴대로 실행하기(Run python code by fixed interval with using Cron)

(완료)1# Python 으로 지출관리 사이트에서 모든지출 데이터 xlsx 파일 뽑아내고 Zapier로 구글시트에 업데이트하기 (Using Python, crawling and exporting company wide expenses data with Xlsx file. Update a Google sheet from this Xlsx file with Zapier.) (완료) 2# Python 으로 지출관리 사이트에서 모든지출 데이터 xlsx 파일 뽑아내고 Zapier로 구글시트에 업데이트하기 (Using Python, crawling and exporting company wide expenses data with Xlsx file. Update a Google sheet from this Xlsx file with Zapier.) 위 포스팅 내용 대로, 1. python을 통해 selenium 모듈로 crawling을 해서 xlsx 파일을 이메일로 받고 2. xlsx 파일은 Zapier 라는 노코드 툴에서 Email parser by Zapier 와 2개의 Zap 으로 처리해서 구글시트에 업데이트를 했다. 하지만 계속 실시간 데이터를 유지하는게 필요하다.  그럼 이제  추가적으로 이제 이걸 딜레이 시간 을 포함해서 정기적으로 실행되도록 해보자. 딜레이가 Zapier에서 10분 나머지 작업이 진행되는데 2분 정도로 총 12분 걸리는 것으로 확인을 했다.  그리고 나의 경우엔 월요일부터 금요일까지, 아침 7시 30분 부터 저녁 6시 00분까지 30분 간격으로 업데이트 되도록 하겠다.   딜레이를 고려한다면 매 시 48,18분에 python 코드가 돌아가면 얼추 정각에 완료되는 거군! 그러기 위해서는 cron 이라는 리눅스 스케줄러를 사용하려고 한다. 1. terminal 을 열고 sudo apt install cron 으로 crontab을 설치 2. crontab -e 명령어로 VI편집기 오픈 3. i 를 눌러서 insert mode로 전환 4. 아래 명령어