Skip to content

Commit ceb8d45

Browse files
authored
Merge pull request #29 from snow-jallen/copilot/integrate-forecast-into-temperature-monitor
Integrate forecast into Temperature Monitor and fix cold-weather window logic
2 parents 72fe210 + 3323536 commit ceb8d45

3 files changed

Lines changed: 73 additions & 18 deletions

File tree

HomeSpeaker.Server2/Services/TemperatureService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ private async Task<TemperatureStatus> GetTemperatureStatusInternalAsync(Cancella
197197
{
198198
temperatureStatus.TemperatureDifference = Math.Abs(outsideTemp - girlsRoomTemp);
199199
temperatureStatus.IsWithinThreshold = temperatureStatus.TemperatureDifference <= threshold;
200-
temperatureStatus.ShouldWindowsBeClosed = outsideTemp >= girlsRoomTemp;
200+
temperatureStatus.ShouldWindowsBeClosed = outsideTemp >= girlsRoomTemp || outsideTemp < 50;
201201
}
202202

203203
return temperatureStatus;

HomeSpeaker.WebAssembly/Components/Health/TemperatureMonitor.razor

Lines changed: 71 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
@using HomeSpeaker.Shared.Temperature
2+
@using HomeSpeaker.Shared.Forecast
23
@using HomeSpeaker.WebAssembly.Services
34
@inject ITemperatureService TemperatureService
5+
@inject IForecastService ForecastService
46
@inject ILogger<TemperatureMonitor> Logger
57
@implements IDisposable
68

@@ -46,7 +48,8 @@
4648
@if (temperatureStatus != null)
4749
{
4850
<div class="row g-2">
49-
<div class="col-6"> <div class="text-center">
51+
<div class="col-6 col-md-4">
52+
<div class="text-center">
5053
<div class="mb-2">
5154
<i class="fas fa-cloud-sun fa-2x" style="color: @GetTemperatureColor(temperatureStatus.OutsideTemperature)"></i>
5255
</div>
@@ -56,7 +59,8 @@
5659
</div>
5760
</div>
5861
</div>
59-
<div class="col-6"> <div class="text-center">
62+
<div class="col-6 col-md-4">
63+
<div class="text-center">
6064
<div class="mb-2">
6165
<i class="fas fa-female fa-2x" style="color: @GetTemperatureColor(temperatureStatus.YoungerGirlsRoomTemperature)"></i>
6266
</div>
@@ -66,7 +70,8 @@
6670
</div>
6771
</div>
6872
</div>
69-
<div class="col-6"> <div class="text-center">
73+
<div class="col-6 col-md-4">
74+
<div class="text-center">
7075
<div class="mb-2">
7176
<i class="fas fa-male fa-2x" style="color: @GetTemperatureColor(temperatureStatus.BoysRoomTemperature)"></i>
7277
</div>
@@ -76,16 +81,51 @@
7681
</div>
7782
</div>
7883
</div>
79-
<div class="col-6"> <div class="text-center">
84+
<div class="col-6 col-md-4">
85+
<div class="text-center">
8086
<div class="mb-2">
8187
<i class="fas fa-seedling fa-2x" style="color: @GetTemperatureColor(temperatureStatus.GreenhouseTemperature)"></i>
8288
</div>
8389
<div class="h6 text-muted mb-2">Greenhouse</div>
8490
<div class="temperature-display">
8591
<span class="display-1 fw-bold" style="color: @GetTemperatureColor(temperatureStatus.GreenhouseTemperature)">@FormatTemperature(temperatureStatus.GreenhouseTemperature)</span>
8692
</div>
87-
</div></div>
88-
</div>
93+
</div>
94+
</div>
95+
@if (forecastStatus != null)
96+
{
97+
@if (forecastStatus.TonightLow != null)
98+
{
99+
<div class="col-6 col-md-4">
100+
<div class="text-center">
101+
<div class="mb-2">
102+
<i class="fas fa-moon fa-2x" style="color: @GetTemperatureColor(forecastStatus.TonightLow.Temperature)"></i>
103+
</div>
104+
<div class="h6 text-muted mb-2">Tonight's Low</div>
105+
<div class="temperature-display">
106+
<span class="display-1 fw-bold" style="color: @GetTemperatureColor(forecastStatus.TonightLow.Temperature)">@FormatForecastTemperature(forecastStatus.TonightLow.Temperature)</span>
107+
</div>
108+
<div class="small text-muted mt-1">@forecastStatus.TonightLow.Conditions</div>
109+
</div>
110+
</div>
111+
}
112+
@if (forecastStatus.TomorrowHigh != null)
113+
{
114+
<div class="col-6 col-md-4">
115+
<div class="text-center">
116+
<div class="mb-2">
117+
<i class="fas fa-sun fa-2x" style="color: @GetTemperatureColor(forecastStatus.TomorrowHigh.Temperature)"></i>
118+
</div>
119+
<div class="h6 text-muted mb-2">Tomorrow's High</div>
120+
<div class="temperature-display">
121+
<span class="display-1 fw-bold" style="color: @GetTemperatureColor(forecastStatus.TomorrowHigh.Temperature)">@FormatForecastTemperature(forecastStatus.TomorrowHigh.Temperature)</span>
122+
</div>
123+
<div class="small text-muted mt-1">@forecastStatus.TomorrowHigh.Conditions</div>
124+
</div>
125+
</div>
126+
}
127+
}
128+
</div>
89129
<div class="text-center mt-1">
90130
<small class="text-muted">
91131
Updated: @lastUpdated.ToString("HH:mm:ss")
@@ -164,6 +204,7 @@
164204

165205
@code {
166206
private TemperatureStatus? temperatureStatus;
207+
private ForecastStatus? forecastStatus;
167208
private DateTime lastUpdated = DateTime.Now;
168209
private Timer? refreshTimer;
169210
private bool isLoading = true;
@@ -200,7 +241,14 @@
200241
isLoading = true;
201242
StateHasChanged();
202243

203-
temperatureStatus = await TemperatureService.GetTemperatureStatusAsync();
244+
// Fetch both temperature and forecast data in parallel
245+
var temperatureTask = TemperatureService.GetTemperatureStatusAsync();
246+
var forecastTask = ForecastService.GetForecastStatusAsync();
247+
248+
await Task.WhenAll(temperatureTask, forecastTask);
249+
250+
temperatureStatus = await temperatureTask;
251+
forecastStatus = await forecastTask;
204252
lastUpdated = DateTime.Now;
205253
isLoading = false;
206254
StateHasChanged();
@@ -212,11 +260,18 @@
212260
isLoading = false;
213261
StateHasChanged();
214262
}
215-
} private string FormatTemperature(double? temperature)
263+
}
264+
265+
private string FormatTemperature(double? temperature)
216266
{
217267
return temperature.HasValue ? $"{temperature.Value:F1" : "N/A";
218268
}
219269

270+
private string FormatForecastTemperature(double? temperature)
271+
{
272+
return temperature.HasValue ? $"{temperature.Value:F0" : "N/A";
273+
}
274+
220275
private string GetTemperatureColor(double? temperature)
221276
{
222277
if (!temperature.HasValue)
@@ -309,7 +364,14 @@
309364
isLoading = true;
310365
StateHasChanged();
311366

312-
temperatureStatus = await TemperatureService.RefreshAsync();
367+
// Force refresh both temperature and forecast data in parallel
368+
var temperatureTask = TemperatureService.RefreshAsync();
369+
var forecastTask = ForecastService.RefreshAsync();
370+
371+
await Task.WhenAll(temperatureTask, forecastTask);
372+
373+
temperatureStatus = await temperatureTask;
374+
forecastStatus = await forecastTask;
313375
lastUpdated = DateTime.Now;
314376
isLoading = false;
315377
StateHasChanged();

HomeSpeaker.WebAssembly/Pages/Index.razor

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,7 @@
88
<TemperatureMonitor />
99
</div>
1010
<div class="col-md-6 col-12">
11-
<div class="row g-2">
12-
<div class="col-12">
13-
<BloodSugarMonitor />
14-
</div>
15-
<div class="col-12">
16-
<ForecastMonitor />
17-
</div>
18-
</div>
11+
<BloodSugarMonitor />
1912
</div>
2013
</div>
2114

0 commit comments

Comments
 (0)