서버/리눅스 서버

X96 Air P4 / Docker 소켓 / HomeAssistant, Zigbee2Mqtt 설치 / 통합 미디어센터 + IOT 플랫폼

ㅋㅋ잠자 2021. 8. 11. 23:46
반응형

안녕하세요?

이번에는 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 설치 이미지를 제공 예정이며, 백업 복구를 통해서도 설치할 수 있도록 파일을 제공 예정입니다.

 

감사합니다.

반응형