RaspberryPiにHomeAssistantをインストールしてGoogleAssistantから呼び出す 

# RaspberryPiにHomeAssistantをインストールしてGoogleAssistantから呼び出す 。
##"OK Google カーテンを閉めて"

![開発モード13.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/686874c9-df08-0cd7-b6dc-f600ee742cb8.gif)

#raspberry piにraspbianをインストールする。

[詳しいインストール方法](https://www.home-assistant.io/installation/raspberrypi)


## 注意すべきこと
+ 電源　十分な容量を持った電源を選ぶ、できれば3.5A以上
+ SDカード　高速な信頼性の高いものを選ぶ　Application Class 2 32GB以上
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/8fc278bf-0976-dca4-b0d4-182657a332f8.png)
### PCのusbから電源取っていたら動作が不安定であった。

+ wifi経由で動作できるがCloud経由でスマートフォンに接続すると不安定な動作となる。

#インストール方法は、3つある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/b61e01eb-67e4-ace2-60da-f48ff30e2026.png]

#1.Home Assistant Operating System
最低限のlinuxとhomeassistantがインストールされます。
自分でセンサーやスイッチを作成する場合ちょと敷居が高くなる
初心者は、これをインストールする。

##[インストール方法は、詳しくここに説明されている](https://www.home-assistant.io/installation/raspberrypi)


# 2.Home Assistant Container
Dockerを用いたインストール多くのユーザーは、この方法を使用すると手軽に使うことができる。
また、pythonなど利用して独自のインターフェイスを作ることができる。

```.sh
# インストール
$ curl -sSL https://get.docker.com | sh
# グループの追加
$ sudo usermod -aG docker pi
# OS再起動（グループ追加を反映）
$ sudo shutdown -r now
# dockerサービスの有効化
$ sudo systemctl enable docker
// バージョン確認
$ docker --version
Docker version 20.10.6, build 370c289
```
###Raspberry pi 3にインストール


```.sh
docker run --init -d \
  --name homeassistant \
  --restart=unless-stopped \
  -v /etc/localtime:/etc/localtime:ro \
  -v /hass:/config \
  --network=host \
  homeassistant/raspberrypi3-homeassistant:stable
```
### 実行方法
```.sh
#http://<host>:8123
http://192.168.1.20:8123
```
# 3.Home Assistant core
既存のRasbianに追加してインストールする方法です。既にWebServiceやMQを構築してある場合には、これを使う。
また、node.jsなどでセンサーやスイッチを構築する場合には、これを選ぶ。多くのHome assistantのセンサーやスイッチのドライバーは、python2で書かれていてpython3で構築されたシステム上にインストールすることは、お勧めしない。
#Python 3.8（パッケージを含むpython3-dev）以降がインストールされていることを前提としています。
```.sh
#依存関係をインストールする
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y python3 python3-dev python3-venv python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff5
#アカウントを作成する
sudo useradd -rm homeassistant -G dialout,gpio,i2c
#仮想環境を作成する
sudo mkdir /srv/homeassistant
sudo chown homeassistant:homeassistant /srv/homeassistant

sudo -u homeassistant -H -s
cd /srv/homeassistant
python3.8 -m venv .
source bin/activate
#AssistantCoreをインストールします。
python3 -m pip install wheel
pip3 install homeassistant
# .homeassistantディレクトリに構成ディレクトリが自動的に作成され、/home/homeassistant基本的な依存関係がインストールされます。
#実行
hass
#Webインターフェイスを介してインストールにアクセスできますhttp://homeassistant.local:8123。
```

---

#ここからはDocker Versionの話

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/1de25f04-80c6-50b3-0218-0e77d7096405.png)
###こんな画面が出れば成功

ここからは、設定の話
Windows 10のVisual Studio 2019を用いて設定ファイルを編集します。
sambaをインストールします。

```.sh
sudo apt-get install -y samba
sudo nano /etc/samba/smb.conf
#ワークグループの変更します
workgroup = workgroup
#最終行に追加
[root]
    comment = root
    path=/
    browseable=YES
    writeable=YES
    valid users= pi, root
    only guest=no
    create mask=0777
    directory mask=07777
    public=no
    force user = root
#Sambaユーザのパスワード設定
sudo smbpasswd -a pi
sudo smbpasswd -a root
```

dockerのインストールでは、rootの直下にhassフォルダが出来上がっています。

```
automations.yaml
configuration.yaml
groups.yaml
scenes.yaml
scripts.yaml
secrets.yaml
```
まず、configuration.yamlを定義します。

```.yaml
tts:
  - platform: google_translate

group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

homeassistant:
  name: Home
  latitude: 35.xxxxxx
  longitude: 140.xxxxxx
  elevation: 40
  unit_system: metric
  time_zone: "Asia/Tokyo"
  whitelist_external_dirs:
    - '/config'
    - '/config/www'
```
latitude: には、緯度
longitude: には、経度
elevation:　高度
を設定してください。Google earthなどで知ることができます。

この情報は、とても重要です。
例えば日の出及び日没に同期させswitchをon/offすることができます。
また、携帯電話の位置情報をもとに空調のswitchをon/offすることもできます。
####このアプリケーションでは、日没と同時にカーテンを閉じ、日の出と同時にカーテンを開く設定を行います。
whitelist_external_dirs:は、dockerからアクセスできるディレクトリを設定します。
/configは、/hassディレクトリを示し、/config/wwwは、/hass/wwwを示します。
#####注意)dockerは、独立した、コンピュータとして動作しておりRaspiとやり取りするためには、tcp/ipを使うか、bluetoothしかありません。raspi上のアプリから簡単にデータを渡したり、イメージファイルを置いたりするのにここが使われます。
-----------------------------------------------------------------------------------
#ここまでやってきたのですが問題が起きました。
```configuratin.yaml
cover:
  - platform: switchbot-curtain
    mac: xx:xx:xx:xx:xx:xx:xx
    name: カーテン
```
```automation.yaml
- id: open_curtain
  alias: sun rise open curtain
  trigger:
  - platform: sun
    event: sunrise
    offset: 00:00:00
  action:
  - service: cover.open_cover
    target:
      entity_id: cover.katen
  mode: single
- id: close_curtain
  alias: sunset close curtain
  trigger:
  - platform: sun
    event: sunset
    offset: 00:00:00
  action:
  - service: cover.close_cover
    target:
      entity_id: cover.katen
```
一応動作しました。
------------------------------------------------------------
###Rasipberry piのGPIOに人感センサーと温度センサーをつないだとたん動作しませんでした。
##Raspberry piにdockerをインストールするバージョンでは、直接GPIOを制御できません。
当たり前と言えば当たり前です。
dockerは、rasbian上で動作する独立したOSです。
----------------------------------------------------
#気を取り直してrasbian上に直接homeassistantをインストールして使います。
#3の方法です。
これも一癖二癖ある作業です。
microSdからの作成となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/eae4ba00-2dfe-c0ea-d96f-aa5a99aea794.png)
これを使ってmSDを作成します。
一応30分程度で新しいmSDが作成されます。
#ここで出来上がったRaspiは、python3.7です。
pip install homeassistant
でインストールするためには、コンパイルしてインストールする必要があります。
マニュアルでは、python3.8以上と書かれています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/a47884c2-d852-c5c1-9132-31990de92572.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/b77b4193-86c9-b161-76e9-da78a2ec5c90.png)
この表を見てpython3.9をインストールしました。or newerに騙されました。
はっきり言って各社が用意しているライブラリは、python3.8用に作成されています。
buletoothのインターフェイスを持つ周辺機器は、ほとんどwarningをだし安定して動作しません。
--------
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/293a081b-272a-afb2-b358-f05890fc4953.png)
#人情的には、python3.10を選べば大丈夫とおもい、トライしました。やはりbluetoothでトラブり結局、python3.8.8で問題解決しました。
---------
```.sh
$ wget https://www.python.org/ftp/python/3.8.8/Python-3.8.8.tar.xz
$ tar -xf Python-3.8.8.tar.xz 
$ cd Python-3.8.8
$ ./configure --enable-loadable-sqlite-extensions && make && sudo make install
```