Skip to content

Commit 0407979

Browse files
authored
Merge pull request #2568 from pkuehnel/develop
Develop
2 parents 6376852 + ba7df47 commit 0407979

27 files changed

Lines changed: 826 additions & 279 deletions

PkSoftwareService.Custom.Backend/PkSoftwareService.Custom.Backend.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="Serilog" Version="4.3.0" />
10+
<PackageReference Include="Serilog" Version="4.3.1" />
1111
</ItemGroup>
1212

1313
</Project>

Plugins.Modbus/Plugins.Modbus.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010

1111
<ItemGroup>
1212
<PackageReference Include="FluentModbus" Version="5.3.2" />
13-
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="10.0.2" />
14-
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.22.1" />
13+
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="10.0.3" />
14+
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
1515
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0" />
1616
<PackageReference Include="Serilog.Settings.Configuration" Version="10.0.0" />
1717
<PackageReference Include="Serilog.Sinks.Console" Version="6.1.1" />
1818
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
19-
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.0" />
20-
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="10.1.0" />
19+
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.4" />
20+
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="10.1.4" />
2121
</ItemGroup>
2222

2323
<ItemGroup>

Plugins.SmaEnergymeter/Plugins.SmaEnergymeter.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.22.1" />
12+
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
1313
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
14-
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.0" />
14+
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.4" />
1515
<PackageReference Include="Quartz" Version="3.15.1" />
1616
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0" />
1717
<PackageReference Include="Serilog.Settings.Configuration" Version="10.0.0" />

Plugins.SolarEdge/Plugins.SolarEdge.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.22.1" />
12+
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
1313
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
1414
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0" />
1515
<PackageReference Include="Serilog.Settings.Configuration" Version="10.0.0" />
1616
<PackageReference Include="Serilog.Sinks.Console" Version="6.1.1" />
1717
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
18-
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.0" />
18+
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.4" />
1919
</ItemGroup>
2020

2121
<ItemGroup>

Plugins.Solax/Plugins.Solax.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.2" />
12-
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.22.1" />
11+
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.3" />
12+
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
1313
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0" />
1414
<PackageReference Include="Serilog.Settings.Configuration" Version="10.0.0" />
1515
<PackageReference Include="Serilog.Sinks.Console" Version="6.1.1" />
1616
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
17-
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.0" />
17+
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.4" />
1818
</ItemGroup>
1919

2020
<ItemGroup>

