OpenWrt 23.05～ ホームアシスタント

:warning:Japanese notation
![OpenWrt_icon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/b6009603-de41-ee3c-a935-b3f8e0989d90.png)


**検証中**

# はじめに
::: note
### 初心者対応構成
- スクリプトでの自動設定
- [UCI (ttyd)](https://openwrt.org/docs/guide-user/base-system/uci)、[Webコンソール (LuCi)](https://openwrt.org/docs/guide-user/luci/start)、[ファイラー (SFTP)](https://openwrt.org/docs/guide-user/services/nas/sftp.server)にて比較作業がおススメ:exclamation:
:::

::: note
### デバイスアクセス
#### [PowerShell](https://learn.microsoft.com/ja-jp/powershell/scripting/what-is-windows-powershell?view=powershell-7.4)の開始
- キー入力：**`Win`+`x` > `a` > `はい`**

#### [UCI（SSH）アクセス](https://openwrt.org/docs/guide-quick-start/sshadministration)
```powershell:powershell:初期設定用
ssh -o StrictHostKeyChecking=no -oHostKeyAlgorithms=+ssh-rsa root@192.168.1.1
```
- root@192.168.1.1's password:`初期値：パスワード無し`

<details><summary>OpenSSHのインストールが無い場合:exclamation:</summary>

- 機能の確認
※Windows 10 Fall Creators Update(1709)以降標準搭載
```powershell:powershell
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
```
- 機能のインストール
```powershell:powershell
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
```
---

:::

::: note
### 前提条件 
- 要件：
  - 256 MBのストレージスペース
  - 256 MB の RAM
  - 対応ファームウェア : [23.05.0 以降 ※FW4 (firewall4)](https://openwrt.org/docs/guide-user/firewall/misc/nftables#nftables_in_openwrt_2203_and_later)
- 構成状態 : 初期値前提
- 動作確認 : 23.05.2@ BPI-R3 / 23.05.5@NCP^HG100

:::

# [ホームアシスタント](https://www.home-assistant.io/)
:::note
### インストール
- [Homeassistant](https://github.com/openlumi/homeassistant_on_openwrt)

```sh
wget https://raw.githubusercontent.com/openlumi/homeassistant_on_openwrt/23.05/ha_install.sh -O - | sh
# reboot
# /etc/init.d/homeassistant restart
```
- インストール時間
BPR-R3：約三分
NCP-HG100：数十分
- Webインターフェース
[192.168.1.1:8123](http://192.168.1.1:8123/onboarding.html)

:::

::: note
### [Nature Remo のホーム アシスタントの統合](https://github.com/calee0219/hass-nature-remo)
[Nature Remoのサポート](https://community.home-assistant.io/t/support-for-nature-remo/116544)
[HomeAssistantのご紹介とコマンド調教劇](https://diary.pcgf.io/homeassistant-jun-hahe-woassistsitekureyouka/)
[OpenWrt上のContainer版HomeAssistantへのHACSのインストール](https://note.com/lua8556/n/n555e5f82dbf8)
[HACS](https://hacs.xyz/?ref=diary.pcgf.io)

- HACS(Home Assistant Community Store) 
```sh
opkg update
# opkg remove uclient-fetch
# opkg install wget-nossl
# opkg install wget-ssl
opkg install bash
# reboot
# /etc/init.d/homeassistant restart
```

```sh
#sudo -u hass bash
wget -O - https://get.hacs.xyz | bash -
# reboot
# /etc/init.d/homeassistant restart
```

- nature remo
  - トークン取得
[サインイン](https://home.nature.global/)
  - nature remoの設定
```sh
#! /bin/sh
YOUR_ACCESS_TOKEN='token' # サインインで取得したトークン
/etc/init.d/homeassistant stop
cat <<"EOF" >> /etc/homeassistant/configuration.yaml
nature_remo:
  access_token:  YOUR_ACCESS_TOKEN
EOF
cat <<"EOF" >> /etc/homeassistant/secrets.yaml
nature_remo_token:  YOUR_ACCESS_TOKEN
EOF
sed -i -e "s/YOUR_ACCESS_TOKEN/${YOUR_ACCESS_TOKEN}/g" /etc/homeassistant/configuration.yaml
sed -i -e "s/YOUR_ACCESS_TOKEN/${YOUR_ACCESS_TOKEN}/g" /etc/homeassistant/secrets.yaml
mkdir -p /etc/homeassistant/custom_components/nature_remo
wget --no-check-certificate -O /etc/homeassistant/custom_components/nature_remo/__init__.py https://raw.githubusercontent.com/calee0219/hass-nature-remo/main/__init__.py
wget --no-check-certificate -O /etc/homeassistant/custom_components/nature_remo/climate.py https://raw.githubusercontent.com/calee0219/hass-nature-remo/main/climate.py
wget --no-check-certificate -O /etc/homeassistant/custom_components/nature_remo/manifest.json https://raw.githubusercontent.com/calee0219/hass-nature-remo/main/manifest.json
wget --no-check-certificate -O /etc/homeassistant/custom_components/nature_remo/sensor.py https://raw.githubusercontent.com/calee0219/hass-nature-remo/main/sensor.py
wget --no-check-certificate -O /etc/homeassistant/custom_components/nature_remo/switch.py https://raw.githubusercontent.com/calee0219/hass-nature-remo/main/switch.py
/etc/init.d/homeassistant start
```

![スクリーンショット 2024-12-24 105852.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3412833/f83fb6da-9bd1-5175-83fc-f0ffcd2f46e3.jpeg)

:::

::: note
### アプリ
[Google Play: Home Assistant](https://play.google.com/store/apps/details?id=io.homeassistant.companion.android)
[Mac App Store: Home Assistant](https://apps.apple.com/us/app/home-assistant/id1099568401?ls=1)

:::

::: note warn
### [リムーブ](https://github.com/openlumi/homeassistant_on_openwrt/issues/3)
```sh
# Deleting the home assistant in this way
/etc/init.d/homeassistant stop
pip3 uninstall homeassistant
rm -R /etc/homeassistant
rm -R /usr/lib/python*/site-packages/hass_frontend
rm -R /usr/lib/python*/site-packages/hass_nabucasa-*
rm -R /usr/lib/python*/site-packages/home_assistant_frontend-*
rm -R /etc/homeassistant
rm /etc/init.d/homeassistant
#reboot
```
:::

::: note alert
### [~~OpenWrt ルーターをホーム アシスタントに統合~~](https://www.home-assistant.io/integrations/luci/)

```sh
opkg update
opkg install luci-mod-rpc
```

```sh
#! /bin/sh
ROUTER_IP_ADDRESS='192.168.1.1'
YOUR_ADMIN_PASSWORD='password' # rootのパスワードを入力
# Example configuration.yaml entry
cat <<"EOF" >> /etc/homeassistant/configuration.yaml
device_tracker:
  - platform: luci
    host: ROUTER_IP_ADDRESS
    username:  root
    password:  YOUR_ADMIN_PASSWORD
EOF
sed -i -e "s/ROUTER_IP_ADDRESS/${ROUTER_IP_ADDRESS}/g" /etc/homeassistant/configuration.yaml
sed -i -e "s/YOUR_ADMIN_PASSWORD/${YOUR_ADMIN_PASSWORD}/g" /etc/homeassistant/configuration.yaml
```

### ~~ACL~~
- ユーザー`hass`作成
※hassパスワードは任意
```sh
HASS_PASSWD='openwrt'
opkg update
opkg install shadow
opkg install sudo
opkg install acl
opkg install luci-i18n-acl-ja
opkg install bash
useradd -m -d /home/hass -s /bin/ash -U hass
# passwd hass
#! /bin/sh
# Device Password
ubus call luci setPassword '{ "username": "hass", "password": "${HASS_PASSWD}" }'
sed -i -e "# %sudo ALL=(ALL:ALL) ALL/%sudo ALL=(ALL) ALL/g" /etc/sudoers 
groupadd --system sudo
usermod -a -G sudo hass
uci set rpcd.@login[1].username='hass'
uci set rpcd.@login[1].timeout='300'
uci set rpcd.@login[1].read='*'
uci set rpcd.@login[1].write='*'
uci set rpcd.@login[1].password='$p$root'
uci commit rpcd
# reboot
```

:::
# あとがき
インストール自体は、有志のおかげもあり、簡単
しかし、その後の設定が四苦八苦

# 参考資料（感謝:relaxed:）

[Home Assistant 2023.3.6 と OpenWRT 22.03.3 - またはその他の低予算ソリューション](https://community.home-assistant.io/t/home-assistant-2023-3-6-with-openwrt-22-03-3-or-other-low-budget-solution/555179)

[OpenWrt 19.07 でマルチユーザー環境を構築](https://www.hogepiyo.com/wp/?p=1213)