Compare commits

...

150 commits

Author SHA1 Message Date
Ray Jones f041cf8cad Final release V3.2.2 2020-09-16 14:46:54 +10:00
Ray Jones d0a5da308d IDF PATCH TO SOLVE RMT CRASH WEHN SAVING TO FLASH 2020-06-30 05:46:31 +10:00
Ray Jones a9e0a1e60d Made release version V3.2.1 2020-06-22 12:15:57 +10:00
Ray Jones ef04489fa6 Allowed web update of beta version to release of same base version 2020-06-19 16:49:40 +10:00
Ray Jones f18cfbf2e5 Manual selective Merge from bleeding edge, pulling in 433MHz, new HC05 and NV storage semaphore fix. 2020-06-19 11:24:44 +10:00
Ray Jones 2548191173 V3.2.0 release 2020-05-21 07:42:15 +10:00
Ray Jones 21e17d1a2b Fix for incoming MQTT status 1
Use pull up resistor for new HC-05 BT modules rx data
2020-05-21 07:27:06 +10:00
Ray Jones 775f235ba8 Added Stop/Start thermostat mode
FuelUsage & FuelRate added as basic MQTT status topics
2020-05-13 10:37:31 +10:00
Ray Jones 24d8a4a7f1 Added timer retry according to temperature being denied in the past 2020-05-09 19:17:21 +10:00
Ray Jones 7b36aa27f5 Tidy up after check pull 2020-05-07 11:51:15 +10:00
Ray Jones 4b3951b465 BUG FIX: signed 16 bit issue reporting altitude over JSON 2020-05-07 10:12:20 +10:00
Ray Jones 97f3433158 BIG FIXES: External thermostat start denied if internal thermostat too high
Pump priming from web page only worked once - was because prime command was never released from heater.
2020-05-06 10:41:26 +10:00
Ray Jones 3129a88cb9 Pretty stable with https library BUT #ifdef'd out actual https usage is is very temperamental ATM. 2020-05-03 21:59:56 +10:00
Ray Jones c74f0a76eb Merge branch 'WebAuth' into SSLtrials
Conflicts resolved:
	src/Afterburner.cpp
	src/WiFi/BTCWebServer.cpp
	src/WiFi/BrowserUpload.cpp
	src/cfg/BTCConfig.h
2020-04-26 19:52:00 +10:00
Ray Jones b75254220c Allow entry of no password 2020-04-26 19:28:31 +10:00
Ray Jones 9ff2d9410b Split websocket handling into a task
Read all added to BME-280 (MariusZ)
New security menu in debug/telnet
2020-04-26 16:15:08 +10:00
Ray Jones 5cdc5c95a5 Moved Blue Wire Comms to a separate task 2020-04-25 09:23:16 +10:00
Ray Jones 28bfb28ff6 Adding web authorisation 2020-04-22 16:42:24 +10:00
Ray Jones baf8678e99 Added some FreeRTOS tasks to avoid blocking issues - still very unreliable 2020-04-22 16:21:24 +10:00
Ray Jones b58ed90432 Found websocket write was blocking, returning 0, leading to WD reboot. Need to think of proper fix 2020-04-20 13:39:39 +10:00
Ray Jones 67998747d7 Added DemandManager, removing TimerManager from direct temperature demand control aspects
Likewise moved demand adjustments into DemandManager.
2020-04-11 18:49:52 +10:00
Ray Jones 9839571893 Added support for injecting Fixed Hz demands if a timer start has a defined temperature.
Uses normal range for fixed Hz.
2020-04-11 07:51:25 +10:00
Ray Jones 4625f98cf3 Core panic in TxManage, concluding gate in timer callback - using digitalwrite is BAD @ ISRL!!!
Now use FreeRTOS queue to pass the actual event down.
2020-04-09 06:57:26 +10:00
Ray Jones 0ed7ba7e59 Fixed NULL dereference in asyncHTTPrequest - causes core panics if STA but no internet/server unreachable 2020-04-08 20:17:40 +10:00
Ray Jones 4eddcd0f1e STA only mode
Fixed MQTT topic prefix
2020-04-08 07:51:52 +10:00
Ray Jones 3e3ef7d2f2 AsyncTCP touch 2020-03-31 19:48:03 +11:00
Ray Jones 9c100f1954 Added Fuel Reset GPIO input option 2020-03-31 19:46:25 +11:00
Ray Jones 8ec438e02a Added excess fuel usage shutdown feature 2020-03-30 16:17:54 +11:00
Ray Jones 8b8aaf0024 Timer Temperature support added
Desired temperature requests are now managed via TimerManager to allow timer override of desired temperature.
Bug fix: crash checking for new firmware if no STA connection
Suppression of GPIO JSON if no or limited GPIO capability is installed.
2020-03-29 13:59:13 +11:00
Ray Jones 87b1704335 Added OLED and JSON Web Content Update functionality 2020-03-25 20:28:12 +11:00
Ray Jones 1d80e34c4b Added web content download feature.
Need to incorporate into OLED menus etc.
2020-03-24 21:14:41 +11:00
Ray Jones 4986a4d741 Assortment of tweaks and fixes
New Features:
GPIO "Run" status output (not standby)
RSSI of STA connection
STA gatewayIP
Only run as "active" controller when changes to fuel mixture etc for a short while.
Timed moderation added for frequently changing JSON vars
Altitude & Humidity via JSON
JSON reboot (mainly for MQTT clients)

