// Set the auth header if necessary function authHeaders(xhr) { if (window.localStorage.getItem("authtoken") !== null) { var authToken = window.localStorage.getItem("authtoken"); xhr.setRequestHeader("Authorization", "Basic " + authToken); } } // Redirect if not authorized function redirectIfNotAuthorized() { $.ajax({ url: jsconfig.baseurl + "/api/version", beforeSend: authHeaders, statusCode: { 401: function() { window.location.replace(jsconfig.baseurl + "/app/login.html"); }, 403: function() { window.location.replace(jsconfig.baseurl + "/app/login.html"); } } }); }; // Call the redirect function redirectIfNotAuthorized(); // Display version at bottom of page function renderVersion() { $.ajax({ url: jsconfig.baseurl + "/api/version", beforeSend: authHeaders }).then(function(data) { var versionText = "TempGopher © 2018 Mike Shoup | Version: " + data.version; $("#version").text(versionText); }); }; $(document).ready(renderVersion); function celsiusToFahrenheit(degree) { return degree * 1.8 + 32; } function fahrenheitToCelsius(degree) { return (degree - 32) * 5 / 9; }; function renderThermostats() { $.ajax({ url: jsconfig.baseurl + "/api/status/", beforeSend: authHeaders }).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, beforeSend: authHeaders }).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($("