TeslaSolarCharger.Tests/Services/Server/ChargingSchedulesService/AppendOptimalGridSchedulesTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ public async Task AppendOptimalGridSchedules_Overflows_WhenEnergyExceedsGridSlot
169169
[InlineData(0, 2, true)] // No switch cost: Pick cheapest (Slot 3, gap)
170170
[InlineData(0, 2, false)] // No switch cost: Pick cheapest (Slot 3, gap)
171171
[InlineData(1.0, 1, true)] // High switch cost: Pick contiguous (Slot 2)
172-
[InlineData(1.0, 2, false)] // No switch cost: Pick cheapest (Slot 3, gap)
172+
[InlineData(1.0, 2, false)] // isSpotPriceBased=false: switch cost is ignored, pick cheapest (Slot 3, gap)
173173
public async Task AppendOptimalGridSchedules_RespectsSwitchCosts(decimal switchCost, int expectedSecondSlotStartOffset, bool isSpotPriceBased)
174174
{
175175
// Arrange

TeslaSolarCharger.Tests/TeslaSolarCharger.Tests.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99

1010
<ItemGroup>
1111
<PackageReference Include="Autofac.Extras.FakeItEasy" Version="7.0.0" />
12-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
12+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
1313
<PackageReference Include="Autofac.Extras.Moq" Version="7.0.0" />
1414
<PackageReference Include="FluentAssertions" Version="7.2.0" />
1515
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.0" />
16-
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="10.0.2" />
16+
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="10.0.3" />
1717
<PackageReference Include="Moq" Version="4.20.72" />
1818
<PackageReference Include="Moq.EntityFrameworkCore" Version="10.0.0" />
19-
<PackageReference Include="MQTTnet" Version="5.0.1.1416" />
19+
<PackageReference Include="MQTTnet" Version="5.1.0.1559" />
2020
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
2121
<PackageReference Include="Serilog.Extensions.Logging" Version="10.0.0" />
2222
<PackageReference Include="Serilog.Sinks.XUnit" Version="3.0.19" />

TeslaSolarCharger/Client/Components/StartPage/CarDetailsComponent.razor

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
@using TeslaSolarCharger.Shared.Localization.Contracts
1111
@using TeslaSolarCharger.Shared.Localization.Registries
1212
@using TeslaSolarCharger.Shared.Localization.Registries.Components.StartPage
13+
@implements IDisposable
1314

1415
@inject IHomeService HomeService
1516
@inject ISnackbar Snackbar
@@ -175,6 +176,8 @@ else
175176
private int? CurrentToSet { get; set; }
176177
private int? ManualSocToSet { get; set; }
177178
private bool _isCommandLoading;
179+
private IDisposable? _subscription;
180+
private int? _lastSubscribedCarId;
178181

179182
protected override async Task OnParametersSetAsync()
180183
{
@@ -185,21 +188,28 @@ else
185188
{
186189
return;
187190
}
188-
await SignalRStateService.Subscribe<DtoCarOverviewState>(
189-
DataTypeConstants.CarOverviewState,
190-
async void (state) =>
191-
{
192-
try
191+
192+
if (_lastSubscribedCarId != CarId)
193+
{
194+
_subscription?.Dispose();
195+
_lastSubscribedCarId = CarId;
196+
197+
_subscription = await SignalRStateService.Subscribe<DtoCarOverviewState>(
198+
DataTypeConstants.CarOverviewState,
199+
async void (state) =>
200+
{
201+
try
193202
{
194203
CarState = state;
195204
await InvokeAsync(StateHasChanged);
196205
}
197-
catch (Exception e)
198-
{
199-
Logger.LogError(e, "Failed to update car state for CarId: {CarId}", CarId);
200-
}
201-
},
202-
CarId.Value.ToString());
206+
catch (Exception e)
207+
{
208+
Logger.LogError(e, "Failed to update car state for CarId: {CarId}", CarId);
209+
}
210+
},
211+
CarId.Value.ToString());
212+
}
203213

204214
CarState = await SignalRStateService.GetStateAsync<DtoCarOverviewState>(
205215
DataTypeConstants.CarOverviewState,
@@ -387,4 +397,9 @@ else
387397

388398
private string Format(string key, params object?[] arguments) =>
389399
string.Format(CultureInfo.CurrentCulture, T(key), arguments);
400+
401+
public void Dispose()
402+
{
403+
_subscription?.Dispose();
404+
}
390405
}

TeslaSolarCharger/Client/Components/StartPage/ChargingConnectorDetailsComponent.razor

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
@using TeslaSolarCharger.Shared.Localization.Registries
99
@using TeslaSolarCharger.Shared.Localization.Registries.Components.StartPage
1010
@using TeslaSolarCharger.Shared.SignalRClients
11+
@implements IDisposable
1112

1213
@inject IHomeService HomeService
1314
@inject ISnackbar Snackbar
@@ -80,6 +81,8 @@ else
8081
private DtoChargingConnectorOverviewState? ChargingConnectorState { get; set; }
8182

8283
private ChargeModeV2? _lastKnownChargeMode;
84+
private IDisposable? _subscription;
85+
private int? _lastSubscribedChargingConnectorId;
8386

8487
protected override async Task OnParametersSetAsync()
8588
{
@@ -93,21 +96,27 @@ else
9396
return;
9497
}
9598

96-
await SignalRStateService.Subscribe<DtoChargingConnectorOverviewState>(
97-
DataTypeConstants.ChargingConnectorOverviewState,
98-
async void (state) =>
99-
{
100-
try
99+
if (_lastSubscribedChargingConnectorId != ChargingConnectorId)
100+
{
101+
_subscription?.Dispose();
102+
_lastSubscribedChargingConnectorId = ChargingConnectorId;
103+
104+
_subscription = await SignalRStateService.Subscribe<DtoChargingConnectorOverviewState>(
105+
DataTypeConstants.ChargingConnectorOverviewState,
106+
async void (state) =>
107+
{
108+
try
101109
{
102110
ChargingConnectorState = state;
103111
await InvokeAsync(StateHasChanged);
104112
}
105-
catch (Exception e)
106-
{
107-
Logger.LogError(e, "Failed to update car state for CarId: {CarId}", CarId);
108-
}
109-
},
110-
ChargingConnectorId.Value.ToString());
113+
catch (Exception e)
114+
{
115+
Logger.LogError(e, "Failed to update charging connector state for ChargingConnectorId: {ChargingConnectorId}", ChargingConnectorId);
116+
}
117+
},
118+
ChargingConnectorId.Value.ToString());
119+
}
111120

112121
ChargingConnectorState = await SignalRStateService.GetStateAsync<DtoChargingConnectorOverviewState>(
113122
DataTypeConstants.ChargingConnectorOverviewState,
@@ -163,4 +172,9 @@ else
163172
typeof(SharedComponentLocalizationRegistry))
164173
?? key;
165174
}
175+
176+
public void Dispose()
177+
{
178+
_subscription?.Dispose();
179+
}
166180
}

TeslaSolarCharger/Client/Components/StartPage/ChargingSchedulesComponent.razor

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
@using TeslaSolarCharger.Shared.Localization.Contracts
77
@using TeslaSolarCharger.Shared.Localization.Registries
88
@using TeslaSolarCharger.Shared.Localization.Registries.Components.StartPage
9+
@implements IDisposable
10+
911
@inject IHomeService HomerService
1012
@inject ISignalRStateService SignalRStateService
1113
@inject ILogger<ChargingSchedulesComponent> Logger
@@ -123,13 +125,13 @@
123125
private List<DtoChargingSchedule>? _elements;
124126

125127
private bool _showChart;
128+
private IDisposable? _subscription;
126129

127130
protected override async Task OnInitializedAsync()
128131
{
129132
await base.OnInitializedAsync();
130133

131-
await SignalRStateService.InitializeAsync();
132-
await SignalRStateService.SubscribeToTrigger(
134+
_subscription = await SignalRStateService.SubscribeToTrigger(
133135
DataTypeConstants.ChargingSchedulesChangeTrigger,
134136
async void () =>
135137
{
@@ -183,4 +185,8 @@
183185
?? key;
184186
}
185187

188+
public void Dispose()
189+
{
190+
_subscription?.Dispose();
191+
}
186192
}

0 commit comments

Comments
 (0)