ラズパイにScreenlyとremote.itで遠隔デジタルサイネージ

# はじめに
~ Remote controlled Digital signage over the internet ~
表示したい一枚絵がくるくると変わるデジタルサイネージをラズパイを使って簡単に作ってみます。
今回はラズベリーパイ(Raspberry pi)をNOOBS立ち上げ時、インターネット接続していると選択できる「Screenly」をインストールして、そのあとremote.itを追加するとインターネット越しにコントロールできるリモートデジタルサイネージが作れちゃいます。


# デジタルサイネージ「Screenly」
「Screenly Open Source Edition」は機能が制限されていますが無償で気軽に使えるデジタルサイネージです。インストールも簡単。専用イメージが用意されています。

https://www.screenly.io/

動画、写真、Webページなどを再生できます。ちょっと崩れたりすることがある？のはご愛嬌。

### インターネットに接続した状態でNOOBSからラズパイ立ち上げ
インターネットに接続した状態だと選択できるイメージのメニューが増えます。
Screenlyを選択してインストールを実行します。

![NOOBS.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309124/20895120-bea6-61b7-40e6-43d0b22cde0a.jpeg)

インストールが無事完了したら、screenlyが立ち上がってきます。

![Screenly.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309124/942a0b61-44db-d918-97c7-3d86d3945347.jpeg)

この後はPCからWeb Interfaceにアクセスできます。Screenlyの設定はそちらから、ですが今は一旦ここまで。

![スクリーンショット 2019-07-26 22.53.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309124/86f5f6a7-617d-6d30-bff9-07f9727a0d04.png)

# Screenly起動後の設定
ほぼ唯一ではあるものの、1点悩むポイントがこちら。
どうやってコマンドラインにアクセスするのか？です。
（本家　↓　にしっかり書いていますのでちゃんと読む人は悩まないでしょう）

https://www.screenly.io/ose/

最初にWebインターフェイスからビデオを無効にし、ビデオの再生が停止したら、Ctrl + Alt + F1キーを押します。その後ユーザー名／パスワードを入力してログインします。デフォルトは変更しちゃったほうが良さそうですね。（2019/7現在以下のU/Pでログイン、公式より）

### コマンドラインへのアクセス
```console
[ctrl] + [alt] + [F1]
 U: pi
 P: raspberry
```

### パスワードの変更
```console
xxx@pi01:~ $ sudo passwd root
Enter new UNIX password: [rootの新しいパスワード]
Retype new UNIX password: [もう一回rootの新しいパスワード]
passwd: password updated successfully

xxx@pi01:~ $ sudo passwd pi
Enter new UNIX password: [piの新しいパスワード]
Retype new UNIX password: [もう一回piの新しいパスワード]
passwd: password updated successfully
```

### SSHの有効化
細かい操作は割愛、事例はたくさんあると思います。
Interface Option > SSH あたりから有効化します。

```console
xxx@pi01:~ $ sudo raspi-config
```

### 他設定
本家（先述のリンク先より）では以下の設定をおすすめされているようです。最後にリブートですね。

```console
- Expand the root file system (required)
- Disable overscan (depends on your display)
- Change keyboard mapping (optional)
- Change time zone (optional, but Screenly’s scheduling uses this)
- Enable SSH (optional)
- Change password for ‘pi’ user (recommended)
- Once you’ve made all these changes, you must restart your Raspberry Pi
```



:::note info
2021.9.27 更新
これ以降の手順を従来のconnectd_installerを使う手順からDesktop/CLIを使う手順に更新しました。
:::

# remote.itでネットワーク設計が不要に
remote.itを使うとラズパイをDHCPで運用してもremote.it経由であれば気にせずデバイスに乗り込めちゃいます。ポートフォワードや自宅ネットワークをインターネット側にポート公開（穴あけ）する必要もありません。
remote.itの概要は、こちらの[@u___sk](https://qiita.com/u___sk)さんの記事でも紹介されています。

https://qiita.com/u___sk/items/e0df9581d2e58891ec8a

加えると、インターネット接続の種類は選びません。ラズパイが携帯電話ネットワーク（Pocket Wifiやテザリングなど）にぶら下がっていてもOK。乗り込めちゃいます。


# remote.it導入からサービスに接続するまでの流れ
- remote.itアカウントの作成
- remote.itのインストール
- Raspberry piをremote.itデバイスとして登録
- 接続したいサービス（ScreenlyのWeb Interface, SSH）の設定

最初にremote.itアカウント作成が必要ですが「[インターネット世界の「どこでもドア」　remote.it](https://qiita.com/u___sk/items/e0df9581d2e58891ec8a)」の記事がわかりやすいです。

# remote.itのインストール
- まず最新パッケージ一覧の取得
 
```console
xxx@pi01:~ $ sudo apt update
```
- remote.itをインストール

```console
xxx@pi01:~ $ sudo apt install remoteit
```
これでremote.itのインストールは完了です。


# Raspberry piをremote.itデバイスとして登録

- このRaspberry piをremote.itデバイス登録するためにGUIコンソールにアクセスします。

> http://[ラズパイのIPアドレス]:29999

remote.itアカウント、パスワードを入力し、`SIGN IN`をクリックします。

![PanelSignIn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309124/61ee9a4b-2c49-ef5e-df4f-3a7f78a07751.png)

`Set up remote access`をクリックします。

![DeviceRegistrationPi02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309124/a80f29b0-664f-d28b-3051-efdaaa272a72.png)


デバイス登録画面が表示されます。 任意のデバイス名を入力します。 "Services"にはラズパイ上で稼働中のサービスが表示されます。 リモートアクセスしたいサービスにチェックを入れ、`REGISTER`をクリックします。 `remoteit admin`サービスは、このWeb管理画面自体のサービスです。 このサービスを登録しておけば、遠隔からサービスの追加・削除を行うことができます。

ScreenlyのWeb Interfaceは`HTTPS-443`のhttpsサービスに割り当てられています。

デバイス名の入力、登録サービスの選択が完了したら、`REGISTER`をクリックします。

![ServiceRegistrationPi02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309124/a759702e-5461-772b-eb18-4fbb8489c928.png)


少し待つと、、、、

![ServiceRegistrationProgress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309124/d47b77d7-9c14-88c9-6795-5e027ad92a76.png)

登録が完了します。

![スクリーンショット 2021-10-13 20.08.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309124/40e22070-7ec5-4f92-dfe9-1bb033f3847e.png)


これでRaspberry Piへリモート接続する準備が整いました。


# Screenlyにremote.itでリモートログインしてみる
remote.itにサインインして先程登録したデバイス名を探す

![スクリーンショット 2021-10-13 20.10.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309124/8275d054-b9ae-a4d6-fcf4-b6487328ae6c.png)


無事、remote.itにデバイス（Screenly入りのRaspbery Pi）が登録されていますね。デバイスの名前`Screenly_pi_01`をクリックします。
すると、このデバイスに登録されているサービスがいくつか表示されました。先程登録したWeb InterfaceやSSHですね。
`https`をクリックすると…

![スクリーンショット 2021-10-13 20.13.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309124/cb0ceff3-c02d-a1ec-2fc1-c937e477aafd.png)


新しいタブが開いてつながりました！URLの部分がremote.itで払い出された一時アクセス用のリンクになっていますね。これで接続するネットワークを変更してもインターネットに繋がっていればremote.itがその所在を特定してくれます。インターネット越しでもケータイのテザリングでも大丈夫です。

![スクリーンショット 2019-07-26 23.34.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309124/a75e2218-a201-f652-6f4f-3d6fa4d92613.png)


# 安定した運用のために
念の為にcronで一日一回ぐらいリブートしておけばまあ安心かな。
設定例

```console
xxx@pi01:~ $ sudo crontab -e
```
エディタ画面で以下の1行を追加

```
0 2 * * * /sbin/shutdown -r now
```

上記例は、1日1回深夜2時にリブートするのが私の人生経験上無難だったというだけです、お好みに合わせて変更してください。cronでなくとも、また編集方法なども各宗派お好みで。




# ついでにこれは、つまりリモートでコントロールできるデジタルフォトフレーム
じいちゃんばあちゃんの住む実家に安いHDMIディスプレイとラズパイを置いてくる訳です。
リモートからたまに写真を入れ替えたりして近況を伝えたりします。
実家のネットワークの設計は不要、DHCPでインターネットにさえ出られればOK。
設置する場所を変更されてもたいして問題になりません。

![スクリーンショット 2019-07-27 1.43.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309124/84c6afa6-7f4f-2047-2bc5-07c74b4221b9.png)


# まとめ
ラズパイは面白いですね、いろんなトライをしたくなる環境が用意されているように感じます。
ラズパイで実現できる機能をインターネットに「安全に」「簡単に」「便利に」双方向接続する方法としてremote.itはとても良い組み合わせだと思います。他の利用例も紹介したいです。

ご参考
AWSのサーバーのSSHを超！安全に使うっていう[@tkhmhiroc](https://qiita.com/tkhmhiroc)さんの例がこちら
> [これは魔法か？！ インバウンドポートを全閉したAWSのサーバに接続する方法](https://qiita.com/tkhmhiroc/items/0724d4b1d6bc688aa474)

リモートコントロールできるWebカメラの例
> [ラズパイにRPi-Cam-Web-Interfaceとremote.itで遠隔Web IPカメラ](https://qiita.com/mskairmail/items/25f985927beb5d3f1b04)


またこんな使い方はどう？ってのがあれば教えてほしいです！