pull/11/head
shaun feakes 2018-07-29 20:27:48 -05:00
parent 64ae9da1b4
commit 2fc70a5cdd
8 changed files with 202 additions and 164 deletions

View File

@ -501,7 +501,7 @@ void *set_aqualink_light_colormode( void *ptr )
waitForButtonState(aq_data, button, OFF, 2);
}
logMessage(LOG_INFO, "Pool Light button press number %d - %s of %d\n", i, "ON", val);
logMessage(LOG_INFO, "Finished - Pool Light button press number %d - %s of %d\n", i, "ON", val);
send_cmd(code, aq_data);
}
//waitForButtonState(aq_data, &aq_data->aqbuttons[btn], ON, 2);
@ -1112,6 +1112,7 @@ bool waitForButtonState(struct aqualinkdata *aq_data, aqkey* button, aqledstate
logMessage(LOG_DEBUG, "Programming mode: loop %d of %d looking for state change to '%d' for '%s' \n",i,numMessageReceived,button->led->state,button->name);
if (button->led->state == state) {
logMessage(LOG_INFO, "Programming mode: Button State =%d for %s\n",state,button->name);
break;
}

View File

@ -800,16 +800,6 @@ void main_loop() {
// **** NSF (Taken out while playing with Panel Simulator, put back in. ************)
// send_ack(rs_fd, pop_aq_cmd(&_aqualink_data));
// Process the packet. This includes deriving general status, and identifying
// warnings and errors. If something changed, notify any listeners
if (process_packet(packet_buffer, packet_length) != false) {
broadcast_aqualinkstate(mgr.active_connections);
}
//send_ack(rs_fd, pop_aq_cmd(&_aqualink_data));
// NSF Not 100% yet but better. Still a mess. Delete if and go back to above is problems with messages, this is only
// Necessary for simulator mode.
if (! _aqualink_data.simulate_panel ||
_aqualink_data.active_thread.thread_id != 0 ||
strncasecmp(_aqualink_data.last_display_message, "SELECT", 6) != 0 ||
@ -822,6 +812,28 @@ void main_loop() {
delayAckCnt++;
}
// Process the packet. This includes deriving general status, and identifying
// warnings and errors. If something changed, notify any listeners
if (process_packet(packet_buffer, packet_length) != false) {
broadcast_aqualinkstate(mgr.active_connections);
}
//send_ack(rs_fd, pop_aq_cmd(&_aqualink_data));
// NSF Not 100% yet but better. Still a mess. Delete if and go back to above is problems with messages, this is only
// Necessary for simulator mode.
/*
if (! _aqualink_data.simulate_panel ||
_aqualink_data.active_thread.thread_id != 0 ||
strncasecmp(_aqualink_data.last_display_message, "SELECT", 6) != 0 ||
get_aq_cmd_length() > 0 ||
delayAckCnt > 5) {
send_ack(rs_fd, pop_aq_cmd(&_aqualink_data));
delayAckCnt = 0;
} else {
logMessage(LOG_NOTICE, "Delaying ACK due to Simulator mode \n");
delayAckCnt++;
}
*/
} else if (packet_length > 0) {
// printf("packet not for us %02x\n",packet_buffer[PKT_DEST]);

Binary file not shown.

View File

@ -69,7 +69,13 @@ if [ ! -d "$WEBLocation" ]; then
mkdir -p $WEBLocation
fi
if [ -f "$WEBLocation/config.js" ]; then
echo "$WEBLocation/config.js exists, did not copy overight, please make sure to update manually"
rsync -avq --exclude='$BUILD/../web/config.js' $BUILD/../web/* $WEBLocation
else
cp -r $BUILD/../web/* $WEBLocation
fi
systemctl enable $SERVICE
systemctl daemon-reload

84
web/config.js Normal file
View File

@ -0,0 +1,84 @@
// Display order of devices. Tiles will be displayed in the order below,
// any devices you don't want to see you can comment the ID. (with // e.g. `//"Solar_Heater",` )
// If the device isn't listed below is will NOT be shown.
// For a complete list returned from your particular aqualinkd instance
// use the below URL and look at the ID value for each device.
// http://aqualink.ip.address/?command=devices
var devices = [
"Filter_Pump",
"Spa_Mode",
"Aux_1",
"Aux_2",
"Aux_3",
"Aux_4",
"Aux_5",
"Aux_6",
"Aux_7",
"Pool_Heater",
"Spa_Heater",
"SWG/Percent",
"SWG/PPM",
"Air",
"Pool_Water",
"Spa_Water",
"Freeze_Protect",
//"Solar_Heater",
];
// Add the light program names below, the name index MUST correlate to
// the number of pulses. ie (Blue Sea is #2 or 2 pulses)
var light_program = [
"Voodoo Lounge - Show",
"Blue Sea",
"Royal Blue",
"Afternoon Skies",
"Aqua Green",
"Emerald",
"Cloud White",
"Warm Red",
"Flamingo",
"Vivid Violet",
"Sangria",
"Twilight - Show",
"Tranquility - Show",
"Gemstone - Show",
"USA - Show",
"Mardi Gras - Show",
"Cool Cabaret - Show"
];
/*
* BELOW IS NOT RELIVENT FOR simple.html or simple inteface
*
*/
// Background image, delete or leave blank for solid color
//var background_url = "http://192.168.144.224/snap.jpeg";
var background_url='background.jpg';
//var background_url='';
// Reload background image every X seconds.(useful if camera snapshot)
// 0 means only load once when page loads.
//var background_reload = 10;
var body_background = "#EBEBEA";
var body_text = "#000000";
var options_pane_background = "#F5F5F5";
var options_pane_bordercolor = "#7C7C7C";
var options_slider_highlight = "#2196F3";
var options_slider_lowlight = "#D3D3D3";
var head_background = "#2B6A8F";
var head_text = "#FFFFFF)";
var error_background = "#8F2B2B";
var tile_background = "#DCDCDC";
var tile_text = "#6E6E6E";
var tile_on_background = "#FFFFFF";
var tile_on_text = "#000000";
var tile_status_text = "#575757";
// Dark colors
// var body_background = "#000000";
// var tile_background = "#646464";
// var tile_text = "#B9B9B9";
// var tile_status_text = "#B2B2B2";
// var head_background = "#000D53";

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -3,71 +3,13 @@
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1252'>
<script type='text/javascript'>
// Display order of devices. Tiles will be displayed in the order below,
// any devices you don't want to see you can comment the ID. (with // e.g. `//"Solar_Heater",` )
// If the device isn't listed below is will NOT be shown.
// For a complete list returned from your particular aqualinkd instance
// use the below URL and look at the ID value for each device.
// http://aqualink.ip.address/?command=devices
var devices = [
"Filter_Pump",
"Spa_Mode",
"Aux_1",
"Aux_2",
"Aux_3",
"Aux_4",
"Aux_5",
"Aux_6",
"Aux_7",
"Pool_Heater",
"Spa_Heater",
"SWG/Percent",
"SWG/PPM",
"Air",
"Pool_Water",
"Spa_Water",
"Freeze_Protect",
//"Solar_Heater",
];
// Add the light program names below, the name index MUST correlate to
// the number of pulses. ie (Blue Sea is #2 or 2 pulses)
var light_program = [
"Voodoo Lounge - Show",
"Blue Sea",
"Royal Blue",
"Afternoon Skies",
"Aqua Green",
"Emerald",
"Cloud White",
"Warm Red",
"Flamingo",
"Vivid Violet",
"Sangria",
"Twilight - Show",
"Tranquility - Show",
"Gemstone - Show",
"USA - Show",
"Mardi Gras - Show",
"Cool Cabaret - Show"
];
// Background image, delete or leave blank for solid color
//var background_url = "http://192.168.144.224/snap.jpeg";
//var background_url='background.jpg';
//var background_url='';
// Reload background image every X seconds.(useful if camera snapshot)
// 0 means only load once when page loads.
//var background_reload = 10;
</script>
<title>AqualinkD</title>
<meta name='viewport' content='width=device-width'>
<meta name='apple-mobile-web-app-capable' content='yes'>
<meta name='apple-mobile-web-app-status-bar-style' content='black'>
<link href="aqualinkd.png" rel="apple-touch-icon">
<link href="aqualinkd.png" rel="icon">
<script src="/config.js"></script>
<style>
:root {
--tile-width: 100px;
@ -85,15 +27,17 @@
--tile_grid-gap: 20px;
--tile_name-lineheight: 1.4;
*/
--slider-ball: 30;
--slider-highlight: #2196F3;
--slider-lowlight: #d3d3d3;
--slider-height: 20px;
--body_background: rgb(235, 235, 235);
--body_text: black;
--options_pane_background: rgb(245, 245, 245);
--options_pane_bordercolor: rgb(124, 124, 124);
--options_slider_ball: 30;
--options_slider_highlight: #2196F3;
--options_slider_lowlight: #d3d3d3;
--options_slider_height: 20px;
--head_background: rgb(43, 106, 143);
--head_text: #fff;
@ -304,7 +248,7 @@
left: 0;
right: 0;
bottom: 0;
background-color: var(--slider-lowlight);
background-color: var(--options_slider_lowlight);
-webkit-transition: .4s;
transition: .4s;
border-radius: 34px;
@ -312,8 +256,8 @@
.option_switch_slide:before {
position: absolute;
content: "";
height: calc(var(--slider-ball)*1px);
width: calc(var(--slider-ball)*1px);
height: calc(var(--options_slider_ball)*1px);
width: calc(var(--options_slider_ball)*1px);
left: 2px;
bottom: 2px;
background-color: white;
@ -322,10 +266,10 @@
border-radius: 50%;
}
input:checked+.option_switch_slide {
background-color: var(--slider-highlight);
background-color: var(--options_slider_highlight);
}
input:focus+.option_switch_slide {
box-shadow: 0 0 1px var(--slider-highlight);
box-shadow: 0 0 1px var(--options_slider_highlight);
}
input:checked+.option_switch_slide:before {
-webkit-transform: translateX(26px);
@ -335,28 +279,28 @@
.option_slider {
-webkit-appearance: none;
width: 300px;
height: var(--slider-height);
background: var(--slider-lowlight);
height: var(--options_slider_height);
background: var(--options_slider_lowlight);
outline: none;
-webkit-transition: .2s;
transition: opacity .2s;
border-radius: var(--slider-height);
border-radius: var(--options_slider_height);
}
.option_slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: calc(var(--slider-ball)*1px);
height: calc(var(--slider-ball)*1px);
background: var(--slider-highlight);
width: calc(var(--options_slider_ball)*1px);
height: calc(var(--options_slider_ball)*1px);
background: var(--options_slider_highlight);
cursor: pointer;
border-radius: calc(var(--slider-ball)*1px);
border-radius: calc(var(--options_slider_ball)*1px);
}
.option_slider::-moz-range-thumb {
width: calc(var(--slider-ball)*1px);
height: calc(var(--slider-ball)*1px);
background: var(--slider-highlight);
width: calc(var(--options_slider_ball)*1px);
height: calc(var(--options_slider_ball)*1px);
background: var(--options_slider_highlight);
cursor: pointer;
border-radius: var(--slider-height);
border-radius: var(--options_slider_height);
}
.options_title {
/*background-color: rgb(124, 124, 124);
@ -398,6 +342,7 @@
function init() {
setSizeSpecifics();
option = document.getElementById('pswitch_option_list');
try {
fLen = light_program.length;
for (i = 0; i < fLen; i++) {
var opt = document.createElement('option');
@ -405,16 +350,43 @@
opt.innerHTML = light_program[i];
option.appendChild(opt);
}
} catch (e) {}
document.getElementById('thermostat_options').classList.remove("hide");
document.getElementById('swg_options').classList.remove("hide");
document.getElementById('pswitch_options').classList.remove("hide");
setColors();
load_background();
showTileOptions(false);
startWebsockets();
resetBackgroundSize();
}
function setProp(name) {
if (typeof window[name] !== 'undefined')
document.documentElement.style.setProperty('--'+name, window[name]);
}
function setColors() {
setProp("tile_on_background");
setProp("tile_on_background-crap");
setProp("body_background");
setProp("body_text");
setProp("options_pane_background");
setProp("options_pane_bordercolor");
setProp("options_slider_highlight");
setProp("options_slider_lowlight");
setProp("head_background");
setProp("head_text");
setProp("error_background");
setProp("tile_background");
setProp("tile_text");
setProp("tile_on_background");
setProp("tile_on_text");
setProp("tile_status_text");
}
function setSizeSpecifics() {
var w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
@ -778,7 +750,7 @@
function createTile(object) {
if (object.name == 'NONE')
return;
if (devices.indexOf(object.id) < 0)
if ( typeof devices !== 'undefined' && devices.indexOf(object.id) < 0)
return;
if (object.type == 'switch' || object.type == 'switch_program') {
add_tile(object.id, object.name, object.state, 'switch', object.type, object.id + '-off.png', object.id + '-on.png');
@ -978,6 +950,7 @@
}
function deviceSort(a, b) {
try {
pa = devices.indexOf(a.id);
pb = devices.indexOf(b.id);
@ -985,6 +958,7 @@
return 1;
else if (pa < pb)
return -1;
} catch (e){}
return 0;
}

View File

@ -3,56 +3,6 @@
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1252'>
<script type='text/javascript'>
// Display order of devices. Tiles will be displayed in the order below,
// any devices you don't want to see you can comment the ID.
// If the device isn't listed below is will NOT be shown.
// For a complete list returned from your particular aqualinkd instance
// use the below URL and look at the ID value for each device.
// http://aqualink.ip.address/?command=devices
var devices = [
"Air",
"Pool_Water",
"Spa_Water",
"SWG/PPM",
"Filter_Pump",
"Spa_Mode",
"Aux_3",
"Aux_1",
"Aux_2",
"Aux_4",
"Aux_5",
"Aux_6",
"Aux_7",
"Pool_Heater",
"Spa_Heater",
"SWG/Percent",
"Freeze_Protect",
//"Solar_Heater",
];
// Add the light program names below, the name index MUST correlate to
// the number of pulses. ie (Blue Sea is #2 or 2 pulses)
var light_program = [
"Voodoo Lounge - Show",
"Blue Sea",
"Royal Blue",
"Afternoon Skies",
"Aqua Green",
"Emerald",
"Cloud White",
"Warm Red",
"Flamingo",
"Vivid Violet",
"Sangria",
"Twilight - Show",
"Tranquility - Show",
"Gemstone - Show",
"USA - Show",
"Mardi Gras - Show",
"Cool Cabaret - Show"
];
</script>
<title>AqualinkD</title>
<meta name='viewport' content='width=device-width'>
<meta name='apple-mobile-web-app-capable' content='yes'>
@ -60,6 +10,7 @@
<meta name='apple-mobile-web-app-status-bar-style' content='black'>
<link href="aqualinkd-white.png" rel="apple-touch-icon">
<link href="aqualinkd-white.png" rel="icon">
<script src="config.js"></script>
<style>
:root {
--diameter: 30px;
@ -227,6 +178,7 @@
var _width;
var _height;
var _displayNames = [];
function getSize() {
_width = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
@ -247,12 +199,15 @@
}
function deviceSort(a, b) {
try {
pa = devices.indexOf(a.id);
pb = devices.indexOf(b.id);
if (pa > pb)
return 1;
else if (pa < pb)
return -1;
} catch (e){}
return 0;
}
@ -263,7 +218,7 @@
data['devices'].sort(deviceSort);
for (var obj in data['devices']) {
if (document.getElementById(data['devices'][obj].id) == null) {
//_displayNames[data['devices'][obj].id.replace("Aux_", "AUX")] = data['devices'][obj].name;
_displayNames[data['devices'][obj].id.replace("Aux_", "AUX")] = data['devices'][obj].name;
//console.log("Create " + data['devices'][obj].id);
createTile(data['devices'][obj]);
}
@ -333,6 +288,8 @@
cell2.innerHTML = "<select id='selector_"+object.id+"' onchange='update(this);' class='options_selector'><option value='0'>Program</option></select>";
cell4.innerHTML = "<div class='switch'><input id='btn-toggle-"+object.id+"' name='"+object.id+"' class='btn-toggle btn-toggle-round' type='checkbox' onclick='update(this);'><label for='btn-toggle-"+object.id+"'></label></div>";
option = document.getElementById('selector_'+object.id);
try {
fLen = light_program.length;
for (i = 0; i < fLen; i++) {
var opt = document.createElement('option');
@ -340,6 +297,7 @@
opt.innerHTML = light_program[i];
option.appendChild(opt);
}
} catch (e) {}
setButton(object.id, object.state);
} else if (object.type == 'value') {
row.deleteCell(2);
@ -429,19 +387,22 @@
function setSlider(id, value) {
slider = document.getElementById("slider_"+id);
try{
if (slider.getAttribute('lock') == 'true')
return;
} catch (e) { return; }
slider.value = value;
setLabel(slider.getAttribute('output_id'), value);
}
function setLabel(id, value) {
label = document.getElementById(id);
if ( (label = document.getElementById(id)) != null) {
if (value != -999 && value != " ")
label.innerHTML = value+label.getAttribute('output_ext');
else
label.innerHTML = "--";
}
}