SORACOM MOCAROSで世界を反転させて愉しむ

2019/04/01、ソラコムから新サービス「SORACOM MOCAROS」がリリースされました。
もう13番目のサービスになるんですね。すごい！

## SORACOM MOCAROSとは？
MOCAROSになんとなく字面が似ている、超時空的な要塞のアニメを念頭に置いて読むと、
なぜか納得感が得られるかもしれません。

> SORACOM MOCAROS(以下MOCAROS)は、独自開発した超時空機械学習技術「APRIL(Artificial Preferred Reversible Intelligent Learning)」により、入力されたデータの特性を自動認識し、そしてそのデータの意味合いを保ちながら反転させることを可能としました。お客様はこのサービスを利用することで、例えば数値はプラス・マイナスを、配列はその並びを、画像は左右を、そして世の中の悲しみは喜びへと反転させることが容易に可能となります。

すごいですね。
愛しさと切なさと心強さを反転したらどうなるんだろう。

ちなみにSORACOMを反転させてみると…。

リリース
https://soracom.jp/press/2019040101/

リリースブログ
https://blog.soracom.jp/blog/2019/04/01/soracom-mocaros/

サービス 
https://soracom.jp/services/mocaros/

## やってみよう！
SORACOM Mocarsoは、[SORACOM Harvest Publish API](https://dev.soracom.io/jp/start/inventory_harvest_with_keys/)という影の薄い機能によって実現されます。
Inventoryまわりに超時空機械学習技術「APRIL」が実装されているのではないかと思われます。

### デバイスグループ作成
Menuを開き、[デバイスグループ] > [追加]から、デバイスグループを作成します。
<img width="974" alt="スクリーンショット_2019-03-31_7_38_26.png" src="https://qiita-image-store.s3.amazonaws.com/0/39565/46cccce1-61b8-8a63-df94-355d0c65251e.png">

<img width="600" alt="スクリーンショット 2019-03-31 7.38.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/39565/bacf2cfb-58d3-e0b7-aab7-fe9a1b4e0801.png">

作成後、デバイスグループの設定画面に行くので、HarvestをONにしましょう。
[保存]ボタンをお忘れなく。
<img width="879" alt="スクリーンショット_2019-03-31_7_40_08.png" src="https://qiita-image-store.s3.amazonaws.com/0/39565/89748788-15d4-8e33-891a-edb01b74daca.png">

### デバイス登録
Menuを開き、[デバイス管理] > [デバイスを追加]からデバイスを追加します。
グループは先ほど作成したデバイスグループを選択します。
<img width="976" alt="スクリーンショット_2019-03-31_7_36_29.png" src="https://qiita-image-store.s3.amazonaws.com/0/39565/b34ccb03-349a-25d7-02d5-ee7ae28e6fb0.png">

<img width="600" alt="スクリーンショット 2019-03-31 7.41.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/39565/427a75c7-5f36-ec50-7ed7-27256eda6fd4.png">

デバイスIDとシークレットキーは安全な場所に保存しておきましょう。
<img width="599" alt="スクリーンショット_2019-03-31_7_41_55.png" src="https://qiita-image-store.s3.amazonaws.com/0/39565/e0c2bd1d-6036-8eb5-965a-aa7d941072f0.png">

### Harvestへのデータ送信
HarvestにデータをPOSTします。
普通にHarvestに送るときは送信URLの最後が`publish`なんですが、、`hsilbup`MOCAROS用に反転されてますね。
送信したデータを確認するときは、デバイス一覧で該当デバイスにチェックを入れて[データを確認]をクリックすればOKです！
<img width="1372" alt="スクリーンショット_2019-04-01_8_32_30.png" src="https://qiita-image-store.s3.amazonaws.com/0/39565/32cb27c0-bdb2-b656-6ac6-5ab224c3891c.png">

#### 文字列送信
```
$ curl -X POST --header 'content-type: application/json' --header 'x-device-secret: <シークレットキー>' -d '{"mocaros":"MOCAROS"}' https://api.soracom.io/v1/devices/<デバイスID>/hsilbup
```
```
$ curl -X POST --header 'content-type: application/json' --header 'x-device-secret: <シークレットキー>' -d '{"soracom":"ソラコム"}' https://api.soracom.io/v1/devices/<デバイスID>/hsilbup
```
```
$ curl -X POST --header 'content-type: application/json' --header 'x-device-secret: <シークレットキー>' -d '{"kaibun":"まさかさかさま"}' https://api.soracom.io/v1/devices/<デバイスID>/hsilbup
```
<img width="1369" alt="スクリーンショット 2019-04-01 8.18.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/39565/2275cc12-18b7-7247-153f-b914f4962717.png">

日本語でもちゃんと反転してくれます。
これで回文の確認も完璧ですね！

#### 配列/数値/Boolean
配列だと順序も反転、中身も反転！
もちろん数字単体でも反転してくれます。

```
$ curl -X POST --header 'content-type: application/json' --header 'x-device-secret: <シークレットキー>' -d '{"mocaros":[1,2,3,4,5]}' https://api.soracom.io/v1/devices/<デバイスID>/hsilbup
```

```
$ curl -X POST --header 'content-type: application/json' --header 'x-device-secret: <シークレットキー>' -d '{"mocaros":false}' https://api.soracom.io/v1/devices/<デバイスID>/hsilbup
```

```
$ curl -X POST --header 'content-type: application/json' --header 'x-device-secret: <シークレットキー>' -d '{"mocaros":100}' https://api.soracom.io/v1/devices/<デバイスID>/hsilbup
```
<img width="1371" alt="スクリーンショット 2019-04-01 8.21.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/39565/f31d161a-0fa6-fde2-fd0c-eb1e50a4cc84.png">


階層があってもすべて反転してくれます。すばらしい！

```
$ curl -X POST --header 'content-type: application/json' --header 'x-device-secret: GqquPOEnq5bk2UNl1s7+ng==' -d '{"mocaros": {"temp": [0, -10, 20]}, "error": false}' https://api.soracom.io/v1/devices/d-npkmh4vacfic1fhn2rn6/hsilbup
```
<img width="1366" alt="スクリーンショット 2019-04-01 8.28.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/39565/b1fee413-20c4-2e03-7ea2-690cbce3c623.png">

#### 画像
鏡像の確認も楽ちんですね！

```
curl -X POST --header 'content-type: image/png' --header 'x-device-secret: <シークレットキー>' --data-binary @<画像ファイルのパス> https://api.soracom.io/v1/devices/<デバイスID>/hsilbup
```
<img width="1370" alt="スクリーンショット 2019-04-01 8.23.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/39565/afa07a5b-9520-6e92-fb12-5affbd1eb53f.png">


## まとめ
めちゃくちゃ画期的！

## エンドースメント
弊社、株式会社Fusicからエンドースメントを出しています。
IoTシステム向けの仮想デバイス作成サービス「mockmock」からSORACOMに向けてデータを送信できる感じで書いていますが、若干フライング気味です。でも実現に向けて鋭意準備中ですので、ご興味持たれた方は今しばらくお待ちください😅

MOCAROSで先程反転したmockmockのロゴが、の影響が時空を超えてmockmockのLPにまでささやかに届いてしまいました。
まぁそのうち直るでしょう。
https://mock-mock.com/ja