Added Sun settings and 12hrs in sunrise and set times
parent
b34218aa5c
commit
f7002a782f
|
|
@ -12,4 +12,4 @@
|
||||||
0.12: Added setting to change Battery estimate to hours
|
0.12: Added setting to change Battery estimate to hours
|
||||||
0.13: Fixed Battery estimate Default to percentage and improved setting string
|
0.13: Fixed Battery estimate Default to percentage and improved setting string
|
||||||
0.14: Use `power_usage` module
|
0.14: Use `power_usage` module
|
||||||
0.15: Ring can now show hours, minute, or seconds hand, or battery; Allowed for 12hr time; Ring now goes up in 5% increments
|
0.15: Ring can now show hours, minute, or seconds hand, day/night left, or battery; Allowed for 12hr time; Ring now goes up in 5% increments
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,16 @@ See [#1248](https://github.com/espruino/BangleApps/issues/1248)
|
||||||
* Uses mylocation.json from MyLocation app to calculate sunrise and sunset times for your location
|
* Uses mylocation.json from MyLocation app to calculate sunrise and sunset times for your location
|
||||||
* If your Sunrise, Sunset times look odd make sure you have setup your location using
|
* If your Sunrise, Sunset times look odd make sure you have setup your location using
|
||||||
[MyLocation](https://banglejs.com/apps/?id=mylocation)
|
[MyLocation](https://banglejs.com/apps/?id=mylocation)
|
||||||
* The screen is updated every minute to save battery power
|
* The screen is updated every minute to save battery power, unless the ring is set to display seconds, then it updates every 5 seconds.
|
||||||
* Uses the [BloggerSansLight](https://www.1001fonts.com/rounded-fonts.html?page=3) font, which if free for commercial use
|
* Uses the [BloggerSansLight](https://www.1001fonts.com/rounded-fonts.html?page=3) font, which if free for commercial use
|
||||||
* You need to run >2V22 to show the battery estimate in hours
|
* You need to run >2V22 to show the battery estimate in hours
|
||||||
|
* In the settings, the ring can be set to:
|
||||||
|
* Hours - Displays the ring as though it's the hour hand on an analog clock.
|
||||||
|
* Minutes - Displays the ring as though it's the minute hand on an analog clock.
|
||||||
|
* Seconds - Displays the ring as though it's the seconds hand on an analog clock.
|
||||||
|
* Steps - Displays the ring as the amount of steps taken that day out of 10,000.
|
||||||
|
* Battery - Displays the ring as the amount of battery percentage left.
|
||||||
|
* Sun - Displays the ring as the amount of time that has passed from sunrise to sunset in the day and the amount of time between sunset and sunrise at night.
|
||||||
|
|
||||||
## Future Development
|
## Future Development
|
||||||
* Use mini icons in the information line rather that text
|
* Use mini icons in the information line rather that text
|
||||||
|
|
|
||||||
|
|
@ -99,21 +99,52 @@ function loadLocation() {
|
||||||
|
|
||||||
function extractTime(d){
|
function extractTime(d){
|
||||||
var h = d.getHours(), m = d.getMinutes();
|
var h = d.getHours(), m = d.getMinutes();
|
||||||
|
if (settings.hr_12) {
|
||||||
|
h = h % 12;
|
||||||
|
if (h == 0) h = 12;
|
||||||
|
}
|
||||||
return(("0"+h).substr(-2) + ":" + ("0"+m).substr(-2));
|
return(("0"+h).substr(-2) + ":" + ("0"+m).substr(-2));
|
||||||
}
|
}
|
||||||
|
|
||||||
var sunRise = "00:00";
|
var sunRise = "00:00";
|
||||||
var sunSet = "00:00";
|
var sunSet = "00:00";
|
||||||
var drawCount = 0;
|
var drawCount = 0;
|
||||||
|
var sunStart;
|
||||||
|
var sunFull;
|
||||||
|
|
||||||
function updateSunRiseSunSet(now, lat, lon, line){
|
function updateSunRiseSunSet(now, lat, lon, sunLeftCalcs){
|
||||||
// get today's sunlight times for lat/lon
|
// get today's sunlight times for lat/lon
|
||||||
var times = SunCalc.getTimes(new Date(), lat, lon);
|
var times = SunCalc.getTimes(now, lat, lon);
|
||||||
|
|
||||||
// format sunrise time from the Date object
|
// format sunrise time from the Date object
|
||||||
sunRise = extractTime(times.sunrise);
|
sunRise = extractTime(times.sunrise);
|
||||||
sunSet = extractTime(times.sunset);
|
sunSet = extractTime(times.sunset);
|
||||||
|
if (!sunLeftCalcs) return;
|
||||||
|
|
||||||
|
let sunLeft = times.sunset - now;
|
||||||
|
if (sunLeft < 0) { // If it's already night
|
||||||
|
let tmrw = now;
|
||||||
|
tmrw.setDate(tmrw.getDate() + 1);
|
||||||
|
let timesTmrw = SunCalc.getTimes(tmrw, lat, lon);
|
||||||
|
sunStart = times.sunset;
|
||||||
|
sunFull = timesTmrw.sunrise - sunStart;
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
sunLeft = now - times.sunrise;
|
||||||
|
if (sunLeft < 0) { // If it's not morning yet.
|
||||||
|
let yest = now;
|
||||||
|
yest.setDate(yest.getDate() - 1);
|
||||||
|
let timesYest = SunCalc.getTimes(yest, lat, lon);
|
||||||
|
sunStart = timesYest.sunset;
|
||||||
|
sunFull = times.sunrise - sunStart;
|
||||||
|
}
|
||||||
|
else { // We're in the middle of the day
|
||||||
|
sunStart = times.sunrise;
|
||||||
|
sunFull = times.sunset - sunStart;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function batteryString(){
|
function batteryString(){
|
||||||
let stringToInsert;
|
let stringToInsert;
|
||||||
|
|
@ -242,6 +273,9 @@ function drawClock() {
|
||||||
case 'Battery':
|
case 'Battery':
|
||||||
ring_percent = E.getBattery();
|
ring_percent = E.getBattery();
|
||||||
break;
|
break;
|
||||||
|
case 'Sun':
|
||||||
|
ring_percent = 100 * (date - sunStart) / sunFull;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.hr_12) {
|
if (settings.hr_12) {
|
||||||
|
|
@ -269,7 +303,7 @@ function drawClock() {
|
||||||
|
|
||||||
// recalc sunrise / sunset every hour
|
// recalc sunrise / sunset every hour
|
||||||
if (drawCount % 60 == 0)
|
if (drawCount % 60 == 0)
|
||||||
updateSunRiseSunSet(new Date(), location.lat, location.lon);
|
updateSunRiseSunSet(new Date(), location.lat, location.lon, settings.ring == 'Sun');
|
||||||
drawCount++;
|
drawCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -665,6 +699,7 @@ Bangle.setUI("clockupdown", btn=> {
|
||||||
|
|
||||||
loadSettings();
|
loadSettings();
|
||||||
loadLocation();
|
loadLocation();
|
||||||
|
updateSunRiseSunSet(new Date(), location.lat, location.lon, true);
|
||||||
|
|
||||||
g.clear();
|
g.clear();
|
||||||
Bangle.loadWidgets();
|
Bangle.loadWidgets();
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
var color_options = ['Green','Orange','Cyan','Purple','Red','Blue'];
|
var color_options = ['Green','Orange','Cyan','Purple','Red','Blue'];
|
||||||
var fg_code = ['#0f0','#ff0','#0ff','#f0f','#f00','#00f'];
|
var fg_code = ['#0f0','#ff0','#0ff','#f0f','#f00','#00f'];
|
||||||
var gy_code = ['#020','#220','#022','#202','#200','#002'];
|
var gy_code = ['#020','#220','#022','#202','#200','#002'];
|
||||||
var ring_options = ['Hours', 'Minutes', 'Seconds', 'Steps', 'Battery'];
|
var ring_options = ['Hours', 'Minutes', 'Seconds', 'Steps', 'Battery', 'Sun'];
|
||||||
|
|
||||||
E.showMenu({
|
E.showMenu({
|
||||||
'': { 'title': 'Daisy Clock' },
|
'': { 'title': 'Daisy Clock' },
|
||||||
|
|
@ -66,7 +66,7 @@
|
||||||
},
|
},
|
||||||
'Ring Display': {
|
'Ring Display': {
|
||||||
value: 0 | ring_options.indexOf(s.ring),
|
value: 0 | ring_options.indexOf(s.ring),
|
||||||
min: 0, max: 4,
|
min: 0, max: 5,
|
||||||
format: v => ring_options[v],
|
format: v => ring_options[v],
|
||||||
onchange: v => {
|
onchange: v => {
|
||||||
s.ring = ring_options[v];
|
s.ring = ring_options[v];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue