Skip to content

Commit

Permalink
Merge pull request #1606 from pkuehnel/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
pkuehnel authored Nov 18, 2024
2 parents 42ad569 + d919ac0 commit 37ee38c
Show file tree
Hide file tree
Showing 45 changed files with 945 additions and 156 deletions.
4 changes: 2 additions & 2 deletions Plugins.Modbus/Plugins.Modbus.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@

<ItemGroup>
<PackageReference Include="FluentModbus" Version="5.3.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.10" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.11" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.21.0" />
<PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.4" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.8.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="7.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="6.8.1" />
</ItemGroup>

Expand Down
2 changes: 1 addition & 1 deletion Plugins.SmaEnergymeter/Plugins.SmaEnergymeter.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.21.0" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.8.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="7.0.0" />
<PackageReference Include="Quartz" Version="3.13.1" />
<PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.4" />
Expand Down
2 changes: 1 addition & 1 deletion Plugins.SolarEdge/Plugins.SolarEdge.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.4" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.8.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="7.0.0" />
</ItemGroup>

<ItemGroup>
Expand Down
4 changes: 2 additions & 2 deletions Plugins.Solax/Plugins.Solax.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.10" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.11" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.21.0" />
<PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.4" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.8.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="7.0.0" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,23 @@

namespace TeslaSolarCharger.Model.Entities.TeslaSolarCharger;

public class CarValueLog
public class CarValueLog : CarValueLogTimeStampAndValues
{
public int Id { get; set; }
public DateTime Timestamp { get; set; }
public CarValueType Type { get; set; }
public CarValueSource Source { get; set; }

public int CarId { get; set; }
public Car Car { get; set; }
}

public class CarValueLogTimeStampAndValues
{
public DateTime Timestamp { get; set; }
public double? DoubleValue { get; set; }
public int? IntValue { get; set; }
public string? StringValue { get; set; }
public string? UnknownValue { get; set; }
public bool? BooleanValue { get; set; }
public bool? InvalidValue { get; set; }

public int CarId { get; set; }
public Car Car { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<ItemGroup>
<PackageReference Include="AutoMapper" Version="13.0.1" />
<PackageReference Include="FluentModbus" Version="5.3.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.2" />
<PackageReference Include="MQTTnet" Version="4.3.7.1207" />
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System;
using TeslaSolarCharger.Shared.Dtos.ChargingCost.CostConfigurations;
using TeslaSolarCharger.Shared.Dtos.Settings;
using TeslaSolarCharger.Shared.Enums;
using Xunit.Abstractions;
using Xunit;
Expand Down Expand Up @@ -33,4 +34,98 @@ public void CanDeserializeUnKnownEnumValues()
Assert.NotNull(result);
Assert.Equal(CarValueType.Unknown, result.Type);
}

[Fact]
public void CanSetIntValueFromIntValue()
{
var carValueLog = new TeslaSolarCharger.Model.Entities.TeslaSolarCharger.CarValueLog
{
IntValue = 10,
};
var fleetTelemetryWebSocketService = Mock.Create<TeslaSolarCharger.Server.Services.FleetTelemetryWebSocketService>();
var car = new DtoCar();
fleetTelemetryWebSocketService.UpdateDtoCarProperty(car, carValueLog, nameof(DtoCar.SoC));
Assert.Equal(10, car.SoC);
}

[Fact]
public void CanSetIntValueFromDoubleValue()
{
var carValueLog = new TeslaSolarCharger.Model.Entities.TeslaSolarCharger.CarValueLog
{
DoubleValue = 10.45848,
};
var fleetTelemetryWebSocketService = Mock.Create<TeslaSolarCharger.Server.Services.FleetTelemetryWebSocketService>();
var car = new DtoCar();
fleetTelemetryWebSocketService.UpdateDtoCarProperty(car, carValueLog, nameof(DtoCar.SoC));
Assert.Equal(10, car.SoC);
}

[Fact]
public void CanSetIntValueFromStringValue()
{
var carValueLog = new TeslaSolarCharger.Model.Entities.TeslaSolarCharger.CarValueLog
{
StringValue = "10.45848",
};
var fleetTelemetryWebSocketService = Mock.Create<TeslaSolarCharger.Server.Services.FleetTelemetryWebSocketService>();
var car = new DtoCar();
fleetTelemetryWebSocketService.UpdateDtoCarProperty(car, carValueLog, nameof(DtoCar.SoC));
Assert.Equal(10, car.SoC);
}

[Theory]
[InlineData("true")]
[InlineData("True")]
[InlineData("TRUE")]
public void CanSetBoolValueFromTrueStringValue(string boolValue)
{
var carValueLog = new TeslaSolarCharger.Model.Entities.TeslaSolarCharger.CarValueLog
{
StringValue = boolValue,
};
var fleetTelemetryWebSocketService = Mock.Create<TeslaSolarCharger.Server.Services.FleetTelemetryWebSocketService>();
var car = new DtoCar();
fleetTelemetryWebSocketService.UpdateDtoCarProperty(car, carValueLog, nameof(DtoCar.PluggedIn));
Assert.True(car.PluggedIn);
}

[Fact]
public void CanSetDoubleValueFromDoubleValue()
{
var carValueLog = new TeslaSolarCharger.Model.Entities.TeslaSolarCharger.CarValueLog
{
DoubleValue = 10.45848,
};
var fleetTelemetryWebSocketService = Mock.Create<TeslaSolarCharger.Server.Services.FleetTelemetryWebSocketService>();
var car = new DtoCar();
fleetTelemetryWebSocketService.UpdateDtoCarProperty(car, carValueLog, nameof(DtoCar.Latitude));
Assert.Equal(10.45848, car.Latitude);
}

[Fact]
public void CanSetDoubleValueFromIntValue()
{
var carValueLog = new TeslaSolarCharger.Model.Entities.TeslaSolarCharger.CarValueLog
{
IntValue = 10,
};
var fleetTelemetryWebSocketService = Mock.Create<TeslaSolarCharger.Server.Services.FleetTelemetryWebSocketService>();
var car = new DtoCar();
fleetTelemetryWebSocketService.UpdateDtoCarProperty(car, carValueLog, nameof(DtoCar.Latitude));
Assert.Equal(10, car.Latitude);
}

[Fact]
public void CanSetDoubleValueFromStringValue()
{
var carValueLog = new TeslaSolarCharger.Model.Entities.TeslaSolarCharger.CarValueLog
{
StringValue = "10.45848",
};
var fleetTelemetryWebSocketService = Mock.Create<TeslaSolarCharger.Server.Services.FleetTelemetryWebSocketService>();
var car = new DtoCar();
fleetTelemetryWebSocketService.UpdateDtoCarProperty(car, carValueLog, nameof(DtoCar.Latitude));
Assert.Equal(10.45848, car.Latitude);
}
}
4 changes: 2 additions & 2 deletions TeslaSolarCharger.Tests/TeslaSolarCharger.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
<PackageReference Include="Autofac.Extras.FakeItEasy" Version="7.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="Autofac.Extras.Moq" Version="7.0.0" />
<PackageReference Include="FluentAssertions" Version="6.12.1" />
<PackageReference Include="FluentAssertions" Version="6.12.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.10" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="9.0.0" />
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="Moq.EntityFrameworkCore" Version="8.0.1.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
Expand Down
15 changes: 9 additions & 6 deletions TeslaSolarCharger/Client/Components/BackupComponent.razor
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,14 @@
</div>
<div class="mb-2">
<MudFileUpload T="IBrowserFile" FilesChanged="SelectFile" Accept=".zip" MaximumFileCount="1">
<ButtonTemplate Context="fileUploadContext">
<ActivatorContent>
<MudButton HtmlTag="label"
Variant="Variant.Filled"
Color="Color.Primary"
StartIcon="@Icons.Material.Filled.AttachFile"
for="@fileUploadContext">
StartIcon="@Icons.Material.Filled.AttachFile">
Select Backup File
</MudButton>
</ButtonTemplate>
</ActivatorContent>
</MudFileUpload>
</div>

Expand All @@ -65,7 +64,7 @@
</MudButton>

<MudExpansionPanels>
<MudExpansionPanel Text="Automatically created backups before each update" IsExpandedChanged="RefreshBackups">
<MudExpansionPanel Text="Automatically created backups before each update" ExpandedChanged="RefreshBackups">
<MudDataGrid Items="_backupFiles">
<Columns>
<PropertyColumn Property="x => x.FileName"></PropertyColumn>
Expand Down Expand Up @@ -107,8 +106,12 @@
StateHasChanged();
}

private void SelectFile(IBrowserFile file)
private void SelectFile(IBrowserFile? file)
{
if(file == default)
{
return;
}
if (file.Size > _maxFileSize)
{
Snackbar.Add($"{file.Name} is greater than {_maxFileSize / 1024 / 1024} and won't be uploaded."
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@
}
</div>
<div class="flex-grow-1">
<MudChip Text="grey">@(restValueResult.CalculatedValue == null ? "Not available" : Math.Round(restValueResult.CalculatedValue.Value, 2) + $" {suffixString}")</MudChip>
<MudChip T="string" Variant="Variant.Text">@(restValueResult.CalculatedValue == null ? "Not available" : Math.Round(restValueResult.CalculatedValue.Value, 2) + $" {suffixString}")</MudChip>
</div>
</div>
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
{
CloseButton = true,
CloseOnEscapeKey = false,
DisableBackdropClick = true,
BackdropClick = false,
};
var parameters = new DialogParameters<ModbusValueConfigurationDialog>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
{
CloseButton = true,
CloseOnEscapeKey = false,
DisableBackdropClick = true,
BackdropClick = true,
};
var parameters = new DialogParameters<MqttValueConfigurationDialog>
{
Expand Down
27 changes: 16 additions & 11 deletions TeslaSolarCharger/Client/Components/PowerBufferComponent.razor
Original file line number Diff line number Diff line change
@@ -1,23 +1,26 @@
@using TeslaSolarCharger.Shared.Dtos
@using TeslaSolarCharger.Shared.Dtos.IndexRazor.PvValues

@inject HttpClient HttpClient
@inject ISnackbar Snackbar


@if(_displayValue && _pvValues != default)
@if (_displayValue)
{
<div style="max-width: 200px; margin: 0 auto;">
<div style="max-width: 300px; margin: 0 auto;">
<GenericInput T="int?"
For="() => _pvValues.PowerBuffer"
For="() => PowerBuffer"
ImmediateValueUpdate="true"
PostfixButtonStartIcon="@Icons.Material.Filled.Save"
IsButtonDisabled="@(PowerBuffer == _lastSavedPowerBuffer || PowerBuffer == default)"
OnValueChanged="_ => InvokeAsync(StateHasChanged)"
OnButtonClicked="UpdatePowerBuffer"></GenericInput>
</div>
}


@code {
private DtoPvValues? _pvValues;
private int? PowerBuffer { get; set; }
private int? _lastSavedPowerBuffer;
private bool _displayValue;

protected override async Task OnInitializedAsync()
Expand All @@ -30,21 +33,23 @@
_displayValue = result.Value;
if(_displayValue)
{
_pvValues = await HttpClient.GetFromJsonAsync<DtoPvValues>("api/Index/GetPvValues").ConfigureAwait(false);
var powerBufferResult = await HttpClient.GetFromJsonAsync<DtoValue<int>>("api/BaseConfiguration/PowerBuffer").ConfigureAwait(false);
if (powerBufferResult != default)
{
_lastSavedPowerBuffer = powerBufferResult.Value;
PowerBuffer = powerBufferResult.Value;
}
}

}

private async Task UpdatePowerBuffer()
{
if(_pvValues == default)
{
return;
}
var response = await HttpClient.GetAsync($"api/BaseConfiguration/UpdatePowerBuffer?powerBuffer={_pvValues.PowerBuffer ?? 0}").ConfigureAwait(false);
var response = await HttpClient.GetAsync($"api/BaseConfiguration/UpdatePowerBuffer?powerBuffer={PowerBuffer ?? 0}").ConfigureAwait(false);
if (response.IsSuccessStatusCode)
{
Snackbar.Add("Power Buffer updated", Severity.Success);
_lastSavedPowerBuffer = PowerBuffer;
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
{
CloseButton = true,
CloseOnEscapeKey = false,
DisableBackdropClick = true,
BackdropClick = true,
};
var parameters = new DialogParameters<RestValueConfigurationDialog>
{
Expand Down
13 changes: 12 additions & 1 deletion TeslaSolarCharger/Client/Pages/HandledChargesList.razor
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,18 @@ else
Height="@datagridHeight" Breakpoint="Breakpoint.None">
<Columns>
<PropertyColumn Property="x => x.StartTime"
Title="@StringHelper.GenerateFriendlyStringWithOutIdSuffix(nameof(DtoHandledCharge.StartTime))"></PropertyColumn>
Title="@StringHelper.GenerateFriendlyStringWithOutIdSuffix(nameof(DtoHandledCharge.StartTime))">
<CellTemplate>
@if(context.Item.EndTime.HasValue)
{
<MudLink Href="@($"/TimeSeries/{CarId}/{((DateTimeOffset)context.Item.StartTime.ToUniversalTime()).ToUnixTimeSeconds()}/{((DateTimeOffset)context.Item.EndTime.Value.ToUniversalTime()).ToUnixTimeSeconds()}")">@context.Item.StartTime</MudLink>
}
else
{
@context.Item.StartTime
}
</CellTemplate>
</PropertyColumn>
<PropertyColumn Property="x => x.CalculatedPrice"
Title="@StringHelper.GenerateFriendlyStringWithOutIdSuffix(nameof(DtoHandledCharge.CalculatedPrice))"
AggregateDefinition="_calculatedPriceAggregation">
Expand Down
2 changes: 1 addition & 1 deletion TeslaSolarCharger/Client/Pages/Index.razor
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ else
}

<MudExpansionPanels>
<MudExpansionPanel Text="More car details:" IsExpandedChanged="(state) => OnCollapseChanged(state, car.CarId)">
<MudExpansionPanel Text="More car details:" ExpandedChanged="(state) => OnCollapseChanged(state, car.CarId)">
@if (_newCarDetailStates.Any(c => c.Key == car.CarId))
{
<TableComponent Content="@_newCarDetailStates[car.CarId]"></TableComponent>
Expand Down
Loading

0 comments on commit 37ee38c

Please sign in to comment.