Clovaで「抵抗値換算」のスキルを作ってみる(1)


はじめに

ずっと前にやりかけだった(記事には投稿してない)LINE Clovaの「抵抗値換算」のスキルをちゃんと作ってみました。サーバは別記事と同様に「Firebase」を使いました。

「抵抗値換算」について

電子工作に使う抵抗素子には「カラーコード」と呼ばれるものが表示されています。このカラーコードの並びから抵抗値を読み取ることができますが、電子工作に慣れていない人には「カラーコード -> 抵抗値」への変換がすぐには難しいです。そこでこのスキルを使ってClovaの前でカラーコードの色の並びを読み上げて、それを抵抗値に変換したものをClovaに読んでもらうものを作りました。

このスキルでは精密抵抗器を無視した4つのカラーコードの並びで、このサイトの「よく使われる抵抗の一覧表」の抵抗素子に対応します(ArduinoでLEDやセンサを使う場合は1kか10kの数値のものしか基本は使わないかと)。

Firebaseの初期設定

手順についてはこの記事を参考にしてます。

まずはFirebase CLIをインストールします。

npm install -g firebase-tools

-gを使ってグローバルにインストールします。場合によってはpermissionではじかれる可能性もあるのでsudoが必要かも?

次にログインします。

firebase login

ここら辺はターミナルに言われるまま操作すれば問題ないかと。次にプロジェクトを作成します。

firebase init functions

既存のプロジェクトを選択・新しくプロジェクトを作成する、の2択が選べます。

次にFirebaseにデプロイします。

firebase deploy --only functions,hosting

その他の設定

環境変数は以下のコマンドで設定可能です。

firebase functions:config:set clova.extension.id="your extension id"

環境変数の確認は以下のコマンドを用います。

firebase functions:config:get

コード上で用いたい場合は、以下のようにして呼び出します。

const extensionId = encodeURIComponent(functions.config().clova.extension.id);

また、firebase.jsonは以下のように設定しました。

{
    "hosting": {
        "public": "./",
        "rewrites": [{
            "source": "/clova",
            "function": "clova"
        }],
        "ignore": [
            "firebase.json",
            "**/.*",
            "**/node_modules/**"
        ]
    }
}

Clovaの開発について

expressを用いたスキルの開発はこのサイトを参照して行いました。

functions/上で以下のコマンドを用いて必要なpackageをインストールします。

npm install --save https://github.com/TanakaMidnight/clova-cek-sdk-nodejs express body-parser

Clovaの公式SDKを用いない理由はこの記事を参照してください。

カラーコードから抵抗値への変換

まず連想配列を用意しました。色をkeyに対応する数値をvalueに設定してます。

const colorcodes = { :0, :1, :2, :3, :4, :5, :6, :7, :8, :9 };

抵抗値の計算は以下の式で求めます

RegistorValue = (FirstColor\times 10 + SecondColore) \times 10^{ThirdColor}

FirstColor ~ ThirdColorは「金」を最終端としたときの各色です。

進捗

このスキル開発の記事は何回かに分けて投稿します。とりあえず今回はスキル起動時のメッセージのレスポンスと、「カラーコード -> 抵抗値」まで実装しました。こんだけの内容に今日の一日のほとんどを費やしましたw(カラーコードからの変換をCloud Firebaseを使ってやろうとしたけど非同期処理をうまく操れなかったとか、Clovaの公式のSDKとexpressの相性の悪さで悩むとか)また、Clovaのテストは今日はClova Developer Centerのテスト機能を用いました。

起動時の挨拶

こんな感じです。

カラーコードから抵抗値への変換

こんな感じです。

今後やりたいこと

  • 「抵抗値 -> カラーコード」への変換
  • 1000以上の抵抗値をキロ読みにする
  • 「カラーコードの覚え方」のインテントを作る

さいごに

レポジトリ公開してます。GWまでには完成させたいです。そしてTシャツ欲しいです。