function celsiusToFahrenheit(degree) { return degree * 1.8 + 32; } function fahrenheitToCelsius(degree) { return (degree - 32) * 5 / 9; } function renderThermostats() { $.ajax({ url: jsconfig.baseurl + "/api/status/" }).then(function(data) { $("#thermostats").empty(); for (var key in data) { // Title of thermostat var titleh = $("

").text(data[key].alias); var titlediv = $("
").addClass("row").append(titleh); // Thermostat status var rowdiv = $("
"); rowdiv.addClass("row"); // Display temperature if (jsconfig.fahrenheit) { var temp = celsiusToFahrenheit(parseFloat(data[key].temp)).toFixed(1) + "°F"; } else { var temp = parseFloat(data[key].temp).toFixed(1) + "°C"; } var temph = $("

").text(temp); var tempdiv = $("
").addClass("two columns").append(temph); rowdiv.append(tempdiv); // Display status if (data[key].cooling) { var statustext = "Cooling" } else if (data[key].heating) { var statustext = "Heating" } else { var statustext = "Idle" } var statusp = $("

").html(statustext); var statusdiv = $("
").addClass("two columns").append(statusp); rowdiv.append(statusdiv); // Display sensor config $.ajax({ url: jsconfig.baseurl + "/api/config/sensors/" + data[key].alias }).then(function(configData){ if (jsconfig.fahrenheit) { var degUnit = "°F"; var hightemp = celsiusToFahrenheit(parseFloat(configData.hightemp)).toFixed(1); var lowtemp = celsiusToFahrenheit(parseFloat(configData.lowtemp)).toFixed(1); } else { var hightemp = parseFloat(configData.hightemp).toFixed(1); var lowtemp = parseFloat(configData.lowtemp).toFixed(1); } rp = '[0-9]+(\.[0-9]+)?' var cmIn = $("").attr("id", "cm" + configData.alias).val(configData.coolminutes).attr("size", "2").attr("pattern", rp).on('input', function(){window.clearInterval(rtHandle)}); var htIn = $("").attr("id", "ht" + configData.alias).val(hightemp).attr("size", "4").attr("pattern", rp).on('input', function(){window.clearInterval(rtHandle)}); var hmIn = $("").attr("id", "hm" + configData.alias).val(configData.heatminutes).attr("size", "2").attr("pattern", rp).on('input', function(){window.clearInterval(rtHandle)}); var ltIn = $("").attr("id", "lt" + configData.alias).val(lowtemp).attr("size", "4").attr("pattern", rp).on('input', function(){window.clearInterval(rtHandle)}); var configp = $("

").text("Chills for ").append(cmIn).append(" minutes when > ").append(htIn).append(degUnit).append($("
")); configp.append("Heats for ").append(hmIn).append(" minutes when < ").append(ltIn).append(degUnit); var configdiv = $("
").addClass("five columns").append(configp); rowdiv.append(configdiv); var yesButton = $("").addClass("button button-primary").text("✔").css("margin-right", "5px").click(function() { if (jsconfig.fahrenheit) { var newHT = fahrenheitToCelsius(parseFloat(htIn.val())); var newLT = fahrenheitToCelsius(parseFloat(ltIn.val())); } else { var newHT = parseFloat(htIn.val()); var newLT = parseFloat(ltIn.val()); } $.ajax({ type: "POST", url: jsconfig.baseurl + "/api/config/sensors", data: JSON.stringify([{ "id": configData.id, "alias": configData.alias, "hightemp": newHT, "lowtemp": newLT, "heatgpio": configData.heatgpio, "heatinvert": configData.heatInvert, "heatminutes": parseFloat(hmIn.val()), "coolgpio": configData.coolgpio, "coolinvert": configData.coolinvert, "coolminutes": parseFloat(cmIn.val()), "verbose": configData.verbose }]) }) window.setInterval(renderThermostats, 60000); renderThermostats(); }); var noButton = $("").addClass("button").text("✘").click(function() { window.setInterval(renderThermostats, 60000); renderThermostats(); }); var buttonDiv = $("
").addClass("three columns").append(yesButton).append(noButton); rowdiv.append(buttonDiv); //var confForm = $("
").append(rowdiv); // Add things back to the thermostat list $("#thermostats").append(titlediv); $("#thermostats").append(rowdiv); }); }; }); }; $(document).ready(renderThermostats); var rtHandle = window.setInterval(renderThermostats, 60000);