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"]
になる。