Skip to content

Commit 6c2afcc

Browse files
authored
Merge pull request #14 from KoenZomers/NMauel/master
Merging
2 parents 228a5e2 + 7835b3d commit 6c2afcc

25 files changed

Lines changed: 2256 additions & 1160 deletions

Api/.NET API.csproj

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net9.0</TargetFramework>
4+
<TargetFrameworks>net9.0;net10.0</TargetFrameworks>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
77
<AssemblyName>KoenZomers.Tado.Api</AssemblyName>
88
<RootNamespace>KoenZomers.Tado.Api</RootNamespace>
99
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
10-
<Version>0.6.0.0</Version>
10+
<Version>0.7.0.0</Version>
1111
<Authors>Koen Zomers</Authors>
12-
<Description>API in .NET 9 to communicate with a Tado home heating/cooling system</Description>
12+
<Description>API in .NET9 and .NET10 to communicate with a Tado home heating/cooling system</Description>
1313
<PackageProjectUrl>https://github.com/KoenZomers/TadoApi</PackageProjectUrl>
1414
<SignAssembly>true</SignAssembly>
1515
<AssemblyOriginatorKeyFile>..\KoenZomers.Tado.Api.snk</AssemblyOriginatorKeyFile>
16-
<PackageReleaseNotes>- Switched to .NET 9 and updated to use new device code grant flow</PackageReleaseNotes>
16+
<PackageReleaseNotes>- Added target .NET10 and improved new device code grant flow with cancellation tokens</PackageReleaseNotes>
1717
<PackageLicenseUrl></PackageLicenseUrl>
1818
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
1919
<PackageReadmeFile>README.md</PackageReadmeFile>
@@ -30,12 +30,12 @@
3030
</ItemGroup>
3131

3232
<ItemGroup>
33-
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.6" />
34-
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.6" />
35-
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.6" />
36-
<PackageReference Include="Microsoft.Extensions.Http" Version="9.0.6" />
37-
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.6" />
38-
<PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="9.0.6" />
33+
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.0" />
34+
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.0" />
35+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0" />
36+
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.0" />
37+
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
38+
<PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="10.0.0" />
3939
</ItemGroup>
4040

4141
</Project>

Api/Controllers/Http.cs

Lines changed: 70 additions & 37 deletions
Large diffs are not rendered by default.

Api/Controllers/Tado.cs

Lines changed: 256 additions & 165 deletions
Large diffs are not rendered by default.
Lines changed: 44 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,55 @@
1-
using System;
2-
using System.Text.Json;
1+
using System.Text.Json;
32
using System.Text.Json.Serialization;
43

5-
namespace KoenZomers.Tado.Api.Converters
4+
namespace KoenZomers.Tado.Api.Converters;
5+
6+
/// <summary>
7+
/// Converts the Tado device type returned by the Tado API to the DeviceTypes enumerator in this project
8+
/// </summary>
9+
public class DeviceTypeConverter : JsonConverter<Enums.DeviceTypes?>
610
{
7-
/// <summary>
8-
/// Converts the Tado device type returned by the Tado API to the DeviceTypes enumerator in this project
9-
/// </summary>
10-
public class DeviceTypeConverter : JsonConverter<Enums.DeviceTypes?>
11+
public override Enums.DeviceTypes? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
1112
{
12-
public override Enums.DeviceTypes? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
13+
if (reader.TokenType != JsonTokenType.String)
14+
{
15+
return null;
16+
}
17+
18+
var enumString = reader.GetString();
19+
if (string.IsNullOrEmpty(enumString))
1320
{
14-
if (reader.TokenType != JsonTokenType.String)
15-
{
16-
return null;
17-
}
18-
19-
var enumString = reader.GetString();
20-
if (string.IsNullOrEmpty(enumString))
21-
{
22-
return null;
23-
}
24-
25-
return enumString switch
26-
{
27-
"HEATING" => Enums.DeviceTypes.Heating,
28-
"HOT_WATER" => Enums.DeviceTypes.HotWater,
29-
_ => null
30-
};
21+
return null;
3122
}
3223

33-
public override void Write(Utf8JsonWriter writer, Enums.DeviceTypes? value, JsonSerializerOptions options)
24+
return enumString switch
3425
{
35-
if (value == null)
36-
{
26+
"HEATING" => Enums.DeviceTypes.Heating,
27+
"HOT_WATER" => Enums.DeviceTypes.HotWater,
28+
_ => null
29+
};
30+
}
31+
32+
public override void Write(Utf8JsonWriter writer, Enums.DeviceTypes? value, JsonSerializerOptions options)
33+
{
34+
if (value == null)
35+
{
36+
writer.WriteNullValue();
37+
return;
38+
}
39+
40+
switch (value)
41+
{
42+
case Enums.DeviceTypes.Heating:
43+
writer.WriteStringValue("HEATING");
44+
break;
45+
46+
case Enums.DeviceTypes.HotWater:
47+
writer.WriteStringValue("HOT_WATER");
48+
break;
49+
50+
default:
3751
writer.WriteNullValue();
38-
return;
39-
}
40-
41-
switch (value)
42-
{
43-
case Enums.DeviceTypes.Heating:
44-
writer.WriteStringValue("HEATING");
45-
break;
46-
47-
case Enums.DeviceTypes.HotWater:
48-
writer.WriteStringValue("HOT_WATER");
49-
break;
50-
51-
default:
52-
writer.WriteNullValue();
53-
break;
54-
}
52+
break;
5553
}
5654
}
57-
}
55+
}
Lines changed: 48 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,60 @@
1-
using System;
2-
using System.Text.Json;
1+
using System.Text.Json;
32
using System.Text.Json.Serialization;
43

5-
namespace KoenZomers.Tado.Api.Converters
4+
namespace KoenZomers.Tado.Api.Converters;
5+
6+
/// <summary>
7+
/// Converts the duration mode type returned by the Tado API to the DurationModes enumerator in this project
8+
/// </summary>
9+
public class DurationModeConverter : JsonConverter<Enums.DurationModes?>
610
{
7-
/// <summary>
8-
/// Converts the duration mode type returned by the Tado API to the DurationModes enumerator in this project
9-
/// </summary>
10-
public class DurationModeConverter : JsonConverter<Enums.DurationModes?>
11+
public override Enums.DurationModes? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
12+
{
13+
if (reader.TokenType != JsonTokenType.String)
14+
{
15+
return null;
16+
}
17+
18+
var enumString = reader.GetString();
19+
if (string.IsNullOrEmpty(enumString))
20+
{
21+
return null;
22+
}
23+
24+
return enumString switch
25+
{
26+
"MANUAL" => Enums.DurationModes.UntilNextManualChange,
27+
"TADO_MODE" => Enums.DurationModes.UntilNextTimedEvent,
28+
"TIMER" => Enums.DurationModes.Timer,
29+
_ => null
30+
};
31+
}
32+
33+
public override void Write(Utf8JsonWriter writer, Enums.DurationModes? value, JsonSerializerOptions options)
1134
{
12-
public override Enums.DurationModes? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
35+
if (value == null)
1336
{
14-
if (reader.TokenType != JsonTokenType.String)
15-
{
16-
return null;
17-
}
18-
19-
var enumString = reader.GetString();
20-
if (string.IsNullOrEmpty(enumString))
21-
{
22-
return null;
23-
}
24-
25-
return enumString switch
26-
{
27-
"MANUAL" => Enums.DurationModes.UntilNextManualChange,
28-
"TADO_MODE" => Enums.DurationModes.UntilNextTimedEvent,
29-
"TIMER" => Enums.DurationModes.Timer,
30-
_ => null
31-
};
37+
writer.WriteNullValue();
38+
return;
3239
}
3340

34-
public override void Write(Utf8JsonWriter writer, Enums.DurationModes? value, JsonSerializerOptions options)
41+
switch (value)
3542
{
36-
if (value == null)
37-
{
43+
case Enums.DurationModes.UntilNextManualChange:
44+
writer.WriteStringValue("MANUAL");
45+
break;
46+
47+
case Enums.DurationModes.UntilNextTimedEvent:
48+
writer.WriteStringValue("TADO_MODE");
49+
break;
50+
51+
case Enums.DurationModes.Timer:
52+
writer.WriteStringValue("TIMER");
53+
break;
54+
55+
default:
3856
writer.WriteNullValue();
39-
return;
40-
}
41-
42-
switch (value)
43-
{
44-
case Enums.DurationModes.UntilNextManualChange:
45-
writer.WriteStringValue("MANUAL");
46-
break;
47-
48-
case Enums.DurationModes.UntilNextTimedEvent:
49-
writer.WriteStringValue("TADO_MODE");
50-
break;
51-
52-
case Enums.DurationModes.Timer:
53-
writer.WriteStringValue("TIMER");
54-
break;
55-
56-
default:
57-
writer.WriteNullValue();
58-
break;
59-
}
57+
break;
6058
}
6159
}
6260
}
Lines changed: 43 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,55 @@
1-
using System;
2-
using System.Text.Json;
1+
using System.Text.Json;
32
using System.Text.Json.Serialization;
43

5-
namespace KoenZomers.Tado.Api.Converters
4+
namespace KoenZomers.Tado.Api.Converters;
5+
6+
/// <summary>
7+
/// Converts the power state returned by the Tado API to the PowerStates enumerator in this project
8+
/// </summary>
9+
public class PowerStatesConverter : JsonConverter<Enums.PowerStates?>
610
{
7-
/// <summary>
8-
/// Converts the power state returned by the Tado API to the PowerStates enumerator in this project
9-
/// </summary>
10-
public class PowerStatesConverter : JsonConverter<Enums.PowerStates?>
11+
public override Enums.PowerStates? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
1112
{
12-
public override Enums.PowerStates? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
13+
if (reader.TokenType != JsonTokenType.String)
14+
{
15+
return null;
16+
}
17+
18+
var enumString = reader.GetString();
19+
if (string.IsNullOrEmpty(enumString))
1320
{
14-
if (reader.TokenType != JsonTokenType.String)
15-
{
16-
return null;
17-
}
18-
19-
var enumString = reader.GetString();
20-
if (string.IsNullOrEmpty(enumString))
21-
{
22-
return null;
23-
}
24-
25-
return enumString switch
26-
{
27-
"ON" => Enums.PowerStates.On,
28-
"OFF" => Enums.PowerStates.Off,
29-
_ => null
30-
};
21+
return null;
3122
}
3223

33-
public override void Write(Utf8JsonWriter writer, Enums.PowerStates? value, JsonSerializerOptions options)
24+
return enumString switch
3425
{
35-
if (value == null)
36-
{
26+
"ON" => Enums.PowerStates.On,
27+
"OFF" => Enums.PowerStates.Off,
28+
_ => null
29+
};
30+
}
31+
32+
public override void Write(Utf8JsonWriter writer, Enums.PowerStates? value, JsonSerializerOptions options)
33+
{
34+
if (value == null)
35+
{
36+
writer.WriteNullValue();
37+
return;
38+
}
39+
40+
switch (value)
41+
{
42+
case Enums.PowerStates.On:
43+
writer.WriteStringValue("ON");
44+
break;
45+
46+
case Enums.PowerStates.Off:
47+
writer.WriteStringValue("OFF");
48+
break;
49+
50+
default:
3751
writer.WriteNullValue();
38-
return;
39-
}
40-
41-
switch (value)
42-
{
43-
case Enums.PowerStates.On:
44-
writer.WriteStringValue("ON");
45-
break;
46-
47-
case Enums.PowerStates.Off:
48-
writer.WriteStringValue("OFF");
49-
break;
50-
51-
default:
52-
writer.WriteNullValue();
53-
break;
54-
}
52+
break;
5553
}
5654
}
5755
}

Api/Enums/DeviceTypes.cs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
namespace KoenZomers.Tado.Api.Enums
1+
namespace KoenZomers.Tado.Api.Enums;
2+
3+
/// <summary>
4+
/// Defines the types of Tado devices that can be switched
5+
/// </summary>
6+
public enum DeviceTypes : short
27
{
38
/// <summary>
4-
/// Defines the types of Tado devices that can be switched
9+
/// Heating
510
/// </summary>
6-
public enum DeviceTypes : short
7-
{
8-
/// <summary>
9-
/// Heating
10-
/// </summary>
11-
Heating,
11+
Heating,
1212

13-
/// <summary>
14-
/// Hot water
15-
/// </summary>
16-
HotWater
17-
}
18-
}
13+
/// <summary>
14+
/// Hot water
15+
/// </summary>
16+
HotWater
17+
}

0 commit comments

Comments
 (0)