Facade

A dual world time zone analog chronometer watch face for the Fitbit Ionic, Sense, & Versa

Analog watch face with support for dual world wide time zones, chronograph, moon phase, and can act as a flashlight. Time zone 1 is always the main analog clock in the center of the display. If a second timezone is selected then that time is displayed as a digital clock in the lower left hand corner of the display. Timesones can be selected from one of 34 cities, 198 countries, or custom timezones can be specified. Note that this second timezone can also act as a chronograph (tapping on the second timezone brings up the chronograph configuration page where it can be enabled/disabled/set).

Tapping on the center of the watch turns the face into a flashlight (all be it a rather dim one). Tapping the center again brings back the watch face. Note that while the chronograph is enabled tapping the battery level will turn on the flashlight.

The bottom right icon changes to show the phase of the moon. Tapping this icon brings up configuration pages for choosing time zones, setting custom time zones, (and setting the watch hands to rotate counter clockwise).

Battery percentage is displayed in the upper left corner and the current heart rate or step count is displayed in the upper right corner.

You can obtain this watchface from the Fitbit Gallery or by going to this direct link.

Facade is licensed under the GPL V3.0. The latest source tree is available for browsing here and tarballs for the latest and older versions are here:

Note that the source tree is exactly the same for for all supported devices but Fitbit, in their infinite wisdom, has decided to create 2 incompatible SDKs. SDK4 must be used to create binaries for the Ionic, Versa, Versa 2, and Versa Lite while SDK5 must be used to create binaries for the Sense and Versa 3. The source tree contains package4.json and package5.json files for both SDKs, just rename either file to package.json and you can create the appropriate binary.

Main display

Refer to the picture of the main clock face to understand the information provided by this clock face. There is an analog clock in the center and the 4 corners provide extra info/control buttons.

Analog watch face

A, hopefully, simple and elegant watch face showing second granularity with a red second hand. There are 4 areas in the center of the analog face that show extra information.

Flashlight function

Tapping on the center of the face will turn the watch into a flashlight. The screen will go totally white at the brightest setting possible. Tapping the center of the face again will bring back the watch.

Although the flashlight is rather dim you'd be amazed at how helpful it is when you're stumbling around a strange hotel room in the middle of the night trying to not wake your spose.

Note that the chronograph function, when enabled, pre-empts a tap to the center of the watch. In this mode just tap on the battery level indicator and the flashlight will be enabled. Tapping the center of the watch face while the flashlight is on will always turn the flashlight off. This means that the chronograph can only be stopped when the flashlight is off.

Chronograph

Facade has a built in chronograph that can operate as either an up counting stopwatch or as a down counting timer. Tapping the Timezone 2 area brings up the configuration page for the Chronograph. When the Chronograph is enabled the second timezone display on the main face now displays a timer and some of the buttons on the main face change their meaning. Specifically:

Chrono controls

Tapping Timezone 2 on the main display brings up the pages used to control the Chronogrph.

Configuration

There are multiple configuration pages, all accessible after pressing the moon icon on the main watch face which will bring up the first configuration page, Select TZ. For all the configuration pages, pressing the blue title at the top of the page returns to the main watch face, press the left chevron to go to the configuration page on the left, press the right chevron to go to the configuration page on the right.

In summary, presssing the left/right buttons at the top of the these pages cycles through the configuration pages in this order (starting from the Configuration):

Set Custom TZ <-> AM/PM Style <-> Configuration <-> Select TZ

Configuration navigation

Versa 3/Sense enhancements

Unfortunately Fitbit, in their infinite wisdom, decided to change the SDK for Versa 3 & Sense devices in a way that is incompatibile with the SDK used for Ionic and older Versa models. In the interests of standardization Facade has decided to go with the new SDK design (it makes it much easier to use the same code base to support all Fitbit smart watches). The problem is that the Versa 3 & Sense devices do not support vertical scrolling for watch faces. This means that the configuration pages:

As such, the UI has been changed to use buttons to manually page through multiple configuration pages, use buttons to move up and down in the list of cities and countries for timezone selection, and use a 10 button digit field to select each digit of a time value. (In case you haven't noticed Fitbit has decided that a button is the only valid UI control for a watch face.)

This is a cumbersome design where scrolling views and tumblers would be much more appropriate but who am I to argue with Fitbit.

Also, the change in the SDK required many internal changes to the code in order to get this watch face working on the new devices. Users don't care about these changes but, trust me, the developer is still bitter about them.

Local Time

The Fitbit has a rather loose concept of time zone, e.g. it doesn't know anything about it. Time is accurately reported as local time plus the GMT offset. If the watch is taken to a different time zone it will silently update the time to the current time in the local time zone. This means that, if set to Local, the analog clock face will always display the current, local time. You won't know what time zone you're in, but you will have the correct local time.

For those that care about time zones you can explicitly set the time zone for the analog face and it will be displayed correctly. Facade has to use a rather baroque technique to display an explicit time zone. First the GMT offset is applied to the local time to get UTC time. Then, the appropriate GMT offset for the desired time zone is applied to that UTC time in order to get the time in the desired time zone.

Daylight Savings Time

Since there's only a GMT offset provided there's no way to determine the time zone for the local time.

This means there's no way to automatically determine daylight savings time for the local time zone. Even if you can use the date to find out if daylight savings time is in effect you still can't reliable go from a GMT offset to a time zone. Consider Eastern European Time (EET - offset of GMT+02) but observes daylight savings time (EEST - offset of GMT+03) Moscow (MSK - offset of GMT+03) does not observe daylight savings time. If the Fitbit returns a time of 00:00:00 GMT+03:00 on June 1 is that MSK or EEST - there's no way to know.

Having said that, for explicitly specified time zones it is possible to use the date to determine if daylight savings time is in effect. Facade will do this for US and EU times (AKST/AKDT, PST/PDT, MST/MDT, CST/CDT, EST/EDT, GMT/BST, CET/CEST, EET/EEST). If I get enough requests I can consider doing daylight savings time for other time zones but dealing with all the special cases (who's brilliant idea was it to use the last Sunday of a month, that is hard to determine) for all the time zones gets really messy really quickly (just getting the US & EU was hard enough).

Moon Phase Inaccuracies

(Basically an apology for why Facade is only approximately correct about moon phases.)

There are two issues that make identifying the correct moon phase extremely hard:

This makes computing the precise moon phase extremely difficult and way beyond the capabilities of Facade.

Having said that, Facade attempts to be fairly accurate. It calculates the current lunar day by comparing the current date to the reference date of the new moon on January 1, 1900, modulo 29.5(30588853). This calculation seems to be fairly accurate (it is certainly correct for the 44,206 days from the new moon on January 1, 1900 to the new moon on January 12, 2021). This results in a lunar day of 1 - 29 (actually, some months it turns out to be 1-30 because of roundoff with the lunar period).

The lunar day is then converted to one of 8 icons (representing the moon waxing from new moon to full moon and then waning from full moon to new moon). This conversion is offset by 2 days so that the new moon icon appears for the 2 days before the new moon, the actual new moon itself and then 1 day after the new moon.



Maintained by Don Dugger <n0ano@n0ano.com>
--
"Censeo Toto nos in Kansa esse decisse." - D. Gale