CanvasJSを使った表示は簡単で良かったのですが、ホビー利用でもメールで登録(だっけか?)がいるということが作ってからわかりました^^;。で、できるだけライセンスに縛られたくないので、chart.JSで作り直してみました。
正直、ちょっと触って使う分にはCanvasJSの方が使い勝手はいいです。サンプルもたくさんあるし。
CanvasJSの次に、C3.jsも触ってみたのですが、1画面内に複数のグラフを表示する方法がわからず、挫折しました。
そして、改めて、chart.JSに戻ってきました。まあ、やってることは大して変わりません。Flaskで出力する部分とテンプレートは作り直しました。
Flaskで出力する部分はこんな感じです。
def data(): # データをファイルから読み出し def histimport(): global hcyc,hist,hlen,odt with open('bme280/bme280.pickle',mode='rb') as f: [hist,hlen] = pickle.load(f) # 1枚分のデータ生成 def makedata(idx): global hist,hlen # データ生成 # section data s = "data: {\n" s += " datasets: [\n" # section data.datasets n1 = 0 for k1 in hist : if n1 > 0 : s += ",\n" n1 += 1 # x? s += " {\n" s += " label: '{}' , \n".format(k1) s += " showLine: true ,\n" s += " lineTension: 0 ,\n" s += " fill: false ,\n" #s += " borderColor: \"rgba(255, 127, 0, 0.5)\",\n" s += " borderWidth: 2,\n" s += " pointRadius: 3,\n" s += " data :[" n2 = 0 for k2 in hist[k1] : if n2 > 0 : s += "," n2 += 1 s += "{{ x: {} , y: {} }}".format(k2[0]*1000,k2[1+idx]) s += "]}" s += "\n]" s += "},\n" s += "options:{\n" s += " scales:{\n" s += " xAxes: [{\n" s += " gridLines: {\n" s += " color: \"rgba(255, 0, 0, 0.2)\", \n" s += " zeroLineColor: \"black\" " s += " },\n" s += " type: 'time',\n" s += " time: { \n" s += " unit: 'hour', \n" s += " displayFormats: { \n" s += " hour: 'MMM DD Ah:mm' \n" s += " },\n" #s += " stepSize: 1,\n" s += " },\n" s += " }],\n" s += " yAxes: [{\n" if idx == 0 : s += "ticks :{\n" s += " userCallback: function(tick) {\n" s += " return tick.toString() + '℃' \n" s += " }\n" s += "},\n" elif idx == 1 : s += "ticks :{\n" s += " userCallback: function(tick) {\n" s += " return tick.toString() + '%' \n" s += " }\n" s += "},\n" else : # idx == 2 s += "ticks :{\n" s += " userCallback: function(tick) {\n" s += " return tick.toString() + 'hPa' \n" s += " }\n" s += "},\n" s += " gridLines: {\n" s += " color: \"rgba(0, 0, 255, 0.2)\",\n" s += " zeroLineColor: \"black\" \n" s += " },\n" s += " }]\n" s += " }\n" s += "}\n" return(s) # histimport() html = render_template('bme280/bme280.html', # for BluePrint data0 = makedata(0), data1 = makedata(1), data2 = makedata(2) ) return html
まあ、ぶっちゃけ、ライブラリの使い方に合わせて修正しただけです。ヒアドキュメントで一気に書いてもいいのですが、インデントがよくわからなくなるので、こうしています。ただ、もうちょっとなんとかしてもよかったかも、と思います。
というわけで、センサの見える化ができました。