2016-12-30 23:38:51 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/*
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 *  Main  sketch ,  global  variable  declarations 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-30 23:38:51 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-13 23:12:02 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/*
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  @ title  WLED  project  sketch 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-18 16:14:17 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 *  @ version  0.8 .5 - dev 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-13 23:12:02 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 *  @ author  Christian  Schwinne 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-30 23:38:51 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-06-23 23:20:15 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-21 16:50:56 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//ESP8266-01 (blue) got too little storage space to work with all features of WLED. To use it, you must use ESP8266 Arduino Core v2.4.2 and the setting 512K(No SPIFFS).
 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-25 18:55:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//ESP8266-01 (black) has 1MB flash and can thus fit the whole program. Use 1M(64K SPIFFS).
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-01 14:36:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//Uncomment some of the following lines to disable features to compile for ESP8266-01 (max flash size 434kB):
 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-25 18:55:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-16 18:59:00 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//You are required to disable over-the-air updates:
 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-05 23:40:59 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//#define WLED_DISABLE_OTA
 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-25 18:55:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-01 14:36:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//You need to choose 1-2 of these features to disable:
 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-25 18:55:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//#define WLED_DISABLE_ALEXA
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//#define WLED_DISABLE_BLYNK
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//#define WLED_DISABLE_CRONIXIE
 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-05 23:40:59 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//#define WLED_DISABLE_HUESYNC
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//#define WLED_DISABLE_INFRARED    //there is no pin left for this on ESP8266-01
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-16 18:59:00 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//#define WLED_DISABLE_MOBILE_UI
 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-25 18:55:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-18 18:54:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-16 01:09:37 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define WLED_DISABLE_FILESYSTEM     //SPIFFS is not used by any WLED feature yet
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//#define WLED_ENABLE_FS_SERVING   //Enable sending html file from SPIFFS before serving progmem version
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//#define WLED_ENABLE_FS_EDITOR    //enable /edit page for editing SPIFFS content. Will also be disabled with OTA lock
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//to toggle usb serial debug (un)comment the following line
 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-21 22:23:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//#define WLED_DEBUG
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-21 22:28:20 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-16 01:09:37 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//library inclusions
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-11 21:07:18 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# include  <Arduino.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-09 22:13:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifdef ARDUINO_ARCH_ESP32 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 # include  <WiFi.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # include  <ESPmDNS.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-15 23:21:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 # include  <AsyncTCP.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-16 01:09:37 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 # include  "SPIFFS.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-09 22:13:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 # include  <ESP8266WiFi.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # include  <ESP8266mDNS.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-15 23:21:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 # include  <ESPAsyncTCP.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-09 22:13:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-02-17 16:11:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  <ESPAsyncWebServer.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-11 21:07:18 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# include  <EEPROM.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-17 14:08:59 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  <WiFiUdp.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-15 23:21:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  <DNSServer.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-01 14:36:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifndef WLED_DISABLE_OTA 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 # include  <ArduinoOTA.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-01 14:36:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-16 01:09:37 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  <SPIFFSEditor.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-11 22:59:12 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "src/dependencies/time/Time.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "src/dependencies/time/TimeLib.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "src/dependencies/timezone/Timezone.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-09 21:52:42 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifndef WLED_DISABLE_ALEXA 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-15 23:21:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 # define ESPALEXA_ASYNC 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-03 17:05:56 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 # define ESPALEXA_NO_SUBPAGE 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-09 21:52:42 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 # define ESPALEXA_MAXDEVICES 1 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # include  "src/dependencies/espalexa/Espalexa.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-01 14:36:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifndef WLED_DISABLE_BLYNK 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 # include  "src/dependencies/blynk/BlynkSimpleEsp.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-01 14:36:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-28 21:53:51 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "src/dependencies/e131/E131.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-17 18:21:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "src/dependencies/async-mqtt-client/AsyncMqttClient.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-21 21:12:58 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "src/dependencies/json/AsyncJson-v6.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "src/dependencies/json/ArduinoJson-v6.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-16 18:59:00 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "html_classic.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "html_mobile.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "html_settings.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "html_other.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-11 22:59:12 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "WS2812FX.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-17 23:31:45 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "ir_codes.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-11 21:07:18 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-16 01:09:37 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-02-20 14:10:23 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# if IR_PIN < 0 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # ifndef WLED_DISABLE_INFRARED 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # define WLED_DISABLE_INFRARED 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifdef ARDUINO_ARCH_ESP32 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 /*#ifndef WLED_DISABLE_INFRARED
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # include  <IRremote.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # endif* /   //there are issues with ESP32 infrared, so it is disabled for now
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # ifndef WLED_DISABLE_INFRARED 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # include  <IRremoteESP8266.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # include  <IRrecv.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # include  <IRutils.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//version code in format yymmddb (b = daily build)
 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-04 23:56:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define VERSION 1910042 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-12 10:40:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char  versionString [ ]  =  " 0.8.5 " ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-20 18:56:07 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//AP and OTA default passwords (for maximum change them!)
 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-21 21:21:07 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char  apPass [ 65 ]  =  " wled1234 " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								char  otaPass [ 33 ]  =  " wledota " ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-08 19:00:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//Hardware CONFIG (only changeble HERE, not at runtime)
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-17 23:31:45 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//LED strip pin, button pin and IR pin changeable in NpbWrapper.h!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  auxDefaultState    =  0 ;                    //0: input 1: high 2: low
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  auxTriggeredState  =  0 ;                    //0: input 1: high 2: low
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								char  ntpServerName [ ]  =  " 0.wled.pool.ntp.org " ;  //NTP server to use
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//WiFi CONFIG (all these can be changed via web UI, no need to set them here)
 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-21 21:21:07 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char  clientSSID [ 33 ]  =  " Your_Network " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								char  clientPass [ 65 ]  =  " " ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-05 18:40:24 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char  cmDNS [ 33 ]  =  " x " ;                          //mDNS address (placeholder, will be replaced by wledXXXXXXXXXXXX.local)
 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-10 23:20:17 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char  apSSID [ 33 ]  =  " " ;                          //AP off by default (unless setup)
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  apChannel  =  1 ;                            //2.4GHz WiFi AP channel (1-13)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  apHide  =  0 ;                               //hidden AP SSID
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  apWaitTimeSecs  =  32 ;                      //time to wait for connection before opening AP
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  recoveryAPDisabled  =  false ;               //never open AP (not recommended)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								IPAddress  staticIP ( 0 ,  0 ,  0 ,  0 ) ;                //static IP of ESP
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								IPAddress  staticGateway ( 0 ,  0 ,  0 ,  0 ) ;           //gateway (router) IP
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								IPAddress  staticSubnet ( 255 ,  255 ,  255 ,  0 ) ;      //most common subnet in home networks
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//LED CONFIG
 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-17 10:27:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								uint16_t  ledCount  =  30 ;                        //overcurrent prevented by ABL
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  useRGBW  =  false ;                          //SK6812 strips can contain an extra White channel
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  autoRGBtoRGBW  =  false ;                    //if RGBW enabled, calculate White channel from RGB
 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-17 10:27:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define ABL_MILLIAMPS_DEFAULT 850;             //auto lower brightness to stay close to milliampere limit
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  turnOnAtBoot   =  true ;                     //turn on LEDs at power-up
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  bootPreset  =  0 ;                           //save preset to load after power-up
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-02-05 20:53:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  colS [ ] { 255 ,  159 ,  0 ,  0 } ;                   //default RGB(W) color
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  colSecS [ ] { 0 ,  0 ,  0 ,  0 } ;                    //default RGB(W) secondary color
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  briS  =  127 ;                               //default brightness
 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-17 10:27:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  effectDefault  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-14 12:16:28 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  effectSpeedDefault  =  75 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  effectIntensityDefault  =  128 ;             //intensity is supported on some effects as an additional parameter (e.g. for blink you can change the duty cycle)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  effectPaletteDefault  =  0 ;                 //palette is supported on the FastLED effects, otherwise it has no effect
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-21 22:23:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//bool strip.gammaCorrectBri = false;         //gamma correct brightness (not recommended) --> edit in WS2812FX.h
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//bool strip.gammaCorrectCol = true;          //gamma correct colors (strongly recommended)
 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-07 13:24:42 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  nightlightTargetBri  =  0 ;                  //brightness after nightlight is over
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  nightlightDelayMins  =  60 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  nightlightFade  =  true ;                    //if enabled, light will gradually dim towards the target bri. Otherwise, it will instantly set after delay over
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  fadeTransition  =  true ;                    //enable crossfading color transition
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  enableSecTransition  =  true ;               //also enable transition for secondary color
 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-21 22:23:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								uint16_t  transitionDelay  =  750 ;                //default crossfade duration in ms
 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-13 23:25:54 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-21 22:23:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//bool strip.reverseMode  = false;            //flip entire LED strip (reverses all effect directions) --> edit in WS2812FX.h
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  skipFirstLed  =  false ;                     //ignore first LED in strip (useful if you need the LED as signal repeater)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  briMultiplier  =   100 ;                     //% of brightness to set (to limit power, if you set it to 50 and set bri to 255, actual brightness will be 127)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//User Interface CONFIG
 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-04 23:56:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char  serverDescription [ 33 ]  =  " WLED " ;           //Name of module
 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-25 21:51:38 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  currentTheme  =  7 ;                         //UI theme index for settings and classic UI
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  uiConfiguration  =  0 ;                      //0: automatic (depends on user-agent) 1: classic UI 2: mobile UI
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  useHSB  =  true ;                            //classic UI: use HSB sliders instead of RGB by default
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								char  cssFont [ 33 ]  =  " Verdana " ;                  //font to use in classic UI
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  useHSBDefault  =  useHSB ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//Sync CONFIG
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-21 22:28:20 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  buttonEnabled  =   true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  irEnabled      =  false ;                    //Infrared receiver
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								uint16_t  udpPort     =  21324 ;                   //WLED notifier default port
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								uint16_t  udpRgbPort  =  19446 ;                   //Hyperion port
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  receiveNotificationBrightness  =  true ;     //apply brightness from incoming notifications
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  receiveNotificationColor       =  true ;     //apply color
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  receiveNotificationEffects     =  true ;     //apply effects setup
 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-25 21:51:38 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  notifyDirect  =  false ;                     //send notification if change via UI or HTTP API
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  notifyButton  =  false ;                     //send if updated by button or infrared remote
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  notifyAlexa   =  false ;                     //send notification if updated via Alexa
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  notifyMacro   =  false ;                     //send notification for macro
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  notifyHue     =   true ;                     //send notification if Hue light changes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  notifyTwice   =  false ;                     //notifications use UDP: enable if devices don't sync reliably
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  alexaEnabled  =  true ;                      //enable device discovery by Amazon Echo
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								char  alexaInvocationName [ 33 ]  =  " Light " ;        //speech control name of device. Choose something voice-to-text can understand
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-02-15 23:21:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char  blynkApiKey [ 36 ]  =  " " ;                     //Auth token for Blynk server. If empty, no connection will be made
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								uint16_t  realtimeTimeoutMs  =  2500 ;             //ms timeout of realtime mode before returning to normal mode
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								int   arlsOffset  =  0 ;                           //realtime LED offset
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  receiveDirect     =   true ;                 //receive UDP realtime
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  arlsDisableGammaCorrection  =  true ;        //activate if gamma correction is handled by the source
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  arlsForceMaxBri  =  false ;                  //enable to force max brightness if source has very dark colors that would be black
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  e131Enabled  =  true ;                       //settings for E1.31 (sACN) protocol
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-17 09:15:08 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								uint16_t  e131Universe  =  1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  e131Multicast  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:50:12 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char  mqttDeviceTopic [ 33 ]  =  " " ;                 //main MQTT topic (individual per device, default is wled/mac)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								char  mqttGroupTopic [ 33 ]  =  " wled/all " ;          //second MQTT topic (for example to group devices)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								char  mqttServer [ 33 ]  =  " " ;                      //both domains and IPs should work (no SSL)
 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-18 01:34:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char  mqttUser [ 41 ]  =  " " ;                        //optional: username for MQTT auth
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								char  mqttPass [ 41 ]  =  " " ;                        //optional: password for MQTT auth
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								char  mqttClientID [ 41 ]  =  " " ;                    //override the client ID
 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-18 16:14:17 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								uint16_t  mqttPort  =  1883 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-28 21:53:51 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  huePollingEnabled  =  false ;                //poll hue bridge for light state
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								uint16_t  huePollIntervalMs  =  2500 ;             //low values (< 1sec) may cause lag but offer quicker response
 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-07 09:56:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char  hueApiKey [ 47 ]  =  " api " ;                    //key token will be obtained from bridge
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  huePollLightId  =  1 ;                       //ID of hue lamp to sync to. Find the ID in the hue app ("about" section)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								IPAddress  hueIP  =  ( 0 , 0 , 0 , 0 ) ;                   //IP address of the bridge
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  hueApplyOnOff  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  hueApplyBri    =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  hueApplyColor  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//Time CONFIG
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  ntpEnabled  =  false ;                       //get internet time. Only required if you use clock overlays or time-activated macros
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  useAMPM  =  false ;                          //12h/24h clock format
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  currentTimezone  =  0 ;                      //Timezone ID. Refer to timezones array in wled10_ntp.ino
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								int   utcOffsetSecs    =  0 ;                      //Seconds to offset from UTC before timzone calculation
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  overlayDefault  =  0 ;                       //0: no overlay 1: analog clock 2: single-digit clocl 3: cronixie
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  overlayMin  =  0 ,  overlayMax  =  ledCount - 1 ;  //boundaries of overlay mode
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  analogClock12pixel  =  0 ;                   //The pixel in your strip where "midnight" would be
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  analogClockSecondsTrail  =  false ;          //Display seconds as trail of LEDs instead of a single pixel
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  analogClock5MinuteMarks  =  false ;          //Light pixels at every 5-minute position
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-10-07 09:56:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char  cronixieDisplay [ 7 ]  =  " HHMMSS " ;            //Cronixie Display mask. See wled13_cronixie.ino
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  cronixieBacklight  =  true ;                 //Allow digits to be back-illuminated
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  countdownMode  =  false ;                    //Clock will count down towards date
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  countdownYear  =  19 ,  countdownMonth  =  1 ;   //Countdown target date, year is last two digits
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  countdownDay   =   1 ,  countdownHour   =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  countdownMin   =   0 ,  countdownSec    =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  macroBoot  =  0 ;                            //macro loaded after startup
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  macroNl  =  0 ;                              //after nightlight delay over
 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-17 10:27:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  macroCountdown  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-14 12:16:28 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  macroAlexaOn  =  0 ,  macroAlexaOff  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-13 10:13:03 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  macroButton  =  0 ,  macroLongPress  =  0 ,  macroDoublePress  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-27 23:37:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-21 22:59:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//Security CONFIG
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  otaLock  =  false ;                          //prevents OTA firmware updates without password. ALWAYS enable if system exposed to any public networks
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  wifiLock  =  false ;                         //prevents access to WiFi settings when OTA lock is enabled
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  aOtaEnabled  =  true ;                       //ArduinoOTA allows easy updates directly from the IDE. Careful, it does not auto-disable when OTA lock is on
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-02-27 23:27:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-04-24 10:03:25 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								uint16_t  userVar0  =  0 ,  userVar1  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//internal global variable declarations
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//color
 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-05 20:53:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  col [ ] { 255 ,  159 ,  0 ,  0 } ;                    //target RGB(W) color
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  colOld [ ] { 0 ,  0 ,  0 ,  0 } ;                     //color before transition
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  colT [ ] { 0 ,  0 ,  0 ,  0 } ;                       //current color
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  colIT [ ] { 0 ,  0 ,  0 ,  0 } ;                      //color that was last sent to LEDs
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  colSec [ ] { 0 ,  0 ,  0 ,  0 } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  colSecT [ ] { 0 ,  0 ,  0 ,  0 } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  colSecOld [ ] { 0 ,  0 ,  0 ,  0 } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  colSecIT [ ] { 0 ,  0 ,  0 ,  0 } ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  lastRandomIndex  =  0 ;                      //used to save last random color so the new one is not the same
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//transitions
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  transitionActive  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								uint16_t  transitionDelayDefault  =  transitionDelay ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-15 12:03:50 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								uint16_t  transitionDelayTemp  =  transitionDelay ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-07 15:02:27 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								unsigned  long  transitionStartTime ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								float  tperLast  =  0 ;                            //crossfade transition progress, 0.0f - 1.0f
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//nightlight
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  nightlightActive  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  nightlightActiveOld  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								uint32_t  nightlightDelayMs  =  10 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-21 22:28:20 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								uint8_t  nightlightDelayMinsDefault  =  nightlightDelayMins ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-07 15:02:27 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								unsigned  long  nightlightStartTime ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  briNlT  =  0 ;                               //current nightlight brightness
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//brightness
 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-16 19:38:00 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								unsigned  long  lastOnTime  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-13 10:13:03 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  offMode  =  ! turnOnAtBoot ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  bri  =  briS ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-14 12:16:28 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  briOld  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  briT  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  briIT  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  briLast  =  127 ;                            //brightness before turned off. Used for toggle function
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//button
 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-14 12:16:28 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  buttonPressedBefore  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								unsigned  long  buttonPressedTime  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-13 10:13:03 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								unsigned  long  buttonWaitTime  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//notifications
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  notifyDirectDefault  =  notifyDirect ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  receiveNotifications  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-14 12:16:28 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								unsigned  long  notificationSentTime  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  notificationSentCallMode  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-06 22:47:08 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  notificationTwoRequired  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//effects
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  effectCurrent  =  effectDefault ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  effectSpeed  =  effectSpeedDefault ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  effectIntensity  =  effectIntensityDefault ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  effectPalette  =  effectPaletteDefault ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//network
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  onlyAP  =  false ;                           //only Access Point active, no connection to home network
 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-18 21:24:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  udpConnected  =  false ,  udpRgbConnected  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//ui style
 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:50:12 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char  cssCol [ 6 ] [ 9 ] = { " " , " " , " " , " " , " " , " " } ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  showWelcomePage  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-07 13:24:42 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-15 11:04:14 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//hue
 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-21 21:21:07 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char  hueError [ 25 ]  =  " Inactive " ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-18 21:34:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//uint16_t hueFailCount = 0;
 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-15 11:04:14 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								float  hueXLast = 0 ,  hueYLast = 0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								uint16_t  hueHueLast = 0 ,  hueCtLast = 0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  hueSatLast = 0 ,  hueBriLast = 0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								unsigned  long  hueLastRequestSent  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-18 21:34:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  hueAuthRequired  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  hueReceived  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  hueStoreAllowed  =  false ,  hueNewKey  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//unsigned long huePollIntervalMsTemp = huePollIntervalMs;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//bool hueAttempt = false;
 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-15 11:04:14 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//overlays
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  overlayCurrent  =  overlayDefault ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-14 12:16:28 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  overlaySpeed  =  200 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								unsigned  long  overlayRefreshMs  =  200 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-07 15:02:27 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								unsigned  long  overlayRefreshedTime ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 16:36:07 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								int  overlayArr [ 6 ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-06 22:47:08 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								uint16_t  overlayDur [ 6 ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								uint16_t  overlayPauseDur [ 6 ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 20:10:33 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								int  nixieClockI  =  - 1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  nixiePause  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-06 22:47:08 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//cronixie
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  dP [ ] { 0 , 0 , 0 , 0 , 0 , 0 } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  cronixieInit  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-18 08:20:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//countdown
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								unsigned  long  countdownTime  =  1514764800L ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  countdownOverTriggered  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-22 20:49:24 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//timer
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  lastTimerMinute  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  timerHours [ ]    =  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  timerMinutes [ ]  =  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  timerMacro [ ]    =  { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  timerWeekday [ ]  =  { 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 } ;  //weekdays to activate on
 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-30 23:09:44 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//bit pattern of arr elem: 0b11111111: sun,sat,fri,thu,wed,tue,mon,validity
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-22 20:49:24 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//blynk
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  blynkEnabled  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//preset cycling
 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-11 21:50:35 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  presetCyclingEnabled  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  presetCycleMin  =  1 ,  presetCycleMax  =  5 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								uint16_t  presetCycleTime  =  1250 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								unsigned  long  presetCycledTime  =  0 ;  byte  presetCycCurr  =  presetCycleMin ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-05 23:27:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  presetApplyBri  =  false ,  presetApplyCol  =  true ,  presetApplyFx  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-06-23 23:20:15 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  saveCurrPresetCycConf  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//realtime
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  realtimeActive  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-06-23 23:20:15 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								IPAddress  realtimeIP  =  ( 0 , 0 , 0 , 0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								unsigned  long  realtimeTimeout  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-28 21:53:51 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//mqtt
 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-21 16:50:56 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								long  nextMQTTReconnectAttempt  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:50:12 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								long  lastInterfaceUpdate  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								byte  interfaceUpdateCallMode  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-28 21:53:51 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-02-25 18:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# if AUXPIN >= 0 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//auxiliary debug pin
 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-14 12:16:28 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  auxTime  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-18 21:24:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								unsigned  long  auxStartTime  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  auxActive  =  false ,  auxActiveBefore  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-25 18:14:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-18 08:20:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-02-20 21:29:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//alexa udp
 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-07 21:52:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								String  escapedMac ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-09 21:52:42 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifndef WLED_DISABLE_ALEXA 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Espalexa  espalexa ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								EspalexaDevice *  espalexaDevice ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-21 22:59:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-14 10:41:24 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//dns server
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								DNSServer  dnsServer ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  dnsActive  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//network time
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  ntpConnected  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								time_t  local  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								unsigned  long  ntpLastSyncTime  =  999000000L ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								unsigned  long  ntpPacketSentTime  =  999000000L ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								IPAddress  ntpServerIP ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								unsigned  int  ntpLocalPort  =  2390 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define NTP_PACKET_SIZE 48 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-11 18:30:49 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//string temp buffer (now stored in stack locally)
 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-20 22:44:34 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define OMAX 2048 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-11 18:30:49 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								char *  obuf ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-20 17:35:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								uint16_t  olen  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-02-15 23:21:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								String  messageHead ,  messageSub ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-20 22:44:34 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								byte  optionType ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-15 23:21:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-02-17 16:11:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  doReboot  =  false ;  //flag to initiate reboot from async handlers
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//server library objects
 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-15 23:21:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								AsyncWebServer  server ( 80 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-18 21:34:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								AsyncClient *  hueClient  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-17 18:21:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								AsyncMqttClient *  mqtt  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-28 21:53:51 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//udp interface objects
 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-18 21:24:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								WiFiUDP  notifierUdp ,  rgbUdp ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-07 15:02:27 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								WiFiUDP  ntpUdp ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 16:17:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								E131 *  e131 ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 21:23:18 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//led fx library object
 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-12 22:28:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								WS2812FX  strip  =  WS2812FX ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-14 22:40:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//debug macros
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-21 22:28:20 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifdef WLED_DEBUG 
 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-15 23:04:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 # define DEBUG_PRINT(x)  Serial.print (x) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # define DEBUG_PRINTLN(x) Serial.println (x) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # define DEBUG_PRINTF(x) Serial.printf (x) 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 unsigned  long  debugTime  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 int  lastWifiState  =  3 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 unsigned  long  wifiStateChangedTime  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-15 23:04:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # define DEBUG_PRINT(x) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # define DEBUG_PRINTLN(x) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # define DEBUG_PRINTF(x) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//filesystem
 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-16 01:09:37 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifndef WLED_DISABLE_FILESYSTEM 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # include  <FS.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # ifdef ARDUINO_ARCH_ESP32 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # include  "SPIFFS.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 # include  "SPIFFSEditor.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 10:24:59 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-11 21:07:18 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//function prototypes
 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-20 22:44:34 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								void  serveMessage ( AsyncWebServerRequest * , uint16_t , String , String , byte ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-20 21:29:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-16 01:09:37 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//turns all LEDs off and restarts ESP
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-11 21:07:18 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								void  reset ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-14 12:16:28 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  briT  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-07 22:22:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  long  dly  =  millis ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  while ( millis ( )  -  dly  <  250 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    yield ( ) ;  //enough time to send response to client
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-25 20:11:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  setAllLeds ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-14 23:24:28 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  DEBUG_PRINTLN ( " MODULE RESET " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-09 22:13:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  ESP . restart ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-11 21:07:18 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//append new c string to temp buffer efficiently
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  oappend ( char *  txt ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-20 17:35:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  uint16_t  len  =  strlen ( txt ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  if  ( olen  +  len  > =  OMAX )  return  false ;  //buffer full
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  strcpy ( obuf  +  olen ,  txt ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  olen  + =  len ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//append new number to temp buffer efficiently
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  oappendi ( int  i ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-20 17:35:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-17 10:27:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  char  s [ 11 ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-20 17:35:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  sprintf ( s , " %ld " ,  i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  return  oappend ( s ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//boot starts here
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-11 21:07:18 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								void  setup ( )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-20 12:40:12 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  pinMode ( 4 ,  OUTPUT ) ;  digitalWrite ( 4 ,  HIGH ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  wledInit ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-11 21:07:18 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-15 15:29:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//main program loop
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-11 21:07:18 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								void  loop ( )  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  handleSerial ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  handleNotifications ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  handleTransitions ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  userLoop ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-17 10:27:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  yield ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-16 01:09:37 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  handleIO ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-17 23:31:45 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  handleIR ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  handleNetworkTime ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-17 18:21:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  if  ( ! onlyAP )  handleAlexa ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-17 10:27:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  handleOverlays ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  yield ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-17 16:11:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  if  ( doReboot )  reset ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-17 10:27:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  if  ( ! realtimeActive )  //block stuff if WARLS/Adalight is enabled
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-15 23:21:22 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( dnsActive )  dnsServer . processNextRequest ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    # ifndef WLED_DISABLE_OTA 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     if  ( aOtaEnabled )  ArduinoOTA . handle ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-14 23:24:28 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    # endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    handleNightlight ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-09 20:41:23 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    yield ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( ! onlyAP )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      handleHue ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      handleBlynk ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-21 16:50:56 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      yield ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  ( millis ( )  >  nextMQTTReconnectAttempt ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        yield ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        initMqtt ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        nextMQTTReconnectAttempt  =  millis ( )  +  30000 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      } 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-20 22:44:34 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    yield ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-13 10:13:03 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( ! offMode )  strip . service ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-17 10:27:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  //DEBUG serial logging
 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-21 22:28:20 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  # ifdef WLED_DEBUG 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-07 15:35:02 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								   if  ( millis ( )  -  debugTime  >  9999 ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								   { 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-07 15:35:02 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     DEBUG_PRINTLN ( " ---DEBUG INFO--- " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     DEBUG_PRINT ( " Runtime:  " ) ;  DEBUG_PRINTLN ( millis ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     DEBUG_PRINT ( " Unix time:  " ) ;  DEBUG_PRINTLN ( now ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     DEBUG_PRINT ( " Free heap:  " ) ;  DEBUG_PRINTLN ( ESP . getFreeHeap ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     DEBUG_PRINT ( " Wifi state:  " ) ;  DEBUG_PRINTLN ( WiFi . status ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     if  ( WiFi . status ( )  ! =  lastWifiState ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								       wifiStateChangedTime  =  millis ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     lastWifiState  =  WiFi . status ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     DEBUG_PRINT ( " State time:  " ) ;  DEBUG_PRINTLN ( wifiStateChangedTime ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     DEBUG_PRINT ( " NTP last sync:  " ) ;  DEBUG_PRINTLN ( ntpLastSyncTime ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     DEBUG_PRINT ( " Client IP:  " ) ;  DEBUG_PRINTLN ( WiFi . localIP ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-17 10:27:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     debugTime  =  millis ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-09 16:00:36 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								   } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-11 21:07:18 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								}