こんにちは。
製品開発部の三浦です。
FASTIOを使ってIoTアプリを爆速開発する第2回
今回は実際にプログラムを書き、実際に動くところまでやってみます。
前回 > FASTIOで独自IoTアプリを爆速開発する – 第1回 構成編
フロントエンドを開発する。
前回の記事で触れたとおり、
バックエンドはFASTIOに任せてフロントエンド(画面表示に関わる部分)のみ実装します。
実装部分は大雑把に3つ
- 計測データの取得
> FASTIO API - 画面の表示デザイン
- 画面に反映するプログラム
フロントエンドはユーザが見る所なので、わかりやすくしたいところ。
更にこんな要望も出てきました。
- サーバレスで
- BIツールのように解析でき
- 普通の人も簡単に編集できて
- PC/スマホ対応
はじめはHTML5とPHPでWebアプリにしようと考えましたが
“普通の人”が編集出来ないため
Google SpreadSheetとGoogle Apps Scriptを使うことにしました。
Google SpreadSheetならサーバを用意する必要がありませんし、
Excelライクに非技術者でも編集できます。
実装開始!
それでは実装を始めましょう!
FASTIO APIは通常のWeb APIなので
インターネットにつながる環境なら大体動きます。
こちらを参考にサクッとコーディングしてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
/** * FASTIO API操作オブジェクト */ FastioApi = { /** * プロパティ */ __token: "accress_token", // FASTIO APIトークン(loadToken関数で更新) /** * アクセストークン生成 */ loadToken: function(user_id,user_pw, fastio_client_id){ // WebAPIリクエストデータ var url = 'https://hogepiyo.fastio.jp/oauth2/token'; // FASTIO API トークン発行URLです。※サンプルはダミーです var body = { 'username' : user_id, // FASTIOアカウントのユーザ名を設定します 'password' : user_pw, // FASTIOアカウントのパスワードを設定します 'grant_type' : 'password', 'scope' : 'api', 'client_id' : fastio_client_id // FASTIOアカウントのクライアントIDを設定します }; var options = { "method" : "POST", "contentType": "application/json", "payload" : JSON.stringify(body) }; // WebAPIリクエスト実行 var response = UrlFetchApp.fetch(url, options); // 返り値取得 var resJson = JSON.parse(response.getContentText()); FastioApi.__token = resJson["access_token"]; // トークンを更新 }, /** * 計測データ取得 */ getData: function(term_id,no, sdt, edt){ // 日時をFormat (yyyyMMddhhmmss形式) sdt_str = sdt.getFullYear() + "" + ('0' + (sdt.getMonth() + 1)).slice(-2) + ('0' + sdt.getDate() ).slice(-2) + ('0' + sdt.getHours() ).slice(-2) + ('0' + sdt.getMinutes() ).slice(-2) + ('0' + sdt.getSeconds() ).slice(-2); edt_str = edt.getFullYear() + "" + ('0' + (edt.getMonth() + 1)).slice(-2) + ('0' + edt.getDate() ).slice(-2) + ('0' + edt.getHours() ).slice(-2) + ('0' + edt.getMinutes() ).slice(-2) + ('0' + edt.getSeconds() ).slice(-2); // WebAPIリクエストデータ var url = "https://hogepiyo.fastio.jp/logger/data/regular"; // FASTIO API 計測データ取得URLです。※サンプルはダミーです var body = { 'access_token' : FastioApi.__token, 'term_id' : term_id, 'no' : nos, 'from' : sdt_str, 'to' : edt_str }; var options = { "method" : "POST", "contentType" : "application/json", "payload" : JSON.stringify(body) }; // WebAPIリクエスト実行 var response = UrlFetchApp.fetch(url, options); // 返り値取得 var resJson = JSON.parse(response.getContentText()); // 最新1件のみを返す return [ resJson.attributes[0]["name"], // 計測データ名 resJson.attributes[0]["unit"], // 計測データの単位 regData.data[no][i2][0], // 計測日時(タイムスタンプ) regData.data[no][i2][1] // 計測データ ]; } }; /** * メインの実行関数 * Google Appsの定期実行で実行する */ function myFunction() { // FASTIO APIのアクセス情報 var fastio_id = "FASTIOのログインID"; var fastio_pw = "FASTIOのログインPW"; var fastio_client_id = "FASTIO APIのクライアントID"; // 取得したい端末ID・計測値no var term_id = "ほにゃららら"; var data_no = "ほにゃららら"; // 計測データの取得日付 var nDt = new Date(); var anHourAgoDt = new Date(nDt - (1000 * 60 * 15)); // 15分前のデータまで取得します。 // FASTIO API アクセストークン発行 var res = FastioApi.loadToken(fastio_id,fastio_pw,fastio_client_id); // FASTIO API 計測データの取得 var datas = FastioApi.getData(term_id,data_no, anHourAgoDt, nDt); // 取得データをロギング Logger.log( datas ); } |
オブジェクト”FastioApi”がFASTIO APIの操作オブジェクトです。
アクセストークンを取得する関数と
計測データを取得する関数に分けて実装しました。
関数”myFunction”を実行すると
FASTIO APIから呼び出した計測データが
Google Apps Scriptのログに表示されます。
次回に続く