status.html 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>{{ data['title'] }} Status display</title>
  6. <meta name="description"
  7. content="Status display generated by BORA.">
  8. <link rel="stylesheet" href="{{ static_url("style.css") }}">
  9. <link rel="stylesheet" href="{{ static_url("jquery-ui.min.css") }}">
  10. <!--[if IE]>
  11. <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  12. <![endif]-->
  13. </head>
  14. <body>
  15. <div id="page_info">{{ data['title'] }} data monitoring. Last refreshed</div>
  16. <div id="page_title_cache" style="display:none;">{{ data['title'] }}</div>
  17. {% if data['style'] %}
  18. {% for key in data['style'] %}
  19. {% if data['style'][key]['type'] == "calc" %}
  20. <div style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{
  21. data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px;
  22. height:{{ data['style'][key]['height'] }}px; background-color:{{ data['style'][key]['background_color'] }};'
  23. {% if "condition" in data['style'][key] %}
  24. data-cond="{{ data['style'][key]['condition'] }}"
  25. {% else%}position
  26. {% end%}
  27. {% if "formula" in data['style'][key] %}
  28. data-formula="{{ data['style'][key]['formula'] }}" tooltip="{{ data['style'][key]['formula'] }}"
  29. {% else %}
  30. {% end %}
  31. {% if "lesser" in data['style'][key] %}
  32. data-lesser="{{ data['style'][key]['lesser'] }}"
  33. {% else %}
  34. {% end %}
  35. {% if "larger" in data['style'][key] %}
  36. data-larger="{{ data['style'][key]['larger'] }}"
  37. {% else %}
  38. {% end %}
  39. data-type="{{ data['style'][key]['type'] }}" class='databox' id="{{ key }}">
  40. <p><span style="color: #000; font-size: {{ data['style'][key]['header']['size'] }}px; font-weight: {{ data['style'][key]['header']['weight'] }};" class="title">{{ data['style'][key]['header']['title'] }} </span><span style="color: #000; font-size: {{ data['style'][key]['unit']['size'] }}px; font-weight: {{ data['style'][key]['unit']['weight'] }};" class="varval"> --- </span><span class='unit_title' style="color: #000; font-size: {{ data['style'][key]['unit']['size'] }}px; font-weight: {{ data['style'][key]['unit']['weight'] }};" > {{ data['style'][key]['unit']['title'] }}</span></p>
  41. </div>
  42. {% else %}
  43. {% end %}
  44. {% if data['style'][key]['type'] == "data" %}
  45. {% if "ref" in data['style'][key] %}
  46. <div tooltip="{{ data['style'][key]['ref'] }}"
  47. {% else %}
  48. <div tooltip="{{ key }}"
  49. {% end %}
  50. class="databox" style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{ data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px; height:{{ data['style'][key]['height'] }}px;
  51. {% if "background_color" in data['style'][key] %}
  52. background-color:{{ data['style'][key]['background_color'] }};'
  53. {% else%}
  54. '
  55. {% end%}
  56. {% if "condition" in data['style'][key] %}
  57. data-cond="{{ data['style'][key]['condition'] }}"
  58. {% else%}
  59. {% end%}
  60. {% if "formula" in data['style'][key] %}
  61. data-formula="{{ data['style'][key]['formula'] }}"
  62. {% else %}
  63. {% end %}
  64. {% if "lesser" in data['style'][key] %}
  65. data-lesser="{{ data['style'][key]['lesser'] }}"
  66. {% else %}
  67. {% end %}
  68. {% if "larger" in data['style'][key] %}
  69. data-larger="{{ data['style'][key]['larger'] }}"
  70. {% else %}
  71. {% end %}
  72. {% if "exponential" in data['style'][key] %}
  73. data-exponential="{{ data['style'][key]['exponential'] }}"
  74. {% else %}
  75. {% end %}
  76. {% if "linkhtml" in data['style'][key] %}
  77. {% if data['style'][key]['linkhtml'] == 'true' %}
  78. {% if "server" in data %}
  79. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  80. {% else %}
  81. {% end %}
  82. {% else %}
  83. {% end %}
  84. {% else %}
  85. {% end %}
  86. {% if "ref" in data['style'][key] %}
  87. data-type="{{ data['style'][key]['type'] }}" id="{{ key }}">
  88. <p><span style="color: #000; font-size: {{ data['style'][key]['header']['size'] }}px; font-weight: {{ data['style'][key]['header']['weight'] }};" class="title">{{ data['style'][key]['header']['title'] }} </span><span style="color: #000; font-size: {{ data['style'][key]['unit']['size'] }}px; font-weight: {{ data['style'][key]['unit']['weight'] }};" class="varval"> --- </span><span class='unit_title' style="color: #000; font-size: {{ data['style'][key]['unit']['size'] }}px; font-weight: {{ data['style'][key]['unit']['weight'] }};"> {{ data['style'][key]['unit']['title'] }}</span></p>
  89. </div>
  90. {% else %}
  91. data-type="{{ data['style'][key]['type'] }}" id="{{ key }}">
  92. <p><span style="color: #000; font-size: {{ data['style'][key]['header']['size'] }}px; font-weight: {{ data['style'][key]['header']['weight'] }};" class="title">{{ data['style'][key]['header']['title'] }} </span><span style="color: #000; font-size: {{ data['style'][key]['unit']['size'] }}px; font-weight: {{ data['style'][key]['unit']['weight'] }};" class="varval"> --- </span><span class='unit_title' style="color: #000; font-size: {{ data['style'][key]['unit']['size'] }}px; font-weight: {{ data['style'][key]['unit']['weight'] }};"> {{ data['style'][key]['unit']['title'] }}</span></p>
  93. </div>
  94. {% end %}
  95. {% else %}
  96. {% end %}
  97. {% if data['style'][key]['type'] == "icon" %}
  98. {% if data['style'][key]['icon'] == "valve" %}
  99. {% if "ref" in data['style'][key] %}
  100. <div tooltip="{{ data['style'][key]['ref'] }}"
  101. {% else %}
  102. <div tooltip="{{ key }}"
  103. {% end %}
  104. style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{ data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px; height:{{ data['style'][key]['height'] }}px;'
  105. {% if data['style'][key]['linkhtml'] == 'true' %}
  106. {% if "server" in data %}
  107. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  108. {% else %}
  109. {% end %}
  110. {% else %}
  111. {% end %}
  112. {% if "ref" in data['style'][key] %}
  113. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  114. <img width='100%' height='100%' src='{{ static_url("valve_inactive.png") }}'></img>
  115. </div>
  116. {% else %}
  117. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  118. <img width='100%' height='100%' src='{{ static_url("valve_inactive.png") }}'></img>
  119. {% end %}
  120. {% else %}
  121. {% end %}
  122. {% if data['style'][key]['icon'] == "commbit" %}
  123. {% if "ref" in data['style'][key] %}
  124. <div tooltip="{{ data['style'][key]['ref'] }}"
  125. {% else %}
  126. <div tooltip="{{ key }}"
  127. {% end %}
  128. style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{ data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px; height:{{ data['style'][key]['height'] }}px;'
  129. {% if data['style'][key]['linkhtml'] == 'true' %}
  130. {% if "server" in data %}
  131. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  132. {% else %}
  133. {% end %}
  134. {% else %}
  135. {% end %}
  136. {% if "ref" in data['style'][key] %}
  137. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  138. <img width='100%' height='100%' src='{{ static_url("commbit_inactive.svg") }}'></img>
  139. </div>
  140. {% else %}
  141. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  142. <img width='100%' height='100%' src='{{ static_url("commbit_inactive.svg") }}'></img>
  143. </div>
  144. {% end %}
  145. {% else %}
  146. {% end %}
  147. {% if data['style'][key]['icon'] == "alarm" %}
  148. {% if "ref" in data['style'][key] %}
  149. <div tooltip="{{ data['style'][key]['ref'] }}"
  150. {% else %}
  151. <div tooltip="{{ key }}"
  152. {% end %}
  153. style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{ data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px; height:{{ data['style'][key]['height'] }}px;'
  154. {% if data['style'][key]['linkhtml'] == 'true' %}
  155. {% if "server" in data %}
  156. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  157. {% else %}
  158. {% end %}
  159. {% else %}
  160. {% end %}
  161. {% if "ref" in data['style'][key] %}
  162. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  163. <img width='100%' height='100%' src='{{ static_url("alarm_inactive.svg") }}'></img>
  164. </div>
  165. {% else %}
  166. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  167. <img width='100%' height='100%' src='{{ static_url("alarm_inactive.svg") }}'></img>
  168. </div>
  169. {% end %}
  170. {% else %}
  171. {% end %}
  172. {% if data['style'][key]['icon'] == "tmp" %}
  173. {% if "ref" in data['style'][key] %}
  174. <div tooltip="{{ data['style'][key]['ref'] }}"
  175. {% else %}
  176. <div tooltip="{{ key }}"
  177. {% end %}
  178. style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{ data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px; height:{{ data['style'][key]['height'] }}px;'
  179. {% if data['style'][key]['linkhtml'] == 'true' %}
  180. {% if "server" in data %}
  181. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  182. {% else %}
  183. {% end %}
  184. {% else %}
  185. {% end %}
  186. {% if "ref" in data['style'][key] %}
  187. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  188. <img width='100%' height='100%' src='{{ static_url("TMP_inactive.svg") }}'></img>
  189. </div>
  190. {% else %}
  191. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  192. <img width='100%' height='100%' src='{{ static_url("TMP_inactive.svg") }}'></img>
  193. </div>
  194. {% end %}
  195. {% else %}
  196. {% end %}
  197. {% else %}
  198. {% end %}
  199. {% if data['style'][key]['type'] == "integer-to-string" %}
  200. <div tooltip="{{ key }}" style='position: absolute; top: {{
  201. data['style'][key]['top'] }}; left:{{ data['style'][key]['left'] }};
  202. width:{{ data['style'][key]['width'] }}px; height:{{
  203. data['style'][key]['height'] }}px;
  204. {% if "background_color" in data['style'][key] %}
  205. background-color:{{ data['style'][key]['background_color'] }};'
  206. {% else%}
  207. '
  208. {% end%}
  209. {% if "cond" in data['style'][key] %}
  210. data-cond="{{ data['style'][key]['cond'] }}"
  211. {% else %}
  212. {% end %}
  213. {% if "linkhtml" in data['style'][key] %}
  214. {% if data['style'][key]['linkhtml'] == 'true' %}
  215. {% if "server" in data %}
  216. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  217. {% else %}
  218. {% end %}
  219. {% else %}
  220. {% end %}
  221. {% else %}
  222. {% end %}
  223. data-dict="{{ data['style'][key]['dict'] }}" data-type="{{ data['style'][key]['type'] }}" class='databox' id="{{ key }}">
  224. <p><span style="color: #000; font-size: {{ data['style'][key]['header']['size'] }}px; font-weight: {{ data['style'][key]['header']['weight'] }};" class="title">{{ data['style'][key]['header']['title'] }} </span><br /><span style="color: #000; font-size: {{ data['style'][key]['unit']['size'] }}px; font-weight: {{ data['style'][key]['unit']['weight'] }};" class="varval">--- </span></p>
  225. </div>
  226. {% else %}
  227. {% end %}
  228. {% if data['style'][key]['type'] == "header" %}
  229. <div style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{
  230. data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px;
  231. height:{{ data['style'][key]['height'] }}px; background-color:{{ data['style'][key]['background_color'] }};' data-type="{{
  232. data['style'][key]['type'] }}" class='databox' id="{{ key }}">
  233. <p><span style="color: #000; font-size: {{ data['style'][key]['header']['size'] }}px; font-weight: {{ data['style'][key]['header']['weight'] }};" class="title">{{ data['style'][key]['header']['title'] }} </span></p>
  234. </div>
  235. {% else %}
  236. {% end %}
  237. {% end %}
  238. {% else %}
  239. {% end %}
  240. {% if "background" in data %}
  241. <img src="{{ static_url( data['background'] ) }}"></img>
  242. {% else %}
  243. <img src="{{ static_url( 'background.png' ) }}"></img>
  244. {% end %}
  245. <!-- java script -->
  246. <script src="{{ static_url("jquery-1.12.3.min.js") }}"></script>
  247. <script src="{{ static_url("jquery-ui.min.js") }}"></script>
  248. <script src="{{ static_url("math.min.js") }}"></script>
  249. <script>
  250. jQuery(window).load(function () {
  251. myTimer();
  252. var myVar = setInterval(myTimer, 10000);
  253. function myTimer() {
  254. var dataToSend = {};
  255. $.ajax({
  256. url: '/getdata/',
  257. type: 'GET',
  258. data: dataToSend,
  259. success: function (response) {
  260. //var objresponse = JSON.parse(response);
  261. console.log(response);
  262. for (var key in response) {
  263. //console.log(key, response[key]);
  264. data_type = $("#" + key).attr('data-type');
  265. if($("#" + key).length > 0) {
  266. if (data_type == "data") {
  267. //console.log("data");
  268. var datavalue, set_color, formula;
  269. var formula_attr = $("#" + key).attr('data-formula');
  270. if (response[key]) {
  271. if (formula_attr) {
  272. datavalue = parseFloat(response[key]).toFixed(2);
  273. formula = formula_attr.replace("x", datavalue.toString());
  274. datavalue = math.round(math.eval(formula),2);
  275. datavalue = datavalue.toFixed(2);
  276. } else {
  277. if ( ($("#" + key).attr('data-exponential')) == "True" || ($("#" + key).attr('data-exponential')) == "true" ) {
  278. datavalue = parseFloat(response[key]);
  279. datavalue = datavalue.toExponential(2)
  280. } else {
  281. datavalue = parseFloat(response[key]).toFixed(2);
  282. }
  283. }
  284. set_color = "green";
  285. } else {
  286. datavalue = "---";
  287. set_color = "black";
  288. }
  289. $(".varval", "#" + key).text(datavalue);
  290. var condition_attr = $("#" + key).attr('data-cond');
  291. var lesser_attr = $("#" + key).attr('data-lesser');
  292. var larger_attr = $("#" + key).attr('data-larger');
  293. //console.log(condition_attr);
  294. if (condition_attr) {
  295. if (response[key] == condition_attr) {
  296. set_color = "red";
  297. }
  298. }
  299. if (lesser_attr) {
  300. if (parseFloat(response[key]) < parseFloat(lesser_attr)) {
  301. set_color = "red";
  302. }
  303. }
  304. if (larger_attr) {
  305. if (parseFloat(response[key]) > parseFloat(larger_attr)) {
  306. set_color = "red";
  307. }
  308. }
  309. $(".varval", "#" + key).css("color", set_color);
  310. $(".unit_title", "#" + key).css("color", set_color);
  311. } else if (data_type == "icon") {
  312. //console.log("ventil");
  313. var on_attr = $("#" + key).attr('data-on');
  314. var off_attr = $("#" + key).attr('data-off');
  315. var on_condition = $("#" + key).attr('data-onexpression');
  316. var off_condition = $("#" + key).attr('data-offexpression');
  317. if (on_condition == 'onequal'){
  318. if (parseFloat(response[key]) == parseFloat(on_attr)) {
  319. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_green.svg");
  320. }
  321. } else if (on_condition == 'onsmaller'){
  322. if (parseFloat(response[key]) < parseFloat(on_attr)) {
  323. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_green.svg");
  324. }
  325. } else if (on_condition == 'ongreater'){
  326. if (parseFloat(response[key]) > parseFloat(on_attr)) {
  327. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_green.svg");
  328. }
  329. }
  330. if (off_condition == 'offequal'){
  331. if (parseFloat(response[key]) == parseFloat(off_attr)) {
  332. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_red.svg");
  333. }
  334. } else if (off_condition == 'offsmaller'){
  335. if (parseFloat(response[key]) < parseFloat(off_attr)) {
  336. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_red.svg");
  337. }
  338. } else if (off_condition == 'offgreater'){
  339. if (parseFloat(response[key]) > parseFloat(off_attr)) {
  340. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_red.svg");
  341. }
  342. }
  343. /*
  344. } else if (data_type == "commbit") {
  345. //console.log("commbit");
  346. var on_attr = $("#" + key).attr('data-on');
  347. var off_attr = $("#" + key).attr('data-off');
  348. if (parseFloat(response[key]) == parseFloat(on_attr)) {
  349. $("img", "#" + key).attr("src", "{{ static_url('commbit_green.svg') }}");
  350. }
  351. if (parseFloat(response[key]) == parseFloat(off_attr)) {
  352. $("img", "#" + key).attr("src", "{{ static_url('commbit_red.svg') }}");
  353. }
  354. } else if (data_type == "alarm") {
  355. //console.log("alarm");
  356. var on_attr = $("#" + key).attr('data-on');
  357. var off_attr = $("#" + key).attr('data-off');
  358. if (parseFloat(response[key]) == parseFloat(on_attr)) {
  359. $("img", "#" + key).attr("src", "{{ static_url('alarm_active.svg') }}");
  360. }
  361. if (parseFloat(response[key]) == parseFloat(off_attr)) {
  362. $("img", "#" + key).attr("src", "{{ static_url('alarm_inactive.svg') }}");
  363. }*/
  364. } else if (data_type == "integer-to-string") {
  365. //console.log("integer-to-string");
  366. var dict_attr = JSON.parse($("#" + key).attr('data-dict'));
  367. var dict_cond;
  368. if ($("#"+key).attr("data-cond")) {
  369. dict_cond = JSON.parse($("#" + key).attr('data-cond'));
  370. } else {
  371. dict_cond = {};
  372. }
  373. var dict_color = "";
  374. if (key in response) {
  375. var token = response[key];
  376. if (token in dict_cond) {
  377. dict_color = dict_cond[token];
  378. }
  379. }
  380. $(".varval", "#" + key).css("color", dict_color);
  381. $(".varval", "#" + key).text(dict_attr[response[key]]);
  382. }
  383. }
  384. }
  385. $('[id^=virtual_]').each(function( index ) {
  386. var key = this.id;
  387. var ref = key.split("_");
  388. ref.shift();
  389. ref.pop();
  390. ref = ref.join("_");
  391. //ref = ref[1];
  392. console.log(ref, key);
  393. data_type = $("#" + key).attr('data-type');
  394. if($("#" + key).length > 0) {
  395. if (data_type == "data") {
  396. console.log(key);
  397. var datavalue, set_color, formula;
  398. var formula_attr = $("#" + key).attr('data-formula');
  399. if (response[ref]) {
  400. if (formula_attr) {
  401. datavalue = parseFloat(response[ref]).toFixed(2);
  402. formula = formula_attr.replace("x", datavalue.toString());
  403. datavalue = math.round(math.eval(formula),2);
  404. datavalue = datavalue.toFixed(2);
  405. } else {
  406. datavalue = parseFloat(response[ref]).toFixed(2);
  407. }
  408. set_color = "green";
  409. } else {
  410. datavalue = "---";
  411. set_color = "black";
  412. }
  413. $(".varval", "#" + key).text(datavalue);
  414. var condition_attr = $("#" + key).attr('data-cond');
  415. var lesser_attr = $("#" + key).attr('data-lesser');
  416. var larger_attr = $("#" + key).attr('data-larger');
  417. //console.log(condition_attr);
  418. if (condition_attr) {
  419. if (response[ref] == condition_attr) {
  420. set_color = "red";
  421. }
  422. }
  423. if (lesser_attr) {
  424. if (parseFloat(response[ref]) < parseFloat(lesser_attr)) {
  425. set_color = "red";
  426. }
  427. }
  428. if (larger_attr) {
  429. if (parseFloat(response[ref]) > parseFloat(larger_attr)) {
  430. set_color = "red";
  431. }
  432. }
  433. $(".varval", "#" + key).css("color", set_color);
  434. $(".unit_title", "#" + key).css("color", set_color);
  435. } else if (data_type == "icon") {
  436. var on_attr = $("#" + key).attr('data-on');
  437. var off_attr = $("#" + key).attr('data-off');
  438. var on_condition = $("#" + key).attr('data-onexpression');
  439. var off_condition = $("#" + key).attr('data-offexpression');
  440. if (on_condition == 'onequal'){
  441. if (parseFloat(response[ref]) == parseFloat(on_attr)) {
  442. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_green.svg");
  443. }
  444. } else if (on_condition == 'onsmaller'){
  445. if (parseFloat(response[ref]) < parseFloat(on_attr)) {
  446. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_green.svg");
  447. }
  448. } else if (on_condition == 'ongreater'){
  449. if (parseFloat(response[ref]) > parseFloat(on_attr)) {
  450. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_green.svg");
  451. }
  452. }
  453. if (off_condition == 'offequal'){
  454. if (parseFloat(response[ref]) == parseFloat(off_attr)) {
  455. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_red.svg");
  456. }
  457. } else if (off_condition == 'offsmaller'){
  458. if (parseFloat(response[ref]) < parseFloat(off_attr)) {
  459. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_red.svg");
  460. }
  461. } else if (off_condition == 'offgreater'){
  462. if (parseFloat(response[ref]) > parseFloat(off_attr)) {
  463. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_red.svg");
  464. }
  465. }
  466. /*
  467. } else if (data_type == "commbit") {
  468. var on_attr = $("#" + key).attr('data-on');
  469. var off_attr = $("#" + key).attr('data-off');
  470. if (parseFloat(response[ref]) == parseFloat(on_attr)) {
  471. $("img", "#" + key).attr("src", "{{ static_url('commbit_green.svg') }}");
  472. }
  473. if (parseFloat(response[ref]) == parseFloat(off_attr)) {
  474. $("img", "#" + key).attr("src", "{{ static_url('commbit_red.svg') }}");
  475. }
  476. } else if (data_type == "alarm") {
  477. var on_attr = $("#" + key).attr('data-on');
  478. var off_attr = $("#" + key).attr('data-off');
  479. if (parseFloat(response[ref]) == parseFloat(on_attr)) {
  480. $("img", "#" + key).attr("src", "{{ static_url('alarm_active.svg') }}");
  481. }
  482. if (parseFloat(response[ref]) == parseFloat(off_attr)) {
  483. $("img", "#" + key).attr("src", "{{ static_url('alarm_inactive.svg') }}");
  484. }*/
  485. } else if (data_type == "integer-to-string") {
  486. var dict_attr = JSON.parse($("#" + key).attr('data-dict'));
  487. var dict_cond;
  488. if ($("#"+key).attr("data-cond")) {
  489. dict_cond = JSON.parse($("#" + key).attr('data-cond'));
  490. } else {
  491. dict_cond = {};
  492. }
  493. var dict_color = "";
  494. if (ref in response) {
  495. var token = response[ref];
  496. if (token in dict_cond) {
  497. dict_color = dict_cond[token];
  498. }
  499. }
  500. $(".varval", "#" + key).css("color", dict_color);
  501. $(".varval", "#" + key).text(dict_attr[response[ref]]);
  502. }
  503. }
  504. });
  505. $('[id^=calc_]').each(function( index ) {
  506. console.log(this.id);
  507. console.log($(this).attr('data-formula'));
  508. var myformula = $(this).attr('data-formula').trim();
  509. /*
  510. myformula = myformula.replace(/\[.*?\]/g, '__');
  511. console.log(myformula);
  512. */
  513. var data = myformula;
  514. var re= /\[(.*?)\]/g;
  515. var buffer = []
  516. for(m = re.exec(data); m; m = re.exec(data)){
  517. buffer.push(m[1]);
  518. }
  519. console.log("Debug:");
  520. console.log(buffer);
  521. var finalstring = "";
  522. var pattern = /\[(.*?)\]/g;
  523. var teststring = myformula.split(/[\[\]]+/);
  524. console.log(teststring);
  525. console.log(finalstring);
  526. for (var i = 0; i < teststring.length; i++) {
  527. var val = "";
  528. if (teststring[i] in response) {
  529. val = response[teststring[i]];
  530. } else {
  531. val = teststring[i];
  532. }
  533. finalstring += val;
  534. finalstring += " ";
  535. }
  536. finalstring = finalstring.trim();
  537. console.log(finalstring);
  538. var myvalue = math.round(math.eval(finalstring),2);
  539. myvalue = myvalue.toFixed(2);
  540. set_color = "green";
  541. console.log(myvalue);
  542. $(".varval", "#" + this.id).text(myvalue);
  543. var condition_attr = $("#" + this.id).attr('data-cond');
  544. var lesser_attr = $("#" + this.id).attr('data-lesser');
  545. var larger_attr = $("#" + this.id).attr('data-larger');
  546. //console.log(condition_attr);
  547. if (condition_attr) {
  548. if (myvalue == condition_attr) {
  549. set_color = "red";
  550. }
  551. }
  552. if (lesser_attr) {
  553. if (parseFloat(myvalue) < parseFloat(lesser_attr)) {
  554. set_color = "red";
  555. }
  556. }
  557. if (larger_attr) {
  558. if (parseFloat(myvalue) > parseFloat(larger_attr)) {
  559. set_color = "red";
  560. }
  561. }
  562. $(".varval", "#" + this.id).css("color", set_color);
  563. $(".unit_title", "#" + this.id).css("color", set_color);
  564. });
  565. var page_title_cache = $("#page_title_cache").text();
  566. var datetime = page_title_cache + " data monitoring page. Last Sync: " + response["time"];
  567. $("#page_info").text(datetime);
  568. console.log(datetime);
  569. },
  570. error: function () {
  571. console.log("Error.")
  572. }
  573. });
  574. }
  575. });
  576. </script>
  577. </body>
  578. </html>