ラズパイでめざましじゃんけんを自動化した話

##1.作ったモノ
めざましテレビのめざましじゃんけんコーナーの時間になったら、
テレビの赤外線コードを覚えさせたラズパイからCronの定期実行を使って、
TV ON→8ch→ミュート→じゃんけん→TV OFF
という赤外線コードをシェルスクリプトで実行しています。

##2.作った経緯
[3.前提](##3.前提)に貼ってある記事でラズパイでスマートリモコンを作りまして、
なんか応用できないかなーて模索していたところ、
めざましじゃんけんってやる時間決まってるし、定期実行すればいけるんちゃうか、
と考えたところからつくりはじめてみました。

勝手にじゃんけんしてポイント貯めて、あわよくばプレゼントほしい、
という下心をモチベーションに取り組みました。

##3.前提
下記の記事の__「ラズパイで回路を制御」__の章まで用意していればOKです。

[格安スマートリモコンの作り方](https://qiita.com/takjg/items/e6b8af53421be54b62c9 "格安スマートリモコンの作り方")

電子回路やラズパイの知識０の自分でも記事通りに進めていくことでスマートリモコンが作れる大変有用な記事でお世話になりました。

##4.使用する赤外線コードの学習

使用する赤外線コードは下記の６つです。
それぞれ適当に名前を付けてラズパイに覚えさせます。

・電源ボタン→tv:powerOnOff
・ミュート(睡眠を妨害してほしくない)→tv:mute
・8ch(地域差があると思うのでそれぞれの環境に合わせてね)→tv:8ch
・dボタン赤→tv:dRed
・dボタン青→tv:dBlue
・dボタン緑→tv:dGreen

```shell
$ python3 irrp.py -r -g18 -f codes tv:powerOnOff --no-confirm --post 130
Recording
Press key for 'tv:powerOnOff'
Okay
```
覚えさせたらちゃんと赤外線コードが使えるかテストしましょう。
ラズパイに接続されている赤外線LEDをテレビに向けて下記の覚えさせたコマンドを実行します。

```shell
$ irrp.py -p -g17 -f codes tv:powerOnOff
```
![2019-05-19 22.55.19.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404191/16569ad3-dd14-83d4-0a6d-97f5c54ae8e4.jpeg)

$\Huge{テレビがかってにづいだ！！！！}$
ら成功です。おめでとうございます。
次に進みましょう。

##5.シナリオの設計と実装
次にシナリオを考えます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404191/84d3726e-0e14-1dab-139e-1fd4bebdc370.png" width="400">
<a href="https://www.fujitv.co.jp/meza/d/index.html">https://www.fujitv.co.jp/meza/d/index.html</a>

月曜～金曜は1日4回、土曜は1日2回やってますね。
平日の5:58にじゃんけんのために起きれるはずがありません。
ラズパイにやってもらいましょう。

時刻になった時に必要なテレビ操作は、
TV ON→8ch→ミュート→じゃんけん→TV OFF
でよさそうです。

また、めざましじゃんけんの時間になると、
テレビ上でじゃんけんを受け付ける時間がカウントダウンされるのですが、
おおよそ30秒前くらいからカウントダウンされているので、
それに合わせてじゃんけんをするように調整する必要があります。

その他、テレビを起動してから次の赤外線コードを受け付ける安定状態に入るまでの時間を考慮し、
下記のようなシナリオを考えました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404191/9c4b985c-404b-87af-52f7-40f5cd0f92f3.png)
※赤外線コードの実行には約1秒かかるため、wait時刻+1秒で計算しています。

赤外線コマンドの実行やウェイト時間はシェルスクリプトで制御し、
そのスクリプトを定期時刻に開始するのはCronにやらせます。

作成したシェルスクリプトが下記です。

```bash:/bin/janken.sh
#!/bin/bash

janken=$(($RANDOM % 3)) 

python3 /home/pi/homebot/bin/irrp.py -p -g17 -f /home/pi/homebot/data/pigpio.json "tv powerOnOff"
sleep 6 

python3 /home/pi/homebot/bin/irrp.py -p -g17 -f /home/pi/homebot/data/pigpio.json "tv 8ch"
sleep 2 

python3 /home/pi/homebot/bin/irrp.py -p -g17 -f /home/pi/homebot/data/pigpio.json "tv mute"

max=12
for ((i=0; i < $max; i++)); do
  #gu
  if [ $janken -eq 0 ]; then
    python3 /home/pi/homebot/bin/irrp.py -p -g17 -f /home/pi/homebot/data/pigpio.json "tv dBlue"
    
  #choki
  elif [ $janken -eq 1 ]; then
    python3 /home/pi/homebot/bin/irrp.py -p -g17 -f /home/pi/homebot/data/pigpio.json "tv dRed"
    
  #pah
  else
    python3 /home/pi/homebot/bin/irrp.py -p -g17 -f /home/pi/homebot/data/pigpio.json "tv dGreen"
    
  fi
  sleep 5
done

python3 /home/pi/homebot/bin/irrp.py -p -g17 -f /home/pi/homebot/data/pigpio.json "tv powerOnOff"
```

次にスクリプトを定期実行するためのCronの設定です。
下記コマンドでCronの編集できます。

```shell
crontab -e
```

Cronの設定内容は下記です。

```bash:crontab
57 5 * * 1-5 /bin/janken.sh
57 6 * * 1-5 /bin/janken.sh
#34 7 * * 1-5 /bin/janken.sh この時間は私がやりたい
#57 7 * * 1-5 /bin/janken.sh この時間は私がやりたい 
25 7 * * 6 /bin/janken.sh
21 8 * * 6 /bin/janken.sh
```

これで作業は以上になります。

##6.運用してみる

実際に運用している様子が下記になります。
※撮影のため7:57のCron設定を有効にしています。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ラズパイでめざましじゃんけんを自動化しました<br>時間になったら勝手にテレビがついて勝手にじゃんけんします <a href="https://t.co/JzP1m9GpC5">pic.twitter.com/JzP1m9GpC5</a></p>&mdash; yagi (@yagiFrmAzkaban) <a href="https://twitter.com/yagiFrmAzkaban/status/1130731032850812929?ref_src=twsrc%5Etfw">2019年5月21日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

$\Huge{うまくいった！！！}$

撮影したのは水曜日でしたが、すでに100P超えています！
これで我が家に毎週プレゼントがくるチャンスができました。
めでたし

雑ですが以上になります。