Ticket Created
over 3 years ago

CIQQA-1023

Is there a bug in getStressHistory and getBodyBatteryHistory ?

I see some very strange results returned by the recently published getStressHistory function (similar with getBodyBatteryHistory). It is wrong even in simulator, but on a real device it is even worse.

sensorIter = SensorHistory.getStressHistory({ :period => 1, :order => SensorHistory.ORDER_NEWEST_FIRST});

mTime = $.sensorIter.getNewestSampleTime();
// Simulator:
// Returns current date - correct
// Real device Vivoactive 4:
// 2 possibilities: 
// 1. If iterator is empty, returns 30/12/1989 ?!
// 2. If iterator has data, returns correct date

mData = $.sensorIter.getMin();
// Simulator:
// Returns correct value (35 in my case)
// Real device Vivoactive 4:
// 2 possibilities: 
// 1. If iterator is empty, returns 127 (that is stress level 127% ?!)
// 2. If iterator has data, returns correct value

mSensorSample = sensorIter.next();
// Real device Vivoactive 4:
// Often returns NULL

if (mSensorSample != null) {
    mTime = mSensorSample.when;
    // On both, simulator and real device, returns next day but year 2002 !
    // For example, today it shows 27/3/2002 (it should be 26/3/2022)
}

Main issues:

  • On real device often returns empty iterator
  • When use next(), always returns wrong date (year 2002)
  • getMin() returs 127 (%) instead of null from empty iterator

There is a lot more weird behavior, but this is the main issue. I tried a few simulators (different watch models) - it is always the same. I have only one compatible physical watch - Vivoactive 4, and that is the result from it. Let me know if you want a sample code to try yourself.

, would you please take a look?

Thanks!

Parents
  • Here is a workaround for time issue in getStressHistory and getBodyBatteryHistory iterators. I simplified the code a bit, just to make it clear:
    var sensorIter = SensorHistory.getStressHistory({});
    // getNewestSampleTime returns correct date:
    var sTime = sensorIter.getNewestSampleTime();
    
    var dateDif;
    
    var sensorSample = sensorIter.next();
    if (sensorSample != null) {
        // First sample contains wron date that should be the same as getNewestSampleTime
        // Calculate the difference:
        dateDif = sTime.subtract(sensorSample.when);
        
        // Calculate correct time:
        sTime = sensorSample.when.add(dateDif);
    }
    
    // Use dateDif to calculate correct time for all following samples:
    // sTime = sensorSample.when.add(dateDif);
Comment
  • Here is a workaround for time issue in getStressHistory and getBodyBatteryHistory iterators. I simplified the code a bit, just to make it clear:
    var sensorIter = SensorHistory.getStressHistory({});
    // getNewestSampleTime returns correct date:
    var sTime = sensorIter.getNewestSampleTime();
    
    var dateDif;
    
    var sensorSample = sensorIter.next();
    if (sensorSample != null) {
        // First sample contains wron date that should be the same as getNewestSampleTime
        // Calculate the difference:
        dateDif = sTime.subtract(sensorSample.when);
        
        // Calculate correct time:
        sTime = sensorSample.when.add(dateDif);
    }
    
    // Use dateDif to calculate correct time for all following samples:
    // sTime = sensorSample.when.add(dateDif);
Children
No Data