sensor_chart_F.html 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>{{ title }}</title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  7. <!-- 新 Bootstrap4 核心 CSS 文件 -->
  8. <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.1.0/css/bootstrap.min.css">
  9. <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
  10. <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
  11. <!-- popper.min.js 用于弹窗、提示、下拉菜单 -->
  12. <script src="https://cdn.bootcss.com/popper.js/1.12.5/umd/popper.min.js"></script>
  13. <!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->
  14. <script src="https://cdn.bootcss.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
  15. <!--
  16. <script src="../static/js/sign_in.js"></script>
  17. <link rel="stylesheet" href="../static/css/sign_in.css">
  18. -->
  19. <!--引入 echarts.js -->
  20. <script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
  21. <script src='https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js'></script>
  22. <script src='https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.js'></script>
  23. <script src="https://cdnjs.cloudflare.com/ajax/libs/chartjs-plugin-zoom/0.3.0/Chart.Zoom.min.js"></script>
  24. <script language="JavaScript">
  25. var tank = '{{tank}}';
  26. var sensor_name = '{{sensor_name}}';
  27. var tid = '{{tid}}';
  28. $(document).ready(function(){
  29. $("#coffee_title").text(tank + tid + ' 發酵槽感測器圖表');
  30. });
  31. </script>
  32. </head>
  33. <body>
  34. <div id="wrapper">
  35. <div id="coffee_header">
  36. <!-- 匯入共同使用的 header.html 內容 -->
  37. {% include 'header.html' %}
  38. </div>
  39. <!--
  40. <a href="/ferment">返回發酵槽介面</a>
  41. <div style="text-align: center; margin-top:0px; font-size: 24px;">
  42. Smart Coffee
  43. </div>
  44. -->
  45. <!--
  46. <form action="/chart/SHT11_Temp/{{tid}}" method="post">
  47. <div class="form-group" style="margin-top: 30px; text-align: center;">
  48. -->
  49. <table style="margin: auto; border:3px gray solid; width: 80%; text-align: center;" cellpadding="6" rules='ALL'>
  50. <tr>
  51. <td>
  52. {% if tid == '2'%}
  53. <select id="tank_num">
  54. <option value="F1">發酵槽_1</option>
  55. <option value="F2" selected>發酵槽_2</option>
  56. <option value="F3">發酵槽_3</option>
  57. <option value="F4">發酵槽_4</option>
  58. <option value="F5">發酵槽_5</option>
  59. <option value="F6">發酵槽_6</option>
  60. <option value="F7">發酵槽_7</option>
  61. <option value="F8">發酵槽_8</option>
  62. <option value="F9">發酵槽_9</option>
  63. <option value="F10">發酵槽_10</option>
  64. <option value="F11">發酵槽_11</option>
  65. <option value="F12">發酵槽_12</option>
  66. </select>
  67. {% elif tid == '3'%}
  68. <select id="tank_num">
  69. <option value="F1">發酵槽_1</option>
  70. <option value="F2">發酵槽_2</option>
  71. <option value="F3" selected>發酵槽_3</option>
  72. <option value="F4">發酵槽_4</option>
  73. <option value="F5">發酵槽_5</option>
  74. <option value="F6">發酵槽_6</option>
  75. <option value="F7">發酵槽_7</option>
  76. <option value="F8">發酵槽_8</option>
  77. <option value="F9">發酵槽_9</option>
  78. <option value="F10">發酵槽_10</option>
  79. <option value="F11">發酵槽_11</option>
  80. <option value="F12">發酵槽_12</option>
  81. </select>
  82. {% elif tid == '4'%}
  83. <select id="tank_num">
  84. <option value="F1">發酵槽_1</option>
  85. <option value="F2">發酵槽_2</option>
  86. <option value="F3">發酵槽_3</option>
  87. <option value="F4" selected>發酵槽_4</option>
  88. <option value="F5">發酵槽_5</option>
  89. <option value="F6">發酵槽_6</option>
  90. <option value="F7">發酵槽_7</option>
  91. <option value="F8">發酵槽_8</option>
  92. <option value="F9">發酵槽_9</option>
  93. <option value="F10">發酵槽_10</option>
  94. <option value="F11">發酵槽_11</option>
  95. <option value="F12">發酵槽_12</option>
  96. </select>
  97. {% elif tid == '5'%}
  98. <select id="tank_num">
  99. <option value="F1">發酵槽_1</option>
  100. <option value="F2">發酵槽_2</option>
  101. <option value="F3">發酵槽_3</option>
  102. <option value="F4">發酵槽_4</option>
  103. <option value="F5" selected>發酵槽_5</option>
  104. <option value="F6">發酵槽_6</option>
  105. <option value="F7">發酵槽_7</option>
  106. <option value="F8">發酵槽_8</option>
  107. <option value="F9">發酵槽_9</option>
  108. <option value="F10">發酵槽_10</option>
  109. <option value="F11">發酵槽_11</option>
  110. <option value="F12">發酵槽_12</option>
  111. </select>
  112. {% elif tid == '6'%}
  113. <select id="tank_num">
  114. <option value="F1">發酵槽_1</option>
  115. <option value="F2">發酵槽_2</option>
  116. <option value="F3">發酵槽_3</option>
  117. <option value="F4">發酵槽_4</option>
  118. <option value="F5">發酵槽_5</option>
  119. <option value="F6" selected>發酵槽_6</option>
  120. <option value="F7">發酵槽_7</option>
  121. <option value="F8">發酵槽_8</option>
  122. <option value="F9">發酵槽_9</option>
  123. <option value="F10">發酵槽_10</option>
  124. <option value="F11">發酵槽_11</option>
  125. <option value="F12">發酵槽_12</option>
  126. </select>
  127. {% elif tid == '7'%}
  128. <select id="tank_num">
  129. <option value="F1">發酵槽_1</option>
  130. <option value="F2">發酵槽_2</option>
  131. <option value="F3">發酵槽_3</option>
  132. <option value="F4">發酵槽_4</option>
  133. <option value="F5">發酵槽_5</option>
  134. <option value="F6">發酵槽_6</option>
  135. <option value="F7" selected>發酵槽_7</option>
  136. <option value="F8">發酵槽_8</option>
  137. <option value="F9">發酵槽_9</option>
  138. <option value="F10">發酵槽_10</option>
  139. <option value="F11">發酵槽_11</option>
  140. <option value="F12">發酵槽_12</option>
  141. </select>
  142. {% elif tid == '8'%}
  143. <select id="tank_num">
  144. <option value="F1">發酵槽_1</option>
  145. <option value="F2">發酵槽_2</option>
  146. <option value="F3">發酵槽_3</option>
  147. <option value="F4">發酵槽_4</option>
  148. <option value="F5">發酵槽_5</option>
  149. <option value="F6">發酵槽_6</option>
  150. <option value="F7">發酵槽_7</option>
  151. <option value="F8" selected>發酵槽_8</option>
  152. <option value="F9">發酵槽_9</option>
  153. <option value="F10">發酵槽_10</option>
  154. <option value="F11">發酵槽_11</option>
  155. <option value="F12">發酵槽_12</option>
  156. </select>
  157. {% elif tid == '9'%}
  158. <select id="tank_num">
  159. <option value="F1">發酵槽_1</option>
  160. <option value="F2">發酵槽_2</option>
  161. <option value="F3">發酵槽_3</option>
  162. <option value="F4">發酵槽_4</option>
  163. <option value="F5">發酵槽_5</option>
  164. <option value="F6">發酵槽_6</option>
  165. <option value="F7">發酵槽_7</option>
  166. <option value="F8">發酵槽_8</option>
  167. <option value="F9" selected>發酵槽_9</option>
  168. <option value="F10">發酵槽_10</option>
  169. <option value="F11">發酵槽_11</option>
  170. <option value="F12">發酵槽_12</option>
  171. </select>
  172. {% elif tid == '10'%}
  173. <select id="tank_num">
  174. <option value="F1">發酵槽_1</option>
  175. <option value="F2">發酵槽_2</option>
  176. <option value="F3">發酵槽_3</option>
  177. <option value="F4">發酵槽_4</option>
  178. <option value="F5">發酵槽_5</option>
  179. <option value="F6">發酵槽_6</option>
  180. <option value="F7">發酵槽_7</option>
  181. <option value="F8">發酵槽_8</option>
  182. <option value="F9">發酵槽_9</option>
  183. <option value="F10" selected>發酵槽_10</option>
  184. <option value="F11">發酵槽_11</option>
  185. <option value="F12">發酵槽_12</option>
  186. </select>
  187. {% elif tid == '11'%}
  188. <select id="tank_num">
  189. <option value="F1">發酵槽_1</option>
  190. <option value="F2">發酵槽_2</option>
  191. <option value="F3">發酵槽_3</option>
  192. <option value="F4">發酵槽_4</option>
  193. <option value="F5">發酵槽_5</option>
  194. <option value="F6">發酵槽_6</option>
  195. <option value="F7">發酵槽_7</option>
  196. <option value="F8">發酵槽_8</option>
  197. <option value="F9">發酵槽_9</option>
  198. <option value="F10">發酵槽_10</option>
  199. <option value="F11" selected>發酵槽_11</option>
  200. <option value="F12">發酵槽_12</option>
  201. </select>
  202. {% elif tid == '12'%}
  203. <select id="tank_num">
  204. <option value="F1">發酵槽_1</option>
  205. <option value="F2">發酵槽_2</option>
  206. <option value="F3">發酵槽_3</option>
  207. <option value="F4">發酵槽_4</option>
  208. <option value="F5">發酵槽_5</option>
  209. <option value="F6">發酵槽_6</option>
  210. <option value="F7">發酵槽_7</option>
  211. <option value="F8">發酵槽_8</option>
  212. <option value="F9">發酵槽_9</option>
  213. <option value="F10">發酵槽_10</option>
  214. <option value="F11">發酵槽_11</option>
  215. <option value="F12" selected>發酵槽_12</option>
  216. </select>
  217. {% else %}
  218. <select id="tank_num">
  219. <option value="F1" selected>發酵槽_1</option>
  220. <option value="F2">發酵槽_2</option>
  221. <option value="F3">發酵槽_3</option>
  222. <option value="F4">發酵槽_4</option>
  223. <option value="F5">發酵槽_5</option>
  224. <option value="F6">發酵槽_6</option>
  225. <option value="F7">發酵槽_7</option>
  226. <option value="F8">發酵槽_8</option>
  227. <option value="F9">發酵槽_9</option>
  228. <option value="F10">發酵槽_10</option>
  229. <option value="F11">發酵槽_11</option>
  230. <option value="F12">發酵槽_12</option>
  231. </select>
  232. {% endif %}
  233. {% if sensor_name=='PressureWaterLevel' %}
  234. <select id="sensors">
  235. <option value="LiDAR">發酵槽咖啡生豆高度</option>
  236. <option value="PressureWaterLevel" selected>發酵槽桶內水位高度</option>
  237. <option value="SHT11_Temp">發酵槽桶內溫度</option>
  238. <option value="SHT11_Humidity">發酵槽桶內濕度</option>
  239. <option value="CO2">發酵槽二氧化碳濃度</option>
  240. <option value="PH">發酵槽水質酸鹼度</option>
  241. <option value="ORP">發酵槽水質氧化還原電位</option>
  242. <option value="DO">發酵槽水質溶氧量</option>
  243. <option value="EC">發酵槽水質導電度</option>
  244. <option value="PA">發酵槽桶內壓力</option>
  245. </select>
  246. {% elif sensor_name=='SHT11_Temp' %}
  247. <select id="sensors">
  248. <option value="LiDAR">發酵槽咖啡生豆高度</option>
  249. <option value="PressureWaterLevel">發酵槽桶內水位高度</option>
  250. <option value="SHT11_Temp" selected>發酵槽桶內溫度</option>
  251. <option value="SHT11_Humidity">發酵槽桶內濕度</option>
  252. <option value="CO2">發酵槽二氧化碳濃度</option>
  253. <option value="PH">發酵槽水質酸鹼度</option>
  254. <option value="ORP">發酵槽水質氧化還原電位</option>
  255. <option value="DO">發酵槽水質溶氧量</option>
  256. <option value="EC">發酵槽水質導電度</option>
  257. <option value="PA">發酵槽桶內壓力</option>
  258. </select>
  259. {% elif sensor_name=='SHT11_Humidity' %}
  260. <select id="sensors">
  261. <option value="LiDAR">發酵槽咖啡生豆高度</option>
  262. <option value="PressureWaterLevel">發酵槽桶內水位高度</option>
  263. <option value="SHT11_Temp">發酵槽桶內溫度</option>
  264. <option value="SHT11_Humidity" selected>發酵槽桶內濕度</option>
  265. <option value="CO2">發酵槽二氧化碳濃度</option>
  266. <option value="PH">發酵槽水質酸鹼度</option>
  267. <option value="ORP">發酵槽水質氧化還原電位</option>
  268. <option value="DO">發酵槽水質溶氧量</option>
  269. <option value="EC">發酵槽水質導電度</option>
  270. <option value="PA">發酵槽桶內壓力</option>
  271. </select>
  272. {% elif sensor_name=='CO2' %}
  273. <select id="sensors">
  274. <option value="LiDAR">發酵槽咖啡生豆高度</option>
  275. <option value="PressureWaterLevel">發酵槽桶內水位高度</option>
  276. <option value="SHT11_Temp">發酵槽桶內溫度</option>
  277. <option value="SHT11_Humidity">發酵槽桶內濕度</option>
  278. <option value="CO2" selected>發酵槽二氧化碳濃度</option>
  279. <option value="PH">發酵槽水質酸鹼度</option>
  280. <option value="ORP">發酵槽水質氧化還原電位</option>
  281. <option value="DO">發酵槽水質溶氧量</option>
  282. <option value="EC">發酵槽水質導電度</option>
  283. <option value="PA">發酵槽桶內壓力</option>
  284. </select>
  285. {% elif sensor_name=='PH' %}
  286. <select id="sensors">
  287. <option value="LiDAR">發酵槽咖啡生豆高度</option>
  288. <option value="PressureWaterLevel">發酵槽桶內水位高度</option>
  289. <option value="SHT11_Temp">發酵槽桶內溫度</option>
  290. <option value="SHT11_Humidity">發酵槽桶內濕度</option>
  291. <option value="CO2">發酵槽二氧化碳濃度</option>
  292. <option value="PH" selected>發酵槽水質酸鹼度</option>
  293. <option value="ORP">發酵槽水質氧化還原電位</option>
  294. <option value="DO">發酵槽水質溶氧量</option>
  295. <option value="EC">發酵槽水質導電度</option>
  296. <option value="PA">發酵槽桶內壓力</option>
  297. </select>
  298. {% elif sensor_name=='ORP' %}
  299. <select id="sensors">
  300. <option value="LiDAR">發酵槽咖啡生豆高度</option>
  301. <option value="PressureWaterLevel">發酵槽桶內水位高度</option>
  302. <option value="SHT11_Temp">發酵槽桶內溫度</option>
  303. <option value="SHT11_Humidity">發酵槽桶內濕度</option>
  304. <option value="CO2">發酵槽二氧化碳濃度</option>
  305. <option value="PH">發酵槽水質酸鹼度</option>
  306. <option value="ORP" selected>發酵槽水質氧化還原電位</option>
  307. <option value="DO">發酵槽水質溶氧量</option>
  308. <option value="EC">發酵槽水質導電度</option>
  309. <option value="PA">發酵槽桶內壓力</option>
  310. </select>
  311. {% elif sensor_name=='DO' %}
  312. <select id="sensors">
  313. <option value="LiDAR">發酵槽咖啡生豆高度</option>
  314. <option value="PressureWaterLevel">發酵槽桶內水位高度</option>
  315. <option value="SHT11_Temp">發酵槽桶內溫度</option>
  316. <option value="SHT11_Humidity">發酵槽桶內濕度</option>
  317. <option value="CO2">發酵槽二氧化碳濃度</option>
  318. <option value="PH">發酵槽水質酸鹼度</option>
  319. <option value="ORP">發酵槽水質氧化還原電位</option>
  320. <option value="DO" selected>發酵槽水質溶氧量</option>
  321. <option value="EC">發酵槽水質導電度</option>
  322. <option value="PA">發酵槽桶內壓力</option>
  323. </select>
  324. {% elif sensor_name=='EC' %}
  325. <select id="sensors">
  326. <option value="LiDAR">發酵槽咖啡生豆高度</option>
  327. <option value="PressureWaterLevel">發酵槽桶內水位高度</option>
  328. <option value="SHT11_Temp">發酵槽桶內溫度</option>
  329. <option value="SHT11_Humidity">發酵槽桶內濕度</option>
  330. <option value="CO2">發酵槽二氧化碳濃度</option>
  331. <option value="PH">發酵槽水質酸鹼度</option>
  332. <option value="ORP">發酵槽水質氧化還原電位</option>
  333. <option value="DO">發酵槽水質溶氧量</option>
  334. <option value="EC" selected>發酵槽水質導電度</option>
  335. <option value="PA">發酵槽桶內壓力</option>
  336. </select>
  337. {% elif sensor_name=='PA' %}
  338. <select id="sensors">
  339. <option value="LiDAR">發酵槽咖啡生豆高度</option>
  340. <option value="PressureWaterLevel">發酵槽桶內水位高度</option>
  341. <option value="SHT11_Temp">發酵槽桶內溫度</option>
  342. <option value="SHT11_Humidity">發酵槽桶內濕度</option>
  343. <option value="CO2">發酵槽二氧化碳濃度</option>
  344. <option value="PH">發酵槽水質酸鹼度</option>
  345. <option value="ORP">發酵槽水質氧化還原電位</option>
  346. <option value="DO">發酵槽水質溶氧量</option>
  347. <option value="EC">發酵槽水質導電度</option>
  348. <option value="PA" selected>發酵槽桶內壓力</option>
  349. </select>
  350. {% else %}
  351. <select id="sensors">
  352. <option value="LiDAR" selected>發酵槽咖啡生豆高度</option>
  353. <option value="PressureWaterLevel">發酵槽桶內水位高度</option>
  354. <option value="SHT11_Temp">發酵槽桶內溫度</option>
  355. <option value="SHT11_Humidity">發酵槽桶內濕度</option>
  356. <option value="CO2">發酵槽二氧化碳濃度</option>
  357. <option value="PH">發酵槽水質酸鹼度</option>
  358. <option value="ORP">發酵槽水質氧化還原電位</option>
  359. <option value="DO">發酵槽水質溶氧量</option>
  360. <option value="EC">發酵槽水質導電度</option>
  361. <option value="PA">發酵槽桶內壓力</option>
  362. </select>
  363. {% endif %}
  364. </td>
  365. </tr>
  366. <tr>
  367. <td>
  368. 時間間隔:
  369. <select name="time-interval" class="text-right">
  370. <option value="month">逐月</option>
  371. <option value="day">逐日</option>
  372. <option value="hour">逐時</option>
  373. </select>
  374. &nbsp;
  375. <!--
  376. 從&nbsp;
  377. <input type="datetime-local" name="sensor_starttime" id="sensor_starttime" value={{starttime}}>
  378. &nbsp;到&nbsp;
  379. <input type="datetime-local" name="sensor_endtime" id="sensor_endtime" value={{endtime}}>
  380. &nbsp;為止
  381. -->
  382. <span>從</span>
  383. <label for="querydate-start"></label><input id="querydate-start" type="date">
  384. <span>到</span>
  385. <label for="querydate-end"></label><input id="querydate-end" type="date">
  386. <span>為止</span>
  387. </td>
  388. </tr>
  389. <tr>
  390. <td>
  391. 資料類型:
  392. <label><input type="checkbox" name="data-type" value="max">最大值</label>
  393. <label><input type="checkbox" name="data-type" value="avg">平均值</label>
  394. <label><input type="checkbox" name="data-type" value="min">最小值</label>
  395. <br>
  396. </td>
  397. </tr>
  398. <tr>
  399. <td>
  400. <!--
  401. <button type="submit" name="charting">繪製圖表</button>
  402. <button type="submit" onclick="" id="btn_save_chart" style="display: none;">儲存圖表</button>
  403. -->
  404. <input type="button" value="查詢" onclick="ShowInfo()">
  405. <input type="button" value="匯出" onclick="downloadFile()">
  406. <input type="button" value="刪除" onclick="">
  407. <script>
  408. function ShowInfo() {
  409. // 取得桶號、感測器名稱
  410. tid = document.getElementById("tank_num").value
  411. console.log('tid: ' + tid)
  412. sensor_name = document.getElementById("sensors").value
  413. console.log('sensor_name: ' + sensor_name)
  414. // 數據整理
  415. Echart(sensor_name, tid)
  416. // 顯示圖表
  417. };
  418. function downloadFile() {
  419. tid = document.getElementById("tank_num").value
  420. sensor_name = document.getElementById("sensors").value
  421. //藉型別陣列建構的 blob 來建立 URL
  422. let fileName = "ChartData_" + tid + "_" + sensor_name + ".csv";
  423. //"\ufeff"解決打開CSV中文亂碼問題
  424. const data = "\ufeff" + getData();
  425. let blob = new Blob([data], {
  426. type: 'text/csv,charset=UTF-8'
  427. });
  428. var href = URL.createObjectURL(blob);
  429. // 從 Blob 取出資料
  430. var link = document.createElement("a");
  431. document.body.appendChild(link);
  432. link.href = href;
  433. link.download = fileName;
  434. link.click();
  435. };
  436. //所有資料函數
  437. function getData() {
  438. var header = "日期," + data_name + "\n";
  439. var data = "";
  440. var length = all_datetime.length;
  441. for (var i = 0; i < length; i++) {
  442. data = data + all_datetime[i] + ',' + all_data[i] + '\n';
  443. };
  444. return header + data;
  445. };
  446. //最大最小平均資料函數
  447. function getData() {
  448. var header = data_name + "\n日期,";
  449. if (max_data) {
  450. console.log(max_data);
  451. header = header + "最大值,";
  452. };
  453. if (avg_data) {
  454. header = header + "平均值,";
  455. };
  456. if (min_data) {
  457. header = header + "最小值,";
  458. };
  459. header = header + "\n";
  460. var data = "";
  461. var length = xAxis_data.length;
  462. for (var i = 0; i < length; i++) {
  463. data = data + xAxis_data[i] + ',';
  464. if (max_data) {
  465. data = data + max_data[i] + ',';
  466. };
  467. if (avg_data) {
  468. data = data + avg_data[i] + ',';
  469. };
  470. if (min_data) {
  471. data = data + min_data[i] + ',';
  472. };
  473. data = data + '\n';
  474. };
  475. return header + data;
  476. };
  477. </script>
  478. </td>
  479. </tr>
  480. <tr>
  481. <td>
  482. <!--
  483. <img src={{ url }}>
  484. -->
  485. <div id="" class="show-info" style="text-align: center;">
  486. <center>
  487. <div class="show-chart" style="height: 420px; width: 100%; text-align: center;">
  488. 圖表
  489. </div>
  490. </center>
  491. </div>
  492. </td>
  493. </tr>
  494. </table>
  495. <!--
  496. </div>
  497. </form>
  498. -->
  499. <div id="coffee_footer">
  500. <!-- 匯入共同使用的 footer.html 內容 -->
  501. {% include 'footer.html' %}
  502. </div>
  503. </div>
  504. </body>
  505. <script>
  506. var all_datetime = 0; // 所有資料時間 ?
  507. var all_data = 0; // 所有感測器數據 ?
  508. var data_name = 0; // 感測器名稱 // "溫溼度"
  509. var xAxis_data = 0; // x 軸資料
  510. var max_data = 0; //
  511. var min_data = 0; //
  512. var avg_data = 0; //
  513. function Echart(sensor_name, tid) {
  514. // Echart(sensor_name, tid)
  515. //將echarts圖形銷毀
  516. $(".show-chart").removeAttr("_echarts_instance_").empty();
  517. // Rita:sensor 與 data_name 重複
  518. // var sensor = evt.substring(2);
  519. if (!$("input[value=avg]").prop('checked') && !$("input[value=min]").prop('checked') && !$("input[value=max]").prop('checked')) {
  520. alert("請至少選擇一種資料類型!");
  521. return false;
  522. };
  523. if ($("#querydate-start").val() == '' || $("#querydate-end").val() == '') {
  524. alert("請選擇日期範圍!");
  525. return false;
  526. };
  527. //基於準備好的dom,初始化echarts例項
  528. var myChart = echarts.init(document.getElementsByClassName('show-chart')[0]); // class="col-10 show-chart"
  529. var date_start = $("#querydate-start").val();
  530. var date_end = $("#querydate-end").val();
  531. var avg = 0;
  532. var max = 0;
  533. var min = 0;
  534. var time_interval = $("select[name=time-interval]").val();
  535. var legend = new Array();
  536. var color = new Array();
  537. var series = new Array();
  538. if ($("input[value=max]").prop('checked')) {
  539. max = 1;
  540. legend.push("最大值");
  541. color.push("#1e88e5"); // 水藍色
  542. };
  543. if ($("input[value=avg]").prop('checked')) {
  544. avg = 1;
  545. legend.push("平均值");
  546. color.push("#43a047"); // 草綠色
  547. };
  548. if ($("input[value=min]").prop('checked')) {
  549. min = 1;
  550. legend.push("最小值");
  551. color.push("#e64a19"); // 橘紅色
  552. };
  553. var json = {
  554. 'tid': tid,
  555. 'sensor_name': sensor_name,
  556. 'avg': avg,
  557. 'max': max,
  558. 'min': min,
  559. 'time-interval': time_interval,
  560. 'date-start': date_start,
  561. 'date-end': date_end
  562. };
  563. console.log('json___' +
  564. 'tid: ' + tid +
  565. 'sensor_name: ' + sensor_name +
  566. 'avg: ' + avg +
  567. 'max: ' + max +
  568. 'min: ' + min +
  569. 'time-interval: ' + time_interval +
  570. 'date-start: ' + date_start +
  571. 'date-end: ' + date_end
  572. )
  573. $.get('/history_data_new', json, function (resText) {
  574. if (resText.max) {
  575. var max_series = {
  576. 'name': '最大值',
  577. 'type': 'scatter',
  578. 'data': resText.max.map(function (item) { return item[1]; }),
  579. 'itemStyle': { 'normal': { 'lineStyle': { 'color': '#1e88e5' } } },
  580. };
  581. series.push(max_series); // 把上面的 dict 加入 series array 內
  582. xAxis_data = resText.max.map(function (item) { return item[0]; });
  583. max_data = resText.max.map(function (item) { return item[1]; });
  584. };
  585. if (resText.avg) {
  586. var avg_series = { 'name': '平均值', 'type': 'scatter', 'data': resText.avg.map(function (item) { return item[1]; }), 'itemStyle': { 'normal': { 'lineStyle': { 'color': '#43a047' } } }, };
  587. series.push(avg_series);
  588. xAxis_data = resText.avg.map(function (item) { return item[0]; });
  589. console.log('xAxis_data: ' + xAxis_data) // 2021-07-09 10:00:00,2021-07-20 09:00:00,2021-07-22 15:00:00,2021-07-26 15:00:00,2021-07-26 16:00:00
  590. avg_data = resText.avg.map(function (item) { return item[1]; });
  591. console.log('avg_data: ' + avg_data) // 91.0,98.0,11.0,15.2,30.5
  592. };
  593. if (resText.min) {
  594. var min_series = { 'name': '最小值', 'type': 'scatter', 'data': resText.min.map(function (item) { return item[1]; }), 'itemStyle': { 'normal': { 'lineStyle': { 'color': '#e64a19' } } }, };
  595. series.push(min_series);
  596. xAxis_data = resText.min.map(function (item) { return item[0]; }); // all
  597. min_data = resText.min.map(function (item) { return item[1]; }); // min
  598. };
  599. //獲取日期內所有數據
  600. all_datetime = resText.all.map(function (item) { return item[0]; }); // all
  601. all_data = resText.all.map(function (item) { return item[1]; });
  602. //指定圖表的配置項和資料
  603. option = {
  604. title: {
  605. text: '', // 'Data History'
  606. left: '1%'
  607. },
  608. tooltip: {
  609. trigger: 'axis'
  610. },
  611. color: color,
  612. legend: {
  613. data: legend,
  614. },
  615. xAxis: {
  616. data: xAxis_data,
  617. },
  618. yAxis: {
  619. splitLine: {
  620. show: true,
  621. lineStyle: {
  622. color: ''
  623. }
  624. }
  625. },
  626. toolbox: {
  627. show: true,
  628. feature: {
  629. dataZoom: {
  630. yAxisIndex: 'none'
  631. },
  632. dataView: { readOnly: false },
  633. magicType: { type: ['line', 'bar'] },
  634. restore: {},
  635. saveAsImage: {}
  636. }
  637. },
  638. dataZoom: [{
  639. startValue: '2021-01-01'
  640. }, {
  641. type: 'inside'
  642. }],
  643. series: series,
  644. /*
  645. series: [
  646. {
  647. name: '最大值',
  648. type: 'line',
  649. data: resText.max.map(function (item) {
  650. return item[1];
  651. }),
  652. itemStyle: {
  653. normal: {
  654. lineStyle: {
  655. color: '#1e88e5'
  656. }
  657. }
  658. },
  659. },
  660. {
  661. name: '平均值',
  662. type: 'line',
  663. data: [20.0, 20.0, 20.0, 20.0, 20.0, 20.0],
  664. itemStyle: {
  665. normal: {
  666. lineStyle: {
  667. color: '#43a047'
  668. }
  669. }
  670. },
  671. },
  672. {
  673. name: '最小值',
  674. type: 'line',
  675. data: [15.0, 15.0, 15.0, 15.0, 15.0, 15.0],
  676. itemStyle: {
  677. normal: {
  678. lineStyle: {
  679. color: '#e64a19'
  680. }
  681. }
  682. }
  683. },
  684. ]
  685. */
  686. };
  687. console.log('SHOW myChart')
  688. //使用剛指定的配置項和資料顯示圖表
  689. myChart.setOption(option);
  690. }, 'json');
  691. } // Echart(sensor_name, tid)
  692. </script>
  693. </html>