Android(Fireタブレット)をスリープさせない（画面も暗くさせない）方法

## はじめに
我が家では、Zabbixのダッシュボード画面をAmazon Fireタブレット（余っていたFire 7）上のブラウザにて常時表示させているのですが、どうしても一定時間経過すると画面が勝手に端末がスリープしてしまったり、画面が暗くなってしまったりして困っていました。
その問題を解決することができたので、その際のメモです。

## まずはFireタブレットの標準機能を使っての対応
Fireタブレットの画面スリープするまでの時間は、標準では最長30分までしか設定できないようです。

「設定」→「ディスプレイ」→「画面スリープ」
と進むと、最短15秒から最長30分が選択できます。

## 開発オプション を使用しての追加設定
標準の設定画面では最長30分までしか設定できませんでしたが、**開発者オプション**を使用することによりスリープモードを無効にすることができます。
#### 開発者オプションを有効にする
「設定」→「端末オプション」→「シリアル番号」を数回タップ
これで、「開発者オプション」が表示されるようになります。
#### スリープモードにしない設定
「開発者オプション」→「スリープモードにしない」をオン。
これで、**USBケーブルを電源に接続している間は**画面がスリープしないようになりました。
#### これでも問題が・・・
これらの設定を行っても数日（感覚的には3～5日？正確に計れていません）経つと、バックライトが暗くなってしまいます。
設定前のように真っ暗になるわけではありませんが少し離れると何を表示しているか全くわかりません。
画面をつつくとまたバックライトが明るくなるのですが、とても面倒です。

## ADBにて画面が暗くなるのを防ぐ（ここからが本番）
#### 方針
「わざわざ手で画面をつっつくのが面倒くさい」のならば「誰かに定期的に画面をつっついてもらえばいいじゃない」
ということです。
誰かに：常時起動しているホスト
定期的に：crontab
つっつく：adbコマンドでエンターキーを送出

#### 必要なもの
・Fire 7タブレット
・ADB接続するPC（我が家ではWindows10を使用）
・通信可能な（充電専用ではない）USB A to USB microBケーブル（いわゆる普通のmicroUSBケーブル）
・常時起動していて定期的にコマンドが実行できるホスト（我が家では常時稼働しているRaspberryPi 3B（Debuab buster）を使用）

### FireタブレットのIPアドレスを固定する
この後の工程でリモートで接続するため、FireタブレットのIPアドレスはDHCPで動的払い出しではなく、IP固定のほうが都合が良いです。
ここでは詳しい手順は書きませんが、主に以下の2通りのやり方があります。
・Fireタブレットの設定でIPアドレスを固定設定する
・DCHPサーバでFireタブレットのMacアドレスに対して指定したIPアドレスを払い出すように設定する

### PCからFireタブレットに接続できるようにする
この手順はAmazonのオフィシャルに手順が書かれているので、そちらを参照してください。
[ADBを使用してFireタブレットに接続する方法](https://developer.amazon.com/ja/docs/fire-tablets/connecting-adb-to-device.html)

### FireタブレットのADBをTCP/IP接続モードにする
USBでADB接続した端末で以下のコマンドを実行
``adb tcpip 5555``
ここでもうUSBケーブルは外してOKです。

### リモートからADB接続できるか確認する
先程のADBコマンドを投入したクライアントからでも良いですが、この先は定期的に実行する常時起動のホストから実行したほうが良いでしょう。
FireタブレットのアドレスのIPアドレスとポート番号を指定してTCP/IP接続
``adb connect 192.168.xxx.xxx:5555``
ここの**192.168.xxx.xxx**の部分は各自の環境に合わせてください。

うまく接続できれば、以下のコマンドで接続を終了しておきます。
``adb disconnect``

うまくいかないときは・・・
FireタブレットのUSBデバッグをOFF/ONしてみたり
セキュリティソフトの通信遮断を疑ってみたり
くらいでしょうか

### 定期的にFireタブレットに接続し、任意の操作を行い
adbの実行権限のあるユーザのcrontabに以下を追加
``
0 */6 * * * adb connect 192.168.xxx.xxx:5555 && sleep 5 && adb shell input keyevent ENTER && sleep 5 && adb disconnect
``

ここでは
6時間毎に「接続して　5秒待って　エンターキーを押して　5秒待って　切断」
ということをやっています。
``adb shell input keyevent ENTER``
の部分を
``adb shell input touchscreen tap 1 2``
とすれば、X=1,Y=2の座標をタップします。
``adb shell input touchscreen swipe 1 2 11 12``
とすれば、X=1,Y=2からX=11,Y=12にスワイプします。
これらを組み合わせて、「ブラウザの更新ボタンを押す」みたいなこともできそうですね。

以上で、無事Fireタブレットをスリープもさせず、画面も暗くならず常時画面が明るい状態で維持することができました。

## 途中試行錯誤のメモ
#### アプリで解決できるのでは？
様々なアプリは試してみましたが、私が探せた範囲だと完全に画面が暗くなるのを防ぐことはできませんでした。「このアプリ入れたら解決するよ！」みたいな情報をいただけると嬉しいです。

#### マウスジグラーで対応（試していません）
「マウスジグラー」という、USB接続して定期的にピクピク動くガジェット（Digispark等で自作もできます）が存在します。
おそらくこれでも対応できるのだとは思いますが、充電しっぱなしでの使用が前提なので、OTGと充電の二股ケーブルのようなものが必要になります。
Fire HD 8 Plusだとワイヤレス充電ができるのでUSBポートは専有できると思いますが、そもそも「余っていたFire 7タブレットを活用する」がスタートラインだったので、試していません。

#### scrcpyというアプリを使用して、定期的にマウスを操作すれば良いのでは？
[scrcpy](https://github.com/Genymobile/scrcpy/releases "Genymobile/scrcpy"というアプリがあり、マウスやキーボードのエミュレートだけではなく画面をキャプチャできたりとなかなか高機能なようです。
実はこのアプリでも対応できましたが、**”スリープさせない”という目的だけだとここまでする必要はありませんでした。**

## 注意事項
今回の対応により、Fireタブレットは24時間365日常に画面が明るく表示されることになります。
ということ液晶のバックライトであったりバッテリー等にもメーカーの想定以上の負荷をかけていることになると思います。

## 最後に
今回はAmazonのFireタブレットを使用しましたが、OSがAndroidであれば同様の方法でスリープさせないことができると思います。
我が家では過去使っていて余っていたFire 7タブレットの利活用方法としてZabbixダッシュボードの表示用端末として活躍してもらうことになりました。余っていたものを利活用するのに追加費用をかけるのもなんだかなぁということで費用をかけずに対応する方法を模索した上での解決策です。
不特定多数の人が触る可能性がある場所ならば、今回の対応に加えKIOSK端末化する必要があるのでしょうが、今回は自宅内での使用が前提なのでこれで目的は達成とします。