Facade

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

Analog watch face with support for dual world wide time zones, scheduling calendar, chronograph, moon phase, and can act as a flashlight.

Note the red or green triangle on the outer edge of the dial. This triangle marks the hour hand position for the second time zone (or the first time zone if there is no second timezone selected). This triangle will be red to indicate AM and green to indicate PM. For example, the clock face on the left shows the local time of 1:30 and the Alaskan Daylight time of 11:41AM.

Time zone 1 is always the main analog clock in the center of the display. If a second timezone is selected then that hour of that timezone is shown by the triangle on the edge of the face and, optionally, it is also 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 current date (the number in the square box on the right hand side of the display) will bring up a calendar showing the current month. Events can be added to this calendar and it is possible to scroll through it by month or year.

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 spouse.

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.

Calendar

Facade has the ability to track calendar events and give an alarm (haptic vibration and visual icon) when an event is imminent. The above screen shots show, on the left, a big icon under the 12 indicating an alarm for an upcoming event (while the big icon is displayed the watch will cause a 2 second haptic vibration that repeats every minute until dismissed). Tapping the big icon will dismiss the alarm and show the screen on the right (with a small icon under the 9 indicating that the event has not ended yet). Note that both icons will disappear one the event ends.

Calendar - Versa 3/Sense

Tapping on the date on the main watch face brings up a month calendar, as shown by the picture on the left above. The current date is highlighted by a square and any dates that have an event are highlighted with a gray background.

As you might expect, tapping on the arrows next to the month name will scroll back and forth a month at a time while tapping on the arrows next to the year will scroll back and forth a year at a time. Tapping on the year itself will reset the calendar to the current date (note that the calendar shows the last month viewed whenever it is invoked from the watch face so being able to reset the calendar date is important).

Tapping on the month name at the top will go back to the watch face while tapping on the year at the bottom will display the month for the current day.

Tapping on a day of the month will bring up a event details page showing events for that day, as shown by the picture on the right above. Events can be added/updated/deleted from this page. Note that there are arrows next to the New button. If there are more events than can be displayed on the page then tapping on the down arrow shows subsequent events for the day while tapping on the up arrow shows prior events. These arrows are only displayed if needed.

Note the arrows next to the day of the month at the top of the page. Tapping on those arrows allows you to step one by one through the days of the month (acurately tapping a specific day in the month display is hard on a small watch so you can just tap on a day close to what you want and then scroll to the day you really wanted).

Calendar - Ionic/Versa

Unfortunately, the Ionic and Versa watches have issues that create problems for the calendar function.

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, Configuration 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):

Custom TZ <-> 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 the local time only provides a GMT offset there's no way to determine the time zone for the local time, we just have to hope Fitbit handles this issue properly in the watch itself.

This means there's no way to automatically determine if daylight savings is in effect for the local time zone. Even with the date there's no way to reliably 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