更新とユーザーインタラクション
リアルタイムデータによる更新
プログラムは4秒おきにデータベースにデータ更新の問い合わせを行い、データがGridDBに追加されるときにプロットの行に追加します。
for index in range(len(serial_numbers)): if len(line_sources[index].data["x"]) > 0: last_timestamp = line_sources[index].data["x"][-1] …. ## Perform Type checking new_rate_times = \ GridstoreMethods.fetch_timestamps_betw(gridstore, \ serial_numbers[index],last_timestamp,GridstoreMethods.Timestamp_current(), filtered = True) new_temperatures_times = \ GridstoreMethods.fetch_timestamps_betw(gridstore,serial_numbers[index], \ last_timestamp,GridstoreMethods.Timestamp_current()) for idx in range(len(new_rate_times) -1 , -1, -1): new_avg = \ GridstoreMethods.get_instantaneous_rate(coffee_machine,new_rate_times[idx]) …. line_sources[index].data["y"].append(new_avg) for idx in range(len(new_temperatures_times)-1, -1, -1): new_temperature = GridstoreMethods.get_recent_readings(gridstore,serial_numbers[index], int(new_temperatures_times[idx]))["temperature"] … temperature_sources[index].data["y"].append(new_temperature)
プログラムには、GridDBから挿入された新しいデータ行を使用してグラフを更新するのと同様のプロセスがあります。 このプログラムでは、更新コールバック関数が4秒ごとに実行されます。 コールバック機能では、コーヒーストア内のすべてのコーヒーマシンについて、機械の平均温度および現在の温度の読み取り値が得られます。 これは、過去のデータget_instantaneous_rate
、get_recent_readings
、およびfetch_timestamps_betw
を取得するための同様のメソッドとプロセスを使用します。
照会されたタイムスタンプ・レコードは、現在の時刻までで、timeseries行のデータ・セットにはない行に対するものです。 プログラムは、コーヒーマシンが表す行の最後の日付を取得します。 プログラムは、最後の日付以降の行のすべてのデータを収集し、グラフの各行を更新するのに必要な行フィールドを取得します。 更新はBokehのtrigger機能を使用して視覚的に描画されます。
コーヒーストアの切り替え
データ視覚化コンポーネントがロードされると、一度に1つのコーヒーストアのデータのみが表示されます。 ユーザーは、一番上のドロップダウンオプションメニューでstore_idを選択することによって、コーヒーストアを切り替えることができます。 これが起こると、現在選択されている2つのプロットが消去され、新たに選択されたコーヒー・ストアからコーヒーマシンから引き出されたデータを表すために再描画されます。
if selectedVal != select.value: …. selectedVal = select.value subLayouts.remove(timeseries) subLayouts.remove(temperature_timeseries) serial_numbers = filter(lambda serial_num: len(serial_num) > 0, GridstoreMethods.get_serial_nums(gridstore,str(selectedVal))) timeseries_plots, line_sources = \ create_timeseries(gridstore,str(selectedVal),serial_numbers,xrangeCallback) temperature_plot, temperature_sources = create_temperature_plot(gridstore,str(selectedVal), \ serial_numbers, findPreviousTemperatures) subLayouts.insert(2,timeseries_plots) subLayouts.insert(3,temperature_plot)
プログラムは、オプションメニューの変更に応答して、ユーザーが新しいコーヒーストアに変更したことを検出します。 そこから、get_serial_nums()
関数を使用して、そのコーヒーストア内のすべてのコーヒーマシンのシリアル番号を取得します。 今度は、時系列プロット用の行を作成するためのシリアル番号があるので、create_timeseries
関数とcreate_temperature_plot
関数でグラフを再描画し、Webページのlayoutに挿入(insert)することができます。
Source Code
以下のリンクから、データ生成クライアントおよびデータ視覚化コンポーネントのアプリケーションおよびそのソースコードをダウンロードできます。
Download: datavisualisation_application.tar.gz