JJUG CCC 2019 Springの懇親会でもらったOracle Code Cardを使ってみる

やること

JJUG CCC 2019 Springの懇親会でもらったOracle Code Cardを使ってみる。

f:id:rixwwd:20190605203305j:plain
Code Card

準備

とりあえず、この辺を読んで準備する。

Fn Serverを用意する

この解説によると、JSONをCode Cardに返すことができればよいみたい。 JSONを返すだけなら、適当なWebサーバーでもOKなのだが、JavaでFunctionを作ってみる。 Fn Serverは、Oracle CloudにLinux Instanceを作れって書いてあるが、Ubuntu Serverにインストールした。

  1. 普通にUUbuntu Server 18.04 LTSをインストールする
  2. Dockerは最新のDokcerをインストールする。
  3. Fnはこの手順でインストールする。

Fn ServerにAppをデプロイする。

アプリはGithubにコミットした。 github.com

git clone https://github.com/rixwwd/mycodecard.git
cd mycodecard
fn deploy --create-app --local --all

こうすると結果が返ってくるのがわかる。

$ curl http://localhost:8080/t/mycodecard/mycodecard
{"template":"template1","title":"My Code Card","subtitle":"Duke","bodytext":"Hello world","icon":"duke","backgroundColor":"white"}

Code Cardの設定

USBでPCに接続してscreenで接続する。

sudo screen /dev/ttyUSB0 115200

横の電源スイッチをONにして、2つのボタンを同時に押すと設定ができるようになる。

Code CardにWifiの設定

Code Cardのの設定モード?になったら以下を入力する。

ssid=myssid
password=wifipassword

Code Cardのボタンを押した時に呼ばれるURLの設定

Wifiの設定に続いて、以下を入力する。この場合は、ボタンAを短く押した時のURL。(1:短く押した時、2:長く押した時)

buttona1=http://192.168.1.14:8080/t/mycodecard/mycodecard

設定できたら、ボタンを押した時の動作確認を行う。設定モード?のままで以下を入力するとボタンAを短く押した時の動作をシミュレートできる。 設定モードではボタンを押しても効かず、設定モードを抜けるのは面倒なので、これで確認する。

shortpressa

エラーの対処

これで動くと見せかけでエラーになる。

Unexpected response: HTTP/1.0 200 OK

調べてみると、HTTP/1.0のレスポンスが返ってきたときはエラーになる。 Githubのこのコミットではエラーが出ないように変更されているが、使っているCode Cardはちょっと古いやつなのかもしれない。

そこで、Nginxをリバースプロキシとして、HTTP/1.0でレスポンスを返されないようにした。 ちなみに、Code CardからのHTTPリクエストをtcpdumpで確認するとHTTP/1.0で送っている。自分で送ったバージョンを受け取れないなんて残念。

nginxの設定は、

Nginx reverse proxy settings for fn server.

nginxはDockerでサクッと準備した。

docker run --rm -v $HOME/nginx.conf:/etc/nginx/nginx.conf:ro -p 80:80 nginx

再度Code Cardの設定をする。今度はnginxの経由のURLに変更した。

buttona1=http://192.168.1.14/t/mycodecard/mycodecard

これでとりあえず動いた。 結果を表示するだけだけど、電源の供給がなくても表示したまま。