X96 Air P4 / Docker 소켓 / HomeAssistant, Zigbee2Mqtt 설치 / 통합 미디어센터 + IOT 플랫폼
안녕하세요?
이번에는 CoreELEC 쉘에서 dockerd 로 통신하는 것이 아닌 컨테이너 내부 ubuntu 에서 설정하는 방법을 알아보도록 하겠습니다.
그 다음으로 HASS 와 Z2M 을 설치해보도록 하겠습니다.
-- 들어가기 전에!
이 플랫폼을 제가 테스트 하는 이유는 하기와 같습니다. CoreELEC 플랫폼에서 저희 설치 이미지를 통해 공용화를 하는 목적입니다.
KODI 플랫폼 : 미디어 센터
CoreELEC Docker 애드온을 통해 하기 기능을 수행
- HomeAssistant
- Zigbee2mqtt
- Ubuntu Based 패키지들 실행
통합 플랫폼이 완성이 되는 것입니다.
기본적으로 HA 와 Z2M 구동시 메모리가 250MB 정도 됨으로 현재 이 제품은 4GB를 가지고 있습니다.
KODI 가 사용하는 메모리 400MB 정도 되며, 기본 상태 650MB 정도를 소모합니다.
영상을 재생할 경우 4K 60FPS HEVC MAIN10 의 경우, 800MB 정도를 소모합니다.
특히 KODI 에서 plexkodiconnect 를 사용하면 메모리가 치솟는 경우가 있는데 이는 차후에 작성할 systemd cgroup 기능으로 메모리 사용량을 제한할 계획입니다. 이유는 HA는 죽지 않아야하기 때문입니다.
다음으로 제품 전면에 LED 시계가 있는데 이는 조만간 정상적으로 살려서 특수 목적용으로 사용해볼 계획이며, IR 기능도 조만간 설정하여 정상적으로 사용하는 부분을 작성할 예정입니다.
그럼 시작합니다.
1. 우분투 컨테이너 설정 변경
docker socket을 컨테이너 내부로 연동하기 위해 하기 구문을 추가해서 새로 컨테이너를 생성해야합니다.
그러나, 이때까지 설정한 것을 날릴 수 없음으로, 컨테이너를 정지하고 commit 으로 백업한다음 그 이미지로 새로 컨테이너를 생성하겠습니다.
# 현재 컨테이너를 종료합니다. CoreELEC:~ # docker stop ubuntu ubuntu # 컨테이너 아이디를 체크합니다. CoreELEC:~ # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 04f8ec0ecff8 jrei/systemd-ubuntu:18.04 "/lib/systemd/systemd" 9 days ago Exited (137) 54 seconds ago ubuntu # 커밋으로 백업합니다. CoreELEC:~ # docker commit 04f8ec0ecff8 ubuntu18:backup sha256:40fdd085bbf2de1386ceb0d04e799b08b4d9d076d83b1de5a29c1c62cbcb0b8d # 백업한 이미지로 하기 docker.sock 을 추가하여 새로 생성합니다. CoreELEC:~ # docker run -d -it --name ubuntu --restart always \ > --net host --privileged --tmpfs /tmp --tmpfs /run --tmpfs /run/lock \ > -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ > -v /storage:/storage -v /var/media:/media:rshared \ > -v /run/docker.sock:/run/docker.sock \ > ubuntu18:backup a6b34490aebd5c33c639c623bb86e3f93de47541ad9813fab8f30b7abc029abe |
상기 과정을 따르게 되면, 하기와 같이 설정이 변경되어 실행됩니다.
CoreELEC:~ # docker exec -it ubuntu /bin/bash # 소켓파일이 있습니다. 이 소켓으로 docker-cli 명령을 내릴 것입니다. root@CoreELEC:/run# ls dbus initctl log sendsigs.omit.d sshd sudo user docker.sock lock nologin shm sshd.pid systemd utmp |
그러면, docker-cli 만 있으면 되니, docker-ce-cli 만 설치하겠습니다.
root@CoreELEC:~# wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/armhf/docker-ce-cli_19.03.9~3-0~ubuntu-xenial_armhf.deb root@CoreELEC:~# apt install ./docker-ce-cli_19.03.9~3-0~ubuntu-xenial_armhf.deb # 동작하는지 확인합니다. root@CoreELEC:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a6b34490aebd ubuntu18:backup "/lib/systemd/systemd" 53 minutes ago Up 53 minutes ubuntu |
와우 좋습니다. 이제 CoreELEC 쉘로 넘어가지 않아도 됩니다.
2. HomeAssistant 설치
하기 명령으로 간단하게 설치합니다.
일단은 /storage 폴더를 공유하고, 설정 파일은 /storage/hass 에 저장하도록 설정하였습니다.
혹시 외장하드를 사용할 수도 있기 때문에 /var/media 폴더를 /media 에 붙입니다.
root@CoreELEC:~# mkdir /storage/hass root@CoreELEC:~# docker run -d --name hass --restart=always -v /etc/localtime:/etc/localtime:ro \ > -v /storage/hass:/config \ > -v /storage:/storage -v /var/media:/media:rshared \ > --privileged --network host \ > homeassistant/home-assistant:latest root@CoreELEC:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 88a8e678f245 homeassistant/home-assistant:latest "/init" About a minute ago Up About a minute hass a6b34490aebd ubuntu18:backup "/lib/systemd/systemd" About an hour ago Up About an hour ubuntu |
이때 부터는 ubuntu 컨테이너의 자원이 아니라 CoreELEC 자체 리소스를 생각하시면서 만들어야합니다.
Docker 호스트가 CoreELEC에 있기 때문입니다.
접속이 되는지 확인합니다.
3. Z2M 설치
이번에 하기와 같이 CC2652P 모듈 (쬐끔전문가님) 을 사용해서 해보려고 했지만, 아.. 제가 지금 가지고 있지 않아서 사진으로만 첨부합니다.
CC2652P는 ttyUSB0 로 올라오고 CC2531은 ttyACM0 로 올라올 것입니다.
UART TTY 를 2개 이상 물릴 것이 아니기 때문에, 저는 udevd 설정을 따로 하지 않을 예정입니다.
하기와 같이 장치가 올라옴을 확인합니다.
root@CoreELEC:/dev# ls | grep ttyACM ttyACM0 # Z2M 을 설치합니다. # /storage/z2m 폴더를 사용하여 설정합니다. root@CoreELEC:~# mkdir /storage/z2m root@CoreELEC:~# docker run -d -it -v /storage/z2m:/app/data --device=/dev/ttyACM0 \ > -e TZ=Asia/Seoul -v /run/udev:/run/udev:ro \ > --name z2m --restart always --net host --privileged \ > koenkk/zigbee2mqtt Unable to find image 'koenkk/zigbee2mqtt:latest' locally latest: Pulling from koenkk/zigbee2mqtt b452d2916bdf: Pull complete 18f6b260f938: Downloading 29.25MB/35.62MB e566f66a486e: Download complete e8cf420e449e: Download complete fedf0e82084a: Download complete 26008cd26fa5: Download complete 0b7a4f7292ac: Download complete 4d149e99aac9: Download complete 1345523da467: Download complete |
디폴트 설정값을 하기와 같이 넣습니다.
root@CoreELEC:~# docker stop z2m z2m root@CoreELEC:~# vi /storage/z2m/configuration.yaml homeassistant: true permit_join: false mqtt: base_topic: zigbee2mqtt server: 'mqtt://localhost' serial: port: /dev/ttyACM0 advanced: availability_blocklist: [] availability_passlist: [] frontend: port: 8124 experimental: new_api: true devices: {} # 재시작 합니다. root@CoreELEC:~# docker start z2m z2m |
아차차.. mqtt 가 없습니다.
이럴 때 간단하게 설치하려고 ubuntu 컨테이너가 있습니다. 그냥 apt install mosquitto 로 설치합니다.
물론 이것도 docker 로 설치 가능합니다만, 쉽게 하는게 좋을 것 같아서 하기와 같이 설치했습니다.
내부용으로 쓸 것이기 때문에 추가 설정을 하지 않았습니다.
root@CoreELEC:~# apt install mosquitto root@CoreELEC:~# systemctl start mosquitto root@CoreELEC:~# systemctl status mosquitto ● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker Loaded: loaded (/etc/init.d/mosquitto; generated) Active: active (running) since Thu 2021-08-12 00:31:05 KST; 2s ago Docs: man:systemd-sysv-generator(8) Process: 2096 ExecStart=/etc/init.d/mosquitto start (code=exited, status=0/SUCCESS) Tasks: 1 (limit: 592) CGroup: /system.slice/docker-a6b34490aebd5c33c639c623bb86e3f93de47541ad9813fab8f30b7abc029ab e.scope/system.slice/mosquitto.service └─2103 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf Aug 12 00:31:05 CoreELEC systemd[1]: Starting LSB: mosquitto MQTT v3.1 message broker... Aug 12 00:31:05 CoreELEC mosquitto[2096]: * Starting network daemon: mosquitto Aug 12 00:31:05 CoreELEC mosquitto[2096]: ...done. Aug 12 00:31:05 CoreELEC systemd[1]: Started LSB: mosquitto MQTT v3.1 message broker. root@CoreELEC:~# netstat -nlp | grep 1883 tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN 2103/mosquitto tcp6 0 0 :::1883 :::* LISTEN 2103/mosquitto |
좋습니다. 그럼 mqtt 연결에 실패해서 아마도 z2m 을 재시작 해야할 것입니다.
root@CoreELEC:~# docker restart z2m z2m |
configuration.yaml 을 8124 포트로 했기 때문에 접근을 해봅니다.
오우 좋습니다.
4. 향후 계획
실 운영을 통해 장비 안전성을 검증할 예정입니다.
KODI 에 제가 쓰는 애드온을 설치하여 미디어 센터 구성을 해볼 예정입니다.
CoreELEC 에 IR 리모컨과 전면 LED 패널 (openVFD) 를 설정해볼 예정입니다.
MK802 CoreELEC 19.2 설치 이미지를 제공 예정이며, 백업 복구를 통해서도 설치할 수 있도록 파일을 제공 예정입니다.
감사합니다.