Releases: smdn/Smdn.Net.EchonetLite
Releases · smdn/Smdn.Net.EchonetLite
Smdn.Net.EchonetLite.RouteB.SkStackIP version 2.1.0
Immutable
release. Only release title and notes can be modified.
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net10.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net10.0.apilist.cs
new file mode 100644
index 0000000..8000b76
--- /dev/null
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.SkStackIP/Smdn.Net.EchonetLite.RouteB.SkStackIP-net10.0.apilist.cs
@@ -0,0 +1,151 @@
+// Smdn.Net.EchonetLite.RouteB.SkStackIP.dll (Smdn.Net.EchonetLite.RouteB.SkStackIP-2.1.0)
+// Name: Smdn.Net.EchonetLite.RouteB.SkStackIP
+// AssemblyVersion: 2.1.0.0
+// InformationalVersion: 2.1.0+eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
+// TargetFramework: .NETCoreApp,Version=v10.0
+// Configuration: Release
+// Metadata: IsTrimmable=True
+// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.EchonetLite
+// Metadata: RepositoryBranch=main
+// Metadata: RepositoryCommit=eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Options, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Polly.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
+// Polly.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
+// Smdn.Extensions.Polly.KeyedRegistry, Version=1.2.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.1.0.0, Culture=neutral
+// Smdn.Net.SkStackIP, Version=1.5.2.0, Culture=neutral
+// System.Collections, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ComponentModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Memory, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// System.Net.NetworkInformation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Threading, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Buffers;
+using System.Diagnostics.CodeAnalysis;
+using System.Net;
+using System.Net.NetworkInformation;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Polly;
+using Polly.DependencyInjection;
+using Polly.Registry;
+using Polly.Registry.KeyedRegistry;
+using Smdn.Net.EchonetLite.RouteB.Credentials;
+using Smdn.Net.EchonetLite.RouteB.DependencyInjection;
+using Smdn.Net.EchonetLite.RouteB.Transport;
+using Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP;
+using Smdn.Net.SkStackIP;
+
+namespace Smdn.Net.EchonetLite.RouteB.DependencyInjection {
+ public static class SkStackRouteBHandlerFactoryBuilderExtensions {
+ public static TSkStackRouteBHandlerFactoryBuilder PostConfigureClient<TSkStackRouteBHandlerFactoryBuilder, TServiceKey>(this TSkStackRouteBHandlerFactoryBuilder builder, Action<SkStackClient> postConfigureClient) where TSkStackRouteBHandlerFactoryBuilder : SkStackRouteBHandlerFactoryBuilder<TServiceKey> {}
+ }
+
+ public abstract class SkStackRouteBHandlerFactoryBuilder<TServiceKey> {
+ internal protected SkStackRouteBHandlerFactoryBuilder(IServiceCollection services, TServiceKey serviceKey, Func<TServiceKey, string?> selectOptionsNameForServiceKey) {}
+
+ public TServiceKey ServiceKey { get; }
+ public IServiceCollection Services { get; }
+
+ protected abstract SkStackRouteBHandlerFactory Build(IServiceProvider serviceProvider, SkStackRouteBSessionOptions sessionOptions, Action<SkStackClient>? postConfigureClient);
+ public SkStackRouteBHandlerFactory Build(IServiceProvider serviceProvider) {}
+ protected TOption GetOption<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] TOption>(IServiceProvider serviceProvider) {}
+ }
+
+ public static class SkStackRouteBServiceBuilderExtensions {
+ public static IRouteBServiceBuilder<TServiceKey> AddResiliencePipelineSkStackHandlerAuthenticate<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SkStackRouteBHandler.ResiliencePipelineKeyPair<TServiceKey>>> configure) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddResiliencePipelineSkStackHandlerSendFrame<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SkStackRouteBHandler.ResiliencePipelineKeyPair<TServiceKey>>> configure) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddSkStackHandler<TServiceKey, THandlerFactoryBuilder>(this IRouteBServiceBuilder<TServiceKey> builder, Action<SkStackRouteBSessionOptions> configureSessionOptions, Func<IServiceCollection, TServiceKey, Func<TServiceKey, string?>, THandlerFactoryBuilder> createHandlerFactoryBuilder) where THandlerFactoryBuilder : SkStackRouteBHandlerFactoryBuilder<TServiceKey> {}
+ }
+}
+
+namespace Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP {
+ public abstract class SkStackRouteBHandler : RouteBEchonetLiteHandler {
+ public static class ResiliencePipelineKeys {
+ public static readonly string Authenticate = "SkStackRouteBHandler.resiliencePipelineAuthenticate";
+ public static readonly string Send = "SkStackRouteBHandler.resiliencePipelineSend";
+ }
+
+ public readonly record struct ResiliencePipelineKeyPair<TServiceKey> : IResiliencePipelineKeyPair<TServiceKey, string> {
+ public ResiliencePipelineKeyPair(TServiceKey serviceKey, string pipelineKey) {}
+
+ public string PipelineKey { get; }
+ public TServiceKey ServiceKey { get; }
+
+ public override string ToString() {}
+ }
+
+ public static readonly ResiliencePropertyKey<SkStackRouteBHandler?> ResiliencePropertyKeyForInstance; // = "SkStackRouteBHandler.ResiliencePropertyKeyForInstance"
+
+ protected SkStackClient Client { get; }
+ public override IPAddress? LocalAddress { get; }
+ public override IPAddress? PeerAddress { get; }
+ protected SkStackRouteBSessionOptions SessionOptions { get; }
+
+ protected override async ValueTask ConnectAsyncCore(IRouteBCredential credential, CancellationToken cancellationToken) {}
+ protected override async ValueTask DisconnectAsyncCore(CancellationToken cancellationToken) {}
+ protected override void Dispose(bool disposing) {}
+ protected override async ValueTask DisposeAsyncCore() {}
+ protected override ValueTask<IPAddress> ReceiveAsyncCore(IBufferWriter<byte> buffer, CancellationToken cancellationToken) {}
+ protected override ValueTask SendAsyncCore(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken) {}
+ protected override ValueTask SendToAsyncCore(IPAddress remoteAddress, ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken) {}
+ protected override void ThrowIfDisposed() {}
+ }
+
+ public abstract class SkStackRouteBHandlerFactory : IRouteBEchonetLiteHandlerFactory {
+ protected SkStackRouteBHandlerFactory(IServiceProvider serviceProvider, object? routeBServiceKey, SkStackRouteBSessionOptions sessionOptions, Action<SkStackClient>? postConfigureClient) {}
+
+ protected Action<SkStackClient>? PostConfigureClient { get; }
+ public object? RouteBServiceKey { get; }
+ public IServiceProvider ServiceProvider { get; }
+ protected SkStackRouteBSessionOptions SessionOptions { get; }
+
+ public ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken) {}
+ protected abstract ValueTask<RouteBEchonetLiteHandler> CreateAsyncCore(CancellationToken cancellationToken);
+ }
+
+ public static class SkStackRouteBHandlerServiceCollectionExtensions {
+ public static IServiceCollection AddResiliencePipelineForAuthentication(this IServiceCollection services, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<string>> configure) {}
+ public static IServiceCollection AddResiliencePipelineForAuthentication<TServiceKey>(this IServiceCollection services, TServiceKey serviceKey, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SkStackRouteBHandler.ResiliencePipelineKeyPair<TServiceKey>>> configure) {}
+ public static IServic...Smdn.Net.EchonetLite.RouteB.Primitives version 2.2.0
Immutable
release. Only release title and notes can be modified.
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2025-12-23 update assembly version
- 2025-12-23 add target framework net10.0
- 2025-11-26 fix warning IDE0340
- 2025-07-08 remove redundant properties that have the same as default values
- 2025-07-06 suppress warnings
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net10.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net10.0.apilist.cs
new file mode 100644
index 0000000..27f28b6
--- /dev/null
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net10.0.apilist.cs
@@ -0,0 +1,85 @@
+// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.2.0)
+// Name: Smdn.Net.EchonetLite.RouteB.Primitives
+// AssemblyVersion: 2.2.0.0
+// InformationalVersion: 2.2.0+eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
+// TargetFramework: .NETCoreApp,Version=v10.0
+// Configuration: Release
+// Metadata: IsTrimmable=True
+// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.EchonetLite
+// Metadata: RepositoryBranch=main
+// Metadata: RepositoryCommit=eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// System.ComponentModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Memory, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Buffers;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Smdn.Net.EchonetLite.RouteB.Credentials;
+using Smdn.Net.EchonetLite.RouteB.Transport;
+using Smdn.Net.EchonetLite.Transport;
+
+namespace Smdn.Net.EchonetLite.RouteB.Credentials {
+ public interface IRouteBCredential : IDisposable {
+ void WriteIdTo(IBufferWriter<byte> buffer);
+ void WritePasswordTo(IBufferWriter<byte> buffer);
+ }
+
+ public interface IRouteBCredentialIdentity {
+ }
+
+ public interface IRouteBCredentialProvider {
+ IRouteBCredential GetCredential(IRouteBCredentialIdentity identity);
+ }
+
+ public static class RouteBCredentials {
+ public const int AuthenticationIdLength = 32;
+ public const int PasswordLength = 12;
+ }
+}
+
+namespace Smdn.Net.EchonetLite.RouteB.DependencyInjection {
+ public interface IRouteBServiceBuilder<TServiceKey> {
+ Func<TServiceKey, string?>? OptionsNameSelector { get; }
+ TServiceKey ServiceKey { get; }
+ IServiceCollection Services { get; }
+ }
+
+ public static class IRouteBServiceBuilderExtensions {
+ public static string? GetOptionsName<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder) {}
+ }
+}
+
+namespace Smdn.Net.EchonetLite.RouteB.Transport {
+ [Obsolete("Use IRouteBServiceBuilder instead.")]
+ public interface IRouteBEchonetLiteHandlerBuilder {
+ IServiceCollection Services { get; }
+ }
+
+ public interface IRouteBEchonetLiteHandlerFactory {
+ ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken);
+ }
+
+ public abstract class RouteBEchonetLiteHandler : EchonetLiteHandler {
+ protected RouteBEchonetLiteHandler(ILogger? logger, IServiceProvider? serviceProvider) {}
+
+ public abstract IPAddress? PeerAddress { get; }
+
+ public ValueTask ConnectAsync(IRouteBCredential credential, CancellationToken cancellationToken = default) {}
+ protected abstract ValueTask ConnectAsyncCore(IRouteBCredential credential, CancellationToken cancellationToken);
+ public ValueTask DisconnectAsync(CancellationToken cancellationToken = default) {}
+ protected abstract ValueTask DisconnectAsyncCore(CancellationToken cancellationToken);
+ }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.7.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.5.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs
index aeefe55..a69e48e 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.Primitives/Smdn.Net.EchonetLite.RouteB.Primitives-net8.0.apilist.cs
@@ -1,81 +1,85 @@
-// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.1.0)
+// Smdn.Net.EchonetLite.RouteB.Primitives.dll (Smdn.Net.EchonetLite.RouteB.Primitives-2.2.0)
// Name: Smdn.Net.EchonetLite.RouteB.Primitives
-// AssemblyVersion: 2.1.0.0
-// InformationalVersion: 2.1.0+8350a1992a3cc375c86febf128c7a1ab32401211
+// AssemblyVersion: 2.2.0.0
+// InformationalVersion: 2.2.0+eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
// TargetFramework: .NETCoreApp,Version=v8.0
// Configuration: Release
+// Metadata: IsTrimmable=True
+// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.EchonetLite
+// Metadata: RepositoryBranch=main
+// Metadata: RepositoryCommit=eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
// Referenced assemblies:
// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
// System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
#nullable enable annotations
using System;
using System.Buffers;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Smdn.Net.EchonetLite.RouteB.Credentials;
using Smdn.Net.EchonetLite.RouteB.Transport;
using Smdn.Net.EchonetLite.Transport;
namespace Smdn.Net.EchonetLite.RouteB.Credentials {
public interface IRouteBCredential : IDisposable {
void WriteIdTo(IBufferWriter<byte> buffer);
void WritePasswordTo(IBufferWriter<byte> buffer);
}
public interface IRouteBCredentialIdentity {
}
public interface IRouteBCredentialProvider {
IRouteBCredential GetCredential(IRouteBCredentialIdentity identity);
}
public static class RouteBCredentials {
public const int AuthenticationIdLength = 32;
public const int PasswordLength = 12;
}
}
namespace Smdn.Net.EchonetLite.RouteB.DependencyInjection {
public interface IRouteBServiceBuilder<TServiceKey> {
Func<TServiceKey, string?>? OptionsNameSelector { get; }
TServiceKey ServiceKey { get; }
IServiceCollection Services { get; }
}
public static class IRouteBServiceBuilderExtensions {
public static string? GetOptionsName<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder) {}
}
}
namespace Smdn.Net.EchonetLite.RouteB.Transport {
[Obsolete("Use IRouteBServiceBuilder instead.")]
public interface IRouteBEchonetLiteHandlerBuilder {
IServiceCollection Services { get; }
}
public interface IRouteBEchonetLiteHandlerFactory {
ValueTask<RouteBEchonetLiteHandler> CreateAsync(CancellationToken cancellationToken);
}
public abstract class RouteBEchonetLiteHandler : EchonetLiteHandler {
protected RouteBEchonetLiteHandler(ILogger? logger, IServiceProvider? serviceProvider) {}
public abstract IPAddress? PeerAddress { get; }
public ValueTask ConnectAsync(IRouteBCredential credential, CancellationToken cancellationToken = default) {}
protected abstract ValueTask ConnectAsyncCore(IRouteBCredential credential, CancellationToken cancellationToken);
public ValueTask DisconnectAsync(CancellationToken cancellationToken = default) {}
protected abstract ValueTask DisconnectAsyncCore(CancellationToken cancellationToken);
}
}
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.6.0.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.4.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGene...Smdn.Net.EchonetLite.RouteB version 2.2.0
Immutable
release. Only release title and notes can be modified.
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2025-12-23 update assembly version
- 2025-12-23 add target framework net10.0
- 2025-11-26 fix warning IDE0340
- 2025-07-08 remove redundant properties that have the same as default values
- 2025-07-06 suppress warnings
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB/Smdn.Net.EchonetLite.RouteB-net10.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB/Smdn.Net.EchonetLite.RouteB-net10.0.apilist.cs
new file mode 100644
index 0000000..e96b449
--- /dev/null
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB/Smdn.Net.EchonetLite.RouteB-net10.0.apilist.cs
@@ -0,0 +1,173 @@
+// Smdn.Net.EchonetLite.RouteB.dll (Smdn.Net.EchonetLite.RouteB-2.2.0)
+// Name: Smdn.Net.EchonetLite.RouteB
+// AssemblyVersion: 2.2.0.0
+// InformationalVersion: 2.2.0+eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
+// TargetFramework: .NETCoreApp,Version=v10.0
+// Configuration: Release
+// Metadata: IsTrimmable=True
+// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.EchonetLite
+// Metadata: RepositoryBranch=main
+// Metadata: RepositoryCommit=eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Polly.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
+// Smdn.Net.EchonetLite, Version=2.1.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.1.0.0, Culture=neutral
+// System.Collections, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ComponentModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ComponentModel.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Linq, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Memory, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Polly;
+using Smdn.Net.EchonetLite;
+using Smdn.Net.EchonetLite.ObjectModel;
+using Smdn.Net.EchonetLite.RouteB;
+using Smdn.Net.EchonetLite.RouteB.Credentials;
+using Smdn.Net.EchonetLite.RouteB.DependencyInjection;
+using Smdn.Net.EchonetLite.RouteB.Transport;
+
+namespace Smdn.Net.EchonetLite.RouteB {
+ public class HemsController :
+ IAsyncDisposable,
+ IDisposable,
+ IRouteBCredentialIdentity
+ {
+ public HemsController(IRouteBEchonetLiteHandlerFactory echonetLiteHandlerFactory, IRouteBCredentialProvider routeBCredentialProvider, ILogger? logger, ILoggerFactory? loggerFactoryForEchonetClient) {}
+ public HemsController(IServiceProvider serviceProvider) {}
+
+ protected EchonetClient Client { get; }
+ public EchonetObject Controller { get; }
+ public bool IsConnected { get; }
+ protected bool IsDisposed { get; }
+ protected ILogger? Logger { get; }
+ public LowVoltageSmartElectricEnergyMeter SmartMeter { get; }
+ public ISynchronizeInvoke? SynchronizingObject { get; set; }
+ public TimeSpan TimeoutWaitingProactiveNotification { get; set; }
+ public TimeSpan TimeoutWaitingResponse1 { get; set; }
+ public TimeSpan TimeoutWaitingResponse2 { get; set; }
+
+ public ValueTask ConnectAsync(ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {}
+ public async ValueTask DisconnectAsync(CancellationToken cancellationToken = default) {}
+ protected virtual void Dispose(bool disposing) {}
+ public void Dispose() {}
+ public async ValueTask DisposeAsync() {}
+ protected virtual async ValueTask DisposeAsyncCore() {}
+ public ValueTask<TResult> RunWithResponseWaitTimer1Async<TResult>(Func<CancellationToken, ValueTask<TResult>> asyncAction, TResult resultForTimeout, CancellationToken cancellationToken = default) {}
+ public ValueTask<TResult> RunWithResponseWaitTimer1Async<TResult>(Func<CancellationToken, ValueTask<TResult>> asyncAction, string? messageForTimeoutException = null, CancellationToken cancellationToken = default) {}
+ public ValueTask<TResult> RunWithResponseWaitTimer2Async<TResult>(Func<CancellationToken, ValueTask<TResult>> asyncAction, string? messageForTimeoutException = null, CancellationToken cancellationToken = default) {}
+ protected void ThrowIfDisconnected() {}
+ protected void ThrowIfDisposed() {}
+ }
+
+ public sealed class LowVoltageSmartElectricEnergyMeter : DeviceSuperClass {
+ public IEchonetPropertyGetAccessor<int> Coefficient { get; }
+ public IEchonetPropertyGetAccessor<IReadOnlyList<(MeasurementValue<ElectricEnergyValue> NormalDirection, MeasurementValue<ElectricEnergyValue> ReverseDirection)>> CumulativeElectricEnergyLog2 { get; }
+ public IEchonetPropertySetGetAccessor<DateTime> DayForTheHistoricalDataOfCumulativeElectricEnergy1 { get; }
+ public IEchonetPropertySetGetAccessor<(DateTime DateAndTime, int NumberOfItems)> DayForTheHistoricalDataOfCumulativeElectricEnergy2 { get; }
+ public IEchonetPropertyGetAccessor<(ElectricCurrentValue RPhase, ElectricCurrentValue TPhase)> InstantaneousCurrent { get; }
+ public IEchonetPropertyGetAccessor<int> InstantaneousElectricPower { get; }
+ public IEchonetPropertyGetAccessor<ElectricEnergyValue> NormalDirectionCumulativeElectricEnergy { get; }
+ public IEchonetPropertyGetAccessor<MeasurementValue<ElectricEnergyValue>> NormalDirectionCumulativeElectricEnergyAtEvery30Min { get; }
+ public IEchonetPropertyGetAccessor<IReadOnlyList<MeasurementValue<ElectricEnergyValue>>> NormalDirectionCumulativeElectricEnergyLog1 { get; }
+ public IEchonetPropertyGetAccessor<int> NumberOfEffectiveDigitsCumulativeElectricEnergy { get; }
+ public IEchonetPropertyGetAccessor<(MeasurementValue<ElectricEnergyValue> NormalDirection, MeasurementValue<ElectricEnergyValue> ReverseDirection)> OneMinuteMeasuredCumulativeAmountsOfElectricEnergy { get; }
+ public IEchonetPropertyGetAccessor<ElectricEnergyValue> ReverseDirectionCumulativeElectricEnergy { get; }
+ public IEchonetPropertyGetAccessor<MeasurementValue<ElectricEnergyValue>> ReverseDirectionCumulativeElectricEnergyAtEvery30Min { get; }
+ public IEchonetPropertyGetAccessor<IReadOnlyList<MeasurementValue<ElectricEnergyValue>>> ReverseDirectionCumulativeElectricEnergyLog1 { get; }
+ public IEchonetPropertyGetAccessor<ReadOnlyMemory<byte>> RouteBIdentificationNumber { get; }
+ public IEchonetPropertyGetAccessor<decimal> UnitForCumulativeElectricEnergy { get; }
+ }
+
+ public static class MeasurementValue {
+ public static MeasurementValue<TValue> Create<TValue>(TValue @value, DateTime measuredAt) where TValue : struct {}
+ }
+
+ public sealed class RouteBDeviceFactory : IEchonetDeviceFactory {
+ public static RouteBDeviceFactory Instance { get; }
+
+ public RouteBDeviceFactory() {}
+
+ public EchonetDevice? Create(byte classGroupCode, byte classCode, byte instanceCode) {}
+ }
+
+ public readonly struct ElectricCurrentValue {
+ public ElectricCurrentValue(short rawValue) {}
+
+ public decimal Amperes { get; }
+ public bool IsValid { get; }
+ public short RawValue { get; }
+
+ public override string ToString() {}
+ }
+
+ public readonly struct ElectricEnergyValue {
+ public static readonly ElectricEnergyValue NoMeasurementData; // = "(no data)"
+ public static readonly ElectricEnergyValue Zero; // = "0 [kWh]"
+
+ public ElectricEnergyValue(int rawValue, decimal multiplierToKiloWattHours) {}
+
+ public bool IsValid { get; }
+ public decimal KiloWattHours { get; }
+ public int RawValue { get; }
+ public decimal WattHours { get; }
+
+ public override string ToString() {}
+ public bool TryGetValueAsKiloWattHours(out decimal @value) {}
+ }
+
+ public readonly struct MeasurementValue<TValue> where TValue : struct {
+ public MeasurementValue(TValue @value, DateTime measuredAt) {}
+
+ public DateTime MeasuredAt { get; }
+ public TValue Value { get; }
+
+ public void Deconstruct(out TValue @value, out DateTime measuredAt) {}
+ public override string ToString() {}
+ }
+}
+
+namespace Smdn.Net.EchonetLite.RouteB.Credentials {
+ public static class RouteBCredentialServiceCollectionExtensions {
+ public static IServiceCollection AddRouteBCredential(this IServiceCollection services, object? serviceKey, string id, string password) {}
+ public static IServiceCollection AddRouteBCredential(this ISe...Smdn.Net.EchonetLite.Primitives version 2.1.0
Immutable
release. Only release title and notes can be modified.
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2025-12-23 update assembly version
- 2025-12-23 add target framework net10.0
- 2025-07-08 remove redundant properties that have the same as default values
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net10.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net10.0.apilist.cs
new file mode 100644
index 0000000..776466d
--- /dev/null
+++ b/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net10.0.apilist.cs
@@ -0,0 +1,93 @@
+// Smdn.Net.EchonetLite.Primitives.dll (Smdn.Net.EchonetLite.Primitives-2.1.0)
+// Name: Smdn.Net.EchonetLite.Primitives
+// AssemblyVersion: 2.1.0.0
+// InformationalVersion: 2.1.0+eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
+// TargetFramework: .NETCoreApp,Version=v10.0
+// Configuration: Release
+// Metadata: IsTrimmable=True
+// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.EchonetLite
+// Metadata: RepositoryBranch=main
+// Metadata: RepositoryCommit=eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
+// Referenced assemblies:
+// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// System.ComponentModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Memory, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Buffers;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Smdn.Net.EchonetLite;
+
+namespace Smdn.Net.EchonetLite {
+ public interface IEchonetLiteHandler {
+ Func<IPAddress, ReadOnlyMemory<byte>, CancellationToken, ValueTask>? ReceiveCallback { get; set; }
+
+ ValueTask SendAsync(ReadOnlyMemory<byte> data, CancellationToken cancellationToken);
+ ValueTask SendToAsync(IPAddress remoteAddress, ReadOnlyMemory<byte> data, CancellationToken cancellationToken);
+ }
+
+ public interface IEchonetObjectSpecification {
+ byte ClassCode { get; }
+ byte ClassGroupCode { get; }
+ IEnumerable<IEchonetPropertySpecification> Properties { get; }
+ }
+
+ public interface IEchonetPropertySpecification {
+ bool CanAnnounceStatusChange { get; }
+ bool CanGet { get; }
+ bool CanSet { get; }
+ byte Code { get; }
+
+ bool IsAcceptableValue(ReadOnlySpan<byte> edt);
+ }
+}
+
+namespace Smdn.Net.EchonetLite.Transport {
+ public abstract class EchonetLiteHandler :
+ IAsyncDisposable,
+ IDisposable,
+ IEchonetLiteHandler
+ {
+ protected class ReceivedFromUnknownAddressException : InvalidOperationException {
+ public ReceivedFromUnknownAddressException() {}
+ public ReceivedFromUnknownAddressException(string message) {}
+ public ReceivedFromUnknownAddressException(string message, Exception? innerException) {}
+ }
+
+ public const int DefaultPort = 3610;
+
+ protected EchonetLiteHandler(ILogger? logger, IServiceProvider? serviceProvider) {}
+
+ protected bool IsDisposed { get; }
+ protected bool IsReceiving { get; }
+ public abstract IPAddress? LocalAddress { get; }
+ protected ILogger? Logger { get; }
+ public Func<IPAddress, ReadOnlyMemory<byte>, CancellationToken, ValueTask>? ReceiveCallback { get; set; }
+
+ protected virtual void Dispose(bool disposing) {}
+ public void Dispose() {}
+ public async ValueTask DisposeAsync() {}
+ protected virtual async ValueTask DisposeAsyncCore() {}
+ protected virtual bool HandleReceiveTaskException(Exception exception) {}
+ protected abstract ValueTask<IPAddress> ReceiveAsyncCore(IBufferWriter<byte> buffer, CancellationToken cancellationToken);
+ public ValueTask SendAsync(ReadOnlyMemory<byte> data, CancellationToken cancellationToken) {}
+ protected abstract ValueTask SendAsyncCore(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken);
+ public ValueTask SendToAsync(IPAddress remoteAddress, ReadOnlyMemory<byte> data, CancellationToken cancellationToken) {}
+ protected abstract ValueTask SendToAsyncCore(IPAddress remoteAddress, ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken);
+ protected void StartReceiving() {}
+ protected void StartReceiving(TaskFactory? taskFactoryForReceiving) {}
+ protected async ValueTask StopReceivingAsync() {}
+ protected virtual void ThrowIfDisposed() {}
+ protected void ThrowIfNotReceiving() {}
+ protected void ThrowIfReceiving() {}
+ }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.7.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.5.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net8.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net8.0.apilist.cs
index a4740db..dec444c 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net8.0.apilist.cs
@@ -1,89 +1,93 @@
-// Smdn.Net.EchonetLite.Primitives.dll (Smdn.Net.EchonetLite.Primitives-2.0.2)
+// Smdn.Net.EchonetLite.Primitives.dll (Smdn.Net.EchonetLite.Primitives-2.1.0)
// Name: Smdn.Net.EchonetLite.Primitives
-// AssemblyVersion: 2.0.2.0
-// InformationalVersion: 2.0.2+10cb847a99b6c2ad30297280debeb56a41a346bb
+// AssemblyVersion: 2.1.0.0
+// InformationalVersion: 2.1.0+eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
// TargetFramework: .NETCoreApp,Version=v8.0
// Configuration: Release
+// Metadata: IsTrimmable=True
+// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.EchonetLite
+// Metadata: RepositoryBranch=main
+// Metadata: RepositoryCommit=eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
// Referenced assemblies:
// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
#nullable enable annotations
using System;
using System.Buffers;
using System.Collections.Generic;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Smdn.Net.EchonetLite;
namespace Smdn.Net.EchonetLite {
public interface IEchonetLiteHandler {
Func<IPAddress, ReadOnlyMemory<byte>, CancellationToken, ValueTask>? ReceiveCallback { get; set; }
ValueTask SendAsync(ReadOnlyMemory<byte> data, CancellationToken cancellationToken);
ValueTask SendToAsync(IPAddress remoteAddress, ReadOnlyMemory<byte> data, CancellationToken cancellationToken);
}
public interface IEchonetObjectSpecification {
byte ClassCode { get; }
byte ClassGroupCode { get; }
IEnumerable<IEchonetPropertySpecification> Properties { get; }
}
public interface IEchonetPropertySpecification {
bool CanAnnounceStatusChange { get; }
bool CanGet { get; }
bool CanSet { get; }
byte Code { get; }
bool IsAcceptableValue(ReadOnlySpan<byte> edt);
}
}
namespace Smdn.Net.EchonetLite.Transport {
public abstract class EchonetLiteHandler :
IAsyncDisposable,
IDisposable,
IEchonetLiteHandler
{
protected class ReceivedFromUnknownAddressException : InvalidOperationException {
public ReceivedFromUnknownAddressException() {}
public ReceivedFromUnknownAddressException(string message) {}
public ReceivedFromUnknownAddressException(string message, Exception? innerException) {}
}
public const int DefaultPort = 3610;
protected EchonetLiteHandler(ILogger? logger, IServiceProvider? serviceProvider) {}
protected bool IsDisposed { get; }
protected bool IsReceiving { get; }
public abstract IPAddress? LocalAddress { get; }
protected ILogger? Logger { get; }
public Func<IPAddress, ReadOnlyMemory<byte>, CancellationToken, ValueTask>? ReceiveCallback { get; set; }
protected virtual void Dispose(bool disposing) {}
public void Dispose() {}
public async ValueTask DisposeAsync() {}
protected virtual async ValueTask DisposeAsyncCore() {}
protected virtual bool HandleReceiveTaskException(Exception exception) {}
protected abstract ValueTask<IPAddress> ReceiveAsyncCore(IBufferWriter<byte> buffer, CancellationToken cancellationToken);
public ValueTask SendAsync(ReadOnlyMemory<byte> data, CancellationToken cancellationToken) {}
protected abstract ValueTask SendAsyncCore(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken);
public V...Smdn.Net.EchonetLite version 2.2.0
Immutable
release. Only release title and notes can be modified.
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2025-12-23 update assembly version
- 2025-12-23 add target framework net10.0
- 2025-11-27 simplify property accessor
- 2025-07-08 remove redundant properties that have the same as default values
- 2025-07-06 suppress warnings
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-net10.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-net10.0.apilist.cs
new file mode 100644
index 0000000..33b0361
--- /dev/null
+++ b/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-net10.0.apilist.cs
@@ -0,0 +1,420 @@
+// Smdn.Net.EchonetLite.dll (Smdn.Net.EchonetLite-2.2.0)
+// Name: Smdn.Net.EchonetLite
+// AssemblyVersion: 2.2.0.0
+// InformationalVersion: 2.2.0+eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
+// TargetFramework: .NETCoreApp,Version=v10.0
+// Configuration: Release
+// Metadata: IsTrimmable=True
+// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.EchonetLite
+// Metadata: RepositoryBranch=main
+// Metadata: RepositoryCommit=eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Polly.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
+// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// System.Collections, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Collections.Concurrent, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ComponentModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ComponentModel.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Linq, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Memory, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Threading, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Buffers;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.ComponentModel;
+using System.Diagnostics.CodeAnalysis;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Polly;
+using Smdn.Net.EchonetLite;
+using Smdn.Net.EchonetLite.ObjectModel;
+using Smdn.Net.EchonetLite.Protocol;
+
+namespace Smdn.Net.EchonetLite {
+ public interface IEchonetDeviceFactory {
+ EchonetDevice? Create(byte classGroupCode, byte classCode, byte instanceCode);
+ }
+
+ public enum EchonetServicePropertyResult : int {
+ Accepted = 1,
+ NotAccepted = 2,
+ Unavailable = 0,
+ }
+
+ public class EchonetClient :
+ IAsyncDisposable,
+ IDisposable
+ {
+ public static readonly ResiliencePropertyKey<ILogger?> ResiliencePropertyKeyForLogger; // = "EchonetClient.ResiliencePropertyKeyForLogger"
+ public static readonly ResiliencePropertyKey<ESV> ResiliencePropertyKeyForRequestServiceCode; // = "EchonetClient.ResiliencePropertyKeyForRequestServiceCode"
+ public static readonly ResiliencePropertyKey<ESV> ResiliencePropertyKeyForResponseServiceCode; // = "EchonetClient.ResiliencePropertyKeyForResponseServiceCode"
+
+ public static ILogger? GetLoggerForResiliencePipeline(ResilienceContext resilienceContext) {}
+ public static bool TryGetRequestServiceCodeForResiliencePipeline(ResilienceContext resilienceContext, out ESV serviceCode) {}
+ public static bool TryGetResponseServiceCodeForResiliencePipeline(ResilienceContext resilienceContext, out ESV serviceCode) {}
+
+ public event EventHandler<EchonetNodeEventArgs>? InstanceListUpdated;
+ public event EventHandler<EchonetNodeEventArgs>? InstanceListUpdating;
+ public event EventHandler<EchonetObjectEventArgs>? PropertyMapAcquired;
+ public event EventHandler<EchonetObjectEventArgs>? PropertyMapAcquiring;
+
+ public EchonetClient(EchonetNode selfNode, IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler = false, EchonetNodeRegistry? nodeRegistry = null, IEchonetDeviceFactory? deviceFactory = null, ResiliencePipeline? resiliencePipelineForSendingResponseFrame = null, ILogger? logger = null, IServiceProvider? serviceProvider = null) {}
+ public EchonetClient(IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler = false, IServiceProvider? serviceProvider = null) {}
+ public EchonetClient(IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler, EchonetNodeRegistry? nodeRegistry, IEchonetDeviceFactory? deviceFactory, IServiceProvider? serviceProvider = null) {}
+
+ protected ILogger? Logger { get; }
+ public EchonetNodeRegistry NodeRegistry { get; }
+ public EchonetNode SelfNode { get; }
+ public ISynchronizeInvoke? SynchronizingObject { get; set; }
+
+ public async ValueTask<EchonetServiceResponse> AcquirePropertyMapsAsync(EchonetObject device, IEnumerable<byte>? extraPropertyCodes = null, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {}
+ protected virtual void Dispose(bool disposing) {}
+ public void Dispose() {}
+ public async ValueTask DisposeAsync() {}
+ protected virtual async ValueTask DisposeAsyncCore() {}
+ internal protected IPAddress? GetSelfNodeAddress() {}
+ protected virtual async ValueTask HandleFormat1MessageAsync(IPAddress address, int id, Format1Message message, CancellationToken cancellationToken) {}
+ protected virtual ValueTask HandleFormat2MessageAsync(IPAddress address, int id, ReadOnlyMemory<byte> edata, CancellationToken cancellationToken) {}
+ protected void InvokeEvent<TEventArgs>(EventHandler<TEventArgs>? eventHandler, TEventArgs e) where TEventArgs : EventArgs {}
+ public async ValueTask<EchonetServiceResponse> NotifyAsync(EOJ sourceObject, IEnumerable<PropertyValue> properties, IPAddress destinationNodeAddress, EOJ destinationObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {}
+ public async ValueTask NotifyInstanceListAsync(ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {}
+ public async ValueTask NotifyOneWayAsync(EOJ sourceObject, IEnumerable<PropertyValue> properties, IPAddress? destinationNodeAddress, EOJ destinationObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {}
+ protected virtual void OnInstanceListUpdated(EchonetNodeEventArgs e) {}
+ protected virtual void OnInstanceListUpdating(EchonetNodeEventArgs e) {}
+ protected virtual void OnPropertyMapAcquired(EchonetObjectEventArgs e) {}
+ protected virtual void OnPropertyMapAcquiring(EchonetObjectEventArgs e) {}
+ public Task RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress, Func<EchonetNode, bool> onInstanceListUpdated, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {}
+ public ValueTask RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress = null, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {}
+ public async Task RequestNotifyInstanceListAsync<TState>(IPAddress? destinationNodeAddress, Func<EchonetNode, TState, bool> onInstanceListUpdated, TState state, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {}
+ public async ValueTask RequestNotifyOneWayAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable<byte> propertyCodes, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {}
+ public async ValueTask<EchonetServiceResponse> RequestReadAsync(EOJ sourceObject, IPAddress destinationNodeAddress, EOJ destinationObject, IEnumerable<byte> propertyCodes, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {}
+ public async ValueTask RequestReadMulticastAsync(EOJ sourceObject, EOJ destinationObject, IEnumerable<byte> propertyCodes, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {}
+ public async ValueTask<EchonetServiceResponse> RequestWriteAsync(EOJ sourceObject, IPAddress destinationNodeAddress, EOJ destinationObject, IEnumerable<PropertyValue> properties, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default...Smdn.Net.EchonetLite.RouteB.BP35XX version 2.0.0-preview6
Immutable
release. Only release title and notes can be modified.
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net10.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net10.0.apilist.cs
new file mode 100644
index 0000000..2bf6674
--- /dev/null
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net10.0.apilist.cs
@@ -0,0 +1,73 @@
+// Smdn.Net.EchonetLite.RouteB.BP35XX.dll (Smdn.Net.EchonetLite.RouteB.BP35XX-2.0.0-preview6)
+// Name: Smdn.Net.EchonetLite.RouteB.BP35XX
+// AssemblyVersion: 2.0.0.0
+// InformationalVersion: 2.0.0-preview6+eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
+// TargetFramework: .NETCoreApp,Version=v10.0
+// Configuration: Release
+// Metadata: IsTrimmable=True
+// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.EchonetLite
+// Metadata: RepositoryBranch=main
+// Metadata: RepositoryCommit=eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Options, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Polly.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
+// Polly.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
+// Smdn.Devices.BP35XX, Version=2.2.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.1.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB.SkStackIP, Version=2.0.0.0, Culture=neutral
+// Smdn.Net.SkStackIP, Version=1.5.2.0, Culture=neutral
+// System.ComponentModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Linq, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Net.NetworkInformation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Polly;
+using Polly.DependencyInjection;
+using Polly.Retry;
+using Smdn.Devices.BP35XX;
+using Smdn.Net.EchonetLite.RouteB.DependencyInjection;
+using Smdn.Net.EchonetLite.RouteB.Transport;
+using Smdn.Net.EchonetLite.RouteB.Transport.SkStackIP;
+using Smdn.Net.SkStackIP;
+
+namespace Smdn.Net.EchonetLite.RouteB.DependencyInjection {
+ public sealed class BP35A1RouteBHandlerFactoryBuilder<TServiceKey> : SkStackRouteBHandlerFactoryBuilder<TServiceKey> {
+ protected override SkStackRouteBHandlerFactory Build(IServiceProvider serviceProvider, SkStackRouteBSessionOptions sessionOptions, Action<SkStackClient>? postConfigureClient) {}
+ }
+
+ public static class BP35A1RouteBServiceBuilderExtensions {
+ public static IRouteBServiceBuilder<TServiceKey> AddBP35A1Handler<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, Action<BP35A1Options> configureBP35A1Options, Action<SkStackRouteBSessionOptions> configureSessionOptions, Action<BP35A1RouteBHandlerFactoryBuilder<TServiceKey>> configureRouteBHandlerFactory) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddBP35A1PanaAuthenticationWorkaround<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SkStackRouteBHandler.ResiliencePipelineKeyPair<TServiceKey>>, Func<ResilienceContext, ValueTask>> configureWorkaroundPipeline) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddBP35A1PanaAuthenticationWorkaround<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, RetryStrategyOptions retryOptions) {}
+ }
+}
+
+namespace Smdn.Net.EchonetLite.RouteB.Transport.BP35XX {
+ public sealed class BP35A1RouteBHandler : SkStackUdpRouteBHandler {
+ public BP35A1RouteBHandler(BP35A1 client, SkStackRouteBSessionOptions sessionOptions, bool shouldDisposeClient, IServiceProvider? serviceProvider, object? routeBServiceKey) {}
+ }
+
+ public sealed class BP35A1RouteBHandlerFactory : SkStackRouteBHandlerFactory {
+ public BP35A1RouteBHandlerFactory(IServiceProvider serviceProvider, object? routeBServiceKey, BP35A1Options options, SkStackRouteBSessionOptions sessionOptions, Action<SkStackClient>? postConfigureClient) {}
+
+ protected override async ValueTask<RouteBEchonetLiteHandler> CreateAsyncCore(CancellationToken cancellationToken) {}
+ }
+
+ public static class BP35A1RouteBHandlerServiceCollectionExtensions {
+ public static IServiceCollection AddResiliencePipelineBP35A1PanaAuthenticationWorkaround(this IServiceCollection services, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<string>, Func<ResilienceContext, ValueTask>> configureWorkaroundPipeline) {}
+ public static IServiceCollection AddResiliencePipelineBP35A1PanaAuthenticationWorkaround(this IServiceCollection services, RetryStrategyOptions retryOptions) {}
+ public static IServiceCollection AddResiliencePipelineBP35A1PanaAuthenticationWorkaround<TServiceKey>(this IServiceCollection services, TServiceKey serviceKey, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SkStackRouteBHandler.ResiliencePipelineKeyPair<TServiceKey>>, Func<ResilienceContext, ValueTask>> configureWorkaroundPipeline) {}
+ public static IServiceCollection AddResiliencePipelineBP35A1PanaAuthenticationWorkaround<TServiceKey>(this IServiceCollection services, TServiceKey serviceKey, RetryStrategyOptions retryOptions) {}
+ }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.7.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.5.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net8.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net8.0.apilist.cs
index 68f0aaa..21b1506 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.RouteB.BP35XX/Smdn.Net.EchonetLite.RouteB.BP35XX-net8.0.apilist.cs
@@ -1,69 +1,73 @@
-// Smdn.Net.EchonetLite.RouteB.BP35XX.dll (Smdn.Net.EchonetLite.RouteB.BP35XX-2.0.0-preview5)
+// Smdn.Net.EchonetLite.RouteB.BP35XX.dll (Smdn.Net.EchonetLite.RouteB.BP35XX-2.0.0-preview6)
// Name: Smdn.Net.EchonetLite.RouteB.BP35XX
// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0-preview5+00af253682c17171aae1d68f04e3b98b34db2d4f
+// InformationalVersion: 2.0.0-preview6+eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
// TargetFramework: .NETCoreApp,Version=v8.0
// Configuration: Release
+// Metadata: IsTrimmable=True
+// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.EchonetLite
+// Metadata: RepositoryBranch=main
+// Metadata: RepositoryCommit=eceaa1ab8c33ec84da009bb0a40f14181fd5e97b
// Referenced assemblies:
// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Microsoft.Extensions.Options, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Polly.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
// Polly.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
// Smdn.Devices.BP35XX, Version=2.2.0.0, Culture=neutral
// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral
// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.1.0.0, Culture=neutral
// Smdn.Net.EchonetLite.RouteB.SkStackIP, Version=2.0.0.0, Culture=neutral
-// Smdn.Net.SkStackIP, Version=1.4.0.0, Culture=neutral
+// Smdn.Net.SkStackIP, Version=1.5.2.0, Culture=neutral
// System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Net.NetworkInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
#nullable enable annotations
using System;
using System.Threading;
using System...Smdn.Net.SmartMeter.Extensions.Munin version 2.2.0
Immutable
release. Only release title and notes can be modified.
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2025-11-27 update assembly version
- 2025-11-27 add target framework net10.0
- 2025-07-08 remove redundant properties that have the same as default values
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.SmartMeter.Extensions.Munin/Smdn.Net.SmartMeter.Extensions.Munin-net10.0.apilist.cs b/doc/api-list/Smdn.Net.SmartMeter.Extensions.Munin/Smdn.Net.SmartMeter.Extensions.Munin-net10.0.apilist.cs
new file mode 100644
index 0000000..810f689
--- /dev/null
+++ b/doc/api-list/Smdn.Net.SmartMeter.Extensions.Munin/Smdn.Net.SmartMeter.Extensions.Munin-net10.0.apilist.cs
@@ -0,0 +1,216 @@
+// Smdn.Net.SmartMeter.Extensions.Munin.dll (Smdn.Net.SmartMeter.Extensions.Munin-2.2.0)
+// Name: Smdn.Net.SmartMeter.Extensions.Munin
+// AssemblyVersion: 2.2.0.0
+// InformationalVersion: 2.2.0+291dc030d4c0805f26c6d95ef97ee47c2d34e54d
+// TargetFramework: .NETCoreApp,Version=v10.0
+// Configuration: Release
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Smdn.Net.EchonetLite, Version=2.1.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB, Version=2.1.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.1.0.0, Culture=neutral
+// Smdn.Net.MuninNode, Version=2.5.0.0, Culture=neutral
+// Smdn.Net.MuninNode.Hosting, Version=3.1.0.0, Culture=neutral
+// Smdn.Net.SmartMeter, Version=2.1.0.0, Culture=neutral
+// System.Collections, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Collections.Concurrent, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ComponentModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Linq, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Threading, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using Smdn.Net.EchonetLite.RouteB;
+using Smdn.Net.EchonetLite.RouteB.DependencyInjection;
+using Smdn.Net.MuninNode;
+using Smdn.Net.MuninNode.DependencyInjection;
+using Smdn.Net.MuninNode.Hosting;
+using Smdn.Net.MuninNode.Transport;
+using Smdn.Net.MuninPlugin;
+using Smdn.Net.SmartMeter;
+using Smdn.Net.SmartMeter.MuninNode;
+using Smdn.Net.SmartMeter.MuninNode.Hosting;
+using Smdn.Net.SmartMeter.MuninNode.Hosting.Systemd;
+using Smdn.Net.SmartMeter.MuninPlugin;
+
+namespace Smdn.Net.MuninNode.DependencyInjection {
+ public static class IMuninServiceBuilderExtensions {
+ public static SmartMeterMuninNodeBuilder AddSmartMeterMuninNode(this IMuninServiceBuilder builder, Action<MuninNodeOptions> configureMuninNodeOptions, Action<IRouteBServiceBuilder<string>> configureRouteBServices) {}
+ }
+}
+
+namespace Smdn.Net.SmartMeter.MuninNode {
+ public sealed class SmartMeterMuninNode : LocalNode {
+ public event EventHandler<Exception>? UnhandledAggregationException { add; remove; }
+
+ public override string HostName { get; }
+ public override IPluginProvider PluginProvider { get; }
+
+ protected override void Dispose(bool disposing) {}
+ protected override async ValueTask DisposeAsyncCore() {}
+ protected override EndPoint GetLocalEndPointToBind() {}
+ protected override ValueTask StartedAsync(CancellationToken cancellationToken) {}
+ protected override async ValueTask StartingAsync(CancellationToken cancellationToken) {}
+ protected override async ValueTask StoppedAsync(CancellationToken cancellationToken) {}
+ }
+
+ public sealed class SmartMeterMuninNodeBuilder : MuninNodeBuilder {
+ protected override IMuninNode Build(IPluginProvider pluginProvider, IMuninNodeListenerFactory? listenerFactory, IServiceProvider serviceProvider) {}
+ }
+
+ public static class SmartMeterMuninNodeBuilderExtensions {
+ public static SmartMeterMuninNodeBuilder AddCumulativeElectricEnergyAtEvery30MinPlugin(this SmartMeterMuninNodeBuilder builder, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ public static SmartMeterMuninNodeBuilder AddCumulativeElectricEnergyAtEvery30MinPlugin(this SmartMeterMuninNodeBuilder builder, string name, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ public static SmartMeterMuninNodeBuilder AddDailyCumulativeElectricEnergyPlugin(this SmartMeterMuninNodeBuilder builder, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ public static SmartMeterMuninNodeBuilder AddDailyCumulativeElectricEnergyPlugin(this SmartMeterMuninNodeBuilder builder, string name, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ public static SmartMeterMuninNodeBuilder AddInstantaneousCurrentPlugin(this SmartMeterMuninNodeBuilder builder, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ public static SmartMeterMuninNodeBuilder AddInstantaneousCurrentPlugin(this SmartMeterMuninNodeBuilder builder, TimeSpan aggregationInterval, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ public static SmartMeterMuninNodeBuilder AddInstantaneousCurrentPlugin(this SmartMeterMuninNodeBuilder builder, string name, TimeSpan aggregationInterval, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ public static SmartMeterMuninNodeBuilder AddInstantaneousElectricPowerPlugin(this SmartMeterMuninNodeBuilder builder, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ public static SmartMeterMuninNodeBuilder AddInstantaneousElectricPowerPlugin(this SmartMeterMuninNodeBuilder builder, TimeSpan aggregationInterval, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ public static SmartMeterMuninNodeBuilder AddInstantaneousElectricPowerPlugin(this SmartMeterMuninNodeBuilder builder, string name, TimeSpan aggregationInterval, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ public static SmartMeterMuninNodeBuilder AddMonthlyCumulativeElectricEnergyPlugin(this SmartMeterMuninNodeBuilder builder, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ public static SmartMeterMuninNodeBuilder AddMonthlyCumulativeElectricEnergyPlugin(this SmartMeterMuninNodeBuilder builder, string name, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ public static SmartMeterMuninNodeBuilder AddWeeklyCumulativeElectricEnergyPlugin(this SmartMeterMuninNodeBuilder builder, DayOfWeek firstDayOfWeek = DayOfWeek.Sunday, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ public static SmartMeterMuninNodeBuilder AddWeeklyCumulativeElectricEnergyPlugin(this SmartMeterMuninNodeBuilder builder, string name, DayOfWeek firstDayOfWeek = DayOfWeek.Sunday, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
+ }
+}
+
+namespace Smdn.Net.SmartMeter.MuninNode.Hosting {
+ public class AggregationHaltedException : InvalidOperationException {
+ public AggregationHaltedException() {}
+ public AggregationHaltedException(string message) {}
+ public AggregationHaltedException(string message, Exception? innerException) {}
+ }
+
+ public static class IServiceCollectionExtensions {
+ public static IServiceCollection AddHostedSmartMeterMuninNodeService(this IServiceCollection services, Action<IRouteBServiceBuilder<string>> configureRouteBServices, Action<MuninNodeOptions> configureMuninNodeOptions, Action<SmartMeterMuninNodeBuilder> configureSmartMeterMuninNode) {}
+ public static IServiceCollection AddHostedSmartMeterMuninNodeService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TSmartMeterMuninNodeService>(this IServiceCollection services, Action<IRouteBServiceBuilder<string>> configureRouteBServices, Action<MuninNodeOptions> configureMuninNodeOptions, Action<SmartMeterMuninNodeBuilder>...Smdn.Net.SmartMeter version 2.2.0
Immutable
release. Only release title and notes can be modified.
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2025-11-27 update assembly version
- 2025-11-27 add target framework net10.0
- 2025-11-27 reduce duplicate codes using ref locals
- 2025-07-08 remove redundant properties that have the same as default values
- 2025-07-06 clarify that TaskScheduler.Default should be used when the default TaskFactory is used
- 2025-07-06 suppress warnings
- 2025-06-16 suppress warning CA1859
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.SmartMeter/Smdn.Net.SmartMeter-net10.0.apilist.cs b/doc/api-list/Smdn.Net.SmartMeter/Smdn.Net.SmartMeter-net10.0.apilist.cs
new file mode 100644
index 0000000..404c32c
--- /dev/null
+++ b/doc/api-list/Smdn.Net.SmartMeter/Smdn.Net.SmartMeter-net10.0.apilist.cs
@@ -0,0 +1,199 @@
+// Smdn.Net.SmartMeter.dll (Smdn.Net.SmartMeter-2.2.0)
+// Name: Smdn.Net.SmartMeter
+// AssemblyVersion: 2.2.0.0
+// InformationalVersion: 2.2.0+291dc030d4c0805f26c6d95ef97ee47c2d34e54d
+// TargetFramework: .NETCoreApp,Version=v10.0
+// Configuration: Release
+// Referenced assemblies:
+// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+// Polly.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
+// Polly.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc
+// Smdn.Extensions.Polly.KeyedRegistry, Version=1.2.0.0, Culture=neutral
+// Smdn.Net.EchonetLite, Version=2.1.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB, Version=2.1.0.0, Culture=neutral
+// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.1.0.0, Culture=neutral
+// System.Collections, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ComponentModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ComponentModel.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Linq, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Threading, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Polly;
+using Polly.DependencyInjection;
+using Polly.Registry;
+using Polly.Registry.KeyedRegistry;
+using Smdn.Net.EchonetLite.RouteB;
+using Smdn.Net.EchonetLite.RouteB.Credentials;
+using Smdn.Net.EchonetLite.RouteB.Transport;
+using Smdn.Net.SmartMeter;
+
+namespace Smdn.Net.EchonetLite.RouteB.DependencyInjection {
+ public static class SmartMeterDataAggregatorRouteBServiceBuilderExtensions {
+ public static IRouteBServiceBuilder<TServiceKey> AddResiliencePipelineAggregationDataAcquisition<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>> configure) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddResiliencePipelineDataAggregationTask<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>> configure) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddResiliencePipelineSmartMeterConnection<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>> configure) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddResiliencePipelineSmartMeterReadProperty<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>> configure) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddResiliencePipelineSmartMeterReconnection<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>> configure) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddResiliencePipelineSmartMeterWriteProperty<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>> configure) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddResiliencePipelineUpdatingElectricEnergyBaseline<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>> configure) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddRetryAggregationDataAcquisitionTimeout<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, int maxRetryAttempt, TimeSpan delay, Action<RetryStrategyOptions, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>>? configureRetryOptions = null, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>>? configurePipeline = null) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddRetryDataAggregationTaskException<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, int maxRetryAttempt, TimeSpan delay, Action<PredicateBuilder> configureExceptionPredicates, Action<RetryStrategyOptions, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>>? configureRetryOptions = null, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>>? configurePipeline = null) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddRetrySmartMeterConnectionTimeout<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, int maxRetryAttempt, TimeSpan delay, Action<RetryStrategyOptions, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>>? configureRetryOptions = null, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>>? configurePipeline = null) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddRetrySmartMeterReadPropertyException<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, int maxRetryAttempt, TimeSpan delay, Action<PredicateBuilder> configureExceptionPredicates, Action<RetryStrategyOptions, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>>? configureRetryOptions = null, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>>? configurePipeline = null) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddRetrySmartMeterReconnectionTimeout<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, int maxRetryAttempt, TimeSpan delay, Action<RetryStrategyOptions, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>>? configureRetryOptions = null, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>>? configurePipeline = null) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddRetrySmartMeterWritePropertyException<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, int maxRetryAttempt, TimeSpan delay, Action<PredicateBuilder> configureExceptionPredicates, Action<RetryStrategyOptions, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>>? configureRetryOptions = null, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>>? configurePipeline = null) {}
+ public static IRouteBServiceBuilder<TServiceKey> AddRetryUpdatingElectricEnergyBaselineTimeout<TServiceKey>(this IRouteBServiceBuilder<TServiceKey> builder, int maxRetryAttempt, TimeSpan delay, Action<RetryStrategyOptions, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey>>>? configureRetryOptions = null, Action<ResiliencePipelineBuilder, AddResiliencePipelineContext<SmartMeterDataAggregator.ResiliencePipelineKeyPair<TServiceKey...Smdn.Net.EchonetLite.Primitives version 2.0.2
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net8.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net8.0.apilist.cs
index 076cb91..a4740db 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-net8.0.apilist.cs
@@ -1,89 +1,89 @@
-// Smdn.Net.EchonetLite.Primitives.dll (Smdn.Net.EchonetLite.Primitives-2.0.1)
+// Smdn.Net.EchonetLite.Primitives.dll (Smdn.Net.EchonetLite.Primitives-2.0.2)
// Name: Smdn.Net.EchonetLite.Primitives
-// AssemblyVersion: 2.0.1.0
-// InformationalVersion: 2.0.1+a1a02047fb738e30ac5001d6149f8cc18eef4ee6
+// AssemblyVersion: 2.0.2.0
+// InformationalVersion: 2.0.2+10cb847a99b6c2ad30297280debeb56a41a346bb
// TargetFramework: .NETCoreApp,Version=v8.0
// Configuration: Release
// Referenced assemblies:
// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
#nullable enable annotations
using System;
using System.Buffers;
using System.Collections.Generic;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Smdn.Net.EchonetLite;
namespace Smdn.Net.EchonetLite {
public interface IEchonetLiteHandler {
Func<IPAddress, ReadOnlyMemory<byte>, CancellationToken, ValueTask>? ReceiveCallback { get; set; }
ValueTask SendAsync(ReadOnlyMemory<byte> data, CancellationToken cancellationToken);
ValueTask SendToAsync(IPAddress remoteAddress, ReadOnlyMemory<byte> data, CancellationToken cancellationToken);
}
public interface IEchonetObjectSpecification {
byte ClassCode { get; }
byte ClassGroupCode { get; }
IEnumerable<IEchonetPropertySpecification> Properties { get; }
}
public interface IEchonetPropertySpecification {
bool CanAnnounceStatusChange { get; }
bool CanGet { get; }
bool CanSet { get; }
byte Code { get; }
bool IsAcceptableValue(ReadOnlySpan<byte> edt);
}
}
namespace Smdn.Net.EchonetLite.Transport {
public abstract class EchonetLiteHandler :
IAsyncDisposable,
IDisposable,
IEchonetLiteHandler
{
protected class ReceivedFromUnknownAddressException : InvalidOperationException {
public ReceivedFromUnknownAddressException() {}
public ReceivedFromUnknownAddressException(string message) {}
public ReceivedFromUnknownAddressException(string message, Exception? innerException) {}
}
public const int DefaultPort = 3610;
protected EchonetLiteHandler(ILogger? logger, IServiceProvider? serviceProvider) {}
protected bool IsDisposed { get; }
protected bool IsReceiving { get; }
public abstract IPAddress? LocalAddress { get; }
protected ILogger? Logger { get; }
public Func<IPAddress, ReadOnlyMemory<byte>, CancellationToken, ValueTask>? ReceiveCallback { get; set; }
protected virtual void Dispose(bool disposing) {}
public void Dispose() {}
public async ValueTask DisposeAsync() {}
protected virtual async ValueTask DisposeAsyncCore() {}
protected virtual bool HandleReceiveTaskException(Exception exception) {}
protected abstract ValueTask<IPAddress> ReceiveAsyncCore(IBufferWriter<byte> buffer, CancellationToken cancellationToken);
public ValueTask SendAsync(ReadOnlyMemory<byte> data, CancellationToken cancellationToken) {}
protected abstract ValueTask SendAsyncCore(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken);
public ValueTask SendToAsync(IPAddress remoteAddress, ReadOnlyMemory<byte> data, CancellationToken cancellationToken) {}
protected abstract ValueTask SendToAsyncCore(IPAddress remoteAddress, ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken);
protected void StartReceiving() {}
protected void StartReceiving(TaskFactory? taskFactoryForReceiving) {}
protected async ValueTask StopReceivingAsync() {}
protected virtual void ThrowIfDisposed() {}
protected void ThrowIfNotReceiving() {}
protected void ThrowIfReceiving() {}
}
}
// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.6.0.0.
// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.4.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-netstandard2.1.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-netstandard2.1.apilist.cs
index 579cfff..df2f9b9 100644
--- a/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-netstandard2.1.apilist.cs
+++ b/doc/api-list/Smdn.Net.EchonetLite.Primitives/Smdn.Net.EchonetLite.Primitives-netstandard2.1.apilist.cs
@@ -1,86 +1,86 @@
-// Smdn.Net.EchonetLite.Primitives.dll (Smdn.Net.EchonetLite.Primitives-2.0.1)
+// Smdn.Net.EchonetLite.Primitives.dll (Smdn.Net.EchonetLite.Primitives-2.0.2)
// Name: Smdn.Net.EchonetLite.Primitives
-// AssemblyVersion: 2.0.1.0
-// InformationalVersion: 2.0.1+a1a02047fb738e30ac5001d6149f8cc18eef4ee6
+// AssemblyVersion: 2.0.2.0
+// InformationalVersion: 2.0.2+10cb847a99b6c2ad30297280debeb56a41a346bb
// TargetFramework: .NETStandard,Version=v2.1
// Configuration: Release
// Referenced assemblies:
// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
#nullable enable annotations
using System;
using System.Buffers;
using System.Collections.Generic;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Smdn.Net.EchonetLite;
namespace Smdn.Net.EchonetLite {
public interface IEchonetLiteHandler {
Func<IPAddress, ReadOnlyMemory<byte>, CancellationToken, ValueTask>? ReceiveCallback { get; set; }
ValueTask SendAsync(ReadOnlyMemory<byte> data, CancellationToken cancellationToken);
ValueTask SendToAsync(IPAddress remoteAddress, ReadOnlyMemory<byte> data, CancellationToken cancellationToken);
}
public interface IEchonetObjectSpecification {
byte ClassCode { get; }
byte ClassGroupCode { get; }
IEnumerable<IEchonetPropertySpecification> Properties { get; }
}
public interface IEchonetPropertySpecification {
bool CanAnnounceStatusChange { get; }
bool CanGet { get; }
bool CanSet { get; }
byte Code { get; }
bool IsAcceptableValue(ReadOnlySpan<byte> edt);
}
}
namespace Smdn.Net.EchonetLite.Transport {
public abstract class EchonetLiteHandler :
IAsyncDisposable,
IDisposable,
IEchonetLiteHandler
{
protected class ReceivedFromUnknownAddressException : InvalidOperationException {
public ReceivedFromUnknownAddressException() {}
public ReceivedFromUnknownAddressException(string message) {}
public ReceivedFromUnknownAddressException(string message, Exception? innerException) {}
}
public const int DefaultPort = 3610;
protected EchonetLiteHandler(ILogger? logger, IServiceProvider? serviceProvider) {}
protected bool IsDisposed { get; }
protected bool IsReceiving { get; }
public abstract IPAddress? LocalAddress { get; }
protected ILogger? Logger { get; }
public Func<IPAddress, ReadOnlyMemory<byte>, CancellationToken, ValueTask>? ReceiveCallback { get; set; }
protected virtual void Dispose(bool disposing) {}
public void Dispose() {}
public async ValueTask DisposeAsync() {}
protected virtual async ValueTask DisposeAsyncCore() {}
protected virtual bool HandleReceiveTaskException(Exception exception) {}
protected abstract ValueTask<IPAddress> ReceiveAsyncCore(IBufferWriter<byte> buffer, CancellationToken cancellationToken);
public ValueTask SendAsync(ReadOnlyMemory<byte> data, CancellationToken cancellationToken) {}
protected abstract ValueTask SendAsyncCore(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken);
public ValueTask SendToAsync(IPAddress remoteAddress, ReadOnlyMemory<byte> data, CancellationToken cancellationToken) {}
protected abstract ValueTask SendToAsyncCore(IPAddress remoteAddress, ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken);
protected void StartReceiving() {}
protected void StartReceiving(TaskFactory? taskFactoryForReceiving) {}
protected async ValueTask StopReceivingAsync() {}
protected virtual void ThrowIfDisposed() {}
protected void ThrowIfNotReceiving() {}
protected void ThrowIfReceiving(...Smdn.Net.SmartMeter.Extensions.Munin version 2.1.0
Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2025-06-29 update assembly version
- 2025-06-29 enable PackageValidationBaselineVersion
- 2025-06-28 change to request termination of the application when unhandled exception occurred instead of rethrowing
- 2025-06-28 fix to throw a customizable exception instead of OperationCanceledException when data aggregation is stopped due to an unhandled exception
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Net.SmartMeter.Extensions.Munin/Smdn.Net.SmartMeter.Extensions.Munin-net8.0.apilist.cs b/doc/api-list/Smdn.Net.SmartMeter.Extensions.Munin/Smdn.Net.SmartMeter.Extensions.Munin-net8.0.apilist.cs
index c28756c..233a87a 100644
--- a/doc/api-list/Smdn.Net.SmartMeter.Extensions.Munin/Smdn.Net.SmartMeter.Extensions.Munin-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.SmartMeter.Extensions.Munin/Smdn.Net.SmartMeter.Extensions.Munin-net8.0.apilist.cs
@@ -1,208 +1,216 @@
-// Smdn.Net.SmartMeter.Extensions.Munin.dll (Smdn.Net.SmartMeter.Extensions.Munin-2.0.0)
+// Smdn.Net.SmartMeter.Extensions.Munin.dll (Smdn.Net.SmartMeter.Extensions.Munin-2.1.0)
// Name: Smdn.Net.SmartMeter.Extensions.Munin
-// AssemblyVersion: 2.0.0.0
-// InformationalVersion: 2.0.0+af25552aabd41ce54db2ed417a0dc9390a5dbadf
+// AssemblyVersion: 2.1.0.0
+// InformationalVersion: 2.1.0+d6881059bda1389c20c3dc8eacfd375f4dd752fe
// TargetFramework: .NETCoreApp,Version=v8.0
// Configuration: Release
// Referenced assemblies:
// Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// Smdn.Net.EchonetLite, Version=2.1.0.0, Culture=neutral
// Smdn.Net.EchonetLite.RouteB, Version=2.1.0.0, Culture=neutral
// Smdn.Net.EchonetLite.RouteB.Primitives, Version=2.1.0.0, Culture=neutral
// Smdn.Net.MuninNode, Version=2.5.0.0, Culture=neutral
// Smdn.Net.MuninNode.Hosting, Version=3.1.0.0, Culture=neutral
// Smdn.Net.SmartMeter, Version=2.1.0.0, Culture=neutral
// System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Collections.Concurrent, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
#nullable enable annotations
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Smdn.Net.EchonetLite.RouteB;
using Smdn.Net.EchonetLite.RouteB.DependencyInjection;
using Smdn.Net.MuninNode;
using Smdn.Net.MuninNode.DependencyInjection;
using Smdn.Net.MuninNode.Hosting;
using Smdn.Net.MuninNode.Transport;
using Smdn.Net.MuninPlugin;
using Smdn.Net.SmartMeter;
using Smdn.Net.SmartMeter.MuninNode;
using Smdn.Net.SmartMeter.MuninNode.Hosting;
using Smdn.Net.SmartMeter.MuninNode.Hosting.Systemd;
using Smdn.Net.SmartMeter.MuninPlugin;
namespace Smdn.Net.MuninNode.DependencyInjection {
public static class IMuninServiceBuilderExtensions {
public static SmartMeterMuninNodeBuilder AddSmartMeterMuninNode(this IMuninServiceBuilder builder, Action<MuninNodeOptions> configureMuninNodeOptions, Action<IRouteBServiceBuilder<string>> configureRouteBServices) {}
}
}
namespace Smdn.Net.SmartMeter.MuninNode {
public sealed class SmartMeterMuninNode : LocalNode {
public event EventHandler<Exception>? UnhandledAggregationException { add; remove; }
public override string HostName { get; }
public override IPluginProvider PluginProvider { get; }
protected override void Dispose(bool disposing) {}
protected override async ValueTask DisposeAsyncCore() {}
protected override EndPoint GetLocalEndPointToBind() {}
protected override ValueTask StartedAsync(CancellationToken cancellationToken) {}
protected override async ValueTask StartingAsync(CancellationToken cancellationToken) {}
protected override async ValueTask StoppedAsync(CancellationToken cancellationToken) {}
}
public sealed class SmartMeterMuninNodeBuilder : MuninNodeBuilder {
protected override IMuninNode Build(IPluginProvider pluginProvider, IMuninNodeListenerFactory? listenerFactory, IServiceProvider serviceProvider) {}
}
public static class SmartMeterMuninNodeBuilderExtensions {
public static SmartMeterMuninNodeBuilder AddCumulativeElectricEnergyAtEvery30MinPlugin(this SmartMeterMuninNodeBuilder builder, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
public static SmartMeterMuninNodeBuilder AddCumulativeElectricEnergyAtEvery30MinPlugin(this SmartMeterMuninNodeBuilder builder, string name, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
public static SmartMeterMuninNodeBuilder AddDailyCumulativeElectricEnergyPlugin(this SmartMeterMuninNodeBuilder builder, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
public static SmartMeterMuninNodeBuilder AddDailyCumulativeElectricEnergyPlugin(this SmartMeterMuninNodeBuilder builder, string name, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
public static SmartMeterMuninNodeBuilder AddInstantaneousCurrentPlugin(this SmartMeterMuninNodeBuilder builder, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
public static SmartMeterMuninNodeBuilder AddInstantaneousCurrentPlugin(this SmartMeterMuninNodeBuilder builder, TimeSpan aggregationInterval, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
public static SmartMeterMuninNodeBuilder AddInstantaneousCurrentPlugin(this SmartMeterMuninNodeBuilder builder, string name, TimeSpan aggregationInterval, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
public static SmartMeterMuninNodeBuilder AddInstantaneousElectricPowerPlugin(this SmartMeterMuninNodeBuilder builder, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
public static SmartMeterMuninNodeBuilder AddInstantaneousElectricPowerPlugin(this SmartMeterMuninNodeBuilder builder, TimeSpan aggregationInterval, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
public static SmartMeterMuninNodeBuilder AddInstantaneousElectricPowerPlugin(this SmartMeterMuninNodeBuilder builder, string name, TimeSpan aggregationInterval, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
public static SmartMeterMuninNodeBuilder AddMonthlyCumulativeElectricEnergyPlugin(this SmartMeterMuninNodeBuilder builder, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
public static SmartMeterMuninNodeBuilder AddMonthlyCumulativeElectricEnergyPlugin(this SmartMeterMuninNodeBuilder builder, string name, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
public static SmartMeterMuninNodeBuilder AddWeeklyCumulativeElectricEnergyPlugin(this SmartMeterMuninNodeBuilder builder, DayOfWeek firstDayOfWeek = DayOfWeek.Sunday, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
public static SmartMeterMuninNodeBuilder AddWeeklyCumulativeElectricEnergyPlugin(this SmartMeterMuninNodeBuilder builder, string name, DayOfWeek firstDayOfWeek = DayOfWeek.Sunday, bool enableNormalDirection = true, bool enableReverseDirection = false, Action<PluginGraphAttributesBuilder>? configureGraphAttributes = null) {}
}
}
namespace Smdn.Net.SmartMeter.MuninNode.Hosting {
+ public class AggregationHaltedException : InvalidOperationException {
+ public AggregationHaltedException() {}
+ public AggregationHaltedException(string message) {}
+ public AggregationHaltedException(string message, Exception? innerException) {}
+ }
+
public static class IServiceCollectionExtensions {
public static IServiceCollection AddHostedSmartMeterMuninNodeService(this IServiceC...