zigbee2mqtt 설치

(이전 글에 합쳐져있던 내용을 새 글로 분리)

zigbee2mqtt (이하 z2m) 은 mqtt 란 프로토콜을 기반으로 작동하는건데,
z2m은 mqtt 클라이언트로서 연결할 mqtt broker (서버라고 생각하면 됨)가 필요하다.

docker 로 mqtt broker 인 eclipse-mosquitto 와 z2m 둘 다 설치할거임.

# eclipse-mosquitto 이미지 다운 및 실행
docker pull eclipse-mosquitto
sudo docker run -d \
    --name=mosquitto \
    -p 1883:1883 \
    -p 9001:9001 \
    --restart=always \
    -v /home/pi/ha/mosquitto/data:/mosquitto/data \
    -v /home/pi/ha/mosquitto/log:/mosquitto/log \
    eclipse-mosquitto

# z2m 이미지 다운 및 실행
docker pull koenkk/zigbee2mqtt
docker run -d \
    --name="z2m" \
    --net=host \
    --restart=always \
    -v /home/pi/ha/z2m:/app/data \
    --device=/dev/ttyACM0 \
    -v /run/udev:/run/udev:ro \
    -e TZ=Asia/Seoul \
    --privileged=true \
    koenkk/zigbee2mqtt


설정 파일 경로는 이전글에 이어서 /home/pi/ha/ 폴더 안에 각 폴더를 만들고 지정해주었다.

z2m 실행시 필요한 --device 이름 역시 필요하다면 알아서 바꿔주자.


z2m 의 설정을 조금 변경해준다.

기본값으로 꺼져있는 homeassistant 를 켜주고, devices, group 을 관리하기 편하게 별도 파일로 만든다

cd ~/ha/z2m
sudo touch devices.yaml groups.yaml
sudo vi /home/pi/ha/z2m/configuration.yaml
homeassistant: true
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  server: 'mqtt://localhost'
serial:
  port: /dev/ttyACM0
devices: devices.yaml
groups: groups.yaml

zigbee 장비가 다 추가되고 나면 permit_join: false 로 바꿔주면 됨.


그 다음 HA의 설정도 변경, mqtt 항목을 추가해준다.

mqtt broker 를 추가하는거기 때문에 혹시나 eclipse-mosquitto 를 다른 장비나 다른 포트에서 작동시킬 경우 적당히 수정해주자.

sudo vi ~/ha/config/configuration.yaml
mqtt:
  broker: 127.0.0.1
  discovery: true


둘 다 재시작

docker restart z2m home-assistant


이제 HA의 통합 구성요소에 MQTT 가 나타나고 기기와 구성요소에도 z2m을 통해 연결된 장비가 나타단다.

deCONZ 로는 안 보였던 다원 스마트 플러그의 전력량도 잘 보이고, 다원 전등 스위치도 연결이 잘 됨.


실시간으로 올라오는 z2m의 로그를 보려면

tail -f $(ls -td ~/ha/z2m/log/*/ | head -1)log.txt

이렇게 하면 됨. z2m을 재시작할 때마다 실행 시간으로 디렉토리가 생긴다.

tail 명령어로 열었는데, 지난 로그를 보고 싶으면 vim이나 nano 등으로 직접 열어봐도 됨.

단점/불편한 점이 많아서 사용하지 않는 중.

기본 스토로지를 사용하되 s3에 백업하는 방식으로 구성이 더 나을 것 같다.


NextCloud 는 기본적으로 시스템의 디렉토리를 사용하지만,

추가로 External Storage Support 기능을 사용해서 FTP, S3 등등 외부 저장소를 마운트하여 사용할 수 있다.

 

처음엔 이렇게 연결하려고 했는데, 뭔가 안되어서 찾다보니, S3자체를 NextCloud의 주 저장소로 사용하는 방법이 있어서 그냥 그걸 사용해보기로 했음.

참고로 지금 하려는 주 저장소가 아니라 외부저장소로써 S3를 사용할 경우

(1) 사용자마다 S3 연결을 직접하지 못하고 관리자가 해줘야함

(2) 저장공간 사용 제약을 할 수 없음

(3) NextCloud의 공유 기능을 사용할 수 없음

요런 3가지 단점이 있다고 한다.

 

참고로 Amazon S3 뿐만 아니라 S3와 비슷한 object storage 류들도 사용이 가능하다고 함.

또한 S3와 연결된다고 해서 S3에서 직접 파일 브라우징을 할 순 없다고 한다. 파일 자체는 있지만 메타데이터가 없어서...

기존 설치된 NextCloud를 옮길 수도 없다. 새로 설치해야 됨.

 

nextcloud/config/config.php 파일 설정에

  'objectstore' => array(
    'class' => '\\OC\\Files\\ObjectStore\\S3',
    'arguments' => array(
      'bucket' => '버킷이름',
      'autocreate' => true,
      'key'    => 'IAM Access Key',
      'secret' => 'IAM Secret',
      'use_ssl' => true,
      'region' => 'AWS 리전, 서울이면 ap-northeast-2'
    ),
  ),

요 부분을 추가해두고 설치를 진행하면 된다.

 

이미 진행된 인스턴스가 있을 경우 nextcloud/data 폴더와 DB 테이블들을 날려버리고, config.php에 installed: true 라인 지우고, 마지막으로 config 폴더에 CAN_INSTALL 파일을 생성하고 접속하면 다시 설정부터 진행할 수 있다.

 

S3를 주 저장소로 할 경우 php의 파일 업로드 제한에 영향을 받지 않는 것 같다. 아마 S3 API 로 바로 업로드 시키는 듯?

 

참고: Configuring Object Storage as Primary Storage - https://docs.nextcloud.com/server/15/admin_manual/configuration_files/primary_storage.html

 

+ File lock 비활성화

NextCloud 는 공유된 파일을 2명 이상의 사용자가 동시에 편집해서 꼬이는 문제를 방지하기 위해 File locking 기능을 사용한다.

DB, 혹은 설정된 mem cache 에 lock 정보를 가지고 있고, 30분마다 cron이 지워주는 방식으로 작동한다는데, S3를 사용할 경우 끄는걸 권장한다는 듯? ( https://autoize.com/s3-compatible-storage-for-nextcloud/ )

 

일단 당장 내가 lock 으로 인한 문제를 발견해서(생성되고 파일을 빠르게 지울경우 뭔가 이상하게 lock 이 걸려서 파일 삭제가 안됨..) 그냥 꺼버렸음.

 

config.php에

  'filelocking.enabled' => false,

를 추가해주면 된다.

Docker로 설치해봤는데, docker 이미지는 web installer 방식이라 초기 설치시간이 오래걸리길래 그냥 네이티브로 깔았다.

참고로 아래 설치법은 일부 선택 옵션들을 포함하니 참고.

Installation on Linux — Nextcloud 여기 잘 설명되어 있으니 그냥 여길 봐도 된다. 좀 귀찮게 해서 그렇지...


1. apache2 + php7.4 설치

Ubuntu 18.04의 기본 php 는 7.0이다. 7.3 이상을 권장하니 7.4를 깔아주자

nginx도 못쓰는건 아닌데,, 왠지 apache2 가 기본값인 것 같아서 그냥 apache2 로 진행하였다.

sudo apt -y install software-properties-common
sudo add-apt-repository ppa:ondrej/php

sudo apt install apache2 libapache2-mod-php7.4 php7.4 php7.4-bcmath php7.4-bz2 \
    php7.4-curl php7.4-gd php7.4-gmp php7.4-intl php7.4-json php7.4-mbstring \
    php7.4-mysql php7.4-xml php7.4-zip libxml2


NextCloud 에서 imagic 모듈도 설치를 추천한다.

sudo apt install php-imagick


2. NextCloud 설치

php 기반의 프로그램이다. 웹사이트에서 받아서 적절한 위치에 압축을 풀어만 주면 됨.

https://nextcloud.com/install/#instructions-server


3. apache2 설정

/etc/apache2/site-available/cloud.conf (당연히 이름과 각종 경로는 알아서 수정..)

<VirtualHost *:80>
        ServerName 사이트주소

        DocumentRoot /var/www/nextcloud/
        <Directory /var/www/nextcloud/>
                Require all granted
                AllowOverride All
                Options FollowSymLinks MultiViews
        </Directory>

        LogLevel emerg
</VirtualHost>

apache2 에 필요/선택 모듈을 활성화해준다.

a2enmod rewrite headers env dir mime


4. php 설정

php 기본 설정은 업로드 용량이 2MB이므로, 조금 늘려준다.

메모리 제한값도 기본은 128MB이지만 추천은 512MB

sudo vi /etc/php/7.4/apache2/php.ini
memory_limit = 512M
post_max_size = 10G
upload_max_filesize = 10G


5. HTTPS 설정

이건 알아서 해주자.

+ Recent posts