Complication value updates

I have a number of complications in a custom watchface with which I am working, setting the following variables:

var myBodyBattID = new Complications.Id(Complications.COMPLICATION_TYPE_BODY_BATTERY);
var myStressID = new Complications.Id(Complications.COMPLICATION_TYPE_STRESS);
var myHRID = new Complications.Id(Complications.COMPLICATION_TYPE_HEART_RATE);
var myPulseOXID = new Complications.Id(Complications.COMPLICATION_TYPE_PULSE_OX);

When I go to retrieve the data using (for example)

var myPulseOx = Complications.getComplication(myPulseOXID).value;
return myPulseOx == null ? "--" : myPulseOx;

My expectation would be that the complications would return the "current" data/values - when I am not wearing the watch, the value for PulseOx would be displayed as "--", however I am not finding this to be the case. Instead, it seems to be "stuck" on its previous/most recent value.

I do observe that the values for things like Stress and Body Battery do show as "--" as expected. Oddly, Heart Rate seems to come and go. 

I think my question is chiefly about my expectations - are they simply off? Is it expected that when the watch is not being worn that the complications' values would be null? Or is this variable depending on the complication in question?

Thank you in advance!

  • I'm wondering if what I am seeing is specific to the PULSE_OX complication, and the frequency/way in which it updates? Given the three settings for the sensor  (All Day, During Sleep, On Demand), I am now wondering if the complication is "hanging onto" the last measurement, in which case it will never actually be null?

  • Yeah I mean if you’re not continuously reading a value, then it seems like the only sane behavior is to show the last value (which is what the native glance does.) Ofc, the native glance also shows information about when that last value was taken (in my case, 35 days ago).

    It doesn’t seem like native watchfaces can show pulse ox, which is a shame bc then you’d be able to compare the native behavior with the ciq complication behavior.

  • Thanks for the repy - It does make sense to show the last value, but I suppose what I am after is the _current_ value. If the watch is off my wrist, the "current" value would be null. I suppose that may only make sense in the situations in which the watch is set to "All Day".

  • I'm pretty sure with this "All Day" for pulse OX doesn't mean 24/7 and readings are only when you are still, etc.  They may also be only every X minutes even in the best case.

    This is unlike Heart Rate where it can change second by second.

  • Ahh, That makes sense. So it's possible that when I've been testing, I'm simply not waiting long enough for the PulseOX reading to "roll off". I had figured that it wouldn't be literally a constant measuring, but perhaps I had assumed a higher frequency than it actually uses.

    Edit: It looks like when it's set to "during sleep", it measures every minute, and indeed when set to "all day" it looks like it does measure less frequently when one is moving about, so I would imagine that it wouldn't be more than 5 minutes between readings/attempted readings...