大凡1.5ｈで構築するraspberry pi + node-red + samba


# 目的と用意するもの
目的：
raspberry piにNode-REDをインストールして、RM Mini3からPython-broadlinkで、Amazon ECHOから、家電を操作したり、外付けHDDをNAS化します。
不注意によりクラッシュさせてしまうことがあるので、俺環用の手順書を作りました。

声による家電の操作は快適です。ゴロゴロしながらエアコンやテレビのオンオフ。一度楽を覚え、堕落した生活に慣れると後戻りできません。
あとは、私と同じようによくわかんないけど、Amazon Echoがあるし、なんちゃってIoT化をしてみたいと興味がある方の微力ながらの助けになれば。

適宜読み替えて頂ければ、ある部分では汎用的な手順書として使え...るかなぁ。

主な読み替え箇所
* ユーザー名：hoge
* IPアドレス：192.168.11.nnn

用意するもの：
* raspberry pi 2B(プラスだったかな)
* microSDカード(お好みの容量)
* USB外付けHDD(セルフパワーのものが良いでしょう)
* コンソールにするPC(今回はMacを使用)
* [raspbianのイメージ](https://www.raspberrypi.org/downloads/raspbian/)(その時点での最新版のliteをダウンロード)
* [SDアソシエーションのフォーマッタ](http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian_lite/images/)(Windowsなら不要？)


# 以前SSHで接続している場合

```bash
$ ~/.ssh/known_hosts
```

の中身を削除しないとIPアドレスが変更されたときにSSH接続できないので削除しちゃいます。
本当にこの対応でいいのだろうか...


# SDカードをFAT32でフォーマット  
terminalから挿入前後の`$ df`の結果を比較してmicsroSDカードを特定。
俺環では`/dev/disk2`でした。

```bash
$ diskutil unmountDisk /dev/disk2
$ sudo dd if=2018-06-27-raspbian-stretch-lite.img of=/dev/rdisk2 bs=4m
```

先人の記事によると`disk2`を`rdisk2`と書くと何倍だったか速いそうです。
ブロックサイズ4Mが有効かは検証していませんが、速く書き込めているようです。


# 初めからSSHで接続できるようにする
microSDカードを挿入しなおして、`SSH`という中身なしのファイルを作ります。
注意するところは拡張子が無いこと。

```bash
$ cd /Volumes/boot
$ touch ssh
$ sync
```


# DHCPからstaticに変更  

SDカードを取り外し、raspiに取り付け、LANを接続し起動。
iOSappのfingかなにかでraspverry piのIPアドレスを確認。
詳しい方は `ping`とか`arp -a`とかで検索するんでしょうか。
初めからstaticで起動する方法をご存知の方、教えてください。

```bash
$ ssh pi@{raspberry piのアドレス}
```
でSSH接続します。
ユーザー`pi`のpasswdは`rspberry`だそうです。

```bash
$ sudo vi /boot/cmdline.txt
```

に

`net.ifnames=0`

を追記してインターフェイスの名前をMAC addressからいつものeth0にします。

```bash
$ sudo sudo shutdown -r now
```

再起動したら再びSSH。

```bash
$ ssh pi@{raspberry piのアドレス}
```

DHCPからstaticに変更します。

```bash
$ sudo vi /etc/dhcpcd.conf
```

に

```
interface eth0
static ip_address=192.168.11.22/24
static routers=192.168.11.254
static domain_name_servers=192.168.11.254 8.8.8.8
```

を追記します。


# raspi-configで設定

```bash
$ sudo raspi-config
```

それっぽいメニューから
容量の最大化
piのパスワードの変更
hostnameの変更
などを実施します。


# 作業用ユーザーの追加
作業用ユーザーを追加します。

```bash
$ adduser hoge
```
追加したら`sudoers`に追加します。

```bash
$ sudo vi /etc/sudoers
```

あれ？こっちだっけ？

```bash
$ sudo visudo
```

に`hoge ALL=(ALL:ALL) ALL`を追記します。

```bash
$ sudo shutdown -r now
```

起動したら

```bash
$ ssh hoge@{raspberry piのアドレス}
```

でSSH接続して

```bash
$ vi .bashrc
```

にお好みの`alias`を追記します。

```
alias la='ls -aF'
alias ll='ls -alF'
alias df='df -h'
alias pu='pushd'
alias cf='pushd'
alias po='popd'
alias cs='popd'
```


# インストール済みの更新
`apt`で更新します。

```bash
$ sudo apt update
$ sudo apt dist-upgrade -y
$ sudo apt autoclean
```


# Node-Redのインストール
すでにNode-Redがインストールされていると聞きましたが...

```bash
$ node-red-start
```

をしてみて、無ければ以下でインストール。
無いんじゃん。

```bash
$ sudo apt install nodered -y
$ sudo update-nodejs-and-nodered
$ sudo systemctl enable nodered.service
```


# pythonとかをインストール
黒豆こと、RM MINI3を使えるように諸々インストールします。

```bash
$ sudo apt install python python-pip -y
$ sudo pip install broadlink
$ sudo apt install git
$ git clone https://github.com/mjg59/python-broadlink.git
```

でインストールできたら

```bash
$ cd python-broadlink/cli
$ ./broadlink_discovery > ROOM.device
$ vi ROOM.device
```

IPアドレスの行だけ残して他は削除し、保存して終了。
準備ができたら、いよいよリモコンのコードを学習させます。

```bash
$ ./broadlink_cli --device @ROOM.device --learnfile ファイル名
```

必要なボタンの学習が完了したら

```bash
$ ./broadlink_cli --device @ROOM.device —send @ファイル名
```

で送信テストをしてみます。
正常に送出できたら、長いのでシェルスクリプトを作ります。

```bash
$ cd
$ vi room.sh
```

に

```
#!/bin/sh
cd /home/hoge/python-broadlink/cli
./broadlink_cli --device @ROOM.device --send @$1
```

を書いて、保存して終了。

```bash
$ ./room.sh ファイル名
```

で動作確認します。


# NAS化  

NTFSを読み書きできるようにする

```bash
$ sudo apt install ntfs-3g -y
```

USB HDDを接続して

```bash
$ sudo dmesg | grep sd
```

で接続したHDDを確認します。
今回は`/dev/sda2`として認識されました。
マウントポイントを作ってマウントします。

```bash
$ sudo mkdir /media/storage
$ sudo mount /dev/sda2 /media/storage
```

で正常にマウント出来たらHDDのUUIDを確認します。  

```bash
$ sudo blkid
$ sudo vi /etc/fstab
```

確認したUUIDを`/etc/fstab`に追記します。

```
UUID=xxxxxxxxxxxxxxxx   /media/storage  ntfs    defaults,notime 0       0
```

これでいいのかはわんないけど、それっぽい感じで動いています。
sambaをインストール。

```bash
$ sudo apt install samba -y
$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.org
$ sudo rm /etc/samba/smb.conf
$ sudo vi /etc/samba/smb.conf
```

に

```
[global]
workgroup = WORKGROUP
interfaces = 192.168.11. 127.0.0.0/8 eth0
bind interfaces only = yes
hosts allow = 192.168.11.
max log size = 100
security = user
unix charset = UTF-8
dos charset = CP932
read only = no
create msk = 0644
directory mask = 0755

[nas]
comment = nas
path = /media/storage/NAS
public = yes
read only = no
browsable = yes
force user = hoge
```

を追記します。

```bash
$ sudo smbpasswd -a hoge
```
でsambaユーザー、パスワードを設定します。


# シンボリックリンクを作成
長いPathを叩くのは面倒なのでシンボリックリンクを作成します。

```bash
$ ln -s /media/storage hdd
$ ln -s /home/hoge/python-broadlink/cli rmmini3
```


# 以前作成したリモコンのコードを復元
退避している赤外線のあれこれを復元したり。

```bash
$ cp -r hdd/rmmini3/* rmmini3/
```

# まとめ
ここまででおおよそ1.5~2hくらいで完成。
こまめにイメージを抜いておきましょう...
後悔する前に...

参考にさせていただいた先人達の記事は後ほど。


# Amazon Echoで遊ぼう
### 前提環境
[大凡1.5ｈで構築するraspberry pi + node-red + samba](https://qiita.com/tstkkmd/items/2c6dfde68ebbc90b0bb1)
### Amazon Echoから家電を制御シリーズ
[Amazon Echoから家電を制御 0 ~RMmini3 + python-broadlinkで学習~](https://qiita.com/tstkkmd/items/71db748dc75127a84fe8)
[Amazon Echoから家電を制御 1 ~node-red-contrib-alexa-local~](https://qiita.com/tstkkmd/items/10fb586be83de96bfe24)
[Amazon Echoから家電を制御 2 ~テレビを我が手中に収めてやった 基本操作編~](https://qiita.com/tstkkmd/items/75771caeac9f00f3b668)
[Amazon Echoから家電を制御 3 ~テレビを我が手中に収めてやった ch操作編~](https://qiita.com/tstkkmd/items/a8c7a5ab001d6e299366)