Use newline geolocation api. make geolocation optional.
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Compile / Compile (push) Successful in 1m26s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Compile / Compile (push) Successful in 1m26s
				
			This commit is contained in:
		
							parent
							
								
									5dea52ebe4
								
							
						
					
					
						commit
						33dc87dfd0
					
				
					 5 changed files with 208 additions and 35 deletions
				
			
		| 
						 | 
				
			
			@ -17,7 +17,6 @@ lib_deps =
 | 
			
		|||
    GxEPD2
 | 
			
		||||
    Time
 | 
			
		||||
    NTPClient
 | 
			
		||||
    ArduinoJson
 | 
			
		||||
 | 
			
		||||
lib_ldf_mode = deep+
 | 
			
		||||
board_build.partitions = min_spiffs.csv
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										126
									
								
								src/Icons.h
									
										
									
									
									
								
							
							
						
						
									
										126
									
								
								src/Icons.h
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -20,4 +20,130 @@ namespace Icons
 | 
			
		|||
    0x06, 0x07, 0xfe, 0x38, 0x06, 0x07, 0xfe, 0x38, 0x06, 0x07, 0xfe, 0x38, 0x06, 0x07, 0xff, 0xf8, 
 | 
			
		||||
    0x06, 0x07, 0xff, 0xf8, 0x06, 0x07, 0xff, 0xf8, 0x06, 0x07, 0xff, 0xf8
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  namespace Weather
 | 
			
		||||
  {
 | 
			
		||||
    const unsigned char wind[] PROGMEM = {
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x60, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0xe0, 0x1f, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x1f, 0xff, 0xf0, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x5c, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const unsigned char humidity[] PROGMEM = {
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 
 | 
			
		||||
      0x00, 0x0f, 0xc0, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x3f, 0xb0, 0x00, 
 | 
			
		||||
      0x00, 0x47, 0xb8, 0x00, 0x00, 0xdb, 0x78, 0x00, 0x00, 0xdb, 0x7c, 0x00, 0x00, 0xc2, 0xfc, 0x00, 
 | 
			
		||||
      0x00, 0xe6, 0xdc, 0x00, 0x01, 0xfd, 0x8c, 0x00, 0x00, 0xfd, 0x2c, 0x00, 0x00, 0xfb, 0x2c, 0x00, 
 | 
			
		||||
      0x00, 0xfb, 0x8c, 0x00, 0x00, 0x77, 0xd8, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x1f, 0xe0, 0x00, 
 | 
			
		||||
      0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // 50x50
 | 
			
		||||
    const unsigned char day_clear[] PROGMEM = {
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0e, 0x00, 
 | 
			
		||||
      0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x3e, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 
 | 
			
		||||
      0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x01, 0x80, 0x7f, 0x80, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf0, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x3e, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 
 | 
			
		||||
      0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x78, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x03, 
 | 
			
		||||
      0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0f, 
 | 
			
		||||
      0xf0, 0x78, 0x00, 0x01, 0xc1, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x70, 0x00, 0x01, 0xc1, 0xff, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x1f, 0xf0, 0x78, 0x00, 0x01, 0xc1, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 
 | 
			
		||||
      0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x78, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x07, 
 | 
			
		||||
      0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x3e, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf1, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 
 | 
			
		||||
      0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 
 | 
			
		||||
      0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x0f, 0x80, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 
 | 
			
		||||
      0x0e, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0e, 0x00, 0x02, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const unsigned char  night_clear [] PROGMEM = {
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 
 | 
			
		||||
      0xe7, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x7c, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0xc0, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x03, 0xe0, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x01, 0xe0, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 
 | 
			
		||||
      0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x0f, 0x80, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x1f, 
 | 
			
		||||
      0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x0f, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3e, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 
 | 
			
		||||
      0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x03, 0xc0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0xf8, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 
 | 
			
		||||
      0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x7f, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0xff, 
 | 
			
		||||
      0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x07, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -18,11 +18,11 @@ void WatchFace::InitBoot()
 | 
			
		|||
    m_features.wifi.Disconnect();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static_cast<WatchFacePages::Weather *>(m_pages[1].get())->Resync();
 | 
			
		||||
 | 
			
		||||
  for (auto & page : m_pages) {
 | 
			
		||||
    page->InitBoot();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static_cast<WatchFacePages::Weather *>(m_pages[1].get())->Resync();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WatchFace::InitWake()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,13 +4,13 @@
 | 
			
		|||
#include <Fonts/FreeSans9pt7b.h>
 | 
			
		||||
#include <Fonts/FreeSansBold9pt7b.h>
 | 
			
		||||
#include <Fonts/FreeSans12pt7b.h>
 | 
			
		||||
#include <Fonts/FreeSans18pt7b.h>
 | 
			
		||||
#include <HTTPClient.h>
 | 
			
		||||
#include <ArduinoJson.h>
 | 
			
		||||
 | 
			
		||||
RTC_DATA_ATTR uint64_t WatchFacePages::Weather::m_lastSyncTime = 0;
 | 
			
		||||
RTC_DATA_ATTR int WatchFacePages::Weather::m_lastCalculatedDay = 0XFFFFFFFF;
 | 
			
		||||
RTC_DATA_ATTR float WatchFacePages::Weather::m_locationLat = 0.0f;
 | 
			
		||||
RTC_DATA_ATTR float WatchFacePages::Weather::m_locationLon = 0.0f;
 | 
			
		||||
RTC_DATA_ATTR float WatchFacePages::Weather::m_locationLat = DEFAULT_LATITUDE;
 | 
			
		||||
RTC_DATA_ATTR float WatchFacePages::Weather::m_locationLon = DEFAULT_LONGITUDE;
 | 
			
		||||
RTC_DATA_ATTR char WatchFacePages::Weather::m_locationCity[128];
 | 
			
		||||
 | 
			
		||||
WatchFacePages::Weather::Weather(WatchyDisplay & display, WatchFeatures::WatchFeatures & features)
 | 
			
		||||
| 
						 | 
				
			
			@ -20,6 +20,7 @@ WatchFacePages::Weather::Weather(WatchyDisplay & display, WatchFeatures::WatchFe
 | 
			
		|||
 | 
			
		||||
void WatchFacePages::Weather::InitBoot()
 | 
			
		||||
{
 | 
			
		||||
  memcpy(m_locationCity, DEFAULT_CITY_NAME, sizeof(DEFAULT_CITY_NAME));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WatchFacePages::Weather::InitWake()
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +29,6 @@ void WatchFacePages::Weather::InitWake()
 | 
			
		|||
 | 
			
		||||
void WatchFacePages::Weather::DrawPage(bool partialRefresh)
 | 
			
		||||
{
 | 
			
		||||
  Serial.println("Weather:DrawPage");
 | 
			
		||||
  if (m_lastSyncTime == 0) {
 | 
			
		||||
    Resync();
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -54,14 +54,49 @@ void WatchFacePages::Weather::DrawPage(bool partialRefresh)
 | 
			
		|||
    weatherOutdated = true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  m_display.setFont(&FreeSansBold9pt7b);
 | 
			
		||||
  // City name and icon
 | 
			
		||||
  m_display.setFont(&FreeSans9pt7b);
 | 
			
		||||
  int16_t x, y;
 | 
			
		||||
  uint16_t w, h;
 | 
			
		||||
  
 | 
			
		||||
  m_display.drawBitmap(5, 5, Icons::city, 29, 23, GxEPD_BLACK);
 | 
			
		||||
 | 
			
		||||
  m_display.setCursor(39, 21);
 | 
			
		||||
  m_display.setCursor(39, 22);
 | 
			
		||||
  m_display.print(m_locationCity);
 | 
			
		||||
  // Separator
 | 
			
		||||
  m_display.fillRect(10, 35, DISPLAY_WIDTH - 20, 2, GxEPD_BLACK);
 | 
			
		||||
 | 
			
		||||
  // Temperature and weather icon
 | 
			
		||||
  // Separator 
 | 
			
		||||
  m_display.fillRect(10, 118, DISPLAY_WIDTH - 20, 2, GxEPD_BLACK);
 | 
			
		||||
 | 
			
		||||
  m_display.drawBitmap(0, 120, Icons::Weather::day_clear, 75, 75, GxEPD_BLACK);
 | 
			
		||||
  m_display.setFont(&FreeSans12pt7b);
 | 
			
		||||
 | 
			
		||||
  std::string temperature = "-20.5  C";
 | 
			
		||||
 | 
			
		||||
  m_display.getTextBounds(temperature.c_str(), 0, 0, &x, &y, &w, &h);
 | 
			
		||||
  m_display.setCursor(190 - w, 142);
 | 
			
		||||
  m_display.print(temperature.c_str());
 | 
			
		||||
  // Hacky degree symbol
 | 
			
		||||
  m_display.fillCircle(190 - 23, 129, 3, GxEPD_BLACK);
 | 
			
		||||
  m_display.fillCircle(190 - 23, 129, 1, GxEPD_WHITE);
 | 
			
		||||
 | 
			
		||||
  // Wind speed
 | 
			
		||||
  m_display.drawBitmap(165, 145, Icons::Weather::wind, 30, 30, GxEPD_BLACK);
 | 
			
		||||
  std::string windSpeed = "99 m/s";
 | 
			
		||||
  m_display.setFont(&FreeSans9pt7b);
 | 
			
		||||
  m_display.getTextBounds(windSpeed.c_str(), 0, 0, &x, &y, &w, &h);
 | 
			
		||||
  m_display.setCursor(160 - w, 165);
 | 
			
		||||
  m_display.print(windSpeed.c_str());
 | 
			
		||||
 | 
			
		||||
  // Humidity
 | 
			
		||||
  m_display.drawBitmap(165, 170, Icons::Weather::humidity, 30, 30, GxEPD_BLACK);
 | 
			
		||||
  std::string humidity = "100";
 | 
			
		||||
  m_display.getTextBounds(humidity.c_str(), 0, 0, &x, &y, &w, &h);
 | 
			
		||||
  m_display.setCursor(160 - w, 190);
 | 
			
		||||
  m_display.print(humidity.c_str());
 | 
			
		||||
 | 
			
		||||
  m_display.display(partialRefresh);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -77,37 +112,45 @@ void WatchFacePages::Weather::Resync()
 | 
			
		|||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  HTTPClient client;
 | 
			
		||||
  client.setConnectTimeout(3000); // 3 second max timeout
 | 
			
		||||
  if (DO_GEOLOCATION) {
 | 
			
		||||
    HTTPClient client;
 | 
			
		||||
    client.setConnectTimeout(3000); // 3 second max timeout
 | 
			
		||||
 | 
			
		||||
  client.begin("http://ip-api.com/json/");
 | 
			
		||||
  int httpCode = client.GET();
 | 
			
		||||
  if (httpCode != 200) {
 | 
			
		||||
    m_features.wifi.Disconnect();
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
    client.begin("http://ip-api.com/line/");
 | 
			
		||||
    int httpCode = client.GET();
 | 
			
		||||
    if (httpCode != 200) {
 | 
			
		||||
      m_features.wifi.Disconnect();
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  String payload = client.getString();
 | 
			
		||||
  client.end();
 | 
			
		||||
    String payload = client.getString();
 | 
			
		||||
    client.end();
 | 
			
		||||
    std::string reponse(payload.c_str());
 | 
			
		||||
 | 
			
		||||
  DynamicJsonDocument json(1024);
 | 
			
		||||
  DeserializationError error = deserializeJson(json, payload);
 | 
			
		||||
  if (error) {
 | 
			
		||||
    m_features.wifi.Disconnect();
 | 
			
		||||
    return;
 | 
			
		||||
    // Split into lines
 | 
			
		||||
    std::vector<std::string> lines;
 | 
			
		||||
    std::string::size_type pos = 0;
 | 
			
		||||
    std::string::size_type prev = 0;
 | 
			
		||||
    char delimiter = '\n';
 | 
			
		||||
    while ((pos = reponse.find(delimiter, prev)) != std::string::npos) {
 | 
			
		||||
      lines.push_back(reponse.substr(prev, pos - prev));
 | 
			
		||||
      prev = pos + 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Check if we got enough lines
 | 
			
		||||
    if (lines.size() < 14) {
 | 
			
		||||
      m_features.wifi.Disconnect();
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    std::string location = lines[5];
 | 
			
		||||
    location = location.substr(0, 127);
 | 
			
		||||
    m_locationCity[location.length()] = '\0';
 | 
			
		||||
    memcpy(m_locationCity, location.c_str(), location.length());
 | 
			
		||||
    m_locationLat = std::stof(lines[7]);
 | 
			
		||||
    m_locationLon = std::stof(lines[8]);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  if (!json.containsKey("lat") || !json.containsKey("lon")) {
 | 
			
		||||
    m_features.wifi.Disconnect();
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  std::string location = json["city"].as<std::string>();
 | 
			
		||||
  location = location.substr(0, 127);
 | 
			
		||||
  memcpy(m_locationCity, location.c_str(), location.length());
 | 
			
		||||
  m_locationCity[location.length()] = '\0';
 | 
			
		||||
  m_locationLat = json["lat"];
 | 
			
		||||
  m_locationLon = json["lon"];
 | 
			
		||||
  m_features.wifi.Disconnect();
 | 
			
		||||
 | 
			
		||||
  m_lastSyncTime = currentTime;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,6 +42,11 @@
 | 
			
		|||
#define WAKE_ON_ACCEL_EVENTS false // useful if saving battery by not updating every minute
 | 
			
		||||
 | 
			
		||||
#define WEATHER_UPDATE_INTERVAL 3600 // seconds
 | 
			
		||||
#define DO_GEOLOCATION true // if false then use defaults below
 | 
			
		||||
 | 
			
		||||
#define DEFAULT_LATITUDE 60.170833
 | 
			
		||||
#define DEFAULT_LONGITUDE 24.9375
 | 
			
		||||
#define DEFAULT_CITY_NAME "Helsinki"
 | 
			
		||||
 | 
			
		||||
#include "secrets.h"
 | 
			
		||||
#if !defined(WIFI_SSID) || !defined(WIFI_PASS)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue