tesselは普通にnpmが使えるので、Yoとかも送れる

ただ、multipart/form-dataがpostできないのであまり大きな通信はできないみたいだけど、Yoぐらいなら簡単に送れる。

まあYo送るのが簡単なのはどうでもよくて、プログラムの中にAPI Tokenなどの設定値を書きたくないけど実行時に渡すようなのは(環境変数とか)tesselではどうやるのかな、というのを調べたりした。


MacからYoを送る


久しぶりにYo見てみたら、Yo Developer Dashboardからアカウントを作ったり、APIのTOKENを取得できるようになってた。以前のように待たされることなくすぐ作れる。

% npm install yo-api -save
% export YO_TOKEN=a1b2c3defg45678

Yo = require 'yo-api'

yo = new Yo process.env.YO_TOKEN

yo.yo_link 'SHOKAI', 'http://shokai.org', (err, res, body) ->
console.log body


tesselからYoを送る

tessel-study/yo at master · shokai/tessel-study

前に書いたように起動してすぐwifiを再起動して、on ‘connect’後にネットワークを使う処理をするようにする。

var tessel = require('tessel');
var wifi = require('wifi-cc3000');
var Yo = require('yo-api');

var yo_token = process.argv[2];
var yo = new Yo(yo_token);

var led_green = tessel.led[0].output(1);
setInterval(function(){
if(wifi.isConnected()) led_green.toggle()
}, 500);

// wifiを再起動
wifi.reset();

wifi.on('connect', function(){
console.log('wifi connect');
yo.yo('SHOKAI', function(err, res, body){
console.log(err);
console.log(body.toString());
});
});


tesselに引数を渡す

普通API Tokenとかはコード中に書きたくないので、環境変数とか設定ファイルに書く。

tesselの場合、実行時の引数に渡せる。
コード中でprocess.argv[2]でyo_tokenを取得しているが、これは

% tessel run main.js $YO_TOKEN
% tessel push main.js --args=$YO_TOKEN --logs

こうするとargvに渡せる。

package.jsonのscriptsに書いておくとnpm testやnpm startで書き込めて便利。
{
"name": "yo",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"test": "tessel run main.js $YO_TOKEN",
"start": "tessel push main.js --args=$YO_TOKEN --logs"
},
"author": "",
"license": "ISC",
"dependencies": {
"wifi-cc3000": "0.0.0",
"yo-api": "^1.0.0"
}
}

bundleFiles関数でtessel上でのコードにprocess.argvが設定されて、この後Luaに変換されてボードに書き込まれる。
これがtessel pushからはargvが渡らないバグがあったので修正したプルリクを送ったらmergeされた。

tessel runでは今のバージョンでもargv渡せる。tessel pushの方はそのうちnpmが更新されて使えるようになるまで待つか、俺のgithubからインストールするとかする。


nomnom

tessel cliではnomnomというoption parserが使われている。

複数のargvを渡す場合、–argsオプションを複数書く。

% tessel push app.js --args=foo --args=bar --args=baz

これでprocess.argvは
["tessel", "app.js", "foo", "bar", "baz"]
になる。