Bug Fixes:
Cyclic not enabled when frost start
LVC holdoff added for "starting car" situation
Better handling of string and float NV Storage defaults
FrostRise limits  1-30 now 0-30
Handle spaces in SPIFFS file uploads
2020-03-23 16:54:15 +11:00
Ray Jones 3ca3e633ae Added getch the to our TelnetSpy overload. This adds the logic to add a LF if only CR is sent by a terminal package 2020-01-15 17:52:43 +11:00
Ray Jones 06d78860ca Bug fix: Factory default would not save 2020-01-15 07:55:57 +11:00
Ray Jones 41d43813b7 V3.1.8 2020-01-13 19:58:55 +11:00
Ray Jones 7e1a4940ac Added BME280 humidity and altitude information
Can start heater if high humidity
Altitude reported to heater per BMP180 in OEM controllers.
lowered min Hz limit to 500
2020-01-13 19:48:32 +11:00
Ray Jones 083fb63764 BUG FIX: always showing offset against DS18B20 in temp sensor role screen 2020-01-09 12:50:54 +11:00
Ray Jones 88cf18bfcf BUG FIX: insufficient wait time after OEM controller data packet, bad calc of start time :-( 2020-01-07 12:30:13 +11:00
Ray Jones af1ab021a4 Renamed to ABMQTT.cpp/.h 2020-01-06 06:11:22 +11:00
Ray Jones 194cc08ac9 Case Sensitive issue "ABmqtt"/"ABMqtt" -> "ABMQTT.h" 2020-01-05 08:46:46 +11:00
Ray Jones f5d72e2ac8 Using asyncHTTPrequest for version update check, synchronous method for actual update.
Released and tagged as V3.1.7.4 BETA
2020-01-04 18:13:40 +11:00
Ray Jones 69155f8e45 Stabilise using AsyncTCP to scrape FOTA JSON file.
Need to establish WTF "closed_slots" in AsyncTCP are all about, especially the bad indexes that fly about leading to LWIP crashes.
2019-12-15 17:58:11 +11:00
Ray Jones c76490481d Bug fixes:
Telnet spy would not work in AP only mode
LVC would not allow start when in warning mode, and LVC warning always started at 12/24V
Added "No GPIO" option for new boards with C6 fitted as a 0R
2019-12-06 21:12:56 +11:00
Ray Jones c9298656fa Tx gate now terminated via a HW timer callback. Using max priority task for SW watchdog. 2019-11-22 21:30:45 +11:00
Ray Jones c649517805 BUG FIX: Introduced an E-07 issue if an OEM controller was plugged in
- was due to vTaskDelay at end of loop() - now only delays if OEM is NOT detected.
2019-11-21 20:32:54 +11:00
Ray Jones 6fb7b9d608 Added UIEditScreen class to standardise the save&confirm behaviour.
Bug fix in body temperature sensor < 0
2019-11-21 19:25:14 +11:00
Ray Jones eb2e2d4305 bug fix of rowsel in ds18b20 screen 2019-11-11 18:59:49 +11:00
Ray Jones d8e71eebc1 Added Frost Mode setup screen, sub-classed NVstore confirm behaviour 2019-11-10 15:44:54 +11:00
Ray Jones 53430d3fa0 frost icon 2019-11-01 09:25:58 +11:00
Ray Jones 7081391f63 Added core frost functionality 2019-11-01 09:24:58 +11:00
Ray Jones f2af9c3fda Added under/over temperature threshold for GPIO outputs 2019-10-30 21:48:25 +11:00
Ray Jones 96b3cecdb0 Updated AsyncTCP library - had bad DNS handling if name not resolvable (null pointer dereference) 2019-10-28 17:32:16 +11:00
Ray Jones b1cee63ec3 Added ABTelnetSpy derived class modules 2019-10-27 16:37:12 +11:00
Ray Jones 4138d0b2f5 Blocked debug messages whilst getting other strings. STA only retries if a SSID is defined 2019-10-27 15:24:54 +11:00
Ray Jones 5efce879ce Quietened down debug reporting when MQTT or Bluetooth debug menus active.
Single debug report of one wire searches (init only typ.)
2019-10-27 14:25:40 +11:00
Ray Jones f330d812e6 Added JTAG use defines for ESP PROG debug 2019-10-27 11:02:49 +11:00
Ray Jones 8893abb575 tidy up 2019-10-20 20:19:27 +11:00
Ray Jones 2e25ad3da4 Fixed role ordering in NV for DS18B20 probe offsets
Replaced ` with clean degree symbol in standard font & arial 8
Removed temp offset from fuel cal screen
GUI alignment tweaks to avoid cutoffs
Better handling of single DS18B20 with BME280
Added bounds limits to Exponential Mean
Sorted inheritance from CSensor properly
2019-10-19 09:58:19 +11:00
Ray Jones aabe6a54b3 Stabilised BME280 with DS18B20 coexistence 2019-10-18 12:55:16 +11:00
Ray Jones 7c43523d51 V3.1.5 bootloader update 2019-09-26 06:34:30 +10:00
Ray Jones ab246244c9 Merge branch 'Branch_V3BoardDetect' 2019-09-25 19:39:02 +10:00
Ray Jones af34331401 Dig Only V3 PCB, Fixed Hz setting reporting bug fix 2019-09-25 19:38:19 +10:00
Ray Jones 112628f103 Tidy up 2019-09-25 17:27:43 +10:00
Ray Jones 573ebf3e3b Added auto save of single DS18B20 serial number 2019-09-22 14:46:39 +10:00
Ray Jones 8fb1981552 Added Temp Probe selection screen, mapping sensors to user preferences 2019-09-22 09:03:42 +10:00
Ray Jones de9417ff73 Tidied JSON/MQTT topic command decode into UtilClasses.cpp 2019-09-21 09:58:51 +10:00
Ray Jones 6e86571a19 Merged branch 'VerboseMQTTout'
Resolved Conflicts:
	src/Afterburner.cpp
	src/Utility/BTC_JSON.cpp
2019-09-21 08:11:36 +10:00
Ray Jones bf537d1ac5 MQTT can now accept any cmd topic that matches the JSON names 2019-09-20 23:00:27 +10:00
Ray Jones 095797f8b0 . 2019-09-19 19:23:59 +10:00
Ray Jones b2cc6ff36d V3.1.4 2019-09-19 19:04:09 +10:00
Ray Jones c51b18dd36 Added password hold option 2019-09-17 20:07:57 +10:00
Ray Jones 3a70970356 Added menu mode selection menu 2019-09-17 08:30:49 +10:00
Ray Jones 36d1b06ba2 Adding DHT22 library 2019-09-15 12:55:02 +10:00
Ray Jones f93e5d7628 Add basic menu Modes 2019-09-15 12:51:51 +10:00
Ray Jones d30536e939 V3.1.3 - Bug fix not disabling WiFi correctly 2019-09-12 06:32:21 +10:00
Ray Jones 3a810d6eea Tidied Repeating timer icon 2019-09-08 11:56:22 +10:00
Ray Jones fa36236948 V3.1.2 bootload 2019-09-08 11:38:45 +10:00
Ray Jones ac5fdc5dfd V3.1.2 -
AM/PM selection in clock setup menu.
Extra MQTT JSON IDs added.

Filtered No Heater JSON.
2019-09-08 10:14:36 +10:00
Ray Jones 583a4881cd Added AM/PM annunciators to clock for 12hr mode
Added last will to MQTT connection
Condensed no heater timeouts with default screen
2019-09-07 23:48:46 +10:00
Ray Jones 9fbb6e8dfc Shifted MQTT telnet setup into a separate module.
Fixed addCRC script for > V3 python
2019-09-07 18:28:21 +10:00
Ray Jones 77dada9d6b BUG FIX: Fuel gauge reset via web page
NEW FEATURE: MQTT status screen
2019-09-04 20:59:01 +10:00
Ray Jones 13fb3f715a Un commented the code that restores an STA connection 2019-09-02 08:22:33 +10:00
Ray Jones 8a237059fd Added JSON driven watchdog 2019-09-01 17:35:12 +10:00
Ray Jones 3e4ce429c7 BUG FIX: bad clientID due to bad MQTT library - causes disconnects with multiple AB's on one broker!
IMPROVEMENT: MQTT reconnect implemented.
2019-09-01 14:43:00 +10:00
Ray Jones fdf4e9af99 Set version to V3.1.0 - MQTT!!! 2019-08-31 17:41:01 +10:00
Ray Jones 61e246f6f1 telnet menu to setup MQTT. JSON now pushed over MQTT - typ. topic name: Afterburner/JSONout 2019-08-31 17:34:56 +10:00
Ray Jones 253bc3f728 Added MQTT topic for controller to NV store.
Found PubSubClient is blocking, causing WD reboots
2019-08-30 20:08:54 +10:00
Ray Jones f6f721bd8a Got basic MQTT session working to test.mosquito.org :-) 2019-08-27 23:09:07 +10:00
Ray Jones c79522233c Added Stop function to GPIO input #1 (eg CO sensor with Ext Thermostat 2019-08-27 20:35:21 +10:00
Ray Jones 08a39a26f7 Added countdown to detailed GUI for external thermostat shutdown feature 2019-08-27 06:13:01 +10:00
Ray Jones 7853102a4d Added external thermostat time function to GPIO setup screen 2019-08-26 08:41:44 +10:00
Ray Jones e7bac339b5 Implemented functionality to start & stop heater according to external thermostat input 2019-08-26 06:37:41 +10:00
Ray Jones f5a8c3c11e BUG FIX: GPIO2 set for external thermostat sent dT as the Greek 'd' in the JSON - BAD - broke websocket 2019-08-19 05:33:07 +10:00
Ray Jones a491db257a Proper binary in bootload 2019-08-11 09:50:17 +10:00
Ray Jones 79b6c06a2a Added AP SSID/password configuration via debug port 2019-08-10 21:45:28 +10:00
Ray Jones d7e083b837 Board detect bug fix. New icons for GPIO setup/status 2019-08-10 15:57:46 +10:00
Ray Jones 4873fa8c71 Split GPIO so each pin's function is defined individually.
Adjusted DS18B20 timing to match Maxim's recommended values.
2019-08-09 06:13:02 +10:00
Ray Jones 48a0254f13 Can now define the operation mode for each GPIO line individually.
Need to test actual functionality, GUI OK.
2019-08-07 22:04:20 +10:00
Ray Jones 10db95733f Added external thermostat via GPIO in 2. Want to change how GPIO pins are defined.
Modded code to only allow single DS18B20 - getting funny ROM SEARCH lock ups...
Set mini temp sample interval to 750ms, as per data sheet for 12bit DS18B20
2019-08-07 18:59:30 +10:00
Ray Jones e205119b24 Added trap for skipping directly to suspend if already over temperature with cyclic mode enabled.
Otherwise heater starts then runs stop cycle immediately!
2019-08-04 11:15:41 +10:00
Ray Jones 1c314e14f2 removed debug prints of TempCurrent - grrrrr 2019-08-04 08:23:54 +10:00
Ray Jones 2a788cb2d0 Fixed rounding issue of TempCurrent in JSON data, always 0.1 low 2019-08-04 08:19:59 +10:00
Ray Jones 27b988c895 Fixed referral to test FOTA page 2019-08-03 20:47:19 +10:00
Ray Jones e5e0f87e0b Tidy of animation counts in screen header - was delaying appearance of battery icon 2019-08-03 19:52:37 +10:00
Ray Jones 08d0307fc8 BUG FIX: Web update was broken due to watchdog timeout - added onProgress to FOTA - all good now
Returned to compact timer icon, press centre button to see start/stop times in base menus
Version info screen refactored to show available version number
New splash screen now presented upon display for a short time after upload or rename to /splash.bmp
2019-08-03 12:42:49 +10:00
Ray Jones ac091fa6d8 Added ability to upload custom splash ScreenFlowV3.dia.
Added 4th board type - GPIO disabled on V2.0 PCB - install 0R in C6, leave other bits out.
2019-08-01 22:57:18 +10:00
Ray Jones 945d9c88b7 Revised CRCengine to include all bytes uploaded - CRC of everything should be 0! 2019-07-31 06:27:04 +10:00
Ray Jones 8daf555950 Validation CRC now generated by python script 2019-07-30 22:59:51 +10:00
Ray Jones 1b3b478a49 Reset to original Arduino min_spiffs partition layout.
Fixed a residual screen refresh issue with cyclic enabled and max temp dialed up - marker stuck.
SPIFFS upload added to bootload.zip COM.bat
2019-07-30 19:21:55 +10:00
Ray Jones a52143479f Fix of residual screen content following browser updates of SPIFFS files. 2019-07-28 20:59:26 +10:00
Ray Jones c1207e66ef Extreme makeover to timer manager, now properly shows one shot next day timers in timer chart.
Added cursor showing time of day on Timer chart.
2019-07-28 17:40:12 +10:00
Ray Jones f154580eb2 Tidied up timer setup screen
OTA uploads now have a bar graph!
2019-07-28 11:37:39 +10:00
Ray Jones 6c21a9c6a6 Titled Timer screen - lost std header
Added missing source files
2019-07-28 09:07:29 +10:00
Ray Jones d563cb0c8a MASSIVE rework of the menu structure 2019-07-28 00:28:39 +10:00
Ray Jones a7348fdbf5 Decoding HC-05 MAC address 2019-07-27 12:47:16 +10:00
Ray Jones dfa60eb491 added cable compensation to LVC warning threshold 2019-07-27 08:50:09 +10:00
Ray Jones ca0e763da6 Added Hour Meters screen 2019-07-26 23:12:00 +10:00
Ray Jones d2116fc18c Cleaner hourmeter handling using a new class for each counter.
Added a warning animation to LVC, ether <12V, or 0.5V > LVC if that result is over 12V
2019-07-26 22:13:46 +10:00
Ray Jones f86ae7cffb tidied Hourmeter class, staged NV changes to write in correct time slot 2019-07-26 06:39:56 +10:00
Ray Jones 1dbfa67163 Storing actual runtimes to NV store at heater off, resetting intermediates at same time.
Improved restart behaviour of persistent variable handling
2019-07-25 22:31:31 +10:00
Ray Jones 2084c7d60c added BootInit flag to RTC store - used for persistent vars init after OTA updates 2019-07-25 21:27:57 +10:00
Ray Jones c621f7078c Moved src/libraries to /lib - '.a' files now get generated by PIO for each library. 2019-07-25 17:40:23 +10:00
Ray Jones 9c338fa74c Main skeleton of Hourmeter in place 2019-07-25 06:06:47 +10:00
Ray Jones 92283a3e0d Added module files for fuelgauge, RTCStore, HourMeter 2019-07-24 19:25:07 +10:00
Ray Jones 204007401b tweaked reboot message timeouts for /update & /reboot 2019-07-23 22:56:04 +10:00
Ray Jones 04de63b07e Added empty Afterburner.ino file - well a file full of comments 2019-07-23 22:44:47 +10:00
Ray Jones 8ebf6dbf3e Refactored directory hierarchy to regain some linker command line space in PIO 2019-07-23 22:32:36 +10:00
Ray Jones cb79fd5dd0 BUG FIX - E-01 fired upon reboots with premature low volt detection
Improvement - /update and /reboot now have a post event status sequence during reboot.
2019-07-23 21:11:29 +10:00
Ray Jones db3343d362 Bug Fix: bounds checks for LVC did not allow 0 2019-07-23 06:15:18 +10:00
Ray Jones 672645c59a Merge branch 'FuelGauge' 2019-07-22 21:10:15 +10:00
Ray Jones cf41285052 added new icons/MiniThermo.bmp 2019-07-22 21:07:10 +10:00
Ray Jones dca26680b4 cancel cyclic mode upon error fail 2019-07-22 20:58:36 +10:00
Ray Jones d6bba90c84 LVC JSON now proper floating point.
Tidied screen dribbles in priming menu
2019-07-22 06:30:08 +10:00
Ray Jones 06e69acc77 Added Low Volt Cutout, Temperature probe offset
Tarted up fuel mixture adjust screen
2019-07-21 21:17:54 +10:00
Ray Jones dd5e62c8cb Rework priming menu, can now reset fuel gauge. JSON added for fuel usage & cal. 2019-07-20 16:08:43 +10:00
Ray Jones 04ae988d2d . 2019-07-20 06:53:12 +10:00
Ray Jones a543ba0748 Tidied browser update by adding new browserupload class.
Adding RTC register storage for frequent NV updates (fuel gauge, desired temp etc)
2019-07-18 22:28:40 +10:00
Ray Jones e50d93bb8c Using RTC registers to store fuel gauge.
Added BrowserUpload class
2019-07-18 22:25:28 +10:00
Ray Jones 77ac324d64 Added SPIFFS upload error detection and feedback to browser
Added Time/Date responses
2019-07-17 19:35:34 +10:00
Ray Jones 4d6ab5b280 Single shot SQuery (stops JSON Time & UpTime constantly being sent).
Working on SPIFFS upload abort if out of space....
2019-07-16 06:29:23 +10:00
Ray Jones 16ee16f97f Added support for .gz compressed SPIFFS files.
Using wrapper for millis() via library --wrap option, returns xTaskGetTicksCount() instead of the very dubious int64_t/1000 of default millis(), especially when it gets BIG.
2019-07-15 19:56:36 +10:00
Ray Jones 1f28bb7d5d Added JSON IP query parameters 2019-07-11 22:03:27 +10:00
Ray Jones de1eb48f78 Added CRC generation code 2019-07-11 18:59:40 +10:00
Ray Jones b6b0c7afbd stylish /update & /formatspiffs 2019-07-11 18:55:31 +10:00
Ray Jones 8dd5dc662e Added extra CRC checking to OTA 2019-07-09 22:19:21 +10:00
Ray Jones 278d40af33 big dependency tidy up 2019-07-07 17:18:38 +10:00
Ray Jones 66f10445a4 Update .gitignore 2019-07-06 23:51:20 +10:00
Ray Jones 2f38a33984 Omitted DataFilter.cpp &DataFilter.h 2019-07-06 23:48:38 +10:00
Ray Jones 1b4b6699c5 Added exponential mean to heater data.
Replaced char with int8_t - damn thing was unsigned!
Likewise uint8_t for unsigned char
Rework of webserver inbuilt management functions cross linked, work well
2019-07-06 23:46:20 +10:00
Ray Jones c20b309184 Added CyclicOn, CyclicOff, CyclicTemp JSON Removed UserSettings subset setters/getters
BOUNDS checking on JSON inputs
2019-07-03 23:01:36 +10:00
1654 changed files with 77071 additions and 37098 deletions

8
.gitignore vendored
View file

@ -17,3 +17,11 @@ __vm
/.vscode/extensions.json
Arduino/Afterburner/data/*
Arduino/Afterburner/src/*
/Altium
/Releases
/webdev
/case
/DieselHeaterV2.PcbDoc
/StandardResponse.txt
/HeaterHack-Tested.zip
/OTA_COM.txt

6
ABpartition.csv Normal file
View file

@ -0,0 +1,6 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x1E0000,
app1, app, ota_1, 0x1F0000,0x1E0000,
spiffs, data, spiffs, 0x3D0000,0x30000,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x9000 0x5000
3 otadata data ota 0xe000 0x2000
4 app0 app ota_0 0x10000 0x1E0000
5 app1 app ota_1 0x1F0000 0x1E0000
6 spiffs data spiffs 0x3D0000 0x30000

BIN
AppInventor/BT.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
AppInventor/BTsmall.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
AppInventor/BTverysmall.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,34 @@
/**********************************************************************
* This file is deliberately empty.
*
* It only exists to satisfy the Arduino IDE's perverse requirement that a
* .ino must live directly below a parent directory, with the same name.
*
* In this instance Afterburner\Afterburner.ino
*
* I seriously recommend you use PLatformIO with your favourite editor.
*
* The real source code for the entire project is linked to via a symbolic
* link to the ClonedRepo\src, lib & data directories.
*
* ie ClonedRepo\Arduino\Afterburner\src\src -> ClonedRepo\src (..\..\src)
* ie ClonedRepo\Arduino\Afterburner\src\lib -> ClonedRepo\lib (..\..\lib)
* ie ClonedRepo\Arduino\Afterburner\data -> ClonedRepo\data (..\..\data)
*
* A batch file is in this folder to create these links, please use it first.
*
* Whilst initially alarming that is .ino file is empty, the Arduino IDE
* happily creates the required executable :-)
*
* The REAL host of setup() and loop() resides in ClonedRepo\src\Afterburner.cpp
*
*
*****************************************************************************
*****************************************************************************
** **
** DUMP the Arduino IDE, and use PlatformIO. **
** Load the ClonedRepo path into PlatformIO. **
** Builds much faster and meshes well with decent programming editors :-) **
** **
*****************************************************************************
*****************************************************************************/

View file

@ -1,4 +1,5 @@
#!/bin/sh
ln -s ../../src/Afterburner/Afterburner.cpp Afterburner.ino
ln -s ../../src/Afterburner/src src
ln -s ../../src/Afterburner/data data
mkdir src
ln -s ../../src src/src
ln -s ../../lib src/lib
ln -s ../../data data

View file

@ -1,5 +1,7 @@
mklink /H Afterburner.ino ..\..\src\AfterBurner\Afterburner.cpp
mklink /J src ..\..\src\Afterburner\src
mklink /J data ..\..\src\Afterburner\data
rem mklink /H Afterburner.ino ..\..\src\AfterBurner\Afterburner.cpp
mkdir src
mklink /J src\lib ..\..\lib
mklink /J src\src ..\..\src
mklink /J data ..\..\data

View file

@ -1,19 +1,20 @@
EVERYTHING IN THIS FOLDER IS FAKE!
TO WORK WITH ARDUINO IDE, EVERYTHING IN THIS FOLDER IS FAKE!
When you pull from gitlab, no symbolic links will be created.
Then execute MakeSymLinks_Windows.bat from Explorer.
You need to execute MakeSymLinks_Windows.bat from Explorer.
The real root source exists as a .cpp file: repo\src\Afterburner\Afterburner.cpp
However Arduino insists upon .ino for their projects, and the file name also
has to match the parent directory name.
Arduino insists upon .ino for their projects, and the .ino
file name also has to match the parent directory name.
The BIG trick here is Afterburner.ino is empty - zilch, nada, nothing!
All the REAL source code lives via the src symbolic link.
The real core exists as a .cpp file: repo\src\Afterburner.cpp
If .ino and .cpp live in same directory - double trouble at link time!
Works for PlatformIO, but not Arduino builds.
Arduino\Afterburner\Afterburner.ino is EMPTY
Arduino\Afterburner\src\src links to repo\src\
Arduino\Afterburner\src\lib links to repo\lib\
Arduino\Afterburner\data links to repo\data
Ugggh. I hate Arduino IDE (and it's build environment!)
Likewise:
src is linked to repo\src\Afterburner\src
data is linked to repo\src\Afterburner\data

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1 +1,5 @@
esptool.exe --chip esp32 --port COM14 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader_qio_80m.bin 0x10000 Afterburner.bin 0x8000 Afterburner.partitions.bin
REM Firmware
esptool.exe --chip esp32 --port COM5 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader_qio_80m.bin 0x10000 AfterburnerV3.1.9.bin 0x8000 Afterburner.partitions.bin
REM SPIFFS
esptool.exe --chip esp32 --port COM5 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_size detect 0x3d0000 spiffs.bin

22
Bootload/Checklist.txt Normal file
View file

@ -0,0 +1,22 @@
Afterburner operation checklist
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OLED intact
Latest firmware uploaded
SPIFFS uploaded
Check temperature sensor
Keypad functions OK
Indicator LEDs function
Web server functions and serves heater control page
Bluetooth pairs and streams SPP data
Set time
Install battery
GPIO units only
~~~~~~~~~~~~~~~
Check pressure sensor
GPIO functions:
Input x2
Output x2
Analogue

View file

@ -1 +1 @@
espota.exe -i 192.168.1.1 -p 3232 --auth= -f Afterburner.bin
espota.exe -i 192.168.1.1 -p 3232 --auth= -f AfterburnerV3.0.1.bin

View file

@ -1 +1 @@
espota.exe -i 192.168.4.1 -p 3232 --auth= -f Afterburner.bin
espota.exe -i 192.168.4.1 -p 3232 --auth= -f AfterburnerV3.0.1.bin

Binary file not shown.

BIN
CRCgen/AfterBurnerCRC.cpp Normal file

Binary file not shown.

11
CRCgen/Readme.txt Normal file
View file

@ -0,0 +1,11 @@
AfterburnerCRC.cpp is used to append a CRC-16 value to the
compiled binary file.
This CRC is used to confirm the binary image uploaded to the
Afterburner was genuinely intended for the Afterburner.
Naively attempting to upload the direct compiled output binary
will result in rejection of the upload attempt.
You will need to compile Afterburner.cpp and copy the resultant
executable to the repository root (adjacent to plaformio.ini)

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 933 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 KiB

BIN
Documentation/3pinplug.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

BIN
Documentation/BTC1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 KiB

BIN
Documentation/BTC2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

BIN
Documentation/BTCavatar.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

BIN
Documentation/Battery.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
Documentation/Battery2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 KiB

BIN
Documentation/BlackLCD.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 KiB

BIN
Documentation/BlueLCD.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

BIN
Documentation/BlueLCDRx.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

View file

@ -0,0 +1,825 @@
<!DOCTYPE html>
<html class="" lang="en"><head prefix="og: http://ogp.me/ns#">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<link href="https://assets.gitlab-static.net/" rel="dns-prefetch">
<link crossorigin="" href="https://assets.gitlab-static.net/" rel="preconnnect">
<meta content="IE=edge" http-equiv="X-UA-Compatible">
<meta content="object" property="og:type">
<meta content="GitLab" property="og:site_name">
<meta content="Detailed Control Menu · Wiki · Ray Jones / BluetoothHeater" property="og:title">
<meta content="Bluetooth interface for Chinese Diesel Heaters" property="og:description">
<meta content="https://gitlab.com/uploads/-/system/project/avatar/8512834/BTCavatar.jpg" property="og:image">
<meta content="64" property="og:image:width">
<meta content="64" property="og:image:height">
<meta content="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/User-Manual/Menus/Detailed-Control-Menu" property="og:url">
<meta content="summary" property="twitter:card">
<meta content="Detailed Control Menu · Wiki · Ray Jones / BluetoothHeater" property="twitter:title">
<meta content="Bluetooth interface for Chinese Diesel Heaters" property="twitter:description">
<meta content="https://gitlab.com/uploads/-/system/project/avatar/8512834/BTCavatar.jpg" property="twitter:image">
<title>Detailed Control Menu · Wiki · Ray Jones / BluetoothHeater · GitLab</title>
<meta content="Bluetooth interface for Chinese Diesel Heaters" name="description">
<link rel="shortcut icon" type="image/png" href="https://gitlab.com/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png" id="favicon" data-original-href="https://gitlab.com/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png">
<link rel="stylesheet" media="all" href="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/application-d2dc5140805b02e90dbb2eef91a5bc6c224c89f6664ba907.css">
<link rel="stylesheet" media="print" href="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/print-c8ff536271f8974b8a9a5f75c0ca25d2b8c1dceb4cff3c01d16038.css">
<script async="" src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/sp-438c6d3df8595dcbfe9a252fd3bacb37c189cc43f8c3770910e74c5372.js"></script><script>
//<![CDATA[
window.gon={};gon.api_version="v4";gon.default_avatar_url="https://assets.gitlab-static.net/assets/no_avatar-849f9c04a3a0d0cea2424ae97b27447dc64a7dbfae83c036c45b403392f0e8ba.png";gon.max_file_size=10;gon.asset_host="https://assets.gitlab-static.net";gon.webpack_public_path="https://assets.gitlab-static.net/assets/webpack/";gon.relative_url_root="";gon.shortcuts_path="/help/shortcuts";gon.user_color_scheme="dark";gon.sentry_dsn="https://526a2f38a53d44e3a8e69bfa001d1e8b@sentry.gitlab.net/15";gon.gitlab_url="https://gitlab.com";gon.revision="c02f0d4";gon.gitlab_logo="https://assets.gitlab-static.net/assets/gitlab_logo-7ae504fe4f68fdebb3c2034e36621930cd36ea87924c11ff65dbcb8ed50dca58.png";gon.sprite_icons="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg";gon.sprite_file_icons="https://gitlab.com/assets/file_icons-7262fc6897e02f1ceaf8de43dc33afa5e4f9a2067f4f68ef77dcc87946575e9e.svg";gon.emoji_sprites_css_path="https://assets.gitlab-static.net/assets/emoji_sprites-289eccffb1183c188b630297431be837765d9ff4aed6130cf738586fb307c170.css";gon.test_env=false;gon.suggested_label_colors=["#0033CC","#428BCA","#44AD8E","#A8D695","#5CB85C","#69D100","#004E00","#34495E","#7F8C8D","#A295D6","#5843AD","#8E44AD","#FFECDB","#AD4363","#D10069","#CC0033","#FF0000","#D9534F","#D1D100","#F0AD4E","#AD8D43"];gon.current_user_id=2730850;gon.current_username="mrjones.id.au";gon.current_user_fullname="Ray Jones";gon.current_user_avatar_url="https://secure.gravatar.com/avatar/e682029ec27261f07ea426908801cb06?s=80\u0026d=identicon";
//]]>
</script>
<script src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/runtime.js" defer="defer"></script>
<script src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/main.js" defer="defer"></script>
<script src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/raven.js" defer="defer"></script>
<script src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/commonspages_002.js" defer="defer"></script>
<script src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/commonspages.js" defer="defer"></script>
<script src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/pages.js" defer="defer"></script>
<script>
window.uploads_path = "/mrjones.id.au/bluetoothheater/uploads";
</script>
<meta name="csrf-param" content="authenticity_token">
<meta name="csrf-token" content="/WIXzzqUw7spAjtnGJk7/ujfLKrCRYVDdd7RH9ppUVgJfCPQNnPZUSEDnTGdbW49gjRDAmBWrsoh/U5LuDybug==">
<meta content="origin-when-cross-origin" name="referrer">
<meta content="width=device-width, initial-scale=1, maximum-scale=1" name="viewport">
<meta content="#474D57" name="theme-color">
<link rel="apple-touch-icon" type="image/x-icon" href="https://assets.gitlab-static.net/assets/touch-icon-iphone-5a9cee0e8a51212e70b90c87c12f382c428870c0ff67d1eb034d884b78d2dae7.png">
<link rel="apple-touch-icon" type="image/x-icon" href="https://assets.gitlab-static.net/assets/touch-icon-ipad-a6eec6aeb9da138e507593b464fdac213047e49d3093fc30e90d9a995df83ba3.png" sizes="76x76">
<link rel="apple-touch-icon" type="image/x-icon" href="https://assets.gitlab-static.net/assets/touch-icon-iphone-retina-72e2aadf86513a56e050e7f0f2355deaa19cc17ed97bbe5147847f2748e5a3e3.png" sizes="120x120">
<link rel="apple-touch-icon" type="image/x-icon" href="https://assets.gitlab-static.net/assets/touch-icon-ipad-retina-8ebe416f5313483d9c1bc772b5bbe03ecad52a54eba443e5215a22caed2a16a2.png" sizes="152x152">
<link color="rgb(226, 67, 41)" href="https://assets.gitlab-static.net/assets/logo-d36b5212042cebc89b96df4bf6ac24e43db316143e89926c0db839ff694d2de4.svg" rel="mask-icon">
<meta content="https://assets.gitlab-static.net/assets/msapplication-tile-1196ec67452f618d39cdd85e2e3a542f76574c071051ae7effbfde01710eb17d.png" name="msapplication-TileImage">
<meta content="#30353E" name="msapplication-TileColor">
<script>
;(function(p,l,o,w,i,n,g){if(!p[i]){p.GlobalSnowplowNamespace=p.GlobalSnowplowNamespace||[];
p.GlobalSnowplowNamespace.push(i);p[i]=function(){(p[i].q=p[i].q||[]).push(arguments)
};p[i].q=p[i].q||[];n=l.createElement(o);g=l.getElementsByTagName(o)[0];n.async=1;
n.src=w;g.parentNode.insertBefore(n,g)}}(window,document,"script","https://assets.gitlab-static.net/assets/shared/snowplow/sp-438c6d3df8595dcbfe9a252fd3bacb37c189cc43f8c3770910e74c53721eb15c.js","snowplow"));
window.snowplow('newTracker', 'cf', 'snowplow.trx.gitlab.net', {
appId: 'gitlab',
cookieDomain: '.gitlab.com',
userFingerprint: false,
respectDoNotTrack: true,
forceSecureTracker: true,
post: true,
contexts: {
webPage: true,
}
// Uncomment in https://gitlab.com/gitlab-org/gitlab-ee/issues/8432
// stateStorageStrategy: "localStorage"
});
window.snowplow('enableActivityTracking', 30, 30);
window.snowplow('trackPageView');
</script>
</head>
<body class="ui-indigo " data-find-file="/mrjones.id.au/bluetoothheater/find_file/master" data-group="" data-page="projects:wikis:show" data-project="bluetoothheater">
<header class="navbar navbar-gitlab qa-navbar navbar-expand-sm js-navbar">
<a class="sr-only gl-accessibility" href="#content-body" tabindex="1">Skip to content</a>
<div class="container-fluid">
<div class="header-content">
<div class="title-container">
<h1 class="title">
<a title="Dashboard" id="logo" href="https://gitlab.com/"><svg width="24" height="24" class="tanuki-logo" viewBox="0 0 36 36">
<path class="tanuki-shape tanuki-left-ear" fill="#e24329" d="M2 14l9.38 9v-9l-4-12.28c-.205-.632-1.176-.632-1.38 0z"></path>
<path class="tanuki-shape tanuki-right-ear" fill="#e24329" d="M34 14l-9.38 9v-9l4-12.28c.205-.632 1.176-.632 1.38 0z"></path>
<path class="tanuki-shape tanuki-nose" fill="#e24329" d="M18,34.38 3,14 33,14 Z"></path>
<path class="tanuki-shape tanuki-left-eye" fill="#fc6d26" d="M18,34.38 11.38,14 2,14 6,25Z"></path>
<path class="tanuki-shape tanuki-right-eye" fill="#fc6d26" d="M18,34.38 24.62,14 34,14 30,25Z"></path>
<path class="tanuki-shape tanuki-left-cheek" fill="#fca326" d="M2 14L.1 20.16c-.18.565 0 1.2.5 1.56l17.42 12.66z"></path>
<path class="tanuki-shape tanuki-right-cheek" fill="#fca326" d="M34 14l1.9 6.16c.18.565 0 1.2-.5 1.56L18 34.38z"></path>
</svg>
<span class="logo-text d-none d-lg-block prepend-left-8">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 617 169"><path d="M315.26 2.97h-21.8l.1 162.5h88.3v-20.1h-66.5l-.1-142.4M465.89 136.95c-5.5 5.7-14.6 11.4-27 11.4-16.6 0-23.3-8.2-23.3-18.9 0-16.1 11.2-23.8 35-23.8 4.5 0 11.7.5 15.4 1.2v30.1h-.1m-22.6-98.5c-17.6 0-33.8 6.2-46.4 16.7l7.7 13.4c8.9-5.2 19.8-10.4 35.5-10.4 17.9 0 25.8 9.2 25.8 24.6v7.9c-3.5-.7-10.7-1.2-15.1-1.2-38.2 0-57.6 13.4-57.6 41.4 0 25.1 15.4 37.7 38.7 37.7 15.7 0 30.8-7.2 36-18.9l4 15.9h15.4v-83.2c-.1-26.3-11.5-43.9-44-43.9M557.63 149.1c-8.2 0-15.4-1-20.8-3.5V70.5c7.4-6.2 16.6-10.7 28.3-10.7 21.1 0 29.2 14.9 29.2 39 0 34.2-13.1 50.3-36.7 50.3m9.2-110.6c-19.5 0-30 13.3-30 13.3v-21l-.1-27.8h-21.3l.1 158.5c10.7 4.5 25.3 6.9 41.2 6.9 40.7 0 60.3-26 60.3-70.9-.1-35.5-18.2-59-50.2-59M77.9 20.6c19.3 0 31.8 6.4 39.9 12.9l9.4-16.3C114.5 6 97.3 0 78.9 0 32.5 0 0 28.3 0 85.4c0 59.8 35.1 83.1 75.2 83.1 20.1 0 37.2-4.7 48.4-9.4l-.5-63.9V75.1H63.6v20.1h38l.5 48.5c-5 2.5-13.6 4.5-25.3 4.5-32.2 0-53.8-20.3-53.8-63-.1-43.5 22.2-64.6 54.9-64.6M231.43 2.95h-21.3l.1 27.3v94.3c0 26.3 11.4 43.9 43.9 43.9 4.5 0 8.9-.4 13.1-1.2v-19.1c-3.1.5-6.4.7-9.9.7-17.9 0-25.8-9.2-25.8-24.6v-65h35.7v-17.8h-35.7l-.1-38.5M155.96 165.47h21.3v-124h-21.3v124M155.96 24.37h21.3V3.07h-21.3v21.3"></path></svg>
</span>
</a></h1>
<ul class="list-unstyled navbar-sub-nav">
<li id="nav-projects-dropdown" class="home dropdown header-projects qa-projects-dropdown" data-track-label="projects_dropdown" data-track-event="click_dropdown"><button data-toggle="dropdown" type="button">
Projects
<svg class="caret-down"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#angle-down"></use></svg>
</button>
<div class="dropdown-menu frequent-items-dropdown-menu">
<div class="frequent-items-dropdown-container">
<div class="frequent-items-dropdown-sidebar qa-projects-dropdown-sidebar">
<ul>
<li class=""><a class="qa-your-projects-link" href="https://gitlab.com/dashboard/projects">Your projects
</a></li><li class=""><a href="https://gitlab.com/dashboard/projects/starred">Starred projects
</a></li><li class=""><a href="https://gitlab.com/explore">Explore projects
</a></li></ul>
</div>
<div class="frequent-items-dropdown-content">
<div><div class="search-input-container d-none d-sm-block"><input placeholder="Search your projects" type="search" class="form-control"> <svg aria-hidden="true" class="search-icon s16 ic-search"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#search"></use></svg></div> <!----> <div class="section-header">
Frequently visited
</div> <div class="frequent-items-list-container"><ul class="list-unstyled"><li class="section-empty">
Projects you visit often will appear here
</li></ul></div></div>
</div>
</div>
</div>
</li><li id="nav-groups-dropdown" class="home dropdown header-groups qa-groups-dropdown" data-track-label="groups_dropdown" data-track-event="click_dropdown"><button data-toggle="dropdown" type="button">
Groups
<svg class="caret-down"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#angle-down"></use></svg>
</button>
<div class="dropdown-menu frequent-items-dropdown-menu">
<div class="frequent-items-dropdown-container">
<div class="frequent-items-dropdown-sidebar qa-groups-dropdown-sidebar">
<ul>
<li class=""><a class="qa-your-groups-link" href="https://gitlab.com/dashboard/groups">Your groups
</a></li><li class=""><a href="https://gitlab.com/explore/groups">Explore groups
</a></li></ul>
</div>
<div class="frequent-items-dropdown-content">
<div><div class="search-input-container d-none d-sm-block"><input placeholder="Search your groups" type="search" class="form-control"> <svg aria-hidden="true" class="search-icon s16 ic-search"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#search"></use></svg></div> <!----> <div class="section-header">
Frequently visited
</div> <div class="frequent-items-list-container"><ul class="list-unstyled"><li class="section-empty">
Groups you visit often will appear here
</li></ul></div></div>
</div>
</div>
</div>
</li><li class="d-none d-xl-block d-lg-block"><a class="dashboard-shortcuts-activity" title="Activity" href="https://gitlab.com/dashboard/activity">Activity
</a></li><li class="d-none d-xl-block d-lg-block"><a class="dashboard-shortcuts-milestones" title="Milestones" href="https://gitlab.com/dashboard/milestones">Milestones
</a></li><li class="d-none d-xl-block d-lg-block"><a class="dashboard-shortcuts-snippets" title="Snippets" href="https://gitlab.com/dashboard/snippets">Snippets
</a></li><li class="d-lg-none d-xl-none dropdown header-more">
<a data-toggle="dropdown" href="#">
More
<svg class="caret-down"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#angle-down"></use></svg>
</a>
<div class="dropdown-menu">
<ul>
<li class=""><a title="Activity" href="https://gitlab.com/dashboard/activity">Activity
</a></li><li class=""><a class="dashboard-shortcuts-milestones" title="Milestones" href="https://gitlab.com/dashboard/milestones">Milestones
</a></li><li class=""><a class="dashboard-shortcuts-snippets" title="Snippets" href="https://gitlab.com/dashboard/snippets">Snippets
</a></li><li class=""><a title="Operations" aria-label="Operations" href="https://gitlab.com/-/operations"><svg class="s18"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#dashboard"></use></svg>
</a></li>
</ul>
</div>
</li>
<li class="hidden">
<a title="Projects" class="dashboard-shortcuts-projects" href="https://gitlab.com/dashboard/projects">Projects
</a></li>
<li class=""><a title="Operations" aria-label="Operations" href="https://gitlab.com/-/operations"><svg class="s18"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#dashboard"></use></svg>
</a></li>
</ul>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="header-new dropdown" data-track-event="click_dropdown" data-track-label="new_dropdown">
<a class="header-new-dropdown-toggle has-tooltip qa-new-menu-toggle" title="New..." ref="tooltip" aria-label="New..." data-toggle="dropdown" data-placement="bottom" data-container="body" data-display="static" href="https://gitlab.com/projects/new"><svg class="s16"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#plus-square"></use></svg>
<svg class="caret-down"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#angle-down"></use></svg>
</a><div class="dropdown-menu dropdown-menu-right">
<ul>
<li class="dropdown-bold-header">
This project
</li>
<li><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/issues/new">New issue</a></li>
<li><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/merge_requests/new">New merge request</a></li>
<li><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/snippets/new">New snippet</a></li>
<li class="divider"></li>
<li class="dropdown-bold-header">GitLab</li>
<li><a class="qa-global-new-project-link" href="https://gitlab.com/projects/new">New project</a></li>
<li><a href="https://gitlab.com/groups/new">New group</a></li>
<li><a href="https://gitlab.com/snippets/new">New snippet</a></li>
</ul>
</div>
</li>
<li class="nav-item d-none d-sm-none d-md-block m-auto">
<div class="search search-form" data-track-event="activate_form_input" data-track-label="navbar_search">
<form class="form-inline" action="/search" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="✓"><div class="search-input-container">
<div class="search-input-wrap">
<div class="dropdown" data-url="/search/autocomplete">
<input type="search" name="search" id="search" placeholder="Search or jump to…" class="search-input dropdown-menu-toggle no-outline js-search-dashboard-options disabled" spellcheck="false" tabindex="1" autocomplete="off" data-issues-path="/dashboard/issues" data-mr-path="/dashboard/merge_requests" aria-label="Search or jump to…">
<button class="hidden js-dropdown-search-toggle" data-toggle="dropdown" type="button"></button>
<div class="dropdown-menu dropdown-select">
<div class="dropdown-content"><ul>
<li class="dropdown-menu-empty-item">
<a>
Loading...
</a>
</li>
</ul>
</div><div class="dropdown-loading"><i aria-hidden="true" data-hidden="true" class="fa fa-spinner fa-spin"></i></div>
</div>
<svg class="s16 search-icon"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#search"></use></svg>
<svg class="s16 clear-icon js-clear-input"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#close"></use></svg>
</div>
</div>
</div>
<input type="hidden" name="group_id" id="group_id" class="js-search-group-options">
<input type="hidden" name="project_id" id="search_project_id" value="8512834" class="js-search-project-options" data-project-path="bluetoothheater" data-name="BluetoothHeater" data-issues-path="/mrjones.id.au/bluetoothheater/issues" data-mr-path="/mrjones.id.au/bluetoothheater/merge_requests" data-issues-disabled="false">
<input type="hidden" name="scope" id="scope" value="wiki_blobs">
<input type="hidden" name="repository_ref" id="repository_ref">
<div class="search-autocomplete-opts hide" data-autocomplete-path="/search/autocomplete" data-autocomplete-project-id="8512834"></div>
</form></div>
</li>
<li class="nav-item d-inline-block d-sm-none d-md-none">
<a title="Search" aria-label="Search" data-toggle="tooltip" data-placement="bottom" data-container="body" href="https://gitlab.com/search?project_id=8512834"><svg class="s16"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#search"></use></svg>
</a></li>
<li class="user-counter"><a title="Issues" class="dashboard-shortcuts-issues" aria-label="Issues" data-toggle="tooltip" data-placement="bottom" data-container="body" href="https://gitlab.com/dashboard/issues?assignee_username=mrjones.id.au"><svg class="s16"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#issues"></use></svg>
<span class="badge badge-pill hidden issues-count">
0
</span>
</a></li><li class="user-counter"><a title="Merge requests" class="dashboard-shortcuts-merge_requests" aria-label="Merge requests" data-toggle="tooltip" data-placement="bottom" data-container="body" href="https://gitlab.com/dashboard/merge_requests?assignee_username=mrjones.id.au"><svg class="s16"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#git-merge"></use></svg>
<span class="badge badge-pill hidden merge-requests-count">
0
</span>
</a></li><li class="user-counter"><a title="" aria-label="Todos" class="shortcuts-todos" data-toggle="tooltip" data-placement="bottom" data-container="body" href="https://gitlab.com/dashboard/todos" data-original-title="Todos"><svg class="s16"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#todo-done"></use></svg>
<span class="badge badge-pill hidden todos-count">
0
</span>
</a></li><li class="nav-item header-help dropdown">
<a class="header-help-dropdown-toggle" data-toggle="dropdown" href="https://gitlab.com/help"><svg class="s16"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#question"></use></svg>
<svg class="caret-down"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#angle-down"></use></svg>
</a><div class="dropdown-menu dropdown-menu-right">
<ul>
<li>
<a href="https://gitlab.com/help">Help</a>
</li>
<li class="divider"></li>
<li>
<a href="https://about.gitlab.com/submit-feedback">Submit feedback</a>
</li>
<li>
<a target="_blank" class="text-nowrap" href="https://about.gitlab.com/contributing">Contribute to GitLab
</a></li>
</ul>
</div>
</li>
<li class="nav-item header-user dropdown" data-track-event="click_dropdown" data-track-label="profile_dropdown">
<a class="header-user-dropdown-toggle" data-toggle="dropdown" href="https://gitlab.com/mrjones.id.au"><img class="header-user-avatar qa-user-avatar js-lazy-loaded" src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/e682029ec27261f07ea426908801cb06.png" width="23" height="23">
<svg class="caret-down"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#angle-down"></use></svg>
</a><div class="dropdown-menu dropdown-menu-right">
<ul>
<li class="current-user">
<div class="user-name bold">
Ray Jones
</div>
@mrjones.id.au
</li>
<li class="divider"></li>
<li>
<button type="button" class="btn menu-item">Set status</button>
</li>
<li>
<a class="profile-link" data-user="mrjones.id.au" href="https://gitlab.com/mrjones.id.au">Profile</a>
</li>
<li>
<a href="https://gitlab.com/profile">Settings</a>
</li>
<li class="divider"></li>
<li>
<a class="sign-out-link" href="https://gitlab.com/users/sign_out">Sign out</a>
</li>
</ul>
</div>
</li>
</ul>
</div>
<button class="navbar-toggler d-block d-sm-none" type="button">
<span class="sr-only">Toggle navigation</span>
<svg class="s12 more-icon js-navbar-toggle-right"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#ellipsis_h"></use></svg>
<svg class="s12 close-icon js-navbar-toggle-left"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#close"></use></svg>
</button>
</div>
</div>
</header>
<div class="set-user-status-modal"><!----></div>
<div class="layout-page page-gutter page-with-contextual-sidebar right-sidebar-expanded wiki-sidebar">
<div class="nav-sidebar">
<div class="nav-sidebar-inner-scroll">
<div class="context-header">
<a title="BluetoothHeater" href="https://gitlab.com/mrjones.id.au/bluetoothheater"><div class="avatar-container s40 project-avatar">
<img alt="BluetoothHeater" class="avatar s40 avatar-tile js-lazy-loaded" src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/BTCavatar.jpg" width="40" height="40">
</div>
<div class="sidebar-context-title">
BluetoothHeater
</div>
</a></div>
<ul class="sidebar-top-level-items">
<li class="home"><a class="shortcuts-project" href="https://gitlab.com/mrjones.id.au/bluetoothheater"><div class="nav-icon-container">
<svg><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#home"></use></svg>
</div>
<span class="nav-item-name">
Project
</span>
</a><ul class="sidebar-sub-level-items">
<li class="fly-out-top-item"><a href="https://gitlab.com/mrjones.id.au/bluetoothheater"><strong class="fly-out-top-item-name">
Project
</strong>
</a></li><li class="divider fly-out-top-item"></li>
<li class=""><a title="Project details" class="shortcuts-project" href="https://gitlab.com/mrjones.id.au/bluetoothheater"><span>Details</span>
</a></li><li class=""><a title="Activity" class="shortcuts-project-activity" href="https://gitlab.com/mrjones.id.au/bluetoothheater/activity"><span>Activity</span>
</a></li><li class=""><a title="Releases" class="shortcuts-project-releases" href="https://gitlab.com/mrjones.id.au/bluetoothheater/releases"><span>Releases</span>
</a></li>
<li class=""><a title="Cycle Analytics" class="shortcuts-project-cycle-analytics" href="https://gitlab.com/mrjones.id.au/bluetoothheater/cycle_analytics"><span>Cycle Analytics</span>
</a></li></ul>
</li><li class=""><a class="shortcuts-tree" href="https://gitlab.com/mrjones.id.au/bluetoothheater/tree/master"><div class="nav-icon-container">
<svg><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#doc-text"></use></svg>
</div>
<span class="nav-item-name">
Repository
</span>
</a><ul class="sidebar-sub-level-items">
<li class="fly-out-top-item"><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/tree/master"><strong class="fly-out-top-item-name">
Repository
</strong>
</a></li><li class="divider fly-out-top-item"></li>
<li class=""><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/tree/master">Files
</a></li><li class=""><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/commits/master">Commits
</a></li><li class=""><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/branches">Branches
</a></li><li class=""><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/tags">Tags
</a></li><li class=""><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/graphs/master">Contributors
</a></li><li class=""><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/network/master">Graph
</a></li><li class=""><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/compare?from=master&amp;to=master">Compare
</a></li><li class=""><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/graphs/master/charts">Charts
</a></li>
</ul>
</li><li class=""><a class="shortcuts-issues qa-issues-item" href="https://gitlab.com/mrjones.id.au/bluetoothheater/issues"><div class="nav-icon-container">
<svg><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#issues"></use></svg>
</div>
<span class="nav-item-name">
Issues
</span>
<span class="badge badge-pill count issue_counter">
4
</span>
</a><ul class="sidebar-sub-level-items">
<li class="fly-out-top-item"><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/issues"><strong class="fly-out-top-item-name">
Issues
</strong>
<span class="badge badge-pill count issue_counter fly-out-badge">
4
</span>
</a></li><li class="divider fly-out-top-item"></li>
<li class=""><a title="Issues" href="https://gitlab.com/mrjones.id.au/bluetoothheater/issues"><span>
List
</span>
</a></li><li class=""><a title="Board" href="https://gitlab.com/mrjones.id.au/bluetoothheater/boards"><span>
Board
</span>
</a></li><li class=""><a title="Labels" class="qa-labels-link" href="https://gitlab.com/mrjones.id.au/bluetoothheater/labels"><span>
Labels
</span>
</a></li>
<li class=""><a title="Milestones" class="qa-milestones-link" href="https://gitlab.com/mrjones.id.au/bluetoothheater/milestones"><span>
Milestones
</span>
</a></li></ul>
</li><li class=""><a class="shortcuts-merge_requests" href="https://gitlab.com/mrjones.id.au/bluetoothheater/merge_requests"><div class="nav-icon-container">
<svg><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#git-merge"></use></svg>
</div>
<span class="nav-item-name">
Merge Requests
</span>
<span class="badge badge-pill count merge_counter js-merge-counter">
0
</span>
</a><ul class="sidebar-sub-level-items is-fly-out-only">
<li class="fly-out-top-item"><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/merge_requests"><strong class="fly-out-top-item-name">
Merge Requests
</strong>
<span class="badge badge-pill count merge_counter js-merge-counter fly-out-badge">
0
</span>
</a></li></ul>
</li><li class=""><a class="shortcuts-pipelines qa-link-pipelines" href="https://gitlab.com/mrjones.id.au/bluetoothheater/pipelines"><div class="nav-icon-container">
<svg><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#rocket"></use></svg>
</div>
<span class="nav-item-name">
CI / CD
</span>
</a><ul class="sidebar-sub-level-items">
<li class="fly-out-top-item"><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/pipelines"><strong class="fly-out-top-item-name">
CI / CD
</strong>
</a></li><li class="divider fly-out-top-item"></li>
<li class=""><a title="Pipelines" class="shortcuts-pipelines" href="https://gitlab.com/mrjones.id.au/bluetoothheater/pipelines"><span>
Pipelines
</span>
</a></li><li class=""><a title="Jobs" class="shortcuts-builds" href="https://gitlab.com/mrjones.id.au/bluetoothheater/-/jobs"><span>
Jobs
</span>
</a></li><li class=""><a title="Schedules" class="shortcuts-builds" href="https://gitlab.com/mrjones.id.au/bluetoothheater/pipeline_schedules"><span>
Schedules
</span>
</a></li><li class=""><a title="Charts" class="shortcuts-pipelines-charts" href="https://gitlab.com/mrjones.id.au/bluetoothheater/pipelines/charts"><span>
Charts
</span>
</a></li></ul>
</li><li class=""><a class="shortcuts-operations" href="https://gitlab.com/mrjones.id.au/bluetoothheater/environments/metrics"><div class="nav-icon-container">
<svg><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#cloud-gear"></use></svg>
</div>
<span class="nav-item-name">
Operations
</span>
</a><ul class="sidebar-sub-level-items">
<li class="fly-out-top-item"><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/environments/metrics"><strong class="fly-out-top-item-name">
Operations
</strong>
</a></li><li class="divider fly-out-top-item"></li>
<li class=""><a title="Metrics" class="shortcuts-metrics" href="https://gitlab.com/mrjones.id.au/bluetoothheater/environments/metrics"><span>
Metrics
</span>
</a></li>
<li class=""><a title="Environments" class="shortcuts-environments qa-operations-environments-link" href="https://gitlab.com/mrjones.id.au/bluetoothheater/environments"><span>
Environments
</span>
</a></li><li class=""><a title="Error Tracking" class="shortcuts-tracking qa-operations-tracking-link" href="https://gitlab.com/mrjones.id.au/bluetoothheater/error_tracking"><span>
Error Tracking
</span>
</a></li><li class=""><a title="Serverless" href="https://gitlab.com/mrjones.id.au/bluetoothheater/serverless/functions"><span>
Serverless
</span>
</a></li><li class=""><a title="Kubernetes" class="shortcuts-kubernetes" href="https://gitlab.com/mrjones.id.au/bluetoothheater/clusters"><span>
Kubernetes
</span>
<div class="feature-highlight js-feature-highlight" data-container="body" data-dismiss-endpoint="/-/user_callouts" data-highlight="gke_cluster_integration" data-placement="right" data-toggle="popover" data-trigger="manual" data-original-title="" title=""></div>
</a><div class="feature-highlight-popover-content">
<img class="feature-highlight-illustration lazy" data-src="https://assets.gitlab-static.net/assets/illustrations/cluster_popover-9830388038d966d8d64d43576808f9d5ba05f639a78a40bae9a5ddc7cbf72f24.svg" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==">
<div class="feature-highlight-popover-sub-content">
<p>Allows you to add and manage Kubernetes clusters.</p>
<p>
Protip:
<a href="https://gitlab.com/help/topics/autodevops/index.md">Auto DevOps</a>
<span>uses Kubernetes clusters to deploy your code!</span>
</p>
<hr>
<button class="btn btn-success btn-sm dismiss-feature-highlight" type="button">
<span>Got it!</span>
<svg><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#thumb-up"></use></svg>
</button>
</div>
</div>
</li></ul>
</li><li class=""><a class="shortcuts-container-registry" href="https://gitlab.com/mrjones.id.au/bluetoothheater/container_registry"><div class="nav-icon-container">
<svg><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#disk"></use></svg>
</div>
<span class="nav-item-name">
Registry
</span>
</a><ul class="sidebar-sub-level-items is-fly-out-only">
<li class="fly-out-top-item"><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/container_registry"><strong class="fly-out-top-item-name">
Registry
</strong>
</a></li></ul>
</li><li class="active"><a class="shortcuts-wiki" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/home"><div class="nav-icon-container">
<svg><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#book"></use></svg>
</div>
<span class="nav-item-name">
Wiki
</span>
</a><ul class="sidebar-sub-level-items is-fly-out-only">
<li class="fly-out-top-item active"><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/home"><strong class="fly-out-top-item-name">
Wiki
</strong>
</a></li></ul>
</li><li class=""><a class="shortcuts-snippets" href="https://gitlab.com/mrjones.id.au/bluetoothheater/snippets"><div class="nav-icon-container">
<svg><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#snippet"></use></svg>
</div>
<span class="nav-item-name">
Snippets
</span>
</a><ul class="sidebar-sub-level-items is-fly-out-only">
<li class="fly-out-top-item"><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/snippets"><strong class="fly-out-top-item-name">
Snippets
</strong>
</a></li></ul>
</li><li class=""><a class="shortcuts-tree" href="https://gitlab.com/mrjones.id.au/bluetoothheater/edit"><div class="nav-icon-container">
<svg><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#settings"></use></svg>
</div>
<span class="nav-item-name qa-settings-item">
Settings
</span>
</a><ul class="sidebar-sub-level-items">
<li class="fly-out-top-item"><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/edit"><strong class="fly-out-top-item-name">
Settings
</strong>
</a></li><li class="divider fly-out-top-item"></li>
<li class=""><a title="General" href="https://gitlab.com/mrjones.id.au/bluetoothheater/edit"><span>
General
</span>
</a></li><li class=""><a title="Members" class="qa-link-members-settings" href="https://gitlab.com/mrjones.id.au/bluetoothheater/project_members"><span>
Members
</span>
</a></li><li class=""><a title="Integrations" href="https://gitlab.com/mrjones.id.au/bluetoothheater/settings/integrations"><span>
Integrations
</span>
</a></li><li class=""><a title="Repository" href="https://gitlab.com/mrjones.id.au/bluetoothheater/settings/repository"><span>
Repository
</span>
</a></li><li class=""><a title="CI / CD" href="https://gitlab.com/mrjones.id.au/bluetoothheater/settings/ci_cd"><span>
CI / CD
</span>
</a></li><li class=""><a title="Operations" href="https://gitlab.com/mrjones.id.au/bluetoothheater/settings/operations">Operations
</a></li><li class=""><a title="Pages" href="https://gitlab.com/mrjones.id.au/bluetoothheater/pages"><span>
Pages
</span>
</a></li><li class=""><a title="Audit Events" href="https://gitlab.com/mrjones.id.au/bluetoothheater/audit_events">Audit Events
</a></li>
</ul>
</li><a class="toggle-sidebar-button js-toggle-sidebar" role="button" title="Toggle sidebar" type="button">
<svg class="icon-angle-double-left"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#angle-double-left"></use></svg>
<svg class="icon-angle-double-right"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#angle-double-right"></use></svg>
<span class="collapse-text">Collapse sidebar</span>
</a>
<button name="button" type="button" class="close-nav-button"><svg class="s16"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#close"></use></svg>
<span class="collapse-text">Close sidebar</span>
</button>
<li class="hidden">
<a title="Activity" class="shortcuts-project-activity" href="https://gitlab.com/mrjones.id.au/bluetoothheater/activity"><span>
Activity
</span>
</a></li>
<li class="hidden">
<a title="Network" class="shortcuts-network" href="https://gitlab.com/mrjones.id.au/bluetoothheater/network/master">Graph
</a></li>
<li class="hidden">
<a title="Charts" class="shortcuts-repository-charts" href="https://gitlab.com/mrjones.id.au/bluetoothheater/graphs/master/charts">Charts
</a></li>
<li class="hidden">
<a class="shortcuts-new-issue" href="https://gitlab.com/mrjones.id.au/bluetoothheater/issues/new">Create a new issue
</a></li>
<li class="hidden">
<a title="Jobs" class="shortcuts-builds" href="https://gitlab.com/mrjones.id.au/bluetoothheater/-/jobs">Jobs
</a></li>
<li class="hidden">
<a title="Commits" class="shortcuts-commits" href="https://gitlab.com/mrjones.id.au/bluetoothheater/commits/master">Commits
</a></li>
<li class="hidden">
<a title="Issue Boards" class="shortcuts-issue-boards" href="https://gitlab.com/mrjones.id.au/bluetoothheater/boards">Issue Boards</a>
</li>
</ul>
</div>
</div>
<div class="content-wrapper">
<div class="mobile-overlay"></div>
<div class="alert-wrapper">
<nav class="breadcrumbs container-fluid container-limited limit-container-width" role="navigation">
<div class="breadcrumbs-container">
<button name="button" type="button" class="toggle-mobile-nav"><span class="sr-only">Open sidebar</span>
<i aria-hidden="true" data-hidden="true" class="fa fa-bars"></i>
</button><div class="breadcrumbs-links js-title-container">
<ul class="list-unstyled breadcrumbs-list js-breadcrumbs-list">
<li><a href="https://gitlab.com/mrjones.id.au">Ray Jones</a><svg class="s8 breadcrumbs-list-angle"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#angle-right"></use></svg></li> <li><a href="https://gitlab.com/mrjones.id.au/bluetoothheater"><img alt="BluetoothHeater" class="avatar-tile js-lazy-loaded" src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/BTCavatar_002.jpg" width="15" height="15"><span class="breadcrumb-item-text js-breadcrumb-item-text">BluetoothHeater</span></a><svg class="s8 breadcrumbs-list-angle"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#angle-right"></use></svg></li>
<li><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/home">Wiki</a><svg class="s8 breadcrumbs-list-angle"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#angle-right"></use></svg></li>
<li class="dropdown">
<button aria-label="Show parent pages" class="text-expander has-tooltip js-breadcrumbs-collapsed-expander" data-container="body" data-toggle="dropdown" title="Show parent pages" type="button">
<i aria-hidden="true" data-hidden="true" class="fa fa-ellipsis-h"></i>
</button>
<svg class="s8 breadcrumbs-list-angle"><use xlink:href="https://gitlab.com/assets/icons-5d6bba47cc3d399a160c22f8283b68e070717b97c9a35c0e3006d998b730b163.svg#angle-right"></use></svg>
<div class="dropdown-menu">
<ul>
<li style="text-indent: 0px;"><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/User-Manual/">User manual</a></li>
<li style="text-indent: 16px;"><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/User-Manual/Menus/">Menus</a></li>
</ul>
</div>
</li>
<li>
<h2 class="breadcrumbs-sub-title"><a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/User-Manual/Menus/Detailed-Control-Menu">Detailed Control Menu</a></h2>
</li>
</ul>
</div>
</div>
</nav>
<div class="flash-container flash-container-page">
</div>
<div class="d-flex"></div>
</div>
<div class="container-fluid container-limited limit-container-width">
<div class="content" id="content-body">
<div class="wiki-page-header has-sidebar-toggle">
<button class="btn btn-default sidebar-toggle js-sidebar-wiki-toggle" role="button" type="button">
<i aria-hidden="true" data-hidden="true" class="fa fa-angle-double-left"></i>
</button>
<div class="nav-text">
<h2 class="wiki-page-title">Detailed Control Menu</h2>
<span class="wiki-last-edit-by">
Last edited by <strong>Ray Jones</strong>
<time class="js-timeago js-timeago-render" title="" datetime="2019-01-23T09:13:19Z" data-toggle="tooltip" data-placement="top" data-container="body" data-original-title="Jan 23, 2019 9:13am" data-tid="22">2 minutes ago</time>
</span>
</div>
<div class="nav-controls">
<a class="add-new-wiki btn btn-success" data-toggle="modal" href="#modal-new-wiki">New page
</a><a class="btn" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/User-Manual/Menus/Detailed-Control-Menu/history">Page history
</a><a class="btn js-wiki-edit" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/User-Manual/Menus/Detailed-Control-Menu/edit">Edit
</a>
</div>
</div>
<div class="prepend-top-default append-bottom-default">
<div class="md wiki">
<h1 dir="auto">
<a id="user-content-detailed-control-screen" class="anchor" href="#detailed-control-screen" aria-hidden="true"></a>Detailed Control Screen</h1>
<p dir="auto">The detailed control menu allows the operation of the heater to be monitored in close detail.<br>
Here the actual pump speed, fan RPM, heat exchanger temperature and glow plug activity can be observed.</p>
<p dir="auto">The heater can be turned on or off by holding the Centre keypad button.<br>
The desired temperature, or fixed heat demand can be altered by pressing the Up / Down keys.</p>
<p dir="auto">If in thermostat mode, the desired value is placed as a
small triangle to the left of the measured "temperature bulb" on the
left hand side of the screen.<br>
The actual temperature is shown below the bulb.</p>
<p dir="auto">Once started, the desired setting is reported beneath the
"target" icon, as degC or Hz, depending upon thermostat or fixed demand
modes.</p>
<p dir="auto">With the heater idle, the menu will look something like below:<br>
<a class="no-attachment-icon" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/uploads/0552ce7581f720104b5e786f549ca14e/ScreenDetailed.jpg" target="_blank" rel="noopener noreferrer"><img src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/ScreenDetailed.jpg" alt="ScreenDetailed" class="js-lazy-loaded"></a></p>
<h2 dir="auto">
<a id="user-content-starting-the-heater" class="anchor" href="#starting-the-heater" aria-hidden="true"></a>Starting the heater</h2>
<p dir="auto">Hold the Centre key for a second or so, the heater should then start and this is reflected in the status message:<br>
<a class="no-attachment-icon" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/uploads/da0867a16c5ff7e0d1304ffd97cc1e83/ScreenDetailedStarting.jpg" target="_blank" rel="noopener noreferrer"><img src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/ScreenDetailedStarting.jpg" alt="ScreenDetailedStarting" class="js-lazy-loaded"></a></p>
<p dir="auto">Shortly thereafter, the fan will begin spinning, and the
glow plug will be gently raised in temperature as can be observed by the
steady rise in power applied to it.<br>
Note that the fan icon rotates to indicate the fan is running, along with the measured RPM!:<br>
<a class="no-attachment-icon" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/uploads/48a4af091a68fe0cf4e3ddb23e508ea0/ScreenDetailedGlowOn.jpg" target="_blank" rel="noopener noreferrer"><img src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/ScreenDetailedGlowOn.jpg" alt="ScreenDetailedGlowOn" class="js-lazy-loaded"></a></p>
<p dir="auto">It takes about a minute for the glow plug to receive full power, at which point the pump then starts.<br>
The Pump being active is indicated by an animated fuel droplet, along with the actual pump rate:<br>
<a class="no-attachment-icon" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/uploads/55de740283cf89c755995ef72fb98e7d/ScreenDetailedPumpOn.jpg" target="_blank" rel="noopener noreferrer"><img src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/ScreenDetailedPumpOn.jpg" alt="ScreenDetailedPumpOn" class="js-lazy-loaded"></a></p>
<p dir="auto">The pump starts at a slow speed and steadily rises, along with fan speed to get the heater ignited.<br>
Ignition tends to be sensed once the body temperature of the heat exchanger has risen by about 5-10 degC.<br>
The heat exchanger temperature being reported in the right hand side "thermometer bulb", and the actual value below:<br>
<a class="no-attachment-icon" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/uploads/646d40e69e4aad7eaf434301110684e1/ScreenDetailedIgnited.jpg" target="_blank" rel="noopener noreferrer"><img src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/ScreenDetailedIgnited.jpg" alt="ScreenDetailedIgnited" class="js-lazy-loaded"></a></p>
<p dir="auto">Once the body temperature rises over about 65 degrees or
so, the glow plug is shut down, all the while the fuel pump and fan
speeds are progressively increased until at full speed.<br>
The heater runs in this state for quite a few minutes getting the internals nice and hot.<br>
<a class="no-attachment-icon" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/uploads/e3eef473f0547203b173befd5a4b5ca7/ScreenDetailedIgnitedGlowOff.jpg" target="_blank" rel="noopener noreferrer"><img src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/ScreenDetailedIgnitedGlowOff.jpg" alt="ScreenDetailedIgnitedGlowOff" class="js-lazy-loaded"></a></p>
<p dir="auto">After running at full speed for a while, the heater
transitions to the running state, and now obeys the desired setting
being either a thermostat setting, or a fixed heat demand.<br>
This happens about 5 minutes after the initial start was demanded:<br>
<a class="no-attachment-icon" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/uploads/a2c11dbf0a7e39b00feabb583b80102c/ScreenDetailedRunning.jpg" target="_blank" rel="noopener noreferrer"><img src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/ScreenDetailedRunning.jpg" alt="ScreenDetailedRunning" class="js-lazy-loaded"></a></p>
<p dir="auto">To toggle from Thermostat or Fixed demand modes, hold the down key.<br>
The changed operating mode is reflected in the units reported below the target icon.<br>
DegC for thermostat, Hz for fixed demand.<br>
The set temperature indicator also disappears from the left hand side thermometer when in fixed demand mode:<br>
<a class="no-attachment-icon" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/uploads/14f7975a7e8751fd35313fc5343e5004/ScreenDetailedFixedHz.jpg" target="_blank" rel="noopener noreferrer"><img src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/ScreenDetailedFixedHz.jpg" alt="ScreenDetailedFixedHz" class="js-lazy-loaded"></a></p>
<h2 dir="auto">
<a id="user-content-stopping-the-heater" class="anchor" href="#stopping-the-heater" aria-hidden="true"></a>Stopping the heater</h2>
<p dir="auto">Heater shutdown is initiated by holding the Centre key for a second or so.<br>
The status will then change to Shutting down...:<br>
<a class="no-attachment-icon" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/uploads/fa175cac45a3f6bf583c4c82844d7e4e/ScreenDetailedShutdown.jpg" target="_blank" rel="noopener noreferrer"><img src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/ScreenDetailedShutdown.jpg" alt="ScreenDetailedShutdown" class="js-lazy-loaded"></a></p>
<p dir="auto">The pump speed is quickly lowered and eventually shut off,
the glow plug is gently re-powered to assist in drying the heat
exchanger of unburnt fuel:<br>
<a class="no-attachment-icon" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/uploads/6c7390ad2fdb47585f775406c0a166ba/ScreenDetailedShutdownLowPump.jpg" target="_blank" rel="noopener noreferrer"><img src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/ScreenDetailedShutdownLowPump.jpg" alt="ScreenDetailedShutdownLowPump" class="js-lazy-loaded"></a>
<a class="no-attachment-icon" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/uploads/a811eb45c5fa2dee814cdd65130bff4e/ScreenDetailedShutdownPumpOff.jpg" target="_blank" rel="noopener noreferrer"><img src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/ScreenDetailedShutdownPumpOff.jpg" alt="ScreenDetailedShutdownPumpOff" class="js-lazy-loaded"></a></p>
<p dir="auto">About a minute later the glow plug is un-powered and the heater then transitions to cooldown mode.<br>
Only the fan is now running:<br>
<a class="no-attachment-icon" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/uploads/e191cc96a957d7d33b26b4983609bab4/ScreenDetailedCooling.jpg" target="_blank" rel="noopener noreferrer"><img src="Detailed%20Control%20Menu%20%C2%B7%20Wiki%20%C2%B7%20Ray%20Jones%20_%20BluetoothHeater%20%C2%B7%20GitLab_files/ScreenDetailedCooling.jpg" alt="ScreenDetailedCooling" class="js-lazy-loaded"></a></p>
<p dir="auto">It stays in cooldown mode until the heat exchanger is
observed to have dropped below 55 degC, at which point it then returns
to the initial idle state.</p>
</div>
</div>
<aside class="right-sidebar right-sidebar-expanded wiki-sidebar js-wiki-sidebar js-right-sidebar" data-offset-top="50" data-spy="affix">
<div class="sidebar-container">
<div class="block wiki-sidebar-header append-bottom-default">
<a class="gutter-toggle float-right d-block d-sm-block d-md-none js-sidebar-wiki-toggle" href="#">
<i aria-hidden="true" data-hidden="true" class="fa fa-angle-double-right"></i>
</a>
<a class="" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/git_access"><i aria-hidden="true" data-hidden="true" class="fa fa-cloud-download append-right-5"></i>
<span>Clone repository</span>
</a></div>
<div class="blocks-container">
<div class="block block-first">
<ul class="wiki-pages">
<li class="">
<a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/ESP32-Arduino-build-&amp;-required-libaries">ESP32 Arduino build &amp; required libaries
</a></li>
<li class="">
<a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/Flashing-Production-PCBs-via-USB-serial-port">Flashing Production PCBs via USB serial port
</a></li>
<li class="">
<a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/Hardware-design-files">Hardware design files
</a></li>
<li class="">
<a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/JSON-dictionary">JSON dictionary
</a></li>
<li class="">
<a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/home">Home
</a></li>
<li>
User-Manual
<ul>
<li class="">
<a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/User-Manual/Menu-Structure">Menu Structure
</a></li>
</ul>
</li>
<li>
User-Manual/Menus
<ul>
<li class="">
<a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/User-Manual/Menus/Basic-Control-menu">Basic Control menu
</a></li>
<li class="">
<a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/User-Manual/Menus/Clock-menu">Clock menu
</a></li>
<li class="active">
<a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/User-Manual/Menus/Detailed-Control-Menu">Detailed Control Menu
</a></li>
<li class="">
<a href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/User-Manual/Menus/Wifi-Configuration">Wifi Configuration
</a></li>
</ul>
</li>
</ul>
</div>
<div class="block">
<a class="btn btn-block" href="https://gitlab.com/mrjones.id.au/bluetoothheater/wikis/pages">More Pages
</a></div>
</div>
</div>
</aside>
<div class="modal" id="modal-new-wiki">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h3 class="page-title">New Wiki Page</h3>
<button aria-label="Close" class="close" data-dismiss="modal" type="button">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form class="new-wiki-page">
<div class="form-group">
<label for="new_wiki_path"><span>Page slug</span>
</label><input type="text" name="new_wiki_path" id="new_wiki_path" placeholder="how-to-setup" class="form-control" required="required" data-wikis-path="/mrjones.id.au/bluetoothheater/wikis" autofocus="autofocus">
<span class="new-wiki-page-slug-tip">
<i aria-hidden="true" data-hidden="true" class="fa fa-lightbulb-o"></i>
Tip: You can specify the full path for the new file. We will automatically create any missing directories.
</span>
</div>
<div class="form-actions">
<button name="button" type="submit" class="build-new-wiki btn btn-success">Create page</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
.wiki h1,.wiki h2,.wiki h3,.wiki h4,.wiki h5,.wiki h6{margin-top:17px}.wiki h1{font-size:30px}.wiki h2{font-size:22px}.wiki h3{font-size:18px;font-weight:600}header,nav,nav.navbar-collapse,nav.navbar-collapse.collapse,.nav-sidebar,.profiler-results,.tree-ref-holder,.tree-holder .breadcrumb,.nav,.btn,ul.notes-form,.merge-request-ci-status .ci-status-link::after,.issuable-gutter-toggle,.gutter-toggle,.issuable-details .content-block-small,.edit-link,.note-action-button,.right-sidebar,.flash-container,#js-peek{display:none !important}pre{page-break-before:avoid;page-break-inside:auto}.page-gutter{padding-top:0;padding-left:0}.right-sidebar{top:0}a[href]::after{content:none !important}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
!function(e){function r(r){for(var n,f,c=r[0],i=r[1],d=r[2],s=0,b=[];s<c.length;s++)f=c[s],a[f]&&b.push(a[f][0]),a[f]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(u&&u(r);b.length;)b.shift()();return o.push.apply(o,d||[]),t()}function t(){for(var e,r=0;r<o.length;r++){for(var t=o[r],n=!0,c=1;c<t.length;c++){var i=t[c];0!==a[i]&&(n=!1)}n&&(o.splice(r--,1),e=f(f.s=t[0]))}return e}var n={},a={1:0},o=[];function f(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,f),t.l=!0,t.exports}f.e=function(e){var r=[],t=a[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise(function(r,n){t=a[e]=[r,n]});r.push(t[2]=n);var o,c=document.getElementsByTagName("head")[0],i=document.createElement("script");i.charset="utf-8",i.timeout=120,f.nc&&i.setAttribute("nonce",f.nc),i.src=function(e){return f.p+""+({12:"vendors~balsamiq_viewer~notebook_viewer~sketch_viewer",18:"vendors~balsamiq_viewer~sketch_viewer",213:"mermaid",262:"balsamiq_viewer",263:"notebook_viewer",264:"pdf_viewer",265:"sketch_viewer",266:"stl_viewer",268:"vendors~mermaid",269:"vendors~balsamiq_viewer",270:"vendors~notebook_viewer",271:"vendors~sketch_viewer",272:"vendors~katex",274:"vendors~pdf_viewer",278:"vendors~stl_viewer"}[e]||e)+"."+{12:"51437c2a",17:"f951c6a3",18:"1d5a6507",213:"2db8196e",214:"010a9f05",215:"97adcee3",216:"5be1655b",217:"00d81f10",218:"f13d2eca",219:"4a80f90e",220:"50f4692e",221:"3b6d8637",222:"b11db7f8",223:"9f63dee9",224:"4cabde69",225:"dacee7ab",226:"234f37f5",227:"ad31b492",228:"4e062850",229:"53402b68",230:"9ef01784",231:"a915f08e",232:"949ed569",233:"512b473a",234:"a489318c",235:"7a06988e",236:"c969796c",237:"b937bdfa",238:"c8a3c0a7",239:"dca6699e",240:"1ff95c1c",241:"92a1e048",242:"0f378b18",243:"ce38d93d",244:"ff290ac2",245:"3bdd181d",246:"a27fd042",247:"5cbb42e2",248:"df74668a",249:"dd5ac222",250:"4c5e9e85",251:"76bd8443",252:"970e5b87",253:"3b24e32b",254:"45e78042",255:"8f383f91",256:"31870cc2",257:"a2124f11",258:"afd0c6c5",259:"c253dd78",260:"8f83f26d",261:"d4e17fb1",262:"fd293fc5",263:"0811bbfa",264:"0a5ffdf9",265:"98fa6c18",266:"510ad4a6",267:"317274b7",268:"efa792e2",269:"13f6a5f4",270:"b45c830a",271:"7fa2db93",272:"c9320d56",273:"201c2d57",274:"77942968",275:"0f59f288",276:"34eccabf",277:"23b401a6",278:"55481666",279:"21904be0"}[e]+".chunk.js"}(e),o=function(r){i.onerror=i.onload=null,clearTimeout(d);var t=a[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src,f=new Error("Loading chunk "+e+" failed.\n("+n+": "+o+")");f.type=n,f.request=o,t[1](f)}a[e]=void 0}};var d=setTimeout(function(){o({type:"timeout",target:i})},12e4);i.onerror=i.onload=o,c.appendChild(i)}return Promise.all(r)},f.m=e,f.c=n,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,r){if(1&r&&(e=f(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)f.d(t,n,function(r){return e[r]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="/assets/webpack/",f.oe=function(e){throw console.error(e),e};var c=this.webpackJsonp=this.webpackJsonp||[],i=c.push.bind(c);c.push=r,c=c.slice();for(var d=0;d<c.length;d++)r(c[d]);var u=i;t()}([]);
//# sourceMappingURL=runtime.e0be7892.bundle.js.map

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
Documentation/FTDI.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
Documentation/FTDI232.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
Documentation/Favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 B

BIN
Documentation/ForJames.PNG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
Documentation/GPIO.PNG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

BIN
Documentation/HeaterPCB.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
Documentation/JST.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

BIN
Documentation/LCD.PNG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Some files were not shown because too many files have changed in this diff Show more