├── .DS_Store ├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── library-package-addition-request.md │ └── question---other.md ├── .gitignore ├── LICENSE ├── README.md ├── demo.js └── spanet.md /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlaT2512/spanet-api/f8131f19d112c5855bccd134beb1eb7e85f59576/.DS_Store -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help improve this repository 4 | title: '' 5 | labels: bug, help wanted 6 | assignees: BlaT2512 7 | 8 | --- 9 | 10 | **Offending file/documentation** 11 | Name of the code snippet which contains the error (e.g. code-demos/code-demo.ts), documentation file which contains the error (e.g. README file) or other. 12 | 13 | **Describe the bug** 14 | A clear and concise description of what the bug is. 15 | 16 | **To Reproduce** 17 | Steps to reproduce the behavior: 18 | 1. Go to '...' 19 | 2. Click on '....' 20 | 3. Scroll down to '....' 21 | 4. See error 22 | 23 | **Expected behavior** 24 | A clear and concise description of what you expected to happen. 25 | 26 | **Screenshots** 27 | If applicable, add screenshots to help explain your problem. 28 | 29 | **Desktop (please complete the following information):** 30 | - OS: [e.g. Windows 10] 31 | - Version [CHOOSE BASED ON ISSUE]: Node.JS & NPM version, Python & PIP version, Xcode and Swift version, Golang version or N/A. 32 | 33 | **Additional context** 34 | Add any other context about the problem here. 35 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/library-package-addition-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Library/package addition request 3 | about: Request your library/package to be added to the official list 4 | title: '' 5 | labels: Library/package addition 6 | assignees: BlaT2512 7 | 8 | --- 9 | 10 | **Name and URL to repository** 11 | The name of your library/package (e.g. homebridge-spanet) and the URL to the Github repository or public repo on another website. Also add the URL to the package manager it is listed on if applicable. 12 | 13 | **Describe your package/library** 14 | A clear and concise description of what platform/programming language it is created for, how it is installed and how much of the API it implements. 15 | 16 | **Code example** 17 | A well-commented simple example of using the various commands/calls of your library/package in any programming language you like (preferably one of the ones used for the examples: typescript, javascript, python, golang or swift). 18 | 19 | ``` 20 | // Place your code in here, between the 3 backticks for it to be formatted correctly 21 | ``` 22 | 23 | **Additional context** 24 | Add any other details or screenshots about the library/package here. 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question---other.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Question / Other 3 | about: Simply ask a question or detail other types of issues here 4 | title: '' 5 | labels: question 6 | assignees: BlaT2512 7 | 8 | --- 9 | 10 | **Question** 11 | Clear and concise question or description of your issue. 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | [Ll]ogs/ 33 | 34 | # Visual Studio 2015/2017 cache/options directory 35 | .vs/ 36 | # Uncomment if you have tasks that create the project's static files in wwwroot 37 | #wwwroot/ 38 | 39 | # Visual Studio 2017 auto generated files 40 | Generated\ Files/ 41 | 42 | # MSTest test Results 43 | [Tt]est[Rr]esult*/ 44 | [Bb]uild[Ll]og.* 45 | 46 | # NUnit 47 | *.VisualState.xml 48 | TestResult.xml 49 | nunit-*.xml 50 | 51 | # Build Results of an ATL Project 52 | [Dd]ebugPS/ 53 | [Rr]eleasePS/ 54 | dlldata.c 55 | 56 | # Benchmark Results 57 | BenchmarkDotNet.Artifacts/ 58 | 59 | # .NET Core 60 | project.lock.json 61 | project.fragment.lock.json 62 | artifacts/ 63 | 64 | # StyleCop 65 | StyleCopReport.xml 66 | 67 | # Files built by Visual Studio 68 | *_i.c 69 | *_p.c 70 | *_h.h 71 | *.ilk 72 | *.meta 73 | *.obj 74 | *.iobj 75 | *.pch 76 | *.pdb 77 | *.ipdb 78 | *.pgc 79 | *.pgd 80 | *.rsp 81 | *.sbr 82 | *.tlb 83 | *.tli 84 | *.tlh 85 | *.tmp 86 | *.tmp_proj 87 | *_wpftmp.csproj 88 | *.log 89 | *.vspscc 90 | *.vssscc 91 | .builds 92 | *.pidb 93 | *.svclog 94 | *.scc 95 | 96 | # Chutzpah Test files 97 | _Chutzpah* 98 | 99 | # Visual C++ cache files 100 | ipch/ 101 | *.aps 102 | *.ncb 103 | *.opendb 104 | *.opensdf 105 | *.sdf 106 | *.cachefile 107 | *.VC.db 108 | *.VC.VC.opendb 109 | 110 | # Visual Studio profiler 111 | *.psess 112 | *.vsp 113 | *.vspx 114 | *.sap 115 | 116 | # Visual Studio Trace Files 117 | *.e2e 118 | 119 | # TFS 2012 Local Workspace 120 | $tf/ 121 | 122 | # Guidance Automation Toolkit 123 | *.gpState 124 | 125 | # ReSharper is a .NET coding add-in 126 | _ReSharper*/ 127 | *.[Rr]e[Ss]harper 128 | *.DotSettings.user 129 | 130 | # TeamCity is a build add-in 131 | _TeamCity* 132 | 133 | # DotCover is a Code Coverage Tool 134 | *.dotCover 135 | 136 | # AxoCover is a Code Coverage Tool 137 | .axoCover/* 138 | !.axoCover/settings.json 139 | 140 | # Visual Studio code coverage results 141 | *.coverage 142 | *.coveragexml 143 | 144 | # NCrunch 145 | _NCrunch_* 146 | .*crunch*.local.xml 147 | nCrunchTemp_* 148 | 149 | # MightyMoose 150 | *.mm.* 151 | AutoTest.Net/ 152 | 153 | # Web workbench (sass) 154 | .sass-cache/ 155 | 156 | # Installshield output folder 157 | [Ee]xpress/ 158 | 159 | # DocProject is a documentation generator add-in 160 | DocProject/buildhelp/ 161 | DocProject/Help/*.HxT 162 | DocProject/Help/*.HxC 163 | DocProject/Help/*.hhc 164 | DocProject/Help/*.hhk 165 | DocProject/Help/*.hhp 166 | DocProject/Help/Html2 167 | DocProject/Help/html 168 | 169 | # Click-Once directory 170 | publish/ 171 | 172 | # Publish Web Output 173 | *.[Pp]ublish.xml 174 | *.azurePubxml 175 | # Note: Comment the next line if you want to checkin your web deploy settings, 176 | # but database connection strings (with potential passwords) will be unencrypted 177 | *.pubxml 178 | *.publishproj 179 | 180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 181 | # checkin your Azure Web App publish settings, but sensitive information contained 182 | # in these scripts will be unencrypted 183 | PublishScripts/ 184 | 185 | # NuGet Packages 186 | *.nupkg 187 | # NuGet Symbol Packages 188 | *.snupkg 189 | # The packages folder can be ignored because of Package Restore 190 | **/[Pp]ackages/* 191 | # except build/, which is used as an MSBuild target. 192 | !**/[Pp]ackages/build/ 193 | # Uncomment if necessary however generally it will be regenerated when needed 194 | #!**/[Pp]ackages/repositories.config 195 | # NuGet v3's project.json files produces more ignorable files 196 | *.nuget.props 197 | *.nuget.targets 198 | 199 | # Microsoft Azure Build Output 200 | csx/ 201 | *.build.csdef 202 | 203 | # Microsoft Azure Emulator 204 | ecf/ 205 | rcf/ 206 | 207 | # Windows Store app package directories and files 208 | AppPackages/ 209 | BundleArtifacts/ 210 | Package.StoreAssociation.xml 211 | _pkginfo.txt 212 | *.appx 213 | *.appxbundle 214 | *.appxupload 215 | 216 | # Visual Studio cache files 217 | # files ending in .cache can be ignored 218 | *.[Cc]ache 219 | # but keep track of directories ending in .cache 220 | !?*.[Cc]ache/ 221 | 222 | # Others 223 | ClientBin/ 224 | ~$* 225 | *~ 226 | *.dbmdl 227 | *.dbproj.schemaview 228 | *.jfm 229 | *.pfx 230 | *.publishsettings 231 | orleans.codegen.cs 232 | 233 | # Including strong name files can present a security risk 234 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 235 | #*.snk 236 | 237 | # Since there are multiple workflows, uncomment next line to ignore bower_components 238 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 239 | #bower_components/ 240 | 241 | # RIA/Silverlight projects 242 | Generated_Code/ 243 | 244 | # Backup & report files from converting an old project file 245 | # to a newer Visual Studio version. Backup files are not needed, 246 | # because we have git ;-) 247 | _UpgradeReport_Files/ 248 | Backup*/ 249 | UpgradeLog*.XML 250 | UpgradeLog*.htm 251 | ServiceFabricBackup/ 252 | *.rptproj.bak 253 | 254 | # SQL Server files 255 | *.mdf 256 | *.ldf 257 | *.ndf 258 | 259 | # Business Intelligence projects 260 | *.rdl.data 261 | *.bim.layout 262 | *.bim_*.settings 263 | *.rptproj.rsuser 264 | *- [Bb]ackup.rdl 265 | *- [Bb]ackup ([0-9]).rdl 266 | *- [Bb]ackup ([0-9][0-9]).rdl 267 | 268 | # Microsoft Fakes 269 | FakesAssemblies/ 270 | 271 | # GhostDoc plugin setting file 272 | *.GhostDoc.xml 273 | 274 | # Node.js Tools for Visual Studio 275 | .ntvs_analysis.dat 276 | node_modules/ 277 | package-lock.json 278 | 279 | # Visual Studio 6 build log 280 | *.plg 281 | 282 | # Visual Studio 6 workspace options file 283 | *.opt 284 | 285 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 286 | *.vbw 287 | 288 | # Visual Studio LightSwitch build output 289 | **/*.HTMLClient/GeneratedArtifacts 290 | **/*.DesktopClient/GeneratedArtifacts 291 | **/*.DesktopClient/ModelManifest.xml 292 | **/*.Server/GeneratedArtifacts 293 | **/*.Server/ModelManifest.xml 294 | _Pvt_Extensions 295 | 296 | # Paket dependency manager 297 | .paket/paket.exe 298 | paket-files/ 299 | 300 | # FAKE - F# Make 301 | .fake/ 302 | 303 | # CodeRush personal settings 304 | .cr/personal 305 | 306 | # Python Tools for Visual Studio (PTVS) 307 | __pycache__/ 308 | *.pyc 309 | 310 | # Cake - Uncomment if you are using it 311 | # tools/** 312 | # !tools/packages.config 313 | 314 | # Tabs Studio 315 | *.tss 316 | 317 | # Telerik's JustMock configuration file 318 | *.jmconfig 319 | 320 | # BizTalk build output 321 | *.btp.cs 322 | *.btm.cs 323 | *.odx.cs 324 | *.xsd.cs 325 | 326 | # OpenCover UI analysis results 327 | OpenCover/ 328 | 329 | # Azure Stream Analytics local run output 330 | ASALocalRun/ 331 | 332 | # MSBuild Binary and Structured Log 333 | *.binlog 334 | 335 | # NVidia Nsight GPU debugger configuration file 336 | *.nvuser 337 | 338 | # MFractors (Xamarin productivity tool) working folder 339 | .mfractor/ 340 | 341 | # Local History for Visual Studio 342 | .localhistory/ 343 | 344 | # BeatPulse healthcheck temp database 345 | healthchecksdb 346 | 347 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 348 | MigrationBackup/ 349 | 350 | # Ionide (cross platform F# VS Code tools) working folder 351 | .ionide/ 352 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Blake Tourneur 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | # SpaNET API 6 | This documentation allows you to control SpaNET WiFi controllers which can be found in Vortex/SpaNET spa's. If your spa works with the SpaNET SpaLINK app, this documentation will help you automate and integrate control of it into your own code. 7 | 8 | # Plugins & Libraries 9 | * Homebridge: homebridge-spanet 10 | [Github](https://github.com/BlaT2512/homebridge-spanet) 11 | 12 | # Credits 13 | Thanks to [@devbobo's](https://github.com/devbobo) original work and inspiration to make this full API. 14 | Also thanks to [@thehoff](https://github.com/thehoff) for contributions and assistance developing this. 15 | 16 | # API (DEPRECATED) 17 | ### See [spanet.md](spanet.md) 18 | Note - SpaNET have now moved to a much easier to work with endpoint-based API, see https://github.com/BlaT2512/spanet-api/issues/4 19 | 20 | Please email for the new Swagger documentation and/or sample code 21 | 22 | # FAQs 23 | **Q - Which spa companies produce spa's using the SpaNET spa controller and are compatible with the SmartLINK module?** 24 | SpaNET spa controllers can be found in a variety of Vortex, Oasis and many other brand spas/swim spas/spa pools. 25 | 26 | **Q - If my spa has a compatible SpaNET controller without WiFi, can I make my own SmartLINK module?** 27 | This should be possible, and testing to successfully make and program a homemade SmartLINK compatible module is currently underway. This will be updated if it is completed and a documentation is decided to be released about it. 28 | -------------------------------------------------------------------------------- /demo.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | 3 | const email = 'YOUR SMARTLINK EMAIL'; 4 | const password = 'YOUR SMARTLINK PASSWORD'; 5 | 6 | // Create the base API details 7 | const spanetapi = axios.create ({ 8 | baseURL: 'https://app.spanet.net.au/api', 9 | timeout: 2000, 10 | headers: {'User-Agent': 'SpaNET/2 CFNetwork/1465.1 Darwin/23.0.0'}, 11 | validateStatus: function (status) { 12 | return status === 200; 13 | }, 14 | }); 15 | 16 | // Post to the authenticate endpoint with email and password in JSON body 17 | spanetapi.post('/Login/Authenticate', { 18 | 'email': email, 19 | 'password': password, 20 | 'userDeviceId': 'Any random string / UUID', 21 | 'language': 'en', 22 | }) 23 | .then((response) => { 24 | const accessToken = response.data.access_token; 25 | console.log('Logged in successfully, Access Token', accessToken); 26 | 27 | // Now use the auth token in authorization header for further requests made 28 | spanetapi.defaults.headers.common['Authorization'] = 'Bearer ' + accessToken; 29 | 30 | // Get from the devices endpoint to list your spas 31 | spanetapi.get('/Devices') 32 | .then((response) => { 33 | console.log('Devices on your account:', response.data.devices); 34 | 35 | // Use the first spa and get the current temperature 36 | if (response.data.devices.length > 0) { 37 | const spa = response.data.devices[0]; 38 | console.log('Using spa "' + spa.name + '"'); 39 | 40 | spanetapi.get('/Dashboard/' + spa.id) 41 | .then((response) => { 42 | console.log('Current water temperature is', response.data.setTemperature / 10); 43 | }) 44 | .catch((error) => { 45 | console.log('Failed to get details of this spa', error); 46 | }); 47 | 48 | } else { 49 | console.log('There are no spas on your account'); 50 | } 51 | }) 52 | .catch((error) => { 53 | console.log('Failed to get list of spas', error); 54 | }); 55 | }) 56 | .catch((error) => { 57 | console.log('Failed to authenticate, check email and password?', error); 58 | }); 59 | -------------------------------------------------------------------------------- /spanet.md: -------------------------------------------------------------------------------- 1 | # SpaNET SpaLINK API 2 | Thanks to [@devbobo's](https://gist.github.com/devbobo) original work and assistance of [@thehoff](https://github.com/thehoff) 3 | 4 | - [1. Logging into SpaNET](#1-logging-into-spanet) 5 | - [1.1. Obtaining Login Password](#11-obtaining-login-password) 6 | - [1.2. Making Login Request](#12-making-login-request) 7 | - [2. Spa Socket](#2-spa-socket) 8 | - [2.1. Spa Socket Request](#21-spa-socket-request) 9 | - [2.2. Connecting to Spa Socket](#22-connecting-to-spa-socket) 10 | - [3. Spa Status](#3-spa-status) 11 | - [4. Commands](#4-commands) 12 | - [4.1. Spa](#41-spa) 13 | - [4.1.1. Temperature](#411-temperature) 14 | - [4.1.2. Clean/Santise](#412-cleansantise) 15 | - [4.2. Pumps](#42-pumps) 16 | - [4.2.1. Pump 1](#421-pump-1) 17 | - [4.2.2. Pump 2](#422-pump-2) 18 | - [4.2.3. Pump 3](#423-pump-3) 19 | - [4.2.4. Pump 4](#424-pump-4) 20 | - [4.2.5. Pump 5](#425-pump-5) 21 | - [4.3. Blower](#43-blower) 22 | - [4.3.1. Blower](#431-blower) 23 | - [4.3.2. Blower Variable Speed](#432-blower-variable-speed) 24 | - [4.4. Lights](#44-lights) 25 | - [4.4.1. Lights](#441-lights) 26 | - [4.4.2. Lights Off](#442-lights-off) 27 | - [4.4.3. Lights mode](#443-lights-mode) 28 | - [4.4.4. Lights brightness](#444-lights-brightness) 29 | - [4.4.5. Lights effect speed](#445-lights-effect-speed) 30 | - [4.4.6. Lights colour](#446-lights-colour) 31 | - [4.5. Settings](#45-settings) 32 | - [4.5.1. Operation Mode](#451-operation-mode) 33 | - [4.5.2. Filtration](#452-filtration) 34 | - [4.5.2.1. Filtration Runtime](#4521-filtration-runtime) 35 | - [4.5.2.2. Time Between Filtration Cycles](#4522-time-between-filtration-cycles) 36 | - [4.5.3. Sleep Timers](#453-sleep-timers) 37 | - [4.5.3.1. Sleep Timer 1 State](#4531-sleep-timer-1-state) 38 | - [4.5.3.2. Sleep Timer 1 Start Time](#4532-sleep-timer-1-start-time) 39 | - [4.5.3.3. Sleep Timer 1 Finish Time](#4533-sleep-timer-1-finish-time) 40 | - [4.5.3.4. Sleep Timer 2 State](#4534-sleep-timer-2-state) 41 | - [4.5.3.5. Sleep Timer 2 Start Time](#4535-sleep-timer-2-start-time) 42 | - [4.5.3.6. Sleep Timer 2 Finish Time](#4536-sleep-timer-2-finish-time) 43 | - [4.5.4. Power Save](#454-power-save) 44 | - [4.5.4.1. Power Save](#4541-power-save) 45 | - [4.5.4.2. Peak Power Time Start](#4542-peak-power-time-start) 46 | - [4.5.4.3. Peak Power Time End](#4543-peak-power-time-end) 47 | - [4.5.5. Auto Santise](#455-auto-santise) 48 | - [4.5.6. Time Out Duration](#456-time-out-duration) 49 | - [4.5.7. Heat Pump Mode](#457-heat-pump-mode) 50 | - [4.5.7.1. Heat Pump Mode](#4571-heat-pump-mode) 51 | - [4.5.7.2. SV Element Boost](#4572-sv-element-boost) 52 | - [4.5.8. Set Time/Date](#458-set-timedate) 53 | - [4.5.8.1. Time: Hour](#4581-time-hour) 54 | - [4.5.8.2. Time: Minute](#4582-time-minute) 55 | - [4.5.8.3. Date: Year](#4583-date-year) 56 | - [4.5.8.4. Date: Month](#4584-date-month) 57 | - [4.5.8.5. Date: Day](#4585-date-day) 58 | - [4.5.9. Support Mode](#459-support-mode) 59 | - [4.5.10. Lock Mode](#4510-lock-mode) 60 | - [4.5.11. Notification](#4511-notification) 61 | - [5. Raw command list](#5-raw-command-list) 62 | - [6. Reading Spa Data](#6-reading-spa-data) 63 | - [6.1. Spa Status](#61-spa-status) 64 | - [6.1.1. Set Temperature](#611-set-temperature) 65 | - [6.1.2. Water Temperature](#612-water-temperature) 66 | - [6.1.3. Heater Temperature](#613-heater-temperature) 67 | - [6.1.4. Pool Temperature](#614-pool-temperature) 68 | - [6.1.5. Heating](#615-heating) 69 | - [6.1.6. Cleaning (UV/Ozone running)](#616-cleaning-uvozone-running) 70 | - [6.1.7. Cleaning (Sanitise cycle running)](#617-cleaning-sanitise-cycle-running) 71 | - [6.1.8. Auto](#618-auto) 72 | - [6.1.9. Sleeping](#619-sleeping) 73 | - [6.1.10. Water Present](#6110-water-present) 74 | - [6.1.11. Awake Minutes Remaining](#6111-awake-minutes-remaining) 75 | - [6.1.12. Filter Pump Runtime Total](#6112-filter-pump-runtime-total) 76 | - [6.1.13. Filter Pump Req Minutes](#6113-filter-pump-req-minutes) 77 | - [6.1.14. Load Timeout](#6114-load-timeout) 78 | - [6.1.15. Load Timeout](#6115-load-timeout) 79 | - [6.1.16. Hour Meter](#6116-hour-meter) 80 | - [6.1.17. Relay 1](#6117-relay-1) 81 | - [6.1.18. Relay 2](#6118-relay-2) 82 | - [6.1.19. Relay 3](#6119-relay-3) 83 | - [6.1.20. Relay 4](#6120-relay-4) 84 | - [6.1.21. Relay 5](#6121-relay-5) 85 | - [6.1.22. Relay 6](#6122-relay-6) 86 | - [6.1.23. Relay 7](#6123-relay-7) 87 | - [6.1.24. Relay 8](#6124-relay-8) 88 | - [6.1.25. Relay 9](#6125-relay-9) 89 | - [6.2. Pumps](#62-pumps) 90 | - [6.2.1. Pump 1](#621-pump-1) 91 | - [6.2.1.1. Pump 1](#6211-pump-1) 92 | - [6.2.1.2. Pump 1 Installation State](#6212-pump-1-installation-state) 93 | - [6.2.2. Pump 2](#622-pump-2) 94 | - [6.2.2.1. Pump 2](#6221-pump-2) 95 | - [6.2.2.2. Pump 2 Installation State](#6222-pump-2-installation-state) 96 | - [6.2.2.3. Pump 2 Switch On Status](#6223-pump-2-switch-on-status) 97 | - [6.2.3. Pump 3](#623-pump-3) 98 | - [6.2.3.1. Pump 3](#6231-pump-3) 99 | - [6.2.3.2. Pump 3 Installation State](#6232-pump-3-installation-state) 100 | - [6.2.3.3. Pump 3 Switch On Status](#6233-pump-3-switch-on-status) 101 | - [6.2.4. Pump 4](#624-pump-4) 102 | - [6.2.4.1. Pump 4](#6241-pump-4) 103 | - [6.2.4.2. Pump 4 Installation State](#6242-pump-4-installation-state) 104 | - [6.2.4.3. Pump 4 Switch On Status](#6243-pump-4-switch-on-status) 105 | - [6.2.5. Pump 5](#625-pump-5) 106 | - [6.2.5.1. Pump 5 Installation State](#6251-pump-5-installation-state) 107 | - [6.2.5.2. Pump 5 Switch On Status](#6252-pump-5-switch-on-status) 108 | - [6.3. Blower](#63-blower) 109 | - [6.3.1. Blower](#631-blower) 110 | - [6.3.2. Blower Variable Speed](#632-blower-variable-speed) 111 | - [6.4. Lights](#64-lights) 112 | - [6.4.1. Lights](#641-lights) 113 | - [6.4.2. Lights Mode](#642-lights-mode) 114 | - [6.4.3. Lights Brightness](#643-lights-brightness) 115 | - [6.4.4. Lights Effect Speed](#644-lights-effect-speed) 116 | - [6.4.5. Lights Colour](#645-lights-colour) 117 | - [6.5. Settings](#65-settings) 118 | - [6.5.1. Operation Mode](#651-operation-mode) 119 | - [6.5.2. Filtration](#652-filtration) 120 | - [6.5.2.1. Filtration Runtime](#6521-filtration-runtime) 121 | - [6.5.2.2. Time Between Filtration Cycles](#6522-time-between-filtration-cycles) 122 | - [6.5.3. Sleep Timers](#653-sleep-timers) 123 | - [6.5.3.1. Sleep Timer 1 State](#6531-sleep-timer-1-state) 124 | - [6.5.3.2. Sleep Timer 1 Start Time](#6532-sleep-timer-1-start-time) 125 | - [6.5.3.3. Sleep Timer 1 Finish Time](#6533-sleep-timer-1-finish-time) 126 | - [6.5.3.4. Sleep Timer 2 State](#6534-sleep-timer-2-state) 127 | - [6.5.3.5. Sleep Timer 2 Start Time](#6535-sleep-timer-2-start-time) 128 | - [6.5.3.6. Sleep Timer 2 Finish Time](#6536-sleep-timer-2-finish-time) 129 | - [6.5.4. Power Save](#654-power-save) 130 | - [6.5.4.1. Power Save](#6541-power-save) 131 | - [6.5.4.2. Peak Power Time Start](#6542-peak-power-time-start) 132 | - [6.5.4.3. Peak Power Time End](#6543-peak-power-time-end) 133 | - [6.5.5. Auto Sanitise](#655-auto-sanitise) 134 | - [6.5.6. Time Out Mode](#656-time-out-mode) 135 | - [6.5.7. Heat Pump Mode](#657-heat-pump-mode) 136 | - [6.5.7.1. Heat Pump Mode](#6571-heat-pump-mode) 137 | - [6.5.7.2. SV Element Boost](#6572-sv-element-boost) 138 | - [6.5.8. Time/Date](#658-timedate) 139 | - [6.5.8.1. Time: Hour](#6581-time-hour) 140 | - [6.5.8.2. Time: Minute](#6582-time-minute) 141 | - [6.5.8.3. Date: Year](#6583-date-year) 142 | - [6.5.8.4. Date: Month](#6584-date-month) 143 | - [6.5.8.5. Date: Day](#6585-date-day) 144 | - [6.5.9. Support Mode](#659-support-mode) 145 | - [6.5.10. Lock Mode](#6510-lock-mode) 146 | - [6.5.11. Notification](#6511-notification) 147 | - [6.6. Operating Environment](#66-operating-environment) 148 | - [6.6.1. Power](#661-power) 149 | - [6.6.1.1. Supply Volts](#6611-supply-volts) 150 | - [6.6.1.2. Current Draw](#6612-current-draw) 151 | - [6.6.1.3. Variable Heat Element Current Draw](#6613-variable-heat-element-current-draw) 152 | - [6.6.2. Environment](#662-environment) 153 | - [6.6.2.1. Case Temperature](#6621-case-temperature) 154 | - [6.7. OEM Settings](#67-oem-settings) 155 | - [6.7.1. Current Limit](#671-current-limit) 156 | - [6.7.2. Load Shed](#672-load-shed) 157 | 158 | 159 | ## 1. Logging into SpaNET 160 | ### 1.1. Obtaining Login Password 161 | To obtain your Encrypted Password for use below, use the utility for your platform from @thehoff's [SpaNET Password Hash Generator](https://github.com/thehoff/spanet-password-creator) 162 | 163 | ### 1.2. Making Login Request 164 | `POST` https://api.spanet.net.au/api/MemberLogin 165 | 166 | *Request:* 167 | ```javascript 168 | { 169 | "login": [Username], 170 | "api_key": "4a483b9a-8f02-4e46-8bfa-0cf5732dbbd5", 171 | "password": [Encrypted Password] 172 | } 173 | ``` 174 | *Response:* 175 | ```javascript 176 | { 177 | "data": { 178 | "email": null, 179 | "id_member": [MemberId], 180 | "login": [Username], 181 | "name": null, 182 | "password": null, 183 | "notification_enabled": 1, 184 | "id_session": [SessionId] 185 | }, 186 | "error": null, 187 | "error_code": null, 188 | "message": null, 189 | "success": true 190 | } 191 | ``` 192 | 193 | ## 2. Spa Socket 194 | ### 2.1. Spa Socket Request 195 | `GET` https://api.spanet.net.au/api/membersockets?id_member=[MemberId]&id_session=[SessionId] 196 | 197 | *Response:* 198 | ```javascript 199 | { 200 | "data": { 201 | "email": null, 202 | "id_member": 0, 203 | "login": null, 204 | "name": null, 205 | "password": null, 206 | "notification_enabled": 0, 207 | "id_session": null 208 | }, 209 | "sockets": [{ 210 | "id": [SocketId], 211 | "active": "1", 212 | "id_member": [MemberId], 213 | "id_sockets": [SocketId], 214 | "mac_addr": [MacAddress], 215 | "moburl": [WebSocketUrl]:9090, 216 | "name": [SpaName], 217 | "spaurl": [WebSocketUrl]:9090, 218 | "signalStrength": -69, 219 | "error": false 220 | }], 221 | "error": null, 222 | "error_code": null, 223 | "message": "", 224 | "success": true 225 | } 226 | ``` 227 | 228 | ### 2.2. Connecting to Spa Socket 229 | Open TCP Socket to `[WebUrl]` port `9090`, then send: 230 | 231 | *Request:* 232 | ``` 233 | 234 | ``` 235 | 236 | *Response:* 237 | ``` 238 | Successfully connected 239 | ``` 240 | 241 | ## 3. Spa Status 242 | Get the current status of the spa. 243 | 244 | *Request:* 245 | ``` 246 | RF\n 247 | ``` 248 | 249 | *Sample Response:* 250 | ``` 251 | RF: 252 | ,R2,18,250,51,70,4,13,50,55,19,6,2020,376,9999,1,0,490,207,34,6000,602,23,20,0,0,0,0,44,35,45,: 253 | ,R3,32,1,4,4,4,SW V5 17 05 31,SV3,18480001,20000826,1,0,0,0,0,0,NA,7,0,470,Filtering,4,0,7,7,0,0,: 254 | ,R4,NORM,0,0,0,1,0,3547,4,20,4500,7413,567,1686,0,8388608,0,0,5,0,98,0,10084,4,80,100,0,0,4,: 255 | ,R5,0,1,0,1,0,0,0,0,0,0,1,0,1,0,376,0,3,4,0,0,0,0,0,1,2,6,: 256 | ,R6,1,5,30,2,5,8,1,360,1,0,3584,5120,127,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,: 257 | ,R7,2304,0,1,1,1,0,1,0,0,0,253,191,253,240,483,125,77,1,0,0,0,23,200,1,0,1,31,32,35,100,5,: 258 | ,R9,F1,255,0,0,0,0,0,0,0,0,0,0,: 259 | ,RA,F2,0,0,0,0,0,0,255,0,0,0,0,: 260 | ,RB,F3,0,0,0,0,0,0,0,0,0,0,0,: 261 | ,RC,0,1,1,0,0,0,0,0,0,2,0,0,1,0,: 262 | ,RE,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,-4,13,30,8,5,1,0,0,0,0,0,:* 263 | ,RG,1,1,1,1,1,1,1-1-014,1-1-01,1-1-01,0-,0-,0,:* 264 | ``` 265 | Full documentation of parsing this data is below at section 7 266 | 267 | ## 4. Commands 268 | NOTE - Make sure to include newline (\n) after all websocket commands 269 | ### 4.1. Spa 270 | #### 4.1.1. Temperature 271 | Set the target temperature for the spa. 272 | 273 | *Request:* 274 | ``` 275 | W40:nnn 276 | ``` 277 | 278 | *Response:* 279 | ``` 280 | nnn 281 | ``` 282 | where `nnn` denotes temperature in celsius * 10 between `5.0`-`41.0`c (ie: for 35.6c, `nnn` = 356) 283 | 284 | #### 4.1.2. Clean/Santise 285 | Start (or cancel) a Clean cycle. 286 | 287 | *Request:* 288 | ``` 289 | W12 290 | ``` 291 | 292 | *Response:* 293 | ``` 294 | W12 295 | ``` 296 | 297 | ### 4.2. Pumps 298 | #### 4.2.1. Pump 1 299 | Control Pump 1. 300 | 301 | *Request:* 302 | ``` 303 | S22:n 304 | ``` 305 | 306 | *Response:* 307 | ``` 308 | S22-OK 309 | ``` 310 | where `n` denotes 311 | * `0` - Off 312 | * `1` - On 313 | * `4` - Auto 314 | 315 | #### 4.2.2. Pump 2 316 | Control Pump 2. 317 | 318 | *Request:* 319 | ``` 320 | S23:n 321 | ``` 322 | 323 | *Response:* 324 | ``` 325 | S23-OK 326 | ``` 327 | where `n` denotes 328 | * `0` - Off 329 | * `1` - On 330 | 331 | #### 4.2.3. Pump 3 332 | Control Pump 3. 333 | 334 | *Request:* 335 | ``` 336 | S24:n 337 | ``` 338 | 339 | *Response:* 340 | ``` 341 | S24-OK 342 | ``` 343 | where `n` denotes 344 | * `0` - Off 345 | * `1` - On 346 | 347 | #### 4.2.4. Pump 4 348 | Control Pump 4, if installed (section 6.2 shows how to check whether pumps are installed). 349 | 350 | *Request:* 351 | ``` 352 | S25:n 353 | ``` 354 | 355 | *Response:* 356 | ``` 357 | S25-OK 358 | ``` 359 | where `n` denotes 360 | * `0` - Off 361 | * `1` - On 362 | 363 | #### 4.2.5. Pump 5 364 | Control Pump 5, if installed (section 6.2 shows how to check whether pumps are installed). 365 | 366 | *Request:* 367 | ``` 368 | S26:n 369 | ``` 370 | 371 | *Response:* 372 | ``` 373 | S26-OK 374 | ``` 375 | where `n` denotes 376 | * `0` - Off 377 | * `1` - On 378 | 379 | ### 4.3. Blower 380 | #### 4.3.1. Blower 381 | Control the Blower. 382 | 383 | *Request:* 384 | ``` 385 | S28:n 386 | ``` 387 | 388 | *Response:* 389 | ``` 390 | S28-OK 391 | ``` 392 | where `n` denotes 393 | * `0` - Variable 394 | * `1` - Ramp 395 | * `2` - Off 396 | 397 | #### 4.3.2. Blower Variable Speed 398 | Set the variable speed of the blower. 399 | 400 | *Request:* 401 | ``` 402 | S13:n 403 | ``` 404 | 405 | *Response:* 406 | ``` 407 | n S13 408 | ``` 409 | where `n` denotes speed `1`-`5` 410 | 411 | ### 4.4. Lights 412 | #### 4.4.1. Lights 413 | Toggle the state of the lights (on/off). Other commands should be sent first to set the brightness, mode, effect speed and colour if applicable otherwise last used settings will be applied. 414 | 415 | *Request:* 416 | ``` 417 | W14 418 | ``` 419 | 420 | *Response:* 421 | ``` 422 | W14 423 | ``` 424 | 425 | #### 4.4.2. Lights Off 426 | Turn all lights off. 427 | 428 | *Request:* 429 | ``` 430 | S11 431 | ``` 432 | 433 | *Response:* 434 | ``` 435 | S11 436 | ``` 437 | 438 | #### 4.4.3. Lights mode 439 | Set the mode for the lights. 440 | 441 | *Request:* 442 | ``` 443 | S07:n 444 | ``` 445 | 446 | *Response:* 447 | ``` 448 | n S07 449 | ``` 450 | where `n` denotes 451 | * `0` - White 452 | * `1` - Colour 453 | * `2` - Fade 454 | * `3` - Step 455 | * `4` - Party 456 | 457 | #### 4.4.4. Lights brightness 458 | Set the brightness for the lights. 459 | 460 | *Request:* 461 | ``` 462 | S08:n 463 | ``` 464 | 465 | *Response:* 466 | ``` 467 | n S08 468 | ``` 469 | where `n` denotes brightness `1`-`5` 470 | 471 | #### 4.4.5. Lights effect speed 472 | Set the effect speed for the lights. Only applicable for modes fade, step and party. 473 | 474 | *Request:* 475 | ``` 476 | S09:n 477 | ``` 478 | 479 | *Response:* 480 | ``` 481 | n S09 482 | ``` 483 | where `n` denotes effect speed `1`-`5` 484 | 485 | #### 4.4.6. Lights colour 486 | Set the colour for the lights. Only applicable for colour mode. 487 | 488 | *Request:* 489 | ``` 490 | S10:n 491 | ``` 492 | 493 | *Response:* 494 | ``` 495 | n S10 496 | ``` 497 | where `n` denotes colour `0`-`30` 498 | 499 | ### 4.5. Settings 500 | #### 4.5.1. Operation Mode 501 | Set the operation mode. 502 | 503 | *Request:* 504 | ``` 505 | W66:n 506 | ``` 507 | 508 | *Response:* 509 | ``` 510 | n 511 | ``` 512 | where `n` denotes 513 | * `0` - Norm 514 | * `1` - Econ 515 | * `2` - Away 516 | * `3` - Week 517 | 518 | #### 4.5.2. Filtration 519 | ##### 4.5.2.1. Filtration Runtime 520 | Set the filtration runtime. 521 | 522 | *Request:* 523 | ``` 524 | W60:n 525 | ``` 526 | 527 | *Response:* 528 | ``` 529 | n 530 | ``` 531 | where `n` denotes hours between `1`-`24`. 532 | 533 | ##### 4.5.2.2. Time Between Filtration Cycles 534 | Set the time between filtration cycles. 535 | 536 | *Request:* 537 | ``` 538 | W90:n 539 | ``` 540 | 541 | *Response:* 542 | ``` 543 | n 544 | ``` 545 | where `n` denotes hours as 546 | * `1` - 1 hr 547 | * `2` - 2 hr 548 | * `3` - 3 hr 549 | * `4` - 4 hr 550 | * `6` - 6 hr 551 | * `8` - 8 hr 552 | * `12` - 12 hr 553 | * `24` - 24 hr 554 | 555 | #### 4.5.3. Sleep Timers 556 | ##### 4.5.3.1. Sleep Timer 1 State 557 | Set the state of sleep timer 1. 558 | 559 | *Request:* 560 | ``` 561 | W67:n 562 | ``` 563 | 564 | *Response:* 565 | ``` 566 | n 567 | ``` 568 | where `n` denotes 569 | * `128` - Off 570 | * `127` - Everyday 571 | * `96` - Weekends 572 | * `31` - Weekdays 573 | 574 | ##### 4.5.3.2. Sleep Timer 1 Start Time 575 | Set the start time of sleep timer 1 in 24-hour time. 576 | 577 | *Request:* 578 | ``` 579 | W68:nnnn 580 | ``` 581 | 582 | *Response:* 583 | ``` 584 | nnnn 585 | ``` 586 | where `nnnn` denotes time between `0`-`5947` with the formula `h*256+m` (ie: for 20:00, `nnnn` = 20\*256+0 = 5120; for 13:47, `nnnn` = 13\*256+47 = 3375) 587 | 588 | ##### 4.5.3.3. Sleep Timer 1 Finish Time 589 | Set the finish time of sleep timer 1 in 24-hour time. 590 | 591 | *Request:* 592 | ``` 593 | W69:nnnn 594 | ``` 595 | 596 | *Response:* 597 | ``` 598 | nnnn 599 | ``` 600 | where `nnnn` denotes time between `0`-`5947` with the formula `h*256+m` (ie: for 20:00, `nnnn` = 20\*256+0 = 5120; for 13:47, `nnnn` = 13\*256+47 = 3375) 601 | 602 | ##### 4.5.3.4. Sleep Timer 2 State 603 | Set the state of sleep timer 2. 604 | 605 | *Request:* 606 | ``` 607 | W70:n 608 | ``` 609 | 610 | *Response:* 611 | ``` 612 | n 613 | ``` 614 | where `n` denotes 615 | * `128` - Off 616 | * `127` - Everyday 617 | * `96` - Weekends 618 | * `31` - Weekdays 619 | 620 | ##### 4.5.3.5. Sleep Timer 2 Start Time 621 | Set the start time of sleep timer 2 in 24-hour time. 622 | 623 | *Request:* 624 | ``` 625 | W71:nnnn 626 | ``` 627 | 628 | *Response:* 629 | ``` 630 | nnnn 631 | ``` 632 | where `nnnn` denotes time between `0`-`5947` with the formula `h*256+m` (ie: for 20:00, `nnnn` = 20\*256+0 = 5120; for 13:47, `nnnn` = 13\*256+47 = 3375) 633 | 634 | ##### 4.5.3.6. Sleep Timer 2 Finish Time 635 | Set the finish time of sleep timer 2 in 24-hour time. 636 | 637 | *Request:* 638 | ``` 639 | W72:nnnn 640 | ``` 641 | 642 | *Response:* 643 | ``` 644 | nnnn 645 | ``` 646 | where `nnnn` denotes time between `0`-`5947` with the formula `h*256+m` (ie: for 20:00, `nnnn` = 20\*256+0 = 5120; for 13:47, `nnnn` = 13\*256+47 = 3375) 647 | 648 | #### 4.5.4. Power Save 649 | ##### 4.5.4.1. Power Save 650 | Set the Power Save option. 651 | 652 | *Request:* 653 | ``` 654 | W63:n 655 | ``` 656 | 657 | *Response:* 658 | ``` 659 | n 660 | ``` 661 | where `n` denotes 662 | * `0` - Off 663 | * `1` - Low 664 | * `2` - High 665 | 666 | ##### 4.5.4.2. Peak Power Time Start 667 | Set the start of the Peak Power Time, in hours and minutes. 668 | 669 | *Request:* 670 | ``` 671 | W64:nnnn 672 | ``` 673 | 674 | *Response:* 675 | ``` 676 | nnnn 677 | ``` 678 | where `nnnn` denotes time between `0`-`5947` with the formula `h*256+m` (ie: for 20:00, `nnnn` = 20\*256+0 = 5120; for 13:47, `nnnn` = 13\*256+47 = 3375) 679 | 680 | ##### 4.5.4.3. Peak Power Time End 681 | Set the end of the Peak Power Time, in hours and minutes. 682 | 683 | *Request:* 684 | ``` 685 | W64:nnnn 686 | ``` 687 | 688 | *Response:* 689 | ``` 690 | nnnn 691 | ``` 692 | where `nnnn` denotes time between `0`-`5947` with the formula `h*256+m` (ie: for 20:00, `nnnn` = 20\*256+0 = 5120; for 13:47, `nnnn` = 13\*256+47 = 3375) 693 | 694 | #### 4.5.5. Auto Santise 695 | Set the Auto Sanitise starting time. 696 | 697 | *Request:* 698 | ``` 699 | W73:nnnn 700 | ``` 701 | 702 | *Response:* 703 | ``` 704 | nnnn 705 | ``` 706 | where `nnnn` denotes time between `0`-`5947` with the formula `h*256+m` (ie: for 20:00, `nnnn` = 20\*256+0 = 5120; for 13:47, `nnnn` = 13\*256+47 = 3375) 707 | 708 | #### 4.5.6. Time Out Duration 709 | Set the Time Out duration for pumps and blower. 710 | 711 | *Request:* 712 | ``` 713 | W74:nn 714 | ``` 715 | 716 | *Response:* 717 | ``` 718 | nn 719 | ``` 720 | where `nn` denotes time in minutes from `10`-`60` 721 | 722 | #### 4.5.7. Heat Pump Mode 723 | ##### 4.5.7.1. Heat Pump Mode 724 | Set the Heat Pump Mode. 725 | 726 | *Request:* 727 | ``` 728 | W99:n 729 | ``` 730 | 731 | *Response:* 732 | ``` 733 | n 734 | ``` 735 | where `n` denotes 736 | * `0` - Auto 737 | * `1` - Heat 738 | * `2` - Cool 739 | * `3` - Disabled 740 | 741 | ##### 4.5.7.2. SV Element Boost 742 | Turn on/off SV Element Boost. 743 | 744 | *Request:* 745 | ``` 746 | W98:n 747 | ``` 748 | 749 | *Response:* 750 | ``` 751 | n 752 | ``` 753 | where `n` denotes 754 | * `0` - Off 755 | * `1` - On 756 | 757 | #### 4.5.8. Set Time/Date 758 | ##### 4.5.8.1. Time: Hour 759 | Set the hour of the day for the spa. 760 | 761 | *Request:* 762 | ``` 763 | S04:nn 764 | ``` 765 | 766 | *Response:* 767 | ``` 768 | nn 769 | S04 770 | ``` 771 | where `nn` denotes hour of the day from `0`-`23` 772 | 773 | ##### 4.5.8.2. Time: Minute 774 | Set the minute of the hour for the spa. 775 | 776 | *Request:* 777 | ``` 778 | S05:nn 779 | ``` 780 | 781 | *Response:* 782 | ``` 783 | nn 784 | S05 785 | ``` 786 | where `nn` denotes minute of the hour from `00`-`59` 787 | 788 | ##### 4.5.8.3. Date: Year 789 | Set the year for the spa. 790 | 791 | *Request:* 792 | ``` 793 | S01:nnnn 794 | ``` 795 | 796 | *Response:* 797 | ``` 798 | nnnn 799 | S01 800 | ``` 801 | where `nnnn` denotes a valid year from `1970`-`2037` (correct 2021) 802 | 803 | ##### 4.5.8.4. Date: Month 804 | Set the month for the spa. 805 | 806 | *Request:* 807 | ``` 808 | S02:nn 809 | ``` 810 | 811 | *Response:* 812 | ``` 813 | nn 814 | S02 815 | ``` 816 | where `nn` denotes the month represented by a number from `1`-`12` 817 | 818 | ##### 4.5.8.5. Date: Day 819 | Set the day for the spa. 820 | 821 | *Request:* 822 | ``` 823 | S03:nn 824 | ``` 825 | 826 | *Response:* 827 | ``` 828 | nn 829 | S03 830 | ``` 831 | where `nn` denotes the day represented from `1`-`31` (must be a valid day for the current month) 832 | 833 | #### 4.5.9. Support Mode 834 | Set support mode on/off for the spa with a pin. 835 | 836 | `POST` https://api.spanet.net.au/api/MemberLogin 837 | 838 | *Request:* 839 | ```javascript 840 | { 841 | "login": [Username], 842 | "pin": [Pin], 843 | "password": [Encrypted Password] 844 | } 845 | ``` 846 | *Response:* 847 | ```javascript 848 | { 849 | "error": null, 850 | "error_code": null, 851 | "message": null, 852 | "success": true 853 | } 854 | ``` 855 | where Pin is either a 6-digit pin which will be used as the support code to turn it on (should be randomly generated by code), or a blank string to turn it off (""). 856 | 857 | #### 4.5.10. Lock Mode 858 | Set the Lock Mode. 859 | 860 | *Request:* 861 | ``` 862 | S21:n 863 | ``` 864 | 865 | *Response:* 866 | ``` 867 | n 868 | ``` 869 | where `n` denotes 870 | * `0` - Off 871 | * `1` - Partial 872 | * `2` - Full 873 | 874 | #### 4.5.11. Notification 875 | Set push notification mode on/off 876 | 877 | `GET` https://api.spanet.net.au/api/membersetnotification?login=[Username]&password=[Encrypted Password]&token=(null)¬ificationOnOff=[Bool]&type=1 878 | 879 | *Response:* 880 | ```javascript 881 | { 882 | "error": null, 883 | "error_code": null, 884 | "message": null, 885 | "success": true 886 | } 887 | ``` 888 | where Bool is either true for notifications on, or false for notifications off. 889 | 890 | ## 5. Raw command list 891 | 892 | S01 - Date / Year 893 | S02 - Date / Month 894 | S03 - Date / Day 895 | S04 - Time / Hour 896 | S05 - Time / Minute 897 | S06 - Time / N/A 898 | S07 - Lights / Mode 899 | S08 - Lights / Brightness 900 | S09 - Lights / Effect Speed 901 | S10 - Lights / Colour 902 | S11 - Lights / Off 903 | S13 - Blower / Variable Speed 904 | S21 - Settings / Lock Mode 905 | S22 - Pumps / Pump 1 906 | S23 - Pumps / Pump 2 907 | S24 - Pumps / Pump 3 908 | S25 - Pumps / Pump 4 909 | S26 - Pumps / Pump 5 910 | S27 - Pumps / Pump Variable 911 | S28 - Blower / Blower 912 | W12 - Clean / Sanitise 913 | W14 - Lights / Toggle 914 | W40 - Spa / Temperature 915 | W60 - Filtration / Runtime 916 | W63 - Settings / Power Save 917 | W64 - Settings / Power Save / Peak Power Time Begin 918 | W65 - Settings / Power Save / Peak Power Time End 919 | W66 - Settings / Operation Mode 920 | W67 - Sleep Timers / Sleep Timer 1 State 921 | W68 - Sleep Timers / Sleep Timer 1 Start Time 922 | W69 - Sleep Timers / Sleep Timer 1 Finish Time 923 | W70 - Sleep Timers / Sleep Timer 2 State 924 | W71 - Sleep Timers / Sleep Timer 2 Start Time 925 | W72 - Sleep Timers / Sleep Timer 2 Finish Time 926 | W73 - Settings / Auto Sanitise 927 | W74 - Settings / Time Out Duration 928 | W90 - Settings / Time Between Filtration Cycles 929 | W98 - Settings / SV Element Boost 930 | W99 - Settings / Heat Pump Mode 931 | 932 | ## 6. Reading Spa Data 933 | NOTE: The command to get spa data is RF\n as shown in section 4 934 | 935 | A sample response is: 936 | ``` 937 | RF: 938 | ,R2,18,250,51,70,4,13,50,55,19,6,2020,376,9999,1,0,490,207,34,6000,602,23,20,0,0,0,0,44,35,45,: 939 | ,R3,32,1,4,4,4,SW V5 17 05 31,SV3,18480001,20000826,1,0,0,0,0,0,NA,7,0,470,Filtering,4,0,7,7,0,0,: 940 | ,R4,NORM,0,0,0,1,0,3547,4,20,4500,7413,567,1686,0,8388608,0,0,5,0,98,0,10084,4,80,100,0,0,4,: 941 | ,R5,0,1,0,1,0,0,0,0,0,0,1,0,1,0,376,0,3,4,0,0,0,0,0,1,2,6,: 942 | ,R6,1,5,30,2,5,8,1,360,1,0,3584,5120,127,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,: 943 | ,R7,2304,0,1,1,1,0,1,0,0,0,253,191,253,240,483,125,77,1,0,0,0,23,200,1,0,1,31,32,35,100,5,: 944 | ,R9,F1,255,0,0,0,0,0,0,0,0,0,0,: 945 | ,RA,F2,0,0,0,0,0,0,255,0,0,0,0,: 946 | ,RB,F3,0,0,0,0,0,0,0,0,0,0,0,: 947 | ,RC,0,1,1,0,0,0,0,0,0,2,0,0,1,0,: 948 | ,RE,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,-4,13,30,8,5,1,0,0,0,0,0,:* 949 | ,RG,1,1,1,1,1,1,1-1-014,1-1-01,1-1-01,0-,0-,0,:* 950 | ``` 951 | 952 | Each below aspect of the spa will show which value of this RF fix needs to be read and what it's possible values are. It will say the read line (R2, R3, R4 etc.) and the read bit, which is the index number of the value to read from the line seperated by commas. The first value of each line is index number 2 (the name of each line is index number 1). e.g. If an aspect of the spa was represented by the 70 on line R2, the information for reading it would be *Line R2, Read Bit 5*. 953 | 954 | ### 6.1. Spa Status 955 | #### 6.1.1. Set Temperature 956 | `,R6,1,5,30,2,5,8,1,`360`,1,0,3584,5120,127,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 957 | 958 | Line: R6 959 | Read Bit: 9 960 | Data Type: Integer 961 | Range: `50` to `410` 962 | Data: Represents spa set temperature in degrees celcius * 10 (e.g. `360` is 36.00°C and `76` is 7.60°C) 963 | 964 | #### 6.1.2. Water Temperature 965 | `,R5,0,1,0,1,0,0,0,0,0,0,1,0,1,0,`376`,0,3,4,0,0,0,0,0,1,2,6,:` 966 | 967 | Line: R5 968 | Read Bit: 16 969 | Data Type: Integer 970 | Data: Represents spa actual temperature in degrees celcius * 10 (e.g. `360` is 36.00°C and `76` is 7.60°C) 971 | 972 | #### 6.1.3. Heater Temperature 973 | `,R2,18,250,51,70,4,13,50,55,19,6,2020,`376`,9999,1,0,490,207,34,6000,602,23,20,0,0,0,0,44,35,45,:` 974 | 975 | Line: R2 976 | Read Bit: 13 977 | Data Type: Integer 978 | Data: Represents heater temperature in degrees celcius * 10 (e.g. `360` is 36.00°C and `76` is 7.60°C) 979 | 980 | #### 6.1.4. Pool Temperature 981 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,`9999`,1,0,106,607,0,147,33207,791,819,0,721,0,0,1673,354,854,241,:` 982 | 983 | Line: R2 984 | Read Bit: 14 985 | Data Type: Integer 986 | Data: Pool temperature * 10. Note seems to return rubish value on most spas. Use Water Temperature instead. 987 | 988 | #### 6.1.5. Heating 989 | `,R5,0,1,0,1,0,0,0,0,0,0,1,`0`,1,0,376,0,3,4,0,0,0,0,0,1,2,6,:` 990 | 991 | Line: R5 992 | Read Bit: 13 993 | Data Type: Integer 994 | Range: `0` to `1` 995 | Data: Integer is `1` when the heater is on (currently heating/cooling the water) and `0` when it is off 996 | 997 | #### 6.1.6. Cleaning (UV/Ozone running) 998 | `,R5,0,1,0,1,0,0,0,0,0,0,`1`,0,1,0,376,0,3,4,0,0,0,0,0,1,2,6,:` 999 | 1000 | Line: R5 1001 | Read Bit: 12 1002 | Data Type: Integer 1003 | Range: `0` to `1` 1004 | Data: Integer is `1` when the Ozone/UV is cleaning the spa and `0` when it is off 1005 | 1006 | #### 6.1.7. Cleaning (Sanitise cycle running) 1007 | `,R5,0,1,0,1,0,0,0,0,0,0,1,0,1,0,376,`0`,3,4,0,0,0,0,0,1,2,6,:` 1008 | 1009 | Line: R5 1010 | Read Bit: 17 1011 | Data Type: Integer 1012 | Range: `0` to `1` 1013 | Data: Integer is `1` when clean cycle is running and `0` when it is not 1014 | 1015 | #### 6.1.8. Auto 1016 | `,R5,0,1,0,1,0,0,0,0,0,0,1,0,`1`,0,376,0,3,4,0,0,0,0,0,1,2,6,:` 1017 | 1018 | Line: R5 1019 | Read Bit: 14 1020 | Data Type: Integer 1021 | Range: `0` to `1` 1022 | Data: Integer is `1` when the auto is enabled and `0` when it is not 1023 | 1024 | #### 6.1.9. Sleeping 1025 | `,R5,0,1,0,1,0,0,0,0,0,`0`,1,0,1,0,376,0,3,4,0,0,0,0,0,1,2,6,:` 1026 | 1027 | Line: R5 1028 | Read Bit: 11 1029 | Data Type: Integer 1030 | Range: `0` to `1` 1031 | Data: Integer is `1` when the spa is currently sleeping due to a sleep timer `0` when it is not 1032 | 1033 | #### 6.1.10. Water Present 1034 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,`1`,0,106,607,0,147,33207,791,819,0,721,0,0,1673,354,854,241,:` 1035 | 1036 | Line: R2 1037 | Read Bit: 15 1038 | Data Type: Integer 1039 | Data: 1 = Water present, 0 = No water detected 1040 | 1041 | #### 6.1.11. Awake Minutes Remaining 1042 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,`106`,607,0,147,33207,791,819,0,721,0,0,1673,354,854,241,:` 1043 | 1044 | Line: R2 1045 | Read Bit: 17 1046 | Data Type: Integer 1047 | Data: Minutes remaining of Awake time. Note: Clarification of this would be appreciated. 1048 | 1049 | #### 6.1.12. Filter Pump Runtime Total 1050 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,`607`,0,147,33207,791,819,0,721,0,0,1673,354,854,241,:` 1051 | 1052 | Line: R2 1053 | Read Bit: 18 1054 | Data Type: Integer 1055 | Data: Total filter pump run time (min) 1056 | 1057 | #### 6.1.13. Filter Pump Req Minutes 1058 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,`0`,147,33207,791,819,0,721,0,0,1673,354,854,241,:` 1059 | 1060 | Line: R2 1061 | Read Bit: 19 1062 | Data Type: Integer 1063 | Data Unit: Minutes 1064 | Data: Unsure 1065 | 1066 | #### 6.1.14. Load Timeout 1067 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,0,`147`,33207,791,819,0,721,0,0,1673,354,854,241,:` 1068 | 1069 | Line: R2 1070 | Read Bit: 20 1071 | Data Type: Integer 1072 | Data Unit of Measure: Seconds 1073 | Data: Unsure 1074 | 1075 | #### 6.1.15. Load Timeout 1076 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,0,147,`33207`,791,819,0,721,0,0,1673,354,854,241,:` 1077 | 1078 | Line: R2 1079 | Read Bit: 21 1080 | Data Type: Integer 1081 | Data Unit of Measure: Seconds 1082 | Data: Unsure 1083 | 1084 | #### 6.1.16. Hour Meter 1085 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,0,147,`33207`,791,819,0,721,0,0,1673,354,854,241,:` 1086 | 1087 | Line: R2 1088 | Read Bit: 22 1089 | Data Type: Integer 1090 | Data Unit of Measure: Hours * 10 1091 | Data: Hours of runtime. 33207 = 3320.7 hours 1092 | 1093 | #### 6.1.17. Relay 1 1094 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,0,147,33207,`791`,819,0,721,0,0,1673,354,854,241,:` 1095 | 1096 | Line: R2 1097 | Read Bit: 23 1098 | Data Type: Integer 1099 | Data Unit of Measure: Unknown 1100 | Data: Unknown 1101 | 1102 | #### 6.1.18. Relay 2 1103 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,0,147,33207,791,`819`,0,721,0,0,1673,354,854,241,:` 1104 | 1105 | Line: R2 1106 | Read Bit: 24 1107 | Data Type: Integer 1108 | Data Unit of Measure: Unknown 1109 | Data: Unknown 1110 | 1111 | #### 6.1.19. Relay 3 1112 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,0,147,33207,791,819,`0`,721,0,0,1673,354,854,241,:` 1113 | 1114 | Line: R2 1115 | Read Bit: 25 1116 | Data Type: Integer 1117 | Data Unit of Measure: Unknown 1118 | Data: Unknown 1119 | 1120 | #### 6.1.20. Relay 4 1121 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,0,147,33207,791,819,0,`721`,0,0,1673,354,854,241,:` 1122 | 1123 | Line: R2 1124 | Read Bit: 26 1125 | Data Type: Integer 1126 | Data Unit of Measure: Unknown 1127 | Data: Unknown 1128 | 1129 | #### 6.1.21. Relay 5 1130 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,0,147,33207,791,819,0,721,`0`,0,1673,354,854,241,:` 1131 | 1132 | Line: R2 1133 | Read Bit: 27 1134 | Data Type: Integer 1135 | Data Unit of Measure: Unknown 1136 | Data: Unknown 1137 | 1138 | #### 6.1.22. Relay 6 1139 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,0,147,33207,791,819,0,721,0,`0`,1673,354,854,241,:` 1140 | 1141 | Line: R2 1142 | Read Bit: 28 1143 | Data Type: Integer 1144 | Data Unit of Measure: Unknown 1145 | Data: Unknown 1146 | 1147 | #### 6.1.23. Relay 7 1148 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,0,147,33207,791,819,0,721,0,0,`1673`,354,854,241,:` 1149 | 1150 | Line: R2 1151 | Read Bit: 29 1152 | Data Type: Integer 1153 | Data Unit of Measure: Unknown 1154 | Data: Unknown 1155 | 1156 | #### 6.1.24. Relay 8 1157 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,0,147,33207,791,819,0,721,0,0,1673,`354`,854,241,:` 1158 | 1159 | Line: R2 1160 | Read Bit: 30 1161 | Data Type: Integer 1162 | Data Unit of Measure: Unknown 1163 | Data: Unknown 1164 | 1165 | #### 6.1.25. Relay 9 1166 | `,R2,0,243,43,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,0,147,33207,791,819,0,721,0,0,1673,354,`854`,241,:` 1167 | 1168 | Line: R2 1169 | Read Bit: 31 1170 | Data Type: Integer 1171 | Data Unit of Measure: Unknown 1172 | Data: Unknown 1173 | 1174 | 1175 | ### 6.2. Pumps 1176 | #### 6.2.1. Pump 1 1177 | ##### 6.2.1.1. Pump 1 1178 | `,R5,0,1,0,1,0,0,0,0,0,0,1,0,1,0,376,0,3,`4`,0,0,0,0,0,1,2,6,:` 1179 | 1180 | Line: R5 1181 | Read Bit: 19 1182 | Data Type: Integer 1183 | Range: `0` to `4` 1184 | Data: Integer is `4` when pump is set to auto, `1` when it is on and `0` when it is off 1185 | 1186 | ##### 6.2.1.2. Pump 1 Installation State 1187 | `,RG,1,1,1,1,1,1,`1-1-014`,1-1-01,1-1-01,0-,0-,0,:*` 1188 | 1189 | Line: RG 1190 | Read Bit: 8 1191 | Data Type: String 1192 | Data: First part (1- or 0-) indicates whether the pump is installed/fitted. If so (1- means it is), the second part (1- above) indicates it's speed type. The third part (014 above) represents it's possible states (0 OFF, 1 ON, 4 AUTO) 1193 | 1194 | #### 6.2.2. Pump 2 1195 | ##### 6.2.2.1. Pump 2 1196 | `,R5,0,1,0,1,0,0,0,0,0,0,1,0,1,0,376,0,3,4,`0`,0,0,0,0,1,2,6,:` 1197 | 1198 | Line: R5 1199 | Read Bit: 20 1200 | Data Type: Integer 1201 | Range: `0` to `1` 1202 | Data: Integer is `1` when pump is on and `0` when it is off 1203 | 1204 | ##### 6.2.2.2. Pump 2 Installation State 1205 | `,RG,1,1,1,1,1,1,1-1-014,`1-1-01`,1-1-01,0-,0-,0,:*` 1206 | 1207 | Line: RG 1208 | Read Bit: 9 1209 | Data Type: String 1210 | Data: First part (1- or 0-) indicates whether the pump is installed/fitted. If so (1- means it is), the second part (1- above) indicates it's speed type. The third part (01 above) represents it's possible states (0 OFF, 1 ON) 1211 | 1212 | ##### 6.2.2.3. Pump 2 Switch On Status 1213 | `,RG,1,`1`,1,1,1,1,1-1-014,1-1-01,1-1-01,0-,0-,0,:*` 1214 | 1215 | Line: RG 1216 | Read Bit: 3 1217 | Data Type: Integer 1218 | Range: `0` to `1` 1219 | Data: Integer is `1` when the pump is OK to turn on and `0` when it is not 1220 | 1221 | #### 6.2.3. Pump 3 1222 | ##### 6.2.3.1. Pump 3 1223 | `,R5,0,1,0,1,0,0,0,0,0,0,1,0,1,0,376,0,3,4,0,`0`,0,0,0,1,2,6,:` 1224 | 1225 | Line: R5 1226 | Read Bit: 21 1227 | Data Type: Integer 1228 | Range: `0` to `1` 1229 | Data: Integer is `1` when pump is on and `0` when it is off 1230 | 1231 | ##### 6.2.3.2. Pump 3 Installation State 1232 | `,RG,1,1,1,1,1,1,1-1-014,1-1-01,`1-1-01`,0-,0-,0,:*` 1233 | 1234 | Line: RG 1235 | Read Bit: 10 1236 | Data Type: String 1237 | Data: First part (1- or 0-) indicates whether the pump is installed/fitted. If so (1- means it is), the second part (1- above) indicates it's speed type. The third part (01 above) represents it's possible states (0 OFF, 1 ON) 1238 | 1239 | ##### 6.2.3.3. Pump 3 Switch On Status 1240 | `,RG,1,1,`1`,1,1,1,1-1-014,1-1-01,1-1-01,0-,0-,0,:*` 1241 | 1242 | Line: RG 1243 | Read Bit: 4 1244 | Data Type: Integer 1245 | Range: `0` to `1` 1246 | Data: Integer is `1` when the pump is OK to turn on and `0` when it is not 1247 | 1248 | #### 6.2.4. Pump 4 1249 | ##### 6.2.4.1. Pump 4 1250 | `,R5,0,1,0,1,0,0,0,0,0,0,1,0,1,0,376,0,3,4,0,0,`0`,0,0,1,2,6,:` 1251 | 1252 | Line: R5 1253 | Read Bit: 22 1254 | Data Type: Integer 1255 | Range: `0` to `1` 1256 | Data: Integer is `1` when pump is on and `0` when it is off 1257 | 1258 | ##### 6.2.4.2. Pump 4 Installation State 1259 | `,RG,1,1,1,1,1,1,1-1-014,1-1-01,1-1-01,`0-`,0-,0,:*` 1260 | 1261 | Line: RG 1262 | Read Bit: 11 1263 | Data Type: String 1264 | Data: First part (1- or 0-) indicates whether the pump is installed/fitted. If so (1- means it is), the second part indicates it's speed type. The third part represents it's possible states 1265 | 1266 | ##### 6.2.4.3. Pump 4 Switch On Status 1267 | `,RG,1,1,1,`1`,1,1,1-1-014,1-1-01,1-1-01,0-,0-,0,:*` 1268 | 1269 | Line: RG 1270 | Read Bit: 5 1271 | Data Type: Integer 1272 | Range: `0` to `1` 1273 | Data: Integer is `1` when the pump is OK to turn on and `0` when it is not 1274 | 1275 | #### 6.2.5. Pump 5 1276 | `,R5,0,1,0,1,0,0,0,0,0,0,1,0,1,0,376,0,3,4,0,0,0,`0`,0,1,2,6,:` 1277 | 1278 | Line: R5 1279 | Read Bit: 23 1280 | Data Type: Integer 1281 | Range: `0` to `1` 1282 | Data: Integer is `1` when pump is on and `0` when it is off 1283 | 1284 | ##### 6.2.5.1. Pump 5 Installation State 1285 | `,RG,1,1,1,1,1,1,1-1-014,1-1-01,1-1-01,0-,`0-`,0,:*` 1286 | 1287 | Line: RG 1288 | Read Bit: 12 1289 | Data Type: String 1290 | Data: First part (1- or 0-) indicates whether the pump is installed/fitted. If so (1- means it is), the second part indicates it's speed type. The third part represents it's possible states 1291 | 1292 | ##### 6.2.5.2. Pump 5 Switch On Status 1293 | `,RG,1,1,1,1,`1`,1,1-1-014,1-1-01,1-1-01,0-,0-,0,:*` 1294 | 1295 | Line: RG 1296 | Read Bit: 6 1297 | Data Type: Integer 1298 | Range: `0` to `1` 1299 | Data: Integer is `1` when the pump is OK to turn on and `0` when it is not 1300 | 1301 | ### 6.3. Blower 1302 | #### 6.3.1. Blower 1303 | `,RC,0,1,1,0,0,0,0,0,0,`2`,0,0,1,0,:` 1304 | 1305 | Line: RC 1306 | Read Bit: 11 1307 | Data Type: Integer 1308 | Range: `0` to `2` 1309 | Data: Integer is `2` when pump is off, `1` when it is on ramp mode and `0` when it is on variable mode 1310 | 1311 | #### 6.3.2. Blower Variable Speed 1312 | `,R6,`1`,5,0,2,5,8,1,360,1,0,3584,5120,127,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 1313 | 1314 | Line: R6 1315 | Read Bit: 2 1316 | Data Type: Integer 1317 | Range: `1` to `5` 1318 | Data: Integer represents blower variable speed from speed `1` to speed `5` 1319 | 1320 | ### 6.4. Lights 1321 | #### 6.4.1. Lights 1322 | `,R5,0,1,0,1,0,0,0,0,0,0,1,0,1,`0`,376,0,3,4,0,0,0,0,0,1,2,6,:` 1323 | 1324 | Line: R5 1325 | Read Bit: 15 1326 | Data Type: Integer 1327 | Range: `0` to `1` 1328 | Data: Integer is `1` when lights are on `0` when they are off 1329 | 1330 | #### 6.4.2. Lights Mode 1331 | `,R6,1,5,0,`2`,5,8,1,360,1,0,3584,5120,127,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 1332 | 1333 | Line: R6 1334 | Read Bit: 5 1335 | Data Type: Integer 1336 | Range: `0` to `4` 1337 | Data: Integer is `0` for mode white, `1` for mode colour, `2` for mode step, `3` for mode fade and `4` for mode party 1338 | 1339 | #### 6.4.3. Lights Brightness 1340 | `,R6,1,`5`,0,2,5,8,1,360,1,0,3584,5120,127,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 1341 | 1342 | Line: R6 1343 | Read Bit: 3 1344 | Data Type: Integer 1345 | Range: `1` to `5` 1346 | Data: Integer represents brightness from `1` to `5` 1347 | 1348 | #### 6.4.4. Lights Effect Speed 1349 | `,R6,1,5,30,2,`5`,8,1,360,1,0,3584,5120,127,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 1350 | 1351 | Line: R6 1352 | Read Bit: 6 1353 | Data Type: Integer 1354 | Range: `1` to `5` 1355 | Data: Integer represents effect speed from `1` to `5` 1356 | 1357 | #### 6.4.5. Lights Colour 1358 | `,R6,1,5,`0`,2,5,8,1,360,1,0,3584,5120,127,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 1359 | 1360 | Line: R6 1361 | Read Bit: 4 1362 | Data Type: Integer 1363 | Range: `0` to `30` 1364 | Data: Integer represents colour from `0` to `30` 1365 | 1366 | ### 6.5. Settings 1367 | #### 6.5.1. Operation Mode 1368 | `,R4,`NORM`,0,0,0,1,0,3547,4,20,4500,7413,567,1686,0,8388608,0,0,5,0,98,0,10084,4,80,100,0,0,4,:` 1369 | 1370 | Line: R4 1371 | Read Bit: 2 1372 | Data Type: String 1373 | Data: `NORM` represents normal mode, `ECON` economy mode, `AWAY` away mode and `WEEK` weekdays mode 1374 | 1375 | #### 6.5.2. Filtration 1376 | ##### 6.5.2.1. Filtration Runtime 1377 | `,R6,1,5,30,2,5,`8`,1,360,1,0,3584,5120,127,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 1378 | 1379 | Line: R6 1380 | Read Bit: 7 1381 | Data Type: Integer 1382 | Range: `1` to `24` 1383 | Data: Integer represents hours from `1` to `24` 1384 | 1385 | ##### 6.5.2.2. Time Between Filtration Cycles 1386 | `,R6,1,5,30,2,5,8,`1`,360,1,0,3584,5120,127,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 1387 | 1388 | Line: R6 1389 | Read Bit: 8 1390 | Data Type: Integer 1391 | Range: `1` to `24` 1392 | Data: Integer represents hours, where possible values are `1`, `2`, `3`, `4`, `6`, `8`, `12` and `24` 1393 | 1394 | #### 6.5.3. Sleep Timers 1395 | ##### 6.5.3.1. Sleep Timer 1 State 1396 | `,R6,1,5,30,2,5,8,1,360,1,0,3584,5120,`127`,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 1397 | 1398 | Line: R6 1399 | Read Bit: 14 1400 | Data Type: Integer 1401 | Range: `1` to `128` 1402 | Data: `128` represents off, `127` represents everyday mode, `96` represents weekends mode and `31` represents weekdays mode 1403 | 1404 | ##### 6.5.3.2. Sleep Timer 1 Start Time 1405 | `,R6,1,5,30,2,5,8,1,360,1,0,3584,5120,127,128,`5632`,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 1406 | 1407 | Line: R6 1408 | Read Bit: 16 1409 | Data Type: Integer 1410 | Range: `0` to `5947` 1411 | Data: Time with the formula `h*256+m` (ie: for 20:00, integer will be 20\*256+0 = 5120; for 13:47, integer will be 13\*256+47 = 3375) 1412 | 1413 | ##### 6.5.3.3. Sleep Timer 1 Finish Time 1414 | `,R6,1,5,30,2,5,8,1,360,1,0,3584,5120,127,128,5632,5632,`2304`,1792,0,30,0,0,0,0,2,3,0,:` 1415 | 1416 | Line: R6 1417 | Read Bit: 18 1418 | Data Type: Integer 1419 | Range: `0` to `5947` 1420 | Data: Time with the formula `h*256+m` (ie: for 20:00, integer will be 20\*256+0 = 5120; for 13:47, integer will be 13\*256+47 = 3375) 1421 | 1422 | ##### 6.5.3.4. Sleep Timer 2 State 1423 | `,R6,1,5,30,2,5,8,1,360,1,0,3584,5120,127,`128`,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 1424 | 1425 | Line: R6 1426 | Read Bit: 15 1427 | Data Type: Integer 1428 | Range: `1` to `128` 1429 | Data: `128` represents off, `127` represents everyday mode, `96` represents weekends mode and `31` represents weekdays mode. 1430 | 1431 | ##### 6.5.3.5. Sleep Timer 2 Start Time 1432 | `,R6,1,5,30,2,5,8,1,360,1,0,3584,5120,127,128,5632,`5632`,2304,1792,0,30,0,0,0,0,2,3,0,:` 1433 | 1434 | Line: R6 1435 | Read Bit: 17 1436 | Data Type: Integer 1437 | Range: `0` to `5947` 1438 | Data: Time with the formula `h*256+m` (ie: for 20:00, integer will be 20\*256+0 = 5120; for 13:47, integer will be 13\*256+47 = 3375) 1439 | 1440 | ##### 6.5.3.6. Sleep Timer 2 Finish Time 1441 | `,R6,1,5,30,2,5,8,1,360,1,0,3584,5120,127,128,5632,5632,2304,`1792`,0,30,0,0,0,0,2,3,0,:` 1442 | 1443 | Line: R6 1444 | Read Bit: 19 1445 | Data Type: Integer 1446 | Range: `0` to `5947` 1447 | Data: Time with the formula `h*256+m` (ie: for 20:00, integer will be 20\*256+0 = 5120; for 13:47, integer will be 13\*256+47 = 3375) 1448 | 1449 | #### 6.5.4. Power Save 1450 | ##### 6.5.4.1. Power Save 1451 | `,R6,1,5,30,2,5,8,1,360,1,`0`,3584,5120,127,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 1452 | 1453 | Line: R6 1454 | Read Bit: 11 1455 | Data Type: Integer 1456 | Range: `0` to `2` 1457 | Data: Integer is `0` for off, `1` for low and `2` for high 1458 | 1459 | ##### 6.5.4.2. Peak Power Time Start 1460 | `,R6,1,5,30,2,5,8,1,360,1,0,`3584`,5120,127,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 1461 | 1462 | Line: R6 1463 | Read Bit: 12 1464 | Data Type: Integer 1465 | Range: `0` to `5947` 1466 | Data: Time with the formula `h*256+m` (ie: for 20:00, integer will be 20\*256+0 = 5120; for 13:47, integer will be 13\*256+47 = 3375) 1467 | 1468 | ##### 6.5.4.3. Peak Power Time End 1469 | `,R6,1,5,30,2,5,8,1,360,1,0,3584,`5120`,127,128,5632,5632,2304,1792,0,30,0,0,0,0,2,3,0,:` 1470 | 1471 | Line: R6 1472 | Read Bit: 13 1473 | Data Type: Integer 1474 | Range: `0` to `5947` 1475 | Data: Time with the formula `h*256+m` (ie: for 20:00, integer will be 20\*256+0 = 5120; for 13:47, integer will be 13\*256+47 = 3375) 1476 | 1477 | #### 6.5.5. Auto Sanitise 1478 | `,R7,`2304`,0,1,1,1,0,1,0,0,0,253,191,253,240,483,125,77,1,0,0,0,23,200,1,0,1,31,32,35,100,5,:` 1479 | 1480 | Line: R7 1481 | Read Bit: 2 1482 | Data Type: Integer 1483 | Range: `0` to `5947` 1484 | Data: Time with the formula `h*256+m` (ie: for 20:00, integer will be 20\*256+0 = 5120; for 13:47, integer will be 13\*256+47 = 3375) 1485 | 1486 | #### 6.5.6. Time Out Mode 1487 | `,R6,1,5,30,2,5,8,1,360,1,0,3584,5120,127,128,5632,5632,2304,1792,0,`30`,0,0,0,0,2,3,0,:` 1488 | 1489 | Line: R6 1490 | Read Bit: 21 1491 | Data Type: Integer 1492 | Range: `10` to `30` 1493 | Data: Integer is time in minutes before pump and blower auto time-out 1494 | 1495 | #### 6.5.7. Heat Pump Mode 1496 | ##### 6.5.7.1. Heat Pump Mode 1497 | `,R7,2304,0,1,1,1,0,1,0,0,0,253,191,253,240,483,125,77,1,0,0,0,23,200,1,0,`1`,31,32,35,100,5,:` 1498 | 1499 | Line: R7 1500 | Read Bit: 27 1501 | Data Type: Integer 1502 | Range: `0` to `3` 1503 | Data: `0` represents auto mode, `1` heat mode, `2` cool mode and `3` disabled mode 1504 | 1505 | ##### 6.5.7.2. SV Element Boost 1506 | `,R7,2304,0,1,1,1,0,1,0,0,0,253,191,253,240,483,125,77,1,0,0,0,23,200,1,`0`,1,31,32,35,100,5,:` 1507 | 1508 | Line: R7 1509 | Read Bit: 26 1510 | Data Type: Integer 1511 | Range: `0` to `1` 1512 | Data: Integer is `0` when off and `1` when on 1513 | 1514 | #### 6.5.8. Time/Date 1515 | ##### 6.5.8.1. Time: Hour 1516 | `,R2,18,250,51,70,4,`13`,50,55,19,6,2020,376,9999,1,0,490,207,34,6000,602,23,20,0,0,0,0,44,35,45,:` 1517 | 1518 | Line: R2 1519 | Read Bit: 7 1520 | Data Type: Integer 1521 | Range: `0` to `23` 1522 | Data: Represents hour of the day in 24-hour time 1523 | 1524 | ##### 6.5.8.2. Time: Minute 1525 | `,R2,18,250,51,70,4,13,`50`,55,19,6,2020,376,9999,1,0,490,207,34,6000,602,23,20,0,0,0,0,44,35,45,:` 1526 | 1527 | Line: R2 1528 | Read Bit: 8 1529 | Data Type: Integer 1530 | Range: `0` to `59` 1531 | Data: Represents minute of the hour 1532 | 1533 | ##### 6.5.8.3. Date: Year 1534 | `,R2,18,250,51,70,4,13,50,55,19,6,`2020`,376,9999,1,0,490,207,34,6000,602,23,20,0,0,0,0,44,35,45,:` 1535 | 1536 | Line: R2 1537 | Read Bit: 12 1538 | Data Type: Integer 1539 | Range: `1970` to `2037` (correct 2021) 1540 | Data: Represents current year 1541 | 1542 | ##### 6.5.8.4. Date: Month 1543 | `,R2,18,250,51,70,4,13,50,55,19,`6`,2020,376,9999,1,0,490,207,34,6000,602,23,20,0,0,0,0,44,35,45,:` 1544 | 1545 | Line: R2 1546 | Read Bit: 11 1547 | Data Type: Integer 1548 | Range: `1` to `12` 1549 | Data: Represents current month of the year, where `1` is January and `12` is December 1550 | 1551 | ##### 6.5.8.5. Date: Day 1552 | `,R2,18,250,51,70,4,13,50,55,`19`,6,2020,376,9999,1,0,490,207,34,6000,602,23,20,0,0,0,0,44,35,45,:` 1553 | 1554 | Line: R2 1555 | Read Bit: 10 1556 | Data Type: Integer 1557 | Range: `1` to `31` 1558 | Data: Represents current day of the month, where the integer will only be a valid day of the current month 1559 | 1560 | #### 6.5.9. Support Mode 1561 | If your application sets a support pin for the spa, it must locally store this pin. Support PIN's created by the official SpaLINK app are registered through a web request (see 4.5.9) but not shared across to other devices running the same app with the same spa logged in. That goes to say, PIN's are registered for the spa on the SpaNET server but individual to devices on which they were created/registered. 1562 | 1563 | #### 6.5.10. Lock Mode 1564 | `,RG,1,1,1,1,1,1,1-1-014,1-1-01,1-1-01,0-,0-,`0`,:*` 1565 | 1566 | Line: RG 1567 | Read Bit: 13 1568 | Data Type: Integer 1569 | Range: `0` to `2` 1570 | Data: `0` represents keypad lock off, `1` partial keypad lock and `2` full keypad lock 1571 | 1572 | #### 6.5.11. Notification 1573 | Notifications status for devices is sent to the SpaNET API server but is individual to devices, so your app must keep track if it has turned notifications on for itself. This setting should not be applicable for most plugins/code anyway, unless you are making an app which can send a type of notifications (e.g. push notifications). 1574 | 1575 | ### 6.6. Operating Environment 1576 | #### 6.6.1. Power 1577 | ##### 6.6.1.1. Supply Volts 1578 | `,R2,18,`250`,51,70,4,13,50,55,19,6,2020,376,9999,1,0,490,207,34,6000,602,23,20,0,0,0,0,44,35,45,:` 1579 | 1580 | Line: R2 1581 | Read Bit: 3 1582 | Data Type: Integer, current power supply voltage (volts) 1583 | 1584 | ##### 6.6.1.2. Current Draw 1585 | `,R2,`18`,250,51,70,4,13,50,55,19,6,2020,376,9999,1,0,490,207,34,6000,602,23,20,0,0,0,0,44,35,45,:` 1586 | 1587 | Line: R2 1588 | Read Bit: 2 1589 | Data Type: Integer, current power supply current draw (amps) 1590 | 1591 | ##### 6.6.1.3. Variable Heat Element Current Draw 1592 | `,R3,32,1,4,4,4,SW V5 17 05 31,SV3,18480001,20000826,1,0,0,0,0,0,NA,7,0,470,Filtering,4,`0`,7,7,0,0,:` 1593 | 1594 | Line: R3 1595 | Read Bit: 23 1596 | Data Type: Integer, current variable heat element current draw x 10 (amps) eg 213 = 21.3 amps 1597 | 1598 | #### 6.6.2. Environment 1599 | ##### 6.6.2.1. Case Temperature 1600 | `,R2,0,243,`43`,223,6,19,14,36,9,1,2022,320,9999,1,0,106,607,0,147,33207,791,819,0,721,0,0,1673,354,854,241,:` 1601 | 1602 | Line: R2 1603 | Read Bit: 4 1604 | Data Type: Integer, current case temperature C 1605 | 1606 | 1607 | ### 6.7. OEM Settings 1608 | #### 6.7.1. Current Limit 1609 | `,R3,`32`,1,4,4,4,SW V5 17 05 31,SV3,18480001,20000826,1,0,0,0,0,0,NA,7,0,470,Filtering,4,0,7,7,0,0,:` 1610 | 1611 | Line: R3 1612 | Read Bit: 2 1613 | Data Type: Integer, current limit. 1614 | 1615 | #### 6.7.2. Load Shed 1616 | `,R3,32,1,4,4,4,SW V5 17 05 31,SV3,18480001,20000826,1,0,0,0,0,0,NA,`7`,0,470,Filtering,4,0,7,7,0,0,:` 1617 | 1618 | Line: R3 1619 | Read Bit: 18 1620 | Data Type: Integer, current limit. 1621 | 1622 | # SpaNET API Requests List 1623 | COMING SOON - IN DEVELOPMENT 1624 | --------------------------------------------------------------------------------