Oct 042017
 

Docker

  • apt-get install lsb-release
  • curl -sSL https://get.docker.com | sh
  • docker run –rm armv7/armhf-ubuntu_core /bin/echo ‘Hello world’

Docker-compose

  • git clone https://github.com/docker/compose.git
  • cd compose
  • docker build -t docker-compose:armhf -f Dockerfile.armhf .
  • docker run –rm –entrypoint=”script/build/linux-entrypoint” -v $(pwd)/dist:/code/dist -v $(pwd)/.git:/code/.git “docker-compose:armhf”
  • ls -l dist/
  • cp dist/docker-compose-Linux-armv7l /usr/local/bin/docker-compose
  • chown root:root /usr/local/bin/docker-compose
  • chmod 0755 /usr/local/bin/docker-compose
  • docker-compose version

Dockerized HASS(Home ASSistant)

  • apt-get install jq socat wget
  • wget https://raw.githubusercontent.com/home-assistant/hassio-build/master/install/hassio_install
  • chmod +x hassio_install
  • ./hassio_install -m raspberrypi3
  • http://rpi_ip_address:8123 접속하면 됨(최초 접속시 처리에 시간이 조금 소요됨)
  • 기본적으로 부팅시 자동실행되도록 설정되어 있슴

Dcokerized Node-Red

  • cd /root/node-red
  • wget https://github.com/pointbre/nodered-dietpi/blob/master/Dockerfile
  • docker build -t nodered-rpi:0.1 .
  • docker run -dit -p 1880:1880 –name nodered –privileged -v /root/node-red:/data nodered-rpi:0.1
  • 이제 http://rip_ip_address:1880 접속하면 됨
  • 한번 run한 이후로는 docker start nodered 혹은 docker stop nodered만 해주면 된다.
  • 부팅 후 자동 실행을 위해서는 /etc/systemd/system nodered.service 파일을 복사해넣은 후 cd /etc/systemd/system && systemctl enable nodered.service 하면 된다. 재부팅 후 HASS(port 8123, 실행이 시간이 약간 소요됨)와 Node-Red(port 1880)에 접속하면 두 서비스가 모두 살아있음을 확인할 수 있다.
  • 참고로, docker container안에서 백그라운드 서비스만 실행하는 경우, 실행 후 바로 docker container가 종료되는 현상이 있다. 이를 방지하기 위해서 bash 프로세스를 하나 더 실행하는 방식으로 node-red docker container가 계속 실행되도록 하는 트릭이 필요했다. 자세한 내용은 github을 참고하면 된다.
May 162017
 

RFLink gateway

RFLink RF gateway의 치명적 단점은 Serial 통신만 지원한다는 것이다. Arduino Mega의 USB포트를 이용하면 USB to Serial converter를 통해, 혹은 Arduino Mega의 Serial 포트를 통해 통신해야한다. Wireless를 지향하는 내 관점에서 이것은 치명적이었다. 할 수 없이 뭔가를 해야 했다.

Serial to Websocket

RF 신호가 올 때만 메시지를 보내는 방식 때문에 뭔가 “비동기”적인 방식을 사용해야 했다. MQTT말고 다른 걸 해보고 싶어 웹소켓을 골랐다. ESP8266 보드에 웹소켓 라이브러리를 넣어서, serial 포트에서 데이타가 들어오면 웹소켓으로 broadcast해 주면 될 듯 했다. 문제는 ESP8266을 한번도, 아니 arduino 조차도 한번도 제대로 해본적이 없다는 점이었다. 그래서 초보에게 쉬운 보드를 찾아보았다. Witty Cloud Development board를 알리익스프레스에서 USD 3.45짜리 2개를 구입했다. USB to serial 컨버터 내장에, 5v를 3.3v로 변환도 해주니 ESP8266에 처음 발들여 놓는 나에게 적당해 보였다. 이 때까지만 해도, 1 ~ 2 시간이면 되겠지 하는 자만심에 빠져 있었다.

삽질의 시작 CH340G USB칩

안 그래도 알리익스프레스에서 구한 저렴한 arduino mega 2560 때문에 머리가 아픈 상황이었다. osx 10.9.5 상태에서 아무리 해도 드라이버가 인식되질 않는 것(윈도우에서는 드라이버 설치시 잘 동작해서 RFLink 펌웨어를 올릴 수 있었슴)이었는데, 아차차 Witty Cloud Development board도 같은 칩을 사용한다는 걸 미리 체크하지 못한 것이었다.

현재 시점에서 CH340G의 osx용 드라이버는 V1.4인데, osx 10.9.5 에서는 이걸 깔면 안된다. V1.3을 깔아야 하는데, 이외에도 usb 케이블 길이에 따른 이슈도 있었다. 가지고 있던 스마트폰 충전용 케이블을 사용했더니 부팅 후 자동으로 종료되는 문제가 발생해서 여러번 시도해보았다. 2시간여를 끙끙대다가 혹시나 싶어, 가장 짧은 케이블을 꽂고 했더니 그제서야 인식이 되었다. 일단 드라이버가 제대로 설치된 이후로는 arduino mega 2560도 긴 usb 케이블을 가지고서도 잘 인식이 되었다.

Arduino IDE로 esp8266 개발 환경 설정 및 라이브러리 설치

  • Arduino IDE 다운로드 후 설치
  • ESP8266용 Boards Manager 설치
    • Preference – Settings에서 Additional Boards Manager URL에 http://arduino.esp8266.com/stable/package_esp8266com_index.json 입력
    • Tool – Board – Boards Manager 클릭 후 esp8266 입력 후 해당 목록 클릭해서 버전 2.3 선택 후 설치하면 됨

Board Manager

ESP8266

  • Arduino 재시작
  • Witty cloud 보드의 아래쪽 보드(ESP8266MOD칩이 없는 보드)에 달린 usb를 pc에 연결
  • Tool – Board
    • WeMos D1 R2 & mini를 선택
    • Port에서 /dev/cu.wchusbserial410 선택
    • Upload Speed에서 57600 선택
  • 필요한 추가 라이브러리 – ArduinoWebsockets하고 WifiManager 설치
    • Sketch – Include Library – Manage Libraries.. 클릭
      • websockets 검색 후 나오는 목록 선택 후 2.X.X 선택 후 설치
      • wifimanager 검색 후 나오는 항목 설치

라이브러리 설치

Websocket for RFLink gateway

  • github에서 Serial to Websocket 예제를 찾은 후 ip대신 이름으로 접근하게 해주는 mDNSOTA 펌웨어 업데이트가 가능하도록 간단히 수정했다. 최종 소스는 여기서 다운 받을 수 있다.
  • Verify 혹은 Upload 실행 후 후 보드의 Flash 버튼 눌러서 펌웨어 업로드하면 되는 데 빌드가 끝날 때쯤해서 Flash버튼을 누르고 있다가 업로드가 시작되면 버튼에서 손을 떼도 된다.
    • 아무리 해도 안되는 경우에는 usb 케이블을 뺀 후 Flash 버튼을 누른 채로 usb 케이블을 연결 후 Upload해서 업로드가 시작된 후 버튼에서 손을 떼면 된다.
  • 이제 Witty cloud 보드에서 하단 보드를 빼고 상단보드만 아두이노에 연결하면 된다. esp8266 자체는 3.3V 기반이지만, Witty cloud 보드는 5V를 3.3V로 바꿔서 사용하므로 VCC에 5V를 넣어줘야 한다는 것이다. 혹시 보드상의 esp8266에 직접 연결시에는 3.3V를 넣어줘야 한다.
    • 아두이노 RX –> 상단 보드 TX
    • 아두이노 TX –> 상단 보드 RX
    • 아두이노 5V –> 상단 보드 VCC
    • 아두이노 GND –> 상단 보드 GND

Witty cloud board pinout

  • Chrome extension Simple WebSocket Client 설치해서 ws://rflink.local:81 입력(소스에 입력한 명칭을 사용) 후 open 버튼 눌러서 RFLink gateway에서 메시지를 받을 수 있는지 확인해 본다.
  • 웹브라우저로 http://rflink.local/update (소스에 입력한 명칭을 사용) 접속해서 펌웨어 업로드도 가능하다.