Advertisement
Guest User

API.js

a guest
Jun 7th, 2017
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var ServerUrl = '';
  2.  
  3. Type = {
  4.     Day : 'day',
  5.     Night : 'night'
  6. };
  7.  
  8. Days = {
  9.     Monday : 'Monday',
  10.     Tuesday : 'Tuesday',
  11.     Wednesday : 'Wednesday',
  12.     Thursday : 'Thursday',
  13.     Friday : 'Friday',
  14.     Saturday : 'Saturday',
  15.     Sunday : 'Sunday'
  16. };
  17.  
  18. var MinTemperature = parseFloat(5.0);
  19. var MaxTemperature = parseFloat(30.0);
  20. var MaxSwitches = 5;
  21.  
  22. var Time;
  23. var CurrentDay;
  24. var DayTemperature;
  25. var NightTemperature;
  26. var CurrentTemperature;
  27. var TargetTemperature;
  28. var ProgramState;
  29.  
  30. var Program = {};
  31. Program[Days.Monday]    = [];
  32. Program[Days.Tuesday]   = [];
  33. Program[Days.Wednesday] = [];
  34. Program[Days.Thursday]  = [];
  35. Program[Days.Friday]    = [];
  36. Program[Days.Saturday]  = [];
  37. Program[Days.Sunday]    = [];
  38.  
  39. /* Retrive day program
  40. */
  41. function getProgram(day) {
  42.     return Program[day];
  43. }
  44.  
  45. /* Sorts the heating periods (the periods when the heating is on) and merges overlapping ones
  46. */
  47. function sortMergeProgram(day) {
  48.     var program = getProgram(day);
  49.     program.sort(function(a, b){return parseTime(a[0])-parseTime(b[0])});
  50.     for (var i = 0; i < program.length - 1; i++) {
  51.         if (parseTime(program[i][1]) >= parseTime(program[i+1][0])) {
  52.             var start = (program[i][0]);
  53.             var end = (parseTime(program[i][1]) > parseTime(program[i+1][1])) ? program[i][1] : program[i+1][1];
  54.             program.splice(i, 2);
  55.             program.push([start, end]);
  56.             sortMergeProgram(day);
  57.             break;
  58.         }
  59.     }
  60. }
  61.  
  62. /* Retrieves all data from the server except for weekProgram
  63. */
  64. function get(attribute_name, xml_tag) {
  65.     return requestData(
  66.         "/"+attribute_name,
  67.         function(data) {
  68.             return $(data).find(xml_tag).text();
  69.         }
  70.     );
  71. }
  72.  
  73. /* Retrieves the week program
  74. */
  75. function getWeekProgram() {
  76.     return requestData(
  77.         '/weekProgram',
  78.         function(data) {
  79.             $(data).find('day').each(function() {
  80.                 var day = $(this).attr('name');
  81.                 Program[day] = [];
  82.                 $(this).find('switch').each(function() {
  83.                     if ($(this).attr('state') == 'on') {
  84.                         if ($(this).attr('type') == Type.Day) {
  85.                             getProgram(day).push([$(this).text(), '00:00']);
  86.                         } else {
  87.                             getProgram(day)[getProgram(day).length - 1][1] = $(this).text();
  88.                         }
  89.                     }
  90.                 })
  91.             });
  92.             return Program;
  93.         }
  94.     );
  95. }
  96.  
  97. /* Uploads all data to the server except for currentTemperature and weekProgram
  98. */
  99. function put(attribute_name, xml_tag, value){
  100.     uploadData("/"+attribute_name, "<" + xml_tag + ">"+ value + "</" + xml_tag + ">");
  101. }
  102.  
  103. function requestData(address, func) {
  104.     var result;
  105.     $.ajax({
  106.         type: "get",
  107.         url: ServerUrl + address,
  108.         dataType: "xml",
  109.         async: false,
  110.         success: function(data) {
  111.             result = func(data);
  112.         }
  113.     });
  114.     return result;
  115. }
  116.  
  117. /* Uploads the week program
  118. */
  119. function setWeekProgram() {
  120.     var doc = document.implementation.createDocument(null, null, null);
  121.     var program = doc.createElement('week_program');
  122.     program.setAttribute('state', ProgramState ? 'on' : 'off');
  123.     for (var key in Program) {
  124.         var day = doc.createElement('day');
  125.         day.setAttribute('name', key);
  126.  
  127.         var daySwitches = [];
  128.         var nightSwitches = [];
  129.  
  130.         var i, text, sw;
  131.         var periods = getProgram(key);
  132.         for (i = 0; i < periods.length; i++ ) {
  133.             daySwitches.push(periods[i][0]);
  134.             nightSwitches.push(periods[i][1]);
  135.         }
  136.  
  137.         for (i = 0; i < MaxSwitches; i++) {
  138.             sw = doc.createElement('switch');
  139.             sw.setAttribute('type', Type.Day);
  140.  
  141.             if (i < daySwitches.length) {
  142.                 sw.setAttribute('state', 'on');
  143.                 text = doc.createTextNode(daySwitches[i]);
  144.             } else {
  145.                 sw.setAttribute('state', 'off');
  146.                 text = doc.createTextNode('00:00');
  147.             }
  148.             sw.appendChild(text);
  149.             day.appendChild(sw);
  150.         }
  151.  
  152.         for (i = 0; i < MaxSwitches; i++ ) {
  153.             sw = doc.createElement('switch');
  154.             sw.setAttribute('type', Type.Night);
  155.  
  156.             if (i < nightSwitches.length) {
  157.                 sw.setAttribute('state', 'on');
  158.                 text = doc.createTextNode(nightSwitches[i]);
  159.             } else {
  160.                 sw.setAttribute('state', 'off');
  161.                 text = doc.createTextNode('00:00');
  162.             }
  163.             sw.appendChild(text);
  164.             day.appendChild(sw);
  165.         }
  166.         program.appendChild(day);
  167.     }
  168.     doc.appendChild(program);
  169.     uploadData('/weekProgram', (new XMLSerializer()).serializeToString(doc));
  170. }
  171.  
  172. /* Creates the default week program
  173. */
  174. function setDefault() {
  175.     var doc = document.implementation.createDocument(null, null, null);
  176.     var program = doc.createElement('week_program');
  177.     program.setAttribute('state', ProgramState ? 'on' : 'off');
  178.     for (var key in Program) {
  179.         var day = doc.createElement('day');
  180.         day.setAttribute('name', key);
  181.  
  182.         var daySwitches = [];
  183.         var nightSwitches = [];
  184.  
  185.         var i, text, sw;
  186.  
  187.         for (i = 0; i < MaxSwitches; i++) {
  188.             sw = doc.createElement('switch');
  189.             sw.setAttribute('type', Type.Night);
  190.             sw.setAttribute('state', 'off');
  191.             text = doc.createTextNode('00:00');
  192.             sw.appendChild(text);
  193.             day.appendChild(sw);
  194.         }
  195.  
  196.         for (i = 0; i < MaxSwitches; i++) {
  197.             sw = doc.createElement('switch');
  198.             sw.setAttribute('type', Type.Day);
  199.             sw.setAttribute('state', 'off');
  200.             text = doc.createTextNode('00:00');
  201.             sw.appendChild(text);
  202.             day.appendChild(sw);
  203.         }
  204.  
  205.         program.appendChild(day);
  206.     }
  207.     doc.appendChild(program);
  208.     uploadData('/weekProgram', (new XMLSerializer()).serializeToString(doc));
  209. }
  210.  
  211. function uploadData(address, xml) {
  212.     $.ajax({
  213.         type: "put",
  214.         url: ServerUrl + address,
  215.         contentType: 'application/xml',
  216.         data: xml,
  217.         async: false
  218.     });
  219. }
  220.  
  221. function parseTime(t) {
  222.     return parseFloat(t.substr(0,2)) + parseFloat(t.substr(3,2))/60;
  223. }
  224.  
  225. /* Adds a heating period for a specific day
  226. */
  227. function addPeriod(day, start, end) {
  228.     var program = getWeekProgram()[day];
  229.     program.push([start, end]);
  230.     sortMergeProgram(day);
  231.     setWeekProgram();
  232. }
  233.  
  234. /* Removes a heating period from a specific day.
  235.    idx is the idex of the period with values from 0 to 4
  236. */
  237. function removePeriod(day, idx) {
  238.     var program = getWeekProgram()[day];
  239.     var start = program[idx][0];
  240.     var end = program[idx][1];
  241.     program.splice(idx,1);
  242.     setWeekProgram();
  243. }
  244.  
  245. /* Checks whether the temperature is within the range [5.0,30.0]
  246. */
  247. function inTemperatureBoundaries(temp) {
  248.   temp = parseFloat(temp);
  249.   return ( temp >= MinTemperature && temp <= MaxTemperature);
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement