mirror of https://github.com/sfeakes/AqualinkD.git
533 lines
15 KiB
JavaScript
533 lines
15 KiB
JavaScript
|
|
if(window.innerHeight > window.innerWidth){
|
|
orientation("portrait");
|
|
} else {
|
|
orientation("landscape");
|
|
}
|
|
|
|
// Listen for orientation changes
|
|
window.addEventListener("orientationchange", function() {
|
|
// Announce the new orientation number
|
|
//alert(window.orientation);
|
|
if(window.innerHeight > window.innerWidth)
|
|
orientation("portrait");
|
|
else
|
|
orientation("landscape");
|
|
|
|
}, false);
|
|
|
|
function orientation(or){
|
|
//alert(or);
|
|
viewport = document.querySelector("meta[name=viewport]");
|
|
if (or == "landscape") {
|
|
viewport.setAttribute('content', 'content="width=device-width, user-scalable=yes, width=800"');
|
|
} else {
|
|
viewport.setAttribute('content', 'content="width=device-width, user-scalable=yes, width=540"');
|
|
}
|
|
}
|
|
|
|
// aqualink.js
|
|
|
|
function BlockMove(event) {
|
|
// Tell Safari not to move the window.
|
|
event.preventDefault();
|
|
}
|
|
|
|
// Preload the images.
|
|
var delay = 10;
|
|
if (document.images) {
|
|
//setTimeout(get_batt_ok_img, delay);
|
|
setTimeout(loadImages, delay);
|
|
}
|
|
|
|
function loadImages() {
|
|
document.getElementById('battery_ok').src = "images/battery_ok.png";
|
|
document.getElementById('battery_low').src = "images/battery_low.png";
|
|
document.getElementById('battery_blank').src = "images/battery_blank.png";
|
|
|
|
for (var obj in aqualink_data.leds) {
|
|
setButtonElementImage(obj+'_on_status', "images/led_on.png");
|
|
setButtonElementImage(obj+'_off_status', "images/led_off.png");
|
|
setButtonElementImage(obj+'_en_status', "images/led_enabled.png");
|
|
}
|
|
|
|
document.getElementById('net_off').src = "images/net_off.png";
|
|
document.getElementById('net_yellow').src = "images/net_yellow.png";
|
|
document.getElementById('net_green').src = "images/net_green.png";
|
|
document.getElementById('net_red').src = "images/net_red.png";
|
|
}
|
|
|
|
|
|
//function set_button_led_images
|
|
function setButtonElementImage(element, image){
|
|
el = document.getElementById(element);
|
|
if (el != null) {
|
|
el.src = image;
|
|
}
|
|
}
|
|
|
|
function LedsData() {
|
|
this.Filter_Pump = "off";
|
|
this.Spa_Mode = "off";
|
|
this.Aux_1 = "off";
|
|
//this.aux1 = "flash";
|
|
this.Aux_2 = "off";
|
|
this.Aux_3 = "off";
|
|
this.Aux_4 = "off";
|
|
this.Aux_5 = "off";
|
|
this.Aux_6 = "off";
|
|
this.Aux_7 = "off";
|
|
this.Pool_Heater = "off";
|
|
this.Spa_Heater = "off";
|
|
this.Solar_Heater = "off";
|
|
}
|
|
|
|
function AqualinkData() {
|
|
this.version = "";
|
|
this.date = "09/11/12 TUE";
|
|
this.time = "10:33 AM";
|
|
this.temp_units = "F";
|
|
this.air_temp = "75";
|
|
this.battery = "low";
|
|
this.leds = new LedsData();
|
|
}
|
|
|
|
function TemperatureSetPoint() {
|
|
this.modified = false;
|
|
this.value = 0;
|
|
}
|
|
|
|
var pool_htr_set_point = new TemperatureSetPoint();
|
|
var spa_htr_set_point = new TemperatureSetPoint();
|
|
var freeze_protect_set_point = new TemperatureSetPoint();
|
|
|
|
var aqualink_data = new AqualinkData();
|
|
var net_connection = 'red';
|
|
|
|
|
|
function interval(duration, fn){
|
|
this.baseline = undefined
|
|
|
|
this.run = function(){
|
|
if(this.baseline === undefined){
|
|
this.baseline = new Date().getTime()
|
|
}
|
|
fn()
|
|
var end = new Date().getTime()
|
|
this.baseline += duration
|
|
|
|
var nextTick = duration - (end - this.baseline)
|
|
if(nextTick<0){
|
|
nextTick = 0
|
|
}
|
|
(function(i){
|
|
i.timer = setTimeout(function(){
|
|
i.run(end)
|
|
}, nextTick)
|
|
}(this))
|
|
}
|
|
|
|
this.stop = function(){
|
|
clearTimeout(this.timer)
|
|
}
|
|
}
|
|
|
|
var timer = new interval(1000, function(){
|
|
net_connection_icon();
|
|
flash_battery_icon();
|
|
//blink_filter_pump();
|
|
blink_button_leds();
|
|
})
|
|
timer.run()
|
|
|
|
|
|
function net_connection_icon() {
|
|
if (net_connection == "red") {
|
|
document.getElementById('messages_div').innerHTML = "Not connected!";
|
|
document.getElementById('net_green').style.visibility = 'hidden';
|
|
document.getElementById('net_yellow').style.visibility = 'hidden';
|
|
if (document.getElementById('net_red').style.visibility == 'visible') {
|
|
document.getElementById('net_red').style.visibility = 'hidden';
|
|
} else {
|
|
document.getElementById('net_red').style.visibility = 'visible';
|
|
}
|
|
} else if (net_connection == "green") {
|
|
document.getElementById('net_green').style.visibility = 'visible';
|
|
document.getElementById('net_red').style.visibility = 'hidden';
|
|
document.getElementById('net_yellow').style.visibility = 'hidden';
|
|
} else if (net_connection == "yellow") {
|
|
document.getElementById('net_green').style.visibility = 'hidden';
|
|
document.getElementById('net_red').style.visibility = 'hidden';
|
|
document.getElementById('net_yellow').style.visibility = 'visible';
|
|
}
|
|
}
|
|
//setInterval(net_connection_icon, 500);
|
|
|
|
function net_activity() {
|
|
// Set the icon yellow.
|
|
document.getElementById('net_green').style.visibility = 'hidden';
|
|
document.getElementById('net_red').style.visibility = 'hidden';
|
|
document.getElementById('net_yellow').style.visibility = 'visible';
|
|
// Wait 10mS then set to green.
|
|
setTimeout(function() {
|
|
document.getElementById('net_green').style.visibility = 'visible';
|
|
document.getElementById('net_red').style.visibility = 'hidden';
|
|
document.getElementById('net_yellow').style.visibility = 'hidden';
|
|
}, 50);
|
|
}
|
|
|
|
function flash_battery_icon() {
|
|
if (aqualink_data.battery == "low") {
|
|
if (document.getElementById('battery_low').style.visibility == 'visible') {
|
|
document.getElementById('battery_low').style.visibility = 'hidden';
|
|
} else {
|
|
document.getElementById('battery_low').style.visibility = 'visible';
|
|
}
|
|
}
|
|
}
|
|
//setInterval(flash_battery_icon, 500);
|
|
/*
|
|
function blink_filter_pump() {
|
|
if (aqualink_data.leds.pump == "enabled") {
|
|
document.getElementById("pump_status").src = (document.getElementById("pump_status").src.indexOf("images/led_on.png") == -1) ? "images/led_on.png" : "images/led_off.png";
|
|
}
|
|
}
|
|
*/
|
|
//setInterval(blink_filter_pump, 500);
|
|
|
|
|
|
function blink_button_leds() {
|
|
for (var obj in aqualink_data.leds) {
|
|
if (aqualink_data.leds[obj] == "flash" && document.getElementById(obj+'_on_status') != null ) {
|
|
if (document.getElementById(obj+'_on_status').style.visibility == 'hidden') {
|
|
setElementVisibility(obj+'_on_status', 'visible');
|
|
setElementVisibility(obj+'_off_status', 'hidden');
|
|
} else {
|
|
setElementVisibility(obj+'_on_status', 'hidden');
|
|
setElementVisibility(obj+'_off_status', 'visible');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//setInterval(blink_aux_leds, 1500);
|
|
|
|
// End - Methods to Manage Flashing Images
|
|
|
|
// Display Update Methods
|
|
|
|
function update_temp(id) {
|
|
var el = document.getElementById(id);
|
|
var temp_string = "";
|
|
|
|
if (id == "air_temp") {
|
|
temp_string = aqualink_data.air_temp;
|
|
} else if (id == "pool_temp") {
|
|
temp_string = aqualink_data.pool_temp;
|
|
if (temp_string == " ") {
|
|
temp_string = "---"
|
|
}
|
|
} else if (id == "spa_temp") {
|
|
temp_string = aqualink_data.spa_temp;
|
|
if (temp_string == " ") {
|
|
temp_string = "---"
|
|
}
|
|
} else if (id == "pool_htr_set_pnt") {
|
|
if (pool_htr_set_point.modified == true) {
|
|
temp_string = pool_htr_set_point.value.toString();
|
|
el.style.color = "PowderBlue";
|
|
} else {
|
|
temp_string = aqualink_data.pool_htr_set_pnt;
|
|
pool_htr_set_point.value = parseInt(temp_string);
|
|
el.style.color = "#f4f4f4";
|
|
}
|
|
} else if (id == "spa_htr_set_pnt") {
|
|
if (spa_htr_set_point.modified == true) {
|
|
temp_string = spa_htr_set_point.value.toString();
|
|
el.style.color = "PowderBlue";
|
|
} else {
|
|
temp_string = aqualink_data.spa_htr_set_pnt;
|
|
spa_htr_set_point.value = parseInt(temp_string);
|
|
el.style.color = "#f4f4f4";
|
|
}
|
|
} else if (id == "frz_protect_set_pnt") {
|
|
if (freeze_protect_set_point.modified == true) {
|
|
temp_string = freeze_protect_set_point.value.toString();
|
|
el.style.color = "PowderBlue";
|
|
} else {
|
|
temp_string = aqualink_data.frz_protect_set_pnt;
|
|
freeze_protect_set_point.value = parseInt(temp_string);
|
|
el.style.color = "#f4f4f4";
|
|
}
|
|
}
|
|
|
|
el.innerHTML = temp_string + "°" + aqualink_data.temp_units;
|
|
}
|
|
|
|
// Adjust the Pool Heater set point. Note that its maximum value
|
|
// is 104 and its minimum value is 0.
|
|
function incr_pool_htr(direction) {
|
|
if (direction == '+') {
|
|
if (pool_htr_set_point.value < 104) {
|
|
pool_htr_set_point.value++;
|
|
}
|
|
} else {
|
|
if (pool_htr_set_point.value > 0) {
|
|
pool_htr_set_point.value--;
|
|
}
|
|
}
|
|
|
|
if (pool_htr_set_point.value == parseInt(aqualink_data.pool_htr_set_pnt)) {
|
|
pool_htr_set_point.modified = false;
|
|
} else {
|
|
pool_htr_set_point.modified = true;
|
|
}
|
|
|
|
update_temp("pool_htr_set_pnt");
|
|
}
|
|
|
|
// Adjust the Spa Heater set point. Note that its maximum value
|
|
// is 104 and its minimum value is 0.
|
|
function incr_spa_htr(direction) {
|
|
if (direction == '+') {
|
|
if (spa_htr_set_point.value < 104) {
|
|
spa_htr_set_point.value++;
|
|
}
|
|
} else {
|
|
if (spa_htr_set_point.value > 0) {
|
|
spa_htr_set_point.value--;
|
|
}
|
|
}
|
|
|
|
if (spa_htr_set_point.value == parseInt(aqualink_data.spa_htr_set_pnt)) {
|
|
spa_htr_set_point.modified = false;
|
|
} else {
|
|
spa_htr_set_point.modified = true;
|
|
}
|
|
|
|
update_temp("spa_htr_set_pnt");
|
|
}
|
|
|
|
// Adjust the Freeze Protection set point. Note that its maximum value
|
|
// is 42 and its minimum value is 36.
|
|
function incr_frz_protect(direction) {
|
|
if (direction == '+') {
|
|
if (freeze_protect_set_point.value < 42) {
|
|
freeze_protect_set_point.value++;
|
|
}
|
|
} else {
|
|
if (freeze_protect_set_point.value > 36) {
|
|
freeze_protect_set_point.value--;
|
|
}
|
|
}
|
|
|
|
if (freeze_protect_set_point.value == parseInt(aqualink_data.frz_protect_set_pnt)) {
|
|
freeze_protect_set_point.modified = false;
|
|
} else {
|
|
freeze_protect_set_point.modified = true;
|
|
}
|
|
|
|
update_temp("frz_protect_set_pnt");
|
|
}
|
|
|
|
function update_date_time() {
|
|
var el = document.getElementById("date_time");
|
|
|
|
el.innerHTML = aqualink_data.time + " - " + aqualink_data.date;
|
|
}
|
|
|
|
function setElementVisibility(element, visibility){
|
|
//console.log("set "+element+" to "+visibility);
|
|
el = document.getElementById(element);
|
|
if (el != null) {
|
|
el.style.visibility = visibility;
|
|
//console.log("set "+element+" to "+visibility);
|
|
}
|
|
}
|
|
|
|
function update_leds() {
|
|
//console.log("*****UPDATE LED*****");
|
|
for (var obj in aqualink_data.leds) {
|
|
//console.log("*****setting "+obj+" to "+aqualink_data.leds[obj]);
|
|
if (aqualink_data.leds[obj] == "on") {
|
|
setElementVisibility(obj+'_on_status', 'visible');
|
|
setElementVisibility(obj+'_off_status', 'hidden');
|
|
setElementVisibility(obj+'_en_status', 'hidden');
|
|
} else if (aqualink_data.leds[obj] == "enabled") {
|
|
setElementVisibility(obj+'_on_status', 'hidden');
|
|
setElementVisibility(obj+'_off_status', 'hidden');
|
|
setElementVisibility(obj+'_en_status', 'visible');
|
|
} else if (aqualink_data.leds[obj] == "off") {
|
|
setElementVisibility(obj+'_on_status', 'hidden');
|
|
setElementVisibility(obj+'_off_status', 'visible');
|
|
setElementVisibility(obj+'_en_status', 'hidden');
|
|
} else if (aqualink_data.leds[obj] == "flash") {
|
|
// Don't set any other visibility or it'll mess up the flasher timer.
|
|
setElementVisibility(obj+'_en_status', 'hidden');
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function update_status(data) {
|
|
aqualink_data = data;
|
|
//console.log(aqualink_data.version);
|
|
//console.log('updating status...');
|
|
if (aqualink_data.battery == "ok") {
|
|
document.getElementById('battery_low').style.visibility = 'hidden';
|
|
document.getElementById('battery_ok').style.visibility = 'visible';
|
|
} else {
|
|
document.getElementById('battery_ok').style.visibility = 'hidden';
|
|
}
|
|
|
|
if (aqualink_data.status == "Ready") {
|
|
document.getElementById('messages_div').innerHTML = "";
|
|
} else {
|
|
document.getElementById('messages_div').innerHTML = aqualink_data.status+" (please wait!)";
|
|
}
|
|
|
|
update_temp("air_temp");
|
|
update_temp("pool_temp");
|
|
update_temp("spa_temp");
|
|
update_temp("pool_htr_set_pnt");
|
|
update_temp("spa_htr_set_pnt");
|
|
update_temp("frz_protect_set_pnt");
|
|
|
|
update_date_time();
|
|
|
|
update_leds();
|
|
}
|
|
|
|
function set_aux_button_labels(data) {
|
|
//console.log("Aux 1=" + data.Aux_1);
|
|
for (var obj in data) {
|
|
//console.log("sent "+obj+" to "+data[obj]);
|
|
button = document.getElementById(obj);
|
|
if (button != null) {
|
|
button.innerHTML = data[obj];
|
|
}
|
|
}
|
|
}
|
|
|
|
//alert(BrowserDetect.browser + ' : ' + BrowserDetect.version);
|
|
|
|
function get_appropriate_ws_url() {
|
|
var pcol;
|
|
var u = document.URL;
|
|
|
|
/*
|
|
* We open the websocket encrypted if this page came on an
|
|
* https:// url itself, otherwise unencrypted
|
|
*/
|
|
|
|
if (u.substring(0, 5) == "https") {
|
|
pcol = "wss://";
|
|
u = u.substr(8);
|
|
} else {
|
|
pcol = "ws://";
|
|
if (u.substring(0, 4) == "http")
|
|
u = u.substr(7);
|
|
}
|
|
|
|
u = u.split('/');
|
|
|
|
//alert (pcol + u[0] + ":6500");
|
|
|
|
return pcol + u[0];
|
|
}
|
|
|
|
|
|
|
|
/* dumb increment protocol */
|
|
var socket_di;
|
|
|
|
function startWebsockets() {
|
|
socket_di = new WebSocket(get_appropriate_ws_url());
|
|
/*
|
|
if (BrowserDetect.browser == "Firefox" && BrowserDetect.version < 12) {
|
|
//socket_di = new MozWebSocket(get_appropriate_ws_url(), "dumb-increment-protocol");
|
|
socket_di = new MozWebSocket(get_appropriate_ws_url());
|
|
} else {
|
|
//socket_di = new WebSocket(get_appropriate_ws_url(), "dumb-increment-protocol");
|
|
socket_di = new WebSocket(get_appropriate_ws_url());
|
|
}
|
|
*/
|
|
try {
|
|
socket_di.onopen = function() {
|
|
// success!
|
|
get_aux_labels();
|
|
net_connection = 'green';
|
|
}
|
|
|
|
socket_di.onmessage = function got_packet(msg) {
|
|
net_activity();
|
|
var data = JSON.parse(msg.data);
|
|
if (data.type == 'status') {
|
|
update_status(data);
|
|
} else if (data.type == 'aux_labels') {
|
|
set_aux_button_labels(data);
|
|
}
|
|
}
|
|
|
|
socket_di.onclose = function() {
|
|
// something went wrong
|
|
net_connection = 'red';
|
|
// Try to reconnect every 5 seconds.
|
|
setTimeout(function() {
|
|
startWebsockets()
|
|
}, 5000);
|
|
}
|
|
} catch (exception) {
|
|
alert('<p>Error' + exception);
|
|
}
|
|
}
|
|
|
|
function reset() {
|
|
socket_di.send("reset\n");
|
|
}
|
|
|
|
function get_aux_labels() {
|
|
//socket_di.send("GET_AUX_LABELS");
|
|
var msg = {command: "GET_AUX_LABELS"};
|
|
// Send the msg object as a JSON-formatted string.
|
|
socket_di.send(JSON.stringify(msg));
|
|
}
|
|
|
|
function queue_command(cmd) {
|
|
var _cmd = {};
|
|
_cmd.command = cmd;
|
|
|
|
socket_di.send(JSON.stringify(_cmd));
|
|
}
|
|
|
|
function set_temperature(type) {
|
|
var temperature = {};
|
|
|
|
if (type == "POOL_HTR") {
|
|
temperature.parameter = type;
|
|
temperature.value = pool_htr_set_point.value;
|
|
pool_htr_set_point.modified = false;
|
|
} else if (type == "SPA_HTR") {
|
|
temperature.parameter = type;
|
|
temperature.value = spa_htr_set_point.value;
|
|
spa_htr_set_point.modified = false;
|
|
} else if (type == "FRZ_PROTECT") {
|
|
temperature.parameter = type;
|
|
temperature.value = freeze_protect_set_point.value;
|
|
freeze_protect_set_point.modified = false;
|
|
}
|
|
|
|
socket_di.send(JSON.stringify(temperature));
|
|
}
|
|
|
|
function set_light_mode(value) {
|
|
var mode = {};
|
|
|
|
mode.parameter = 'POOL_LIGHT_MODE';
|
|
mode.value = value;
|
|
socket_di.send(JSON.stringify(mode));
|
|
}
|
|
|
|
window.onload = function() {
|
|
startWebsockets();
|
|
|
|
} |