Pieceの機能を拡張する

Lambdaを使ったPieceで扱える機能の拡張方法を紹介します。

現在の位置情報を使用

Pieceを作るときにユーザーの現在位置情報を使用したい場合があります。
その場合は、以下の手順でPieceを作成すると簡単に位置情報を取得することができます。

Piece JSONの修正

PieceJSONserviceProxyに以下のようにparameters定義を追加します。

  "serviceProxy": {
    "service": "citizenSample",
    "parameters": ["location"]
  },

Proxy Coreで現在位置を取得

PieceJSONparametersを追加するとProxyCoreで以下の様に位置情報(緯度経度)を取得できます。

exports.handler = async event => {
  const latitude = event.properties.parameters.location.latitude;
  const longitude = event.properties.parameters.location.longitude;

  // 位置情報を使った処理を実行

}

時計の針を任意の位置へ(”特定位置(マルチ)” A Pieceの使用)

“特定位置(マルチ)”のアクションピースを使って、自分の作ったPieceの結果を時計に表示する際に秒針、時針、分針を特定の位置へ動かしたい場合の手順を記載します。

Piece JSONの修正

時計の針(秒針、時針、分針)を動作させる”特定位置(マルチ)” のinputに合わせてPieceJSONoutputを以下のように定義します。

"output": {
  "type": "object",
  "properties": {
    "SpecificPositionArray": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "Hour": {
            "type": "number",
            "minimum": 0,
            "maximum": 359
          },
          "Minute": {
            "type": "number",
            "minimum": 0,
            "maximum": 359
          },
          "Second": {
            "type": "number",
            "minimum": 0,
            "maximum": 59
          }
        }
      }
    }
  }
}

Proxy Coreのoutput処理

PieceJSONoutputに合わせたProxyCoreoutput処理は以下となります。

exports.handler = async event => {

  // 秒針を10秒の位置へ、時針と分針を10°を指定しています。(秒針は0〜59の範囲の数値で指定し、時針と分針は0〜359の範囲の数値を指定します)
  let responseData = { status: 200, body: { "SpecificPositionArray": [{"Second" :10, "Minute" : 10, "Hour" : 10}]}};
  return responseData;

}

時計の針を任意の位置へ(”時刻表示” A Pieceの使用)

“時刻表示”のアクションピースを使って、自分の作ったPieceの結果を時計に表示する際に秒針、時針、分針を特定の位置へ動かしたい場合の手順を記載します。

Piece Jsonの修正

時計の針(秒針、時針、分針)を動作させる“時刻表示”のinputに合わせてPieceJSONoutputを以下のように定義します。

"output": {
  "type": "object",
  "properties": {
    "returnTime": {
      "type": "string",
      "format": "time"
    }
  }
}

Proxy Coreのoutput処理

PieceJSONoutputに合わせたProxyCoreoutput処理は以下となります。

exports.handler = async event => {

  let hour = 2;
  let min = 30;
  let sec = 10;

  // 'hh:mm:ss'の形式に合わせています。値が0~9のときには、一桁目を0で埋める必要があります。
  let output = hour.toString().padStart(2,'0') + ':' +
               min.toString().padStart(2,'0')  + ':' +
               sec.toString().padStart(2,'0');

  let responseData = { status: 200, body: { "returnTime": output }};
  return responseData;

}