RaspberryPi 4 Model B で USBポートの電源をON/OFFする　リトライ

[RaspberryPi 4 Model B で USBポートの電源をON/OFFする \- Qiita](https://qiita.com/natsu_san/items/ad3ae876d197bd5e3e64)
のリトライ版

# 目標
ラズパイに接続したUSBカメラ映像で異常検知を行い、パトランプで警告を行う

#構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570991/9ed78f03-54f7-a276-cd38-08de81b79bd2.png)

- <a target="_blank" href="https://www.amazon.co.jp/gp/product/B01GPLB2VI/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B01GPLB2VI&linkCode=as2&tag=konoblga-22&linkId=c874188e301f22b7fc6d8fffb88f637e">BUFFALO 電源連動節電機能付き 4ポートセルフパワーハブ ブラック BSH4AE12BK</a>
- <a target="_blank" href="https://www.amazon.co.jp/gp/product/B001O05KRI/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B001O05KRI&linkCode=as2&tag=konoblga-22&linkId=ae58a4d6d1eda83fed1f9ec687426a1a">SANWA SUPPLY TAP-RE10SPUN 高性能雷連動タップ 7個口</a>
- <a target="_blank" href="https://www.amazon.co.jp/gp/product/B08948Z35Z/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B08948Z35Z&linkCode=as2&tag=konoblga-22&linkId=f22038b1580cbf69ff5188a5e3575ea5">LED回転灯 ニコFAX φ45 VL04S型 VL04P-100FAN</a>

USBハブは、Per-port power switching対応のものを使いたかったのだが、BSH4AE12BKが使えるという情報があり、お安かったのでそちらを使った。
パトライトについては、FAX検知用のがお安かったので、それを使いった。
用紙検知部に白紙を巻きつけるだけで常時点灯する。

# Per-port power switchingとは
USBハブのポート毎に電源供給をON/OFFできる仕組み。
対応のハブはLinuxであれば、

```
sudo lsusb -v | less
```
で、該当のハブのところに

```
wHubCharacteristic 0x0009
  Per-port power switching
  Per-port overcurrent protection
```

と表示されれば使える可能性が高い。
（めっちゃ大量に出てくるのでless推奨）
可能性が高い、というのは、**ラズパイ4では上記表示があるのにも関わらず、個別制御が出来ない**から。
めんどくさっ！

# ラズパイ4のUSB構成
物理的配置は、こう

```
 LAN
+---+  Port1 Port2（USB3.0)
|   |
+---+  Port3 Port4（USB2.0)
```

論理的配置は、多分こんな感じ

```
Hub1（Root) - Hub 1.1(USB2.0) - Hub 2(USB3.0) 
                ├ Port1          ├ Port1
                ├ Port2          ├ Port2
                ├ Port3          ├ Port3
                └ Port4          └ Port4
```

全ポートをON/OFFしていいのであれば、以下でOKだが、個別に制御したいんだよおおおおお。

```
sudo uhubctl -l 1-1 -a off
```

# 事前準備
前の記事では、hub-ctrlを使ったが、その後調べたところ、より使い勝手の良いものが公開されていたので、こちらを使った。
[GitHub \- mvp/uhubctl: uhubctl \- USB hub per\-port power control](https://github.com/mvp/uhubctl)

## ファームウェアアップデート
ファームウェアが古いとそもそも動かないらしいのでアップデート。

```
sudo apt update
sudo apt full-upgrade
sudo reboot
```

## コマンドインストール

```
git clone https://github.com/mvp/uhubctl
cd uhubctl
make
sudo make install
```

## HUB確認
コマンドを引数なしで呼ぶと、対応しているハブを列挙してくれる。
が、**必ずしも確実に対応しているわけではない**ので、実際に給電状況を見て確認する必要がある。
GitHubのページでも、実際に適当なスマホとかライトとかを繋いで通電確認せよ、とある。
マジめんどくせぇ。。。

```
sudo uhubctl
Current status for hub 2 [1d6b:0003 Linux 5.4.83-v7l+ xhci-hcd xHCI Host Controller 0000:01:00.0, USB 3.00, 4 ports, ppps]
  Port 1: 02a0 power 5gbps Rx.Detect
  Port 2: 02a0 power 5gbps Rx.Detect
  Port 3: 02a0 power 5gbps Rx.Detect
  Port 4: 02a0 power 5gbps Rx.Detect
Current status for hub 1-1 [2109:3431 USB2.0 Hub, USB 2.10, 4 ports, ppps]
  Port 1: 0507 power highspeed suspend enable connect [05e3:0608 USB2.0 Hub, USB 2.00, 4 ports, ganged]
  Port 2: 0107 power suspend enable connect [1e4e:0100 GroupGets PureThermal (fw:v1.3.0) 800c0031-5109-3538-3731-313200000000]
  Port 3: 0100 power
  Port 4: 0100 power
Current status for hub 1 [1d6b:0002 Linux 5.4.83-v7l+ xhci-hcd xHCI Host Controller 0000:01:00.0, USB 2.00, 1 ports, ppps]
  Port 1: 0503 power highspeed enable connect [2109:3431 USB2.0 Hub, USB 2.10, 4 ports, ppps]
```

上記で1-1.1に繋がれているHUBをON/OFFする
HUB自体は、Per-port power switching対応していないので、「-f」オプションを付ける

```
sudo uhubctl -l 1-1.1 -f -a off
```

「.1」の部分を.2～.4に変更しても動くが、
USB2.0のポート（3,4）を使う場合でも

```
sudo uhubctl -l 1-1.4 -f -a off
```

と指定する必要があるので注意。

#推測など
- <a target="_blank" href="https://www.amazon.co.jp/gp/product/B01GPLB2VI/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B01GPLB2VI&linkCode=as2&tag=konoblga-22&linkId=c874188e301f22b7fc6d8fffb88f637e">BUFFALO 電源連動節電機能付き 4ポートセルフパワーハブ ブラック BSH4AE12BK</a>

↑は外部給電対応でありながら、大本のUSBの電源連動する、ということで、内部的に何らかのエミュレーション（または誤動作）をしているものと思われる。


また、給電制御ということで、個別ポートの過電圧検知が付いていたり、個別に給電をON/OFFできるハブは、Per-port power switching対応している……かもしれない。


GitHubの情報によると、こちらのメーカーのHUBが対応しているらしい。
（GitHubに報告があるのは16ポート）

<a href="https://amzn.to/3sj9VTN">ROSONWAY USB ハブ 3.0 16ポート アルミ製 USB Hub 100W セルフパワー USBハブ 5Gbps高速転送 12V/8.3A ACアダプタ付き 独立スイッチ </a>
<a href="https://www.amazon.co.jp/ROSONWAY-%E3%82%BB%E3%83%AB%E3%83%95%E3%83%91%E3%83%AF%E3%83%BC-5Gbps%E9%AB%98%E9%80%9F%E8%BB%A2%E9%80%81-AC%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E4%BB%98%E3%81%8D-%E7%8B%AC%E7%AB%8B%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81/dp/B08HHZQ728/ref=as_li_ss_il?dchild=1&keywords=Rosonway&qid=1610523396&sr=8-7&linkCode=li2&tag=konoblga-22&linkId=011f4e2a4801cb634586516529514ed1&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B08HHZQ728&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=konoblga-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=konoblga-22&language=ja_JP&l=li2&o=9&a=B08HHZQ728" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />


<a href="https://amzn.to/39rNTFJ">USBハブ 3.0 ROSONWAY アルミ製 7ポート USB3.0 Hub 24W電源付き バスパワーとセルフパワー両用 独立スイッチ 5Gbps高速転送、12V/2A ACアダプター</a>
<a href="https://www.amazon.co.jp/dp/B087X2F876/ref=as_li_ss_il?&linkCode=li2&tag=konoblga-22&linkId=ed6c39e11e1b669142f366de83be9099&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B087X2F876&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=konoblga-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=konoblga-22&language=ja_JP&l=li2&o=9&a=B087X2F876" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

今回はBSH4AE12BKで目的達成してしまったので、今後機会があれば上記HUBも試してみたい。