Updates
40
README.md
|
@ -3,9 +3,14 @@ linux daemon to control Aqualink RS pool controllers. Provides web UI, MQTT clie
|
|||
|
||||
### It does not, and will never provide any layer of security. NEVER directly expose the device running this software to the outside world, only indirectly through the use of Home Automation hub's or other securty measures, e.g. VPNs.
|
||||
|
||||
|
||||
## Donation
|
||||
If you like this project, you can buy me a cup of coffee :)
|
||||
<br>
|
||||
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](SEGN9UNS38TXJ)
|
||||
|
||||
## Builtin WEB Interface(s).
|
||||
### Curren web UI, (soon to be deprecated)
|
||||
<img src="extras/web_ui.png?raw=true" width="700"></img>
|
||||
|
||||
### New WEB interface
|
||||
<img src="extras/IMG_0251.PNG?raw=true" width="350"></img>
|
||||
* The layout & functionality are a from Appple HomeKit interface, only this works in any browser or mobile device.
|
||||
|
@ -14,9 +19,10 @@ linux daemon to control Aqualink RS pool controllers. Provides web UI, MQTT clie
|
|||
* Support live background imags (ie poll camera for still image every X seconds)
|
||||
* Like the old UI, if you load the web page in a mobile device browser, then save to desktop an app will be created for you.
|
||||
### Other web Interface options
|
||||
Simple :- (Just another option if you don't default)<br>
|
||||
Simple :- (Another option if you don't default)<br>
|
||||
<img src="extras/simple.png?raw=true" width="350"></img>
|
||||
|
||||
### Curren web UI, (soon to be deprecated)
|
||||
<img src="extras/web_ui.png?raw=true" width="700"></img>
|
||||
Simulator :- (Designed to mimic AqualinkRS6 All Button keypad)<br>
|
||||
<img src="extras/simulator.png?raw=true" width="550">
|
||||
|
||||
|
@ -26,11 +32,13 @@ Simulator :- (Designed to mimic AqualinkRS6 All Button keypad)<br>
|
|||
* Full support for homekit scenes, so can make a "Spa scene" to turn spa on, set spa heater particular temperature, turn spa blower on, etc etc)
|
||||
|
||||
## All Web interfaces.
|
||||
* http://aqualink.ip/ <- (Default, soon to be deprecated, too much hard coding)
|
||||
* http://aqualink.ip/hk <- (New, soon to be defaut)
|
||||
* http://aqualink.ip/ <- (New UI)
|
||||
* http://aqualink.ip/old <- (If you prefer the old UI, this is not maintained)
|
||||
* http://aqualink.ip/simple.html <- (Anothr opion if you don't like the above)
|
||||
* http://aqualink.ip/simulator.html <- (RS8 All Button Control Panel simulator)
|
||||
## Updates is Release 1.0e
|
||||
* Web UI out of Beta
|
||||
* MQTT fix setpoints
|
||||
* Simulator is now more stable.
|
||||
* updates to serial logger
|
||||
* UI updates
|
||||
|
@ -84,14 +92,15 @@ Manual install for init-d systems
|
|||
|
||||
|
||||
|
||||
## New WEB interface (in beta)
|
||||
* Doesn't work in MS Edge or MS Exploder browsers. (Firefox, Chrome, Safari & mobile versions of each) all seem to be fine.
|
||||
* use http://aqualink.ip.address/hk/ to access new UI
|
||||
## New WEB interface(s)
|
||||
* Doesn't work in MS Edge or MS Exploder browsers. (Firefox, Chrome, Safari & mobile versions of each) all seem to be fine, use the old or simple.html interface if using those browsers.
|
||||
* use http://aqualink.ip.address/ to access new UI
|
||||
* look in `<install_dir>/web/hk` hopefully customizing icon and background images are self explanatory.
|
||||
* icons should be around 50x50 pixles and in PNG format, background any size in JPG or just delete the file if you want solid color.
|
||||
* edit `<install_dir>/web/hk/index.html` there are two arrays that can be modified
|
||||
* `ignore_devices` just lis any device you don;t want to see in there.
|
||||
* edit `<install_dir>/web/config.js` there are two arrays that can be modified
|
||||
* `devices` List any device you want to see in there (commanent out the ones you don't), the odrer of that list will be the display order of devices.
|
||||
* `light_program` If you have a programable light (and it's configured in `aqualinkd.conf`), then list the light modes here.
|
||||
* Plenty of colors to change if you like.
|
||||
|
||||
|
||||
|
||||
|
@ -285,3 +294,12 @@ In meteohub create a new weatherstation plug-in, plug-in path is the path to the
|
|||
## Non Commercial Project
|
||||
All non commercial projects can be run using our open source code under GPLv2 licensing. As long as your project remains in this category there is no charge.
|
||||
See License.md for more details.
|
||||
|
||||
|
||||
|
||||
|
||||
# Donation
|
||||
If you like this project, you can buy me a cup of coffee :)
|
||||
<br>
|
||||
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](SEGN9UNS38TXJ)
|
||||
|
||||
|
|
36
aqualinkd.c
|
@ -833,43 +833,7 @@ void main_loop() {
|
|||
delayAckCnt++;
|
||||
}
|
||||
}
|
||||
/*
|
||||
// Wrap the mess just for sanity, the pre-process will clean it up.
|
||||
if (! _aqualink_data.simulate_panel ) {
|
||||
send_ack(rs_fd, pop_aq_cmd(&_aqualink_data));
|
||||
} else { // We are in simlator mode, ack get's complicated now.
|
||||
// NSF Need to come back and clean this mess up at some point.
|
||||
// Logic. if we are in programming mode or have a command to send, send a normal ack.
|
||||
// If we last message is waiting for an input "SELECT xxxxx", then sent a pause ack
|
||||
// pause ack strarts with around 12 ACK_SCREEN_BUSY_DISPLAY acks, then 50 ACK_SCREEN_BUSY acks
|
||||
// if we send a command (ie keypress), the whole count needs to end and go back to sending normal ack.
|
||||
// In code below, it jumps to sending ACK_SCREEN_BUSY, which still seems to work ok.
|
||||
if ( _aqualink_data.active_thread.thread_id != 0 ||
|
||||
strncasecmp(_aqualink_data.last_display_message, "SELECT", 6) != 0 ||
|
||||
get_aq_cmd_length() > 0 ||
|
||||
delayAckCnt > 62)
|
||||
{
|
||||
send_ack(rs_fd, pop_aq_cmd(&_aqualink_data));
|
||||
|
||||
if (delayAckCnt > 0)
|
||||
delayAckCnt = 12;
|
||||
else
|
||||
delayAckCnt = 0;
|
||||
} else {
|
||||
logMessage(LOG_NOTICE, "Sending display busy due to Simulator mode \n");
|
||||
|
||||
if (delayAckCnt < 12)
|
||||
send_extended_ack(rs_fd, ACK_SCREEN_BUSY_DISPLAY, pop_aq_cmd(&_aqualink_data));
|
||||
else if (delayAckCnt < 62)
|
||||
send_extended_ack(rs_fd, ACK_SCREEN_BUSY, pop_aq_cmd(&_aqualink_data));
|
||||
else {
|
||||
send_ack(rs_fd, pop_aq_cmd(&_aqualink_data));
|
||||
delayAckCnt = 62;
|
||||
}
|
||||
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) {
|
||||
|
|
After Width: | Height: | Size: 23 KiB |
|
@ -52,7 +52,7 @@
|
|||
*/
|
||||
// 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='hk/background.jpg';
|
||||
//var background_url='';
|
||||
// Reload background image every X seconds.(useful if camera snapshot)
|
||||
// 0 means only load once when page loads.
|
||||
|
|
1368
web/controller.html
|
@ -684,7 +684,7 @@
|
|||
if (status == 'flash') {
|
||||
tile.classList.add("flash");
|
||||
tile.classList.remove("on");
|
||||
text = "On delay";
|
||||
text = "Delay";
|
||||
} else {
|
||||
tile.classList.add("on");
|
||||
tile.classList.remove("flash");
|
||||
|
|
|
@ -0,0 +1,196 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset=utf-8 />
|
||||
<title>Feakes Inc, Aqualink RS control daemon</title>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
|
||||
<!--<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />-->
|
||||
<!--<meta name="viewport" content="width=device-width, user-scalable=yes, width=800"/>-->
|
||||
<!--<meta name="viewport" content="width=device-width, user-scalable=yes"/>-->
|
||||
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"/>
|
||||
<!--<link href="aqualinkd.png" rel="apple-touch-icon" sizes="180x180" />-->
|
||||
<!--<link href="aqualinkd.png" rel="icon" sizes="128x128" />-->
|
||||
<link href="aqualinkd.png" rel="apple-touch-icon">
|
||||
<link href="aqualinkd.png" rel="icon">
|
||||
<link rel="stylesheet" href="css/small_ff.css" type="text/css">
|
||||
</head>
|
||||
|
||||
<body ontouchmove="BlockMove(event);" style="background-color:black;">
|
||||
|
||||
<div id="main_div">
|
||||
|
||||
<div id="header_div" class='bgimg'>
|
||||
<div id="line1">
|
||||
<div id="title_div">Aqualink RS8</div>
|
||||
<div id="air_temp_title_div">Air Temp:</div>
|
||||
<div id="air_temp">000 F</div>
|
||||
<div id="battery_ok_div" class="battery_image_div"><img id="battery_ok" src="" style="visibility:hidden"></div>
|
||||
<div id="battery_low_div" class="battery_image_div"><img id="battery_low" src="" style="visibility:hidden"></div>
|
||||
<div id="battery_blank_div" class="battery_image_div"><img id="battery_blank" src=""></div>
|
||||
</div>
|
||||
<div id="line2">
|
||||
<div id="net_off_div" class="net_activity_div"><img id="net_off" src="" style="visibility:visible"></div>
|
||||
<div id="net_green_div" class="net_activity_div"><img id="net_green" src="" style="visibility:hidden"></div>
|
||||
<div id="net_yellow_div" class="net_activity_div"><img id="net_yellow" src="" style="visibility:hidden"></div>
|
||||
<div id="net_red_div" class="net_activity_div"><img id="net_red" src="" style="visibility:hidden"></div>
|
||||
<div id="messages_div" align="center"></div>
|
||||
<div id="date_time">00:00 PM 00/00/00 DDD</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="body_div" class="bgimg_body">
|
||||
<div id="pool_temp_div" class="body_sub_div">
|
||||
<div id="pool_temp_title" class="temp_title_div">Pool:</div>
|
||||
<div id="pool_temp" class="temp_val_div">000 F</div>
|
||||
<div class="control_button_div">
|
||||
<div class="led_button_div" id="filter_pump">
|
||||
<div class="led_div"><img id="Filter_Pump_off_status" src="" style="visibility:visible"></div>
|
||||
<div class="led_div"><img id="Filter_Pump_on_status" src="" style="visibility:hidden"></div>
|
||||
<div class="led_div"><img id="Filter_Pump_en_status" src="" style="visibility:hidden"></div>
|
||||
<div id="Filter_Pump" class='button black button_div' type="button" onclick="queue_command('Filter_Pump')">Filter Pump</div>
|
||||
</div>
|
||||
<div class="led_button_div" id="pool_htr">
|
||||
<div class="led_div"><img id="Pool_Heater_on_status" src="" style="visibility:hidden"></div>
|
||||
<div class="led_div"><img id="Pool_Heater_off_status" src="" style="visibility:visible"></div>
|
||||
<div class="led_div"><img id="Pool_Heater_en_status" src="" style="visibility:hidden"></div>
|
||||
<div id="Pool_Heater" class='button black button_div' type="button" onclick="queue_command('Pool_Heater')">Heater</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="pool_htr_set_pnt" class="set_pnt_val_div">000 F</div>
|
||||
<div class="set_pnt_button_div">
|
||||
<div class='button medium black set_pnt_button' type="button" onclick="incr_pool_htr('+')">+</div>
|
||||
<div class='button medium black set_pnt_button' type="button" onclick="incr_pool_htr('-')">-</div>
|
||||
</div>
|
||||
<div class="set_button_div"><div class='button black' type="button" onclick="set_temperature('POOL_HTR')">Set</div></div>
|
||||
</div>
|
||||
<div id="spa_temp_div" class="body_sub_div">
|
||||
<div id="spa_temp_title" class="temp_title_div">Spa:</div>
|
||||
<div id="spa_temp" class="temp_val_div">000 F</div>
|
||||
<div class="control_button_div">
|
||||
<div class="led_button_div" id="spa_mode">
|
||||
<div class="led_div"><img id="Spa_Mode_off_status" src="" style="visibility:visible"></div>
|
||||
<div class="led_div"><img id="Spa_Mode_on_status" src="" style="visibility:hidden"></div>
|
||||
<div class="led_div"><img id="Spa_Mode_en_status" src="" style="visibility:hidden"></div>
|
||||
<div id="Spa_Mode" class="button black button_div" type="button" onclick="queue_command('Spa_Mode')">Spa Mode</div>
|
||||
</div>
|
||||
<!--
|
||||
<div class="led_button_div" id="aux2">
|
||||
<div class="led_div"><img id="aux2_off_status" src="" style="visibility:visible"></div>
|
||||
<div class="led_div"><img id="aux2_on_status" src="" style="visibility:hidden"></div>
|
||||
<div id="Aux_2" class="button black button_div" type="button" onclick="queue_command('Aux_3')">Aux 2</div>
|
||||
</div>
|
||||
-->
|
||||
<div class="led_button_div" id="aux3">
|
||||
<div class="led_div"><img id="Aux_3_off_status" src="" style="visibility:visible"></div>
|
||||
<div class="led_div"><img id="Aux_3_on_status" src="" style="visibility:hidden"></div>
|
||||
<div class="led_div"><img id="Aux_3_en_status" src="" style="visibility:hidden"></div>
|
||||
<div id="Aux_3" class="button black button_div" type="button" onclick="queue_command('Aux_3')">Aux 3</div>
|
||||
</div>
|
||||
<div class="led_button_div" id="pool_htr">
|
||||
<div class="led_div"><img id="Spa_Heater_on_status" src="" style="visibility:hidden"></div>
|
||||
<div class="led_div"><img id="Spa_Heater_off_status" src="" style="visibility:visible"></div>
|
||||
<div class="led_div"><img id="Spa_Heater_en_status" src="" style="visibility:hidden"></div>
|
||||
<div id="Spa_Heater" class="button black button_div" type="button" onclick="queue_command('Spa_Heater')">Heater</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="spa_htr_set_pnt" class="set_pnt_val_div">000 F</div>
|
||||
<div class="set_pnt_button_div">
|
||||
<div class='button medium black set_pnt_button' type="button" onclick="incr_spa_htr('+')">+</div>
|
||||
<div class='button medium black set_pnt_button' type="button" onclick="incr_spa_htr('-')">-</div>
|
||||
</div>
|
||||
<div class="set_button_div"><div class='button black' type="button" onclick="set_temperature('SPA_HTR')">Set</div></div>
|
||||
</div>
|
||||
|
||||
<div id="solar_htr_div" class="body_sub_div">
|
||||
<!--
|
||||
<div class="solar_led_div"><img id="Solar_Heater_off_status" src="" style="visibility:visible"></div>
|
||||
<div class="solar_led_div"><img id="Solar_Heater_on_status" src="" style="visibility:hidden"></div>
|
||||
<div class="solar_led_div"><img id="Solar_Heater_en_status" src="" style="visibility:hidden"></div>
|
||||
<div id="Solar_Heater" onclick="queue_command('Solar_Heater')" class="button black" type="button">Solar Heater</div>
|
||||
-->
|
||||
<div class="select_pl_div">
|
||||
<select id="Light_Mode" class="select_pl_dd button black" onchange="set_light_mode(this.options[this.selectedIndex].value)">
|
||||
<option value="0">Pool Light Program</option>
|
||||
<option value="1">Voodoo Lounge - Show</option>
|
||||
<option value="2">Blue Sea</option>
|
||||
<option value="3">Royal Blue</option>
|
||||
<option value="4">Afternoon Skies</option>
|
||||
<option value="5">Aqua Green</option>
|
||||
<option value="6">Emerald</option>
|
||||
<option value="7">Cloud White</option>
|
||||
<option value="8">Warm Red</option>
|
||||
<option value="9">Flamingo</option>
|
||||
<option value="10">Vivid Violet</option>
|
||||
<option value="11">Sangria</option>
|
||||
<option value="12">Twilight - Show</option>
|
||||
<option value="13">Tranquility - Show</option>
|
||||
<option value="14">Gemstone - Show</option>
|
||||
<option value="15">USA - Show</option>
|
||||
<option value="16">Mardi Gras - Show</option>
|
||||
<option value="17">Cool Cabaret - Show</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="frz_protect_div" class="body_sub_div">
|
||||
<div id="frz_protect_title_div">Freeze Protection:</div>
|
||||
<div id="frz_protect_set_pnt">000 F</div>
|
||||
<div id="fp_set_pnt_button_div">
|
||||
<div class='button medium black set_pnt_button' type="button" onclick="incr_frz_protect('+')">+</div>
|
||||
<div class='button medium black set_pnt_button' type="button" onclick="incr_frz_protect('-')">-</div>
|
||||
</div>
|
||||
<div id="fp_set_button_div"><div class='button black' type="button" onclick="set_temperature('FRZ_PROTECT')">Set</div></div>
|
||||
</div>
|
||||
<div id="leds_div" class="body_sub_div">
|
||||
<div id="accessory_title" class="temp_title_div">Accessories:</div>
|
||||
<div class="control_button_div">
|
||||
<div class="led_button_div" id="aux1">
|
||||
<div class="led_div"><img id="Aux_1_off_status" src="" style="visibility:visible"></div>
|
||||
<div class="led_div"><img id="Aux_1_on_status" src="" style="visibility:hidden"></div>
|
||||
<div class="led_div"><img id="Aux_1_en_status" src="" style="visibility:hidden"></div>
|
||||
<div id="Aux_1" class="button black button_div" type="button" onclick="queue_command('Aux_1')">Aux 1</div>
|
||||
</div>
|
||||
<div class="led_button_div" id="aux2">
|
||||
<div class="led_div"><img id="Aux_2_off_status" src="" style="visibility:visible"></div>
|
||||
<div class="led_div"><img id="Aux_2_on_status" src="" style="visibility:hidden"></div>
|
||||
<div class="led_div"><img id="Aux_2_en_status" src="" style="visibility:hidden"></div>
|
||||
<div id="Aux_2" class="button black button_div" type="button" onclick="queue_command('Aux_2')">Aux 2</div>
|
||||
</div>
|
||||
<div class="led_button_div" id="aux4">
|
||||
<div class="led_div"><img id="Aux_4_off_status" src="" style="visibility:visible"></div>
|
||||
<div class="led_div"><img id="Aux_4_on_status" src="" style="visibility:hidden"></div>
|
||||
<div class="led_div"><img id="Aux_4_en_status" src="" style="visibility:hidden"></div>
|
||||
<div id="Aux_4" class="button black button_div" type="button" onclick="queue_command('Aux_4')">Aux 4</div>
|
||||
</div>
|
||||
<div class="led_button_div" id="aux5">
|
||||
<div class="led_div"><img id="Aux_5_off_status" src="" style="visibility:visible"></div>
|
||||
<div class="led_div"><img id="Aux_5_on_status" src="" style="visibility:hidden"></div>
|
||||
<div class="led_div"><img id="Aux_5_en_status" src="" style="visibility:hidden"></div>
|
||||
<div id="Aux_5" class="button black button_div" type="button" onclick="queue_command('Aux_5')">Aux 5</div>
|
||||
</div>
|
||||
<!--
|
||||
<div class="led_button_div" id="aux6">
|
||||
<div class="led_div"><img id="Aux_6_off_status" src="" style="visibility:visible"></div>
|
||||
<div class="led_div"><img id="Aux_6_on_status" src="" style="visibility:hidden"></div>
|
||||
<div id="aux6_button" class="button black button_div" type="button" onclick="queue_command('KEY_AUX6')">Aux 6</div>
|
||||
</div>
|
||||
<div class="led_button_div" id="aux7">
|
||||
<div class="led_div"><img id="Aux_7_off_status" src="" style="visibility:visible"></div>
|
||||
<div class="led_div"><img id="Aux_7_on_status" src="" style="visibility:hidden"></div>
|
||||
<div id="aux7_button" class="button black button_div" type="button" onclick="queue_command('KEY_AUX7')">Aux 7</div>
|
||||
</div>
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="footer_div" class="bgimg">
|
||||
</div><!-- /footer -->
|
||||
|
||||
</div><!-- /page -->
|
||||
|
||||
<script src="js/aqualink.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
@ -0,0 +1 @@
|
|||
controller.html
|