--- tags: Home Assistant --- # Part 1 - How to run Home Assistant on Raspberry Pi 4 in a Docker container ##### `Internet of Things` `Raspberry Pi 4` `Home Assistant` `Mosquitto Broker` `zewelor/bt-mqtt-gateway` > [name=Mr. Akashic] [time=Wed, Jun 2, 2021] ## Requirements * **安裝佈署工具docker和docker-compose** 在Raspberry Pi 4安裝docker和docker-compose這兩個佈署工具。安裝方式可在Raspberry Pi 4建立一個副檔名為.sh的檔案,在將下列的安裝docker和docker-compose的步驟複製並貼上.sh檔案,儲存後執行.sh檔。 {%gist awlchang/71412d18a4e05414e6ffea222a805c6d %} {%gist awlchang/af8c7c8571fa54a0130734b949cea65e %} 安裝完成後,重新開機Raspberry Pi 4。 * **建立工作目錄** 等一下會用docker建立4個服務,分別是Home Assistant、Hass-configurator、Mosquitto Broker和zewelor/bt-mqtt-gateway。其中,除了Home Assistant在第一次執行服務時會自動建立自己的工作目錄。其於三個依照下列指令建立工作目錄與設定目錄存取權限。 - 建立Hass-configurator工作目錄 ```bash= #建立configurator-config資料夾 sudo mkdir /opt/configurator-config #設定資料夾configurator-config的使用權限可以存放檔案 sudo chmod 777 /opt/configurator-config #切換到configurator-config資料夾 cd /opt/configurator-config/ #建立settings.conf檔案,檔案內容為雙引號內的字串 sudo echo -e "{ \n \"BASEPATH\": \"/hass-config/\" \n}" > settings.conf ``` - 建立Mosquitto Broker工作目錄 建立一個副檔名為.sh的檔案,將下列建立Mosquitto Broker工作目錄的步驟複製並貼上.sh檔案,儲存後執行.sh檔。 {%gist awlchang/c21dbaab4984c9b8573aadab692afdd0 %} - 建立zewelor/bt-mqtt-gateway工作目錄 ```bash= #切換到opt資料夾 cd /opt #下載設定檔 sudo git clone https://github.com/awlchang/custom-workers-for-zewelor-bt-mqtt-gateway.git #修改custom-workers-for-zewelor-bt-mqtt-gateway資料夾名稱 sudo mv /opt/custom-workers-for-zewelor-bt-mqtt-gateway /opt/bt-mqtt-gateway #設定權限為可編輯 sudo chmod 777 -R /opt/bt-mqtt-gateway/ ``` ## Implementation ```bash= #切換到Desktop cd /home/pi/Desktop #下載docker-compose.yml以執行home assistant的服務 sudo git clone https://github.com/awlchang/homeassistant-docker-compose.git #切換到homeassistant-docker-compose資料夾 cd homeassistant-docker-compose/ #執行docker-compose.yml內的services sudo docker-compose up -d ``` 看到Terminal顯示如下畫面表示所有服務啟動成功。 ``` Starting mosquitto ... done Creating homeassistant ... done Creating bt-mqtt-gateway ... done Creating hass-configurator ... done ``` 開啟瀏覽器輸入http://192.168.0.112:8123 (IP位址改成自己樹莓派上的IP位置),就可看到如下畫面,成功執行Home Assistant服務,完成本篇實作。 ![](https://i.imgur.com/LNJv8No.png) ## Introduction 本篇文章說明如何使用Docker佈署Home Assistant服務在Raspberry Pi 4上執行。Home Assistant是一個整合多家廠牌的物聯網設備平台,透過該平台可以提供使用者三個主要的功能,觀察(with sensor)、控制(with actuator)和自動化(with rule)。 Home Assistant為不同的開發板或作業系統提供多種不同的安裝方式([詳細資訊](https://www.home-assistant.io/installation/)),本篇希望能夠快速佈署Home Assistant的服務,因此選用Docker的安裝方式,但以此方式安裝的Home Assistant只提供部分的功能服務,所以會在使用Docker佈署其他的服務與Home Assistant整合,且能夠提供物聯網情境運行時所需要的元素,如下圖所示。 ![](https://i.imgur.com/aunngyL.png) 其中,Mosquitto Broker、hass-configurator和bt-mqtt-gateway說明如下: * Mosquitto Broker: 扮演MQTT Server的角色,使Home Assistant可以透過MQTT通訊的方式觀察感測器感測的資料或控制actuator。 * hass-configurator: 一個提供檔案管理的web app,主要用來線上修改Home Assistant的配置檔。 * bt-mqtt-gateway: 在藍牙和Wi-Fi(MQTT)設備之間轉傳訊息,讓客製化的藍牙設備經過bt-mqtt-gateway後,再以Wi-Fi的通訊方式讓Home Assistant實現設備的觀察、控制和自動化。 ## Appendix <span class="dark_orange">docker ps -a</span> 查看正在運行的Docker容器大小的指令,執行結果如下。 ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ad4e3af562a7 homeassistant/raspberrypi4-homeassistant:stable "/init" 19 hours ago Up 19 hours homeassistant 6705dd20c38b causticlab/hass-configurator-docker:latest "/app/run.sh" 19 hours ago Up 19 hours 0.0.0.0:3218->3218/tcp, :::3218->3218/tcp hass-configurator 92f81b0a11f4 eclipse-mosquitto:2.0.10 "/docker-entrypoint.…" 47 hours ago Up 47 hours 0.0.0.0:1883->1883/tcp, :::1883->1883/tcp, 0.0.0.0:9001->9001/tcp, :::9001->9001/tcp mosquitto 31759ae8fb66 zewelor/bt-mqtt-gateway:latest "/bin/sh -c /start.sh" 2 days ago Up 2 days bt-mqtt-gateway ``` <span class="dark_orange">docker inspect [container_id or container_name]</span> 查看指定的Docker容器的詳細資訊,執行結果如下。 <span class="dark_orange">docker-compose exec [container_name] /bin/sh -c "cat /etc/*-release"</span> 查看指定的Docker容器的詳細資訊,執行結果如下。 check whether your distribution ``` [ { "Id": "92f81b0a11f46ab531fcf834b75d4347010272a17721209c9a757a0184b106ab", "Created": "2021-06-02T07:18:07.957298991Z", "Path": "/docker-entrypoint.sh", "Args": [ "/usr/sbin/mosquitto", "-c", "/mosquitto/config/mosquitto.conf" ], ......more ``` <span class="dark_orange">docker-compose logs --tail=[number] [container_id or container_name]</span> 查看指定的Docker容器的log,tail參數可設定只顯示最新n筆log,執行結果如下。 ``` Attaching to hass-configurator hass-configurator | INFO:2021-06-03 11:07:48,757:hass_configurator.configurator:192.168.0.113 - "GET /flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 HTTP/1.1" 200 - hass-configurator | INFO:2021-06-03 11:07:48,855:hass_configurator.configurator:192.168.0.113 - "GET /api/file?filename=/hass-config/configuration.yaml HTTP/1.1" 200 - hass-configurator | INFO:2021-06-03 11:07:48,949:hass_configurator.configurator:192.168.0.113 - "GET /api/listdir?path=. HTTP/1.1" 200 - ``` <span class="dark_orange">docker exec -it [container_id or container_name] sh</span> 進入已在運行的指定Docker容器裡面,略執行結果。 <span class="dark_orange">docker-compose exec [container_id or container_name] /bin/sh -c "cat /etc/*-release"</span> 執行指令查看Linux distribution,執行結果如下。 ``` 3.12.6 NAME="Alpine Linux" ID=alpine VERSION_ID=3.12.6 PRETTY_NAME="Alpine Linux v3.12" HOME_URL="https://alpinelinux.org/" BUG_REPORT_URL="https://bugs.alpinelinux.org/" ``` ## Acknowledgements 1. [Home Assistant](https://www.home-assistant.io/) 2. [Docker and Docker Compose on Raspberry Pi OS](https://withblue.ink/2020/06/24/docker-and-docker-compose-on-raspberry-pi-os.html) <style> .dark_orange { color: #FF8C00; background:#F6F6F6; border-radius:4px; padding-right:6px; padding-left:6px; } .sub_title { font-size: 25px; } .blockquote { background:#F6F6F6; } </style>