@@ -300,37 +300,43 @@ Status WaterHeaterManagementDelegate::HandleCancelBoost()
300
300
*
301
301
*********************************************************************************/
302
302
303
- uint16_t WaterHeaterManagementDelegate::GetActiveTargetWaterTemperature () const
303
+ int16_t WaterHeaterManagementDelegate::GetActiveTargetWaterTemperature () const
304
304
{
305
305
// Determine the target temperature. If a boost command is in progress and has a mBoostTemporarySetpoint value use that as the
306
306
// target temperature.
307
307
// Note, in practise the actual heating is likely to be controlled by the thermostat's occupiedHeatingSetpoint most of the
308
308
// time, and the TemporarySetpoint (if not null) would be overiding the thermostat's occupiedHeatingSetpoint.
309
309
// However, this code doesn't rely upon the thermostat cluster.
310
- uint16_t targetTemperature = (mBoostState == BoostStateEnum::kActive && mBoostTemporarySetpoint .HasValue ())
311
- ? static_cast <uint16_t >(mBoostTemporarySetpoint .Value ())
310
+ int16_t targetTemperature = (mBoostState == BoostStateEnum::kActive && mBoostTemporarySetpoint .HasValue ())
311
+ ? static_cast <int16_t >(mBoostTemporarySetpoint .Value ())
312
312
: mTargetWaterTemperature ;
313
313
314
314
return targetTemperature;
315
315
}
316
316
317
317
uint8_t WaterHeaterManagementDelegate::CalculateTankPercentage () const
318
318
{
319
- int32_t tankPercentage = 100 * ( static_cast < int32_t >( mWaterTemperature ) - static_cast < int32_t >( mColdWaterTemperature )) /
320
- ( static_cast <int32_t >(GetActiveTargetWaterTemperature ()) - static_cast <int32_t >(mColdWaterTemperature ) );
319
+ int32_t tankPercentage;
320
+ int32_t divisor = static_cast <int32_t >(GetActiveTargetWaterTemperature ()) - static_cast <int32_t >(mColdWaterTemperature );
321
321
322
+ tankPercentage = 100 ;
323
+ if (divisor >= 0 )
324
+ {
325
+ tankPercentage = 100 * (static_cast <int32_t >(mWaterTemperature ) - static_cast <int32_t >(mColdWaterTemperature )) / divisor;
326
+ }
327
+
322
328
tankPercentage = std::min (tankPercentage, static_cast <int32_t >(100 ));
323
329
tankPercentage = std::max (tankPercentage, static_cast <int32_t >(0 ));
324
330
325
331
return static_cast <uint8_t >(tankPercentage);
326
332
}
327
333
328
- void WaterHeaterManagementDelegate::SetColdWaterTemperature (uint16_t coldWaterTemperature)
334
+ void WaterHeaterManagementDelegate::SetColdWaterTemperature (int16_t coldWaterTemperature)
329
335
{
330
336
mColdWaterTemperature = coldWaterTemperature;
331
337
}
332
338
333
- void WaterHeaterManagementDelegate::SetWaterTemperature (uint16_t waterTemperature)
339
+ void WaterHeaterManagementDelegate::SetWaterTemperature (int16_t waterTemperature)
334
340
{
335
341
mWaterTemperature = waterTemperature;
336
342
@@ -344,18 +350,18 @@ void WaterHeaterManagementDelegate::SetWaterTemperature(uint16_t waterTemperatur
344
350
ChangeHeatingIfNecessary ();
345
351
}
346
352
347
- void WaterHeaterManagementDelegate::SetTargetWaterTemperature (uint16_t targetWaterTemperature)
353
+ void WaterHeaterManagementDelegate::SetTargetWaterTemperature (int16_t targetWaterTemperature)
348
354
{
349
355
mTargetWaterTemperature = targetWaterTemperature;
350
356
351
357
// See if the heat needs to be turned on or off
352
358
ChangeHeatingIfNecessary ();
353
359
}
354
360
355
- void WaterHeaterManagementDelegate::DrawOffHotWater (Percent percentageReplaced, uint16_t replacedWaterTemperature)
361
+ void WaterHeaterManagementDelegate::DrawOffHotWater (Percent percentageReplaced, int16_t replacedWaterTemperature)
356
362
{
357
363
// First calculate the new average water temperature
358
- mWaterTemperature = static_cast <uint16_t >(
364
+ mWaterTemperature = static_cast <int16_t >(
359
365
(mWaterTemperature * (100 - percentageReplaced) + replacedWaterTemperature * percentageReplaced) / 100 );
360
366
361
367
// Replaces percentageReplaced% of the water in the tank with water of a temperature replacedWaterTemperature
@@ -370,7 +376,7 @@ void WaterHeaterManagementDelegate::DrawOffHotWater(Percent percentageReplaced,
370
376
371
377
bool WaterHeaterManagementDelegate::HasWaterTemperatureReachedTarget () const
372
378
{
373
- uint16_t targetTemperature = GetActiveTargetWaterTemperature ();
379
+ int16_t targetTemperature = GetActiveTargetWaterTemperature ();
374
380
375
381
if (mBoostState == BoostStateEnum::kActive )
376
382
{
0 commit comments