diff --git a/README.md b/README.md index bf70972..84b6168 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,9 @@ can be linked in 1- or 2-key mode: ### How to talk 'Easywave' using a computer? -Eldat produces the [RX09 USB Transceiver](https://www.eldat.de/produkte/schnittstellen/rx09e_en.html). This USB stick emulates a serial port that a computer program can use to listen to Easywave traffic. By sending commands to the serial port, you can instruct the USB stick to send Easywave messages, but only using a limited number of addresses (0 to 64/128, depending on the stick model), requiring you to (also) link the transceiver to the receivers you want to control. +Eldat produces the [RX09 USB Transceiver](https://www.eldat.de/produkte/schnittstellen/rx09e_en.html). This USB stick emulates a serial port that a computer program can use to listen to Easywave traffic. By sending commands to the serial port, you can instruct the USB stick to send Easywave messages, but only using a limited number of addresses (0 to 64/128, depending on the stick model), requiring you to (also) link the transceiver to the receivers you want to control. This device is supported by the Linux kernel and Windows drivers are available as well. + +Niko sells the [USB RF interface for Niko Home Control](https://www.niko.eu/en/products/niko-home-control/products-on-bus-wiring/usb-rf-interface-for-niko-home-control-productmodel-niko-4f394869-c7ef-531b-ba63-5387f88d384a), but unfortunately that is not supported by the Linux kernel, nor are there any Windows drivers available. The USB stick in that bundle seems an exact copy of the Eldat stick and I'm pretty sure it should be possible to get it to work in Linux by modifying the Eldat driver code to also recognize the USB device ID of the Niko stick. If you really want to go that way [this StackExchange thread](https://raspberrypi.stackexchange.com/questions/78908/eldat-easywave-usbserial-device-not-detected-on-raspberrypi-3) might point you in the right direction, but don't look at me for help. ### Issues with the Easywave protocol & devices @@ -43,7 +45,7 @@ In contrast to other protocols (like [Zigbee](https://en.wikipedia.org/wiki/Zigb - A typical Easywave wireless switch, like the [Niko 41-00001](https://www.niko.eu/en/products/wireless-controls/wireless-switch-with-two-buttons-productmodel-niko-fbacd5f6-94fc-5ce9-af7c-7394469b12c0) will send 2 to 4 repeated messages when a user presses a button. This makes it difficult to predict in what state a receiver that is linked in 1-button mode will be after processing these messages, when looking at the messages being sent. As a consequence, the current version does not support receivers in 1-button mode. - These repeated messages makes it also hard to detect a button being held and double- & tripple pressed. The addon tries to handle this with 2 settings. - **EasywaveRepeatTimeout**: any message received for the same button within this time (in milliseconds) is considered a repeated message and is ignored. If the same message continues to be received after this timeout, the button is considered to be 'held'. - - **EasywaveActionTimeout**: number of milliseconds to wait until a button action is considered complete. 'Press' messages received within this time are considered to be repeated presses by the user. + - **EasywaveActionTimeout**: number of milliseconds to wait until a button action is considered complete. 'Press' messages received within this time are considered to be repeated presses by the user. This gives this addon a nice feature: it can report double & triple presses on buttons, making it possible to trigger multiple types of actions in Home Assistant with one single button :smiley:. ## Architecture @@ -51,10 +53,10 @@ In contrast to other protocols (like [Zigbee](https://en.wikipedia.org/wiki/Zigb This program has 4 main parts: -- A **Easyweave service** that takes care of the Easywave communication using the [RX09 USB Transceiver](https://www.eldat.de/produkte/schnittstellen/rx09e_en.html). +- A **Easyweave service** that takes care of the Easywave communication using the serial port that the Easywave USB stick exposes. - A **Messaging service** that takes care of communication over MQTT. - Some **Worker service** that communicates with the other 2 services to detect what is happening in the Easywave world and - communicating it with [Home Assistant](https://www.home-assistant.io/) and vice-versa. + communicating it to MQTT and vice-versa. - Communication between these services is done through a custom-built and very rudimentary in-memory [message bus](./src/Tools/Bus.cs). ## Getting started @@ -83,7 +85,7 @@ So, for now, the only way to do it, is to manually alter the contents of the `ap ### Debugging - Check that you have the following tools available: - - [.NET 7.0 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/7.0) + - [.NET 8.0 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) - A code editor, like [Visual Studio Code](https://code.visualstudio.com/) or [Visual Studio](https://visualstudio.microsoft.com/), if you want to make changes. - Attach the [RX09 USB Transceiver](https://www.eldat.de/produkte/schnittstellen/rx09e_en.html) to your developer PC and make sure you have the drivers installed (can be downloaded from the page in the link). - Update the contents of the `appsettings.json` file. See the [Configuration Section](#configuration) for more information. @@ -135,25 +137,27 @@ The `Devices` section is too complicated to configure through the Addon configur //A/B = on/off on left-hand side when using a normal light switch cover. //C/D = on/off on right-hand side when using a normal light switch cover. //Niko also has special covers with 4 independent buttons. + //There are also Easywave remotes available with 3 to 8 buttons. If you have one of + //those, you can use these as well, but be sure to add a character for each of them. } ``` - **Optional**: Declare the receivers and the transmitter buttons you have them linked to. Doing so will allow these receivers and their current state to be synchronized to Home Assistant. If you want to make it possible to control your receivers from Home Assistant, you'll need to manually link them to an RX09 message and add that message as a subscription with `CanSend: "true"`. - A receiver is the actual device that switches the light. Its configuration looks as follows: + A receiver is the actual device that responds to transmitters. This plug-in currently supports `Light` & `Blind` devices. Its configuration looks as follows: ``` json { "Id": "ktchn1", //the unique ID of the receivers. You can choose this yourself. - "Type": "Light", //fixed value + "Type": "Light", //declare this receiver as a Light in Home Assistant. "Name": "Kitchen light", //name that you want to see displayed in Home Assistant. "Area": "Kitchen", //the Home Assistant area where the receiver is located "Subscriptions": [ - { //the transmitter buttons that you have manually linked to the receiver + { //the transmitter button that you have manually linked to the receiver "Address": "2274e4", //this is needed to make Home Assistant reflect the state of the device - "KeyCode": "C" //when one of these buttons is pressed - }, + "KeyCode": "C" //when one of these buttons is pressed. You only need to mention the button you used + }, //when linking the transmitter with the receiver. The other buttons are infered. { "Address": "22a4c1", //addresses mentioned here should be declared as Transmitter device first! "KeyCode": "A" diff --git a/addon/Easywave2MQTT/CHANGELOG.md b/addon/Easywave2MQTT/CHANGELOG.md index 35450f2..712af70 100644 --- a/addon/Easywave2MQTT/CHANGELOG.md +++ b/addon/Easywave2MQTT/CHANGELOG.md @@ -2,13 +2,14 @@ |Version|Changes| |-------|-------| -| 0.1 alpha | First version.| -| 0.2 alpha | First public version.| -| 0.3 beta | Automatically add all serial devices to addon container.
Added configuration options for serial device, mqtt & log level.
Switched to SeriLog for logging.
Switched to .NET 7.0.
Added test project to simulate a local Eldat RX09 device. This project requires on the [com0com Null-modem emulator](https://files.akeo.ie/blog/com0com.7z) and an MQTT server where the Easywave2Mqtt process is connected to.| -| 0.4 beta | Simplified addon building & startup:
- addon binaries & config file are directly editable in app subfolder, making it easier for non-developers to alter the configuration and to deploy the addon in Home Assistant.
- options are directly read from data subfolder (if available).
Lowered logging level for a few `MessagingService` messages that were logged twice, but in a different way. | -| 0.5 beta | Allow addon to start when no serial ports are found, or when a non-existing port was specified | -| 0.5.2 beta | Fix crash when serialport is throwing IOException for a timeout, instead of a TimeoutException | -| 0.5.3 beta | Fix bug in detection mechanism for button repeats | -| 0.6 | Automatically reconnect to MQTT server when connection breaks
Persist state of lights in MQTT| -| 0.7.0 | First try to add support for blinds | +| 1.0.0 | Upgrade to .NET 8.
Log declaration of Lights & Blinds
Switch to managed MQTT client that automatically reconnects. | | 0.7.1 | Fix blind states | +| 0.7.0 | First try to add support for blinds | +| 0.6 | Automatically reconnect to MQTT server when connection breaks
Persist state of lights in MQTT| +| 0.5.3 beta | Fix bug in detection mechanism for button repeats | +| 0.5.2 beta | Fix crash when serialport is throwing IOException for a timeout, instead of a TimeoutException | +| 0.5 beta | Allow addon to start when no serial ports are found, or when a non-existing port was specified | +| 0.4 beta | Simplified addon building & startup:
- addon binaries & config file are directly editable in app subfolder, making it easier for non-developers to alter the configuration and to deploy the addon in Home Assistant.
- options are directly read from data subfolder (if available).
Lowered logging level for a few `MessagingService` messages that were logged twice, but in a different way. | +| 0.3 beta | Automatically add all serial devices to addon container.
Added configuration options for serial device, mqtt & log level.
Switched to SeriLog for logging.
Switched to .NET 7.0.
Added test project to simulate a local Eldat RX09 device. This project requires on the [com0com Null-modem emulator](https://files.akeo.ie/blog/com0com.7z) and an MQTT server where the Easywave2Mqtt process is connected to.| +| 0.2 alpha | First public version.| +| 0.1 alpha | First version.| diff --git a/addon/Easywave2MQTT/Dockerfile b/addon/Easywave2MQTT/Dockerfile index 491d81a..c4e4c1f 100644 --- a/addon/Easywave2MQTT/Dockerfile +++ b/addon/Easywave2MQTT/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/dotnet/runtime:7.0 +FROM mcr.microsoft.com/dotnet/runtime:8.0 # Copy add-on binaries ADD app /app # Switch to app folder diff --git a/addon/Easywave2MQTT/README.md b/addon/Easywave2MQTT/README.md index 443eb19..da8b389 100644 --- a/addon/Easywave2MQTT/README.md +++ b/addon/Easywave2MQTT/README.md @@ -6,7 +6,7 @@ You can use this add-on to add support for Easywave devices in Home Assistant. Easywave is a proprietary protocol for wireless devices, developed by [Niko](https://niko.eu) & [Eldat](https://www.eldat.de/). -This add-on requires the presence of an [RX09 USB Transceiver](https://www.eldat.de/produkte/schnittstellen/rx09e_en.html) in the machine. Niko USB sticks could work too, **if they are recognized by the OS**. +This add-on requires the presence of an [RX09 USB Transceiver](https://www.eldat.de/produkte/schnittstellen/rx09e_en.html) in the machine. Niko USB sticks will probably work too, **provided they are recognized by the OS**. **This project is still in beta phase, but is usable after some manual tweaking.** diff --git a/addon/Easywave2MQTT/app/Easywave2Mqtt.deps.json b/addon/Easywave2MQTT/app/Easywave2Mqtt.deps.json index 4fd2b83..10d720f 100644 --- a/addon/Easywave2MQTT/app/Easywave2Mqtt.deps.json +++ b/addon/Easywave2MQTT/app/Easywave2Mqtt.deps.json @@ -1,401 +1,434 @@ { "runtimeTarget": { - "name": ".NETCoreApp,Version=v7.0", + "name": ".NETCoreApp,Version=v8.0", "signature": "" }, "compilationOptions": {}, "targets": { - ".NETCoreApp,Version=v7.0": { + ".NETCoreApp,Version=v8.0": { "Easywave2Mqtt/1.0.0": { "dependencies": { "InMemoryBus": "1.0.0", - "JetBrains.Annotations": "2022.3.1", - "MQTTnet": "4.1.4.563", - "Microsoft.Extensions.Hosting": "7.0.1", - "Microsoft.Extensions.Hosting.Systemd": "7.0.0", - "Microsoft.Extensions.Hosting.WindowsServices": "7.0.0", - "Serilog.Extensions.Hosting": "5.0.1", - "Serilog.Sinks.Console": "4.1.0", - "System.IO.Ports": "7.0.0" + "MQTTnet.Extensions.ManagedClient": "4.3.3.952", + "Microsoft.Extensions.Hosting": "8.0.0", + "Microsoft.Extensions.Hosting.Systemd": "8.0.0", + "Microsoft.Extensions.Hosting.WindowsServices": "8.0.0", + "Serilog.Extensions.Hosting": "8.0.0", + "Serilog.Sinks.Console": "5.0.1", + "SonarAnalyzer.CSharp": "9.20.0.85982", + "System.IO.Ports": "8.0.0" }, "runtime": { "Easywave2Mqtt.dll": {} } }, - "JetBrains.Annotations/2022.3.1": { + "Microsoft.Extensions.Configuration/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + }, "runtime": { - "lib/netstandard2.0/JetBrains.Annotations.dll": { - "assemblyVersion": "4242.42.42.42", - "fileVersion": "2022.3.1.0" + "lib/net8.0/Microsoft.Extensions.Configuration.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Configuration/7.0.0": { + "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.Primitives": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Configuration.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Configuration.Abstractions/7.0.0": { + "Microsoft.Extensions.Configuration.Binder/8.0.0": { "dependencies": { - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Configuration.Binder.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Configuration.Binder/7.0.3": { + "Microsoft.Extensions.Configuration.CommandLine/8.0.0": { "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0" + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Configuration.Binder.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.323.6910" + "lib/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Configuration.CommandLine/7.0.0": { + "Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": { "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0" + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Configuration.CommandLine.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Configuration.EnvironmentVariables/7.0.0": { + "Microsoft.Extensions.Configuration.FileExtensions/8.0.0": { "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0" + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Configuration.FileExtensions/7.0.0": { + "Microsoft.Extensions.Configuration.Json/8.0.0": { "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Physical": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "System.Text.Json": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Configuration.Json.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Configuration.Json/7.0.0": { + "Microsoft.Extensions.Configuration.UserSecrets/8.0.0": { "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "System.Text.Json": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Json": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Configuration.Json.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Configuration.UserSecrets/7.0.0": { + "Microsoft.Extensions.DependencyInjection/8.0.0": { "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.Json": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Physical": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { + "runtime": { + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.DependencyInjection/7.0.0": { + "Microsoft.Extensions.Diagnostics/8.0.0": { "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0" + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.DependencyInjection.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Diagnostics.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.DependencyInjection.Abstractions/7.0.0": { + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.0" + }, "runtime": { - "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.FileProviders.Abstractions/7.0.0": { + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { "dependencies": { - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.Primitives": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.FileProviders.Physical/7.0.0": { + "Microsoft.Extensions.FileProviders.Physical/8.0.0": { "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileSystemGlobbing": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.FileProviders.Physical.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.FileSystemGlobbing/7.0.0": { + "Microsoft.Extensions.FileSystemGlobbing/8.0.0": { "runtime": { - "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" - } - } - }, - "Microsoft.Extensions.Hosting/7.0.1": { - "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.Binder": "7.0.3", - "Microsoft.Extensions.Configuration.CommandLine": "7.0.0", - "Microsoft.Extensions.Configuration.EnvironmentVariables": "7.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0", - "Microsoft.Extensions.Configuration.Json": "7.0.0", - "Microsoft.Extensions.Configuration.UserSecrets": "7.0.0", - "Microsoft.Extensions.DependencyInjection": "7.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Physical": "7.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging.Configuration": "7.0.0", - "Microsoft.Extensions.Logging.Console": "7.0.0", - "Microsoft.Extensions.Logging.Debug": "7.0.0", - "Microsoft.Extensions.Logging.EventLog": "7.0.0", - "Microsoft.Extensions.Logging.EventSource": "7.0.0", - "Microsoft.Extensions.Options": "7.0.1", - "System.Diagnostics.DiagnosticSource": "7.0.1" - }, - "runtime": { - "lib/net7.0/Microsoft.Extensions.Hosting.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.323.6910" + "lib/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Hosting.Abstractions/7.0.0": { + "Microsoft.Extensions.Hosting/8.0.0": { "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0" + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.Configuration.CommandLine": "8.0.0", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "8.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.0", + "Microsoft.Extensions.Configuration.Json": "8.0.0", + "Microsoft.Extensions.Configuration.UserSecrets": "8.0.0", + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Configuration": "8.0.0", + "Microsoft.Extensions.Logging.Console": "8.0.0", + "Microsoft.Extensions.Logging.Debug": "8.0.0", + "Microsoft.Extensions.Logging.EventLog": "8.0.0", + "Microsoft.Extensions.Logging.EventSource": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Hosting.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "Microsoft.Extensions.Hosting.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Hosting.Abstractions.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Hosting.Systemd/7.0.0": { + "Microsoft.Extensions.Hosting.Systemd/8.0.0": { "dependencies": { - "Microsoft.Extensions.Hosting": "7.0.1" + "Microsoft.Extensions.Hosting": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Hosting.Systemd.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Hosting.Systemd.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Hosting.WindowsServices/7.0.0": { + "Microsoft.Extensions.Hosting.WindowsServices/8.0.0": { "dependencies": { - "Microsoft.Extensions.Hosting": "7.0.1", - "Microsoft.Extensions.Logging.EventLog": "7.0.0", - "System.ServiceProcess.ServiceController": "7.0.0" + "Microsoft.Extensions.Hosting": "8.0.0", + "Microsoft.Extensions.Logging.EventLog": "8.0.0", + "System.ServiceProcess.ServiceController": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Hosting.WindowsServices.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Hosting.WindowsServices.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Logging/7.0.0": { + "Microsoft.Extensions.Logging/8.0.0": { "dependencies": { - "Microsoft.Extensions.DependencyInjection": "7.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.1" + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Logging.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Logging.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Logging.Abstractions/7.0.0": { + "Microsoft.Extensions.Logging.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Logging.Abstractions.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Logging.Configuration/7.0.0": { + "Microsoft.Extensions.Logging.Configuration/8.0.0": { "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.Binder": "7.0.3", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.1", - "Microsoft.Extensions.Options.ConfigurationExtensions": "7.0.0" + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Logging.Configuration.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Logging.Configuration.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Logging.Console/7.0.0": { + "Microsoft.Extensions.Logging.Console/8.0.0": { "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging.Configuration": "7.0.0", - "Microsoft.Extensions.Options": "7.0.1", - "System.Text.Json": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Configuration": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Text.Json": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Logging.Console.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Logging.Console.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Logging.Debug/7.0.0": { + "Microsoft.Extensions.Logging.Debug/8.0.0": { "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Logging.Debug.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Logging.Debug.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Logging.EventLog/7.0.0": { + "Microsoft.Extensions.Logging.EventLog/8.0.0": { "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.1", - "System.Diagnostics.EventLog": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.EventLog": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Logging.EventLog.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Logging.EventLog.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Logging.EventSource/7.0.0": { + "Microsoft.Extensions.Logging.EventSource/8.0.0": { "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.1", - "Microsoft.Extensions.Primitives": "7.0.0", - "System.Text.Json": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0", + "System.Text.Json": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Logging.EventSource.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Logging.EventSource.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Options/7.0.1": { + "Microsoft.Extensions.Options/8.0.0": { "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Options.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.323.6910" + "lib/net8.0/Microsoft.Extensions.Options.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Options.ConfigurationExtensions/7.0.0": { + "Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0": { "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.Binder": "7.0.3", - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Options": "7.0.1", - "Microsoft.Extensions.Primitives": "7.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" }, "runtime": { - "lib/net7.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "Microsoft.Extensions.Primitives/7.0.0": { + "Microsoft.Extensions.Primitives/8.0.0": { "runtime": { - "lib/net7.0/Microsoft.Extensions.Primitives.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/Microsoft.Extensions.Primitives.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "MQTTnet/4.1.4.563": { + "MQTTnet/4.3.3.952": { "runtime": { - "lib/net6.0/MQTTnet.dll": { - "assemblyVersion": "4.1.4.563", - "fileVersion": "4.1.4.563" + "lib/net7.0/MQTTnet.dll": { + "assemblyVersion": "4.3.3.952", + "fileVersion": "4.3.3.952" } } }, - "runtime.linux-arm.runtime.native.System.IO.Ports/7.0.0": { + "MQTTnet.Extensions.ManagedClient/4.3.3.952": { + "dependencies": { + "MQTTnet": "4.3.3.952" + }, + "runtime": { + "lib/net7.0/MQTTnet.Extensions.ManagedClient.dll": { + "assemblyVersion": "4.3.3.952", + "fileVersion": "4.3.3.952" + } + } + }, + "runtime.linux-arm.runtime.native.System.IO.Ports/8.0.0": { "runtimeTargets": { "runtimes/linux-arm/native/libSystem.IO.Ports.Native.so": { "rid": "linux-arm", @@ -404,7 +437,7 @@ } } }, - "runtime.linux-arm64.runtime.native.System.IO.Ports/7.0.0": { + "runtime.linux-arm64.runtime.native.System.IO.Ports/8.0.0": { "runtimeTargets": { "runtimes/linux-arm64/native/libSystem.IO.Ports.Native.so": { "rid": "linux-arm64", @@ -413,7 +446,7 @@ } } }, - "runtime.linux-x64.runtime.native.System.IO.Ports/7.0.0": { + "runtime.linux-x64.runtime.native.System.IO.Ports/8.0.0": { "runtimeTargets": { "runtimes/linux-x64/native/libSystem.IO.Ports.Native.so": { "rid": "linux-x64", @@ -422,16 +455,16 @@ } } }, - "runtime.native.System.IO.Ports/7.0.0": { + "runtime.native.System.IO.Ports/8.0.0": { "dependencies": { - "runtime.linux-arm.runtime.native.System.IO.Ports": "7.0.0", - "runtime.linux-arm64.runtime.native.System.IO.Ports": "7.0.0", - "runtime.linux-x64.runtime.native.System.IO.Ports": "7.0.0", - "runtime.osx-arm64.runtime.native.System.IO.Ports": "7.0.0", - "runtime.osx-x64.runtime.native.System.IO.Ports": "7.0.0" + "runtime.linux-arm.runtime.native.System.IO.Ports": "8.0.0", + "runtime.linux-arm64.runtime.native.System.IO.Ports": "8.0.0", + "runtime.linux-x64.runtime.native.System.IO.Ports": "8.0.0", + "runtime.osx-arm64.runtime.native.System.IO.Ports": "8.0.0", + "runtime.osx-x64.runtime.native.System.IO.Ports": "8.0.0" } }, - "runtime.osx-arm64.runtime.native.System.IO.Ports/7.0.0": { + "runtime.osx-arm64.runtime.native.System.IO.Ports/8.0.0": { "runtimeTargets": { "runtimes/osx-arm64/native/libSystem.IO.Ports.Native.dylib": { "rid": "osx-arm64", @@ -440,7 +473,7 @@ } } }, - "runtime.osx-x64.runtime.native.System.IO.Ports/7.0.0": { + "runtime.osx-x64.runtime.native.System.IO.Ports/8.0.0": { "runtimeTargets": { "runtimes/osx-x64/native/libSystem.IO.Ports.Native.dylib": { "rid": "osx-x64", @@ -449,123 +482,124 @@ } } }, - "Serilog/2.10.0": { + "Serilog/3.1.1": { "runtime": { - "lib/netstandard2.1/Serilog.dll": { + "lib/net7.0/Serilog.dll": { "assemblyVersion": "2.0.0.0", - "fileVersion": "2.10.0.0" + "fileVersion": "3.1.1.0" } } }, - "Serilog.Extensions.Hosting/5.0.1": { + "Serilog.Extensions.Hosting/8.0.0": { "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "7.0.0", - "Microsoft.Extensions.Logging.Abstractions": "7.0.0", - "Serilog": "2.10.0", - "Serilog.Extensions.Logging": "3.1.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Serilog": "3.1.1", + "Serilog.Extensions.Logging": "8.0.0" }, "runtime": { - "lib/netstandard2.1/Serilog.Extensions.Hosting.dll": { - "assemblyVersion": "2.0.0.0", - "fileVersion": "5.0.1.0" + "lib/net8.0/Serilog.Extensions.Hosting.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "8.0.0.0" } } }, - "Serilog.Extensions.Logging/3.1.0": { + "Serilog.Extensions.Logging/8.0.0": { "dependencies": { - "Microsoft.Extensions.Logging": "7.0.0", - "Serilog": "2.10.0" + "Microsoft.Extensions.Logging": "8.0.0", + "Serilog": "3.1.1" }, "runtime": { - "lib/netstandard2.0/Serilog.Extensions.Logging.dll": { - "assemblyVersion": "2.0.0.0", - "fileVersion": "3.1.0.0" + "lib/net8.0/Serilog.Extensions.Logging.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "8.0.0.0" } } }, - "Serilog.Sinks.Console/4.1.0": { + "Serilog.Sinks.Console/5.0.1": { "dependencies": { - "Serilog": "2.10.0" + "Serilog": "3.1.1" }, "runtime": { - "lib/net5.0/Serilog.Sinks.Console.dll": { - "assemblyVersion": "4.1.0.0", - "fileVersion": "4.1.0.0" + "lib/net7.0/Serilog.Sinks.Console.dll": { + "assemblyVersion": "5.0.1.0", + "fileVersion": "5.0.1.0" } } }, - "System.Diagnostics.DiagnosticSource/7.0.1": {}, - "System.Diagnostics.EventLog/7.0.0": { + "SonarAnalyzer.CSharp/9.20.0.85982": {}, + "System.Diagnostics.DiagnosticSource/8.0.0": {}, + "System.Diagnostics.EventLog/8.0.0": { "runtime": { - "lib/net7.0/System.Diagnostics.EventLog.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/System.Diagnostics.EventLog.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } }, "runtimeTargets": { - "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.Messages.dll": { + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll": { "rid": "win", "assetType": "runtime", - "assemblyVersion": "7.0.0.0", + "assemblyVersion": "8.0.0.0", "fileVersion": "0.0.0.0" }, - "runtimes/win/lib/net7.0/System.Diagnostics.EventLog.dll": { + "runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll": { "rid": "win", "assetType": "runtime", - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "System.IO.Ports/7.0.0": { + "System.IO.Ports/8.0.0": { "dependencies": { - "runtime.native.System.IO.Ports": "7.0.0" + "runtime.native.System.IO.Ports": "8.0.0" }, "runtime": { - "lib/net7.0/System.IO.Ports.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/System.IO.Ports.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } }, "runtimeTargets": { - "runtimes/unix/lib/net7.0/System.IO.Ports.dll": { + "runtimes/unix/lib/net8.0/System.IO.Ports.dll": { "rid": "unix", "assetType": "runtime", - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" }, - "runtimes/win/lib/net7.0/System.IO.Ports.dll": { + "runtimes/win/lib/net8.0/System.IO.Ports.dll": { "rid": "win", "assetType": "runtime", - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "System.ServiceProcess.ServiceController/7.0.0": { + "System.ServiceProcess.ServiceController/8.0.0": { "dependencies": { - "System.Diagnostics.EventLog": "7.0.0" + "System.Diagnostics.EventLog": "8.0.0" }, "runtime": { - "lib/net7.0/System.ServiceProcess.ServiceController.dll": { - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "lib/net8.0/System.ServiceProcess.ServiceController.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } }, "runtimeTargets": { - "runtimes/win/lib/net7.0/System.ServiceProcess.ServiceController.dll": { + "runtimes/win/lib/net8.0/System.ServiceProcess.ServiceController.dll": { "rid": "win", "assetType": "runtime", - "assemblyVersion": "7.0.0.0", - "fileVersion": "7.0.22.51805" + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } }, - "System.Text.Encodings.Web/7.0.0": {}, - "System.Text.Json/7.0.0": { + "System.Text.Encodings.Web/8.0.0": {}, + "System.Text.Json/8.0.0": { "dependencies": { - "System.Text.Encodings.Web": "7.0.0" + "System.Text.Encodings.Web": "8.0.0" } }, "InMemoryBus/1.0.0": { @@ -581,320 +615,341 @@ "serviceable": false, "sha512": "" }, - "JetBrains.Annotations/2022.3.1": { + "Microsoft.Extensions.Configuration/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==", + "path": "microsoft.extensions.configuration/8.0.0", + "hashPath": "microsoft.extensions.configuration.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "path": "microsoft.extensions.configuration.abstractions/8.0.0", + "hashPath": "microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Binder/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mBMoXLsr5s1y2zOHWmKsE9veDcx8h1x/c3rz4baEdQKTeDcmQAPNbB54Pi/lhFO3K431eEq6PFbMgLaa6PHFfA==", + "path": "microsoft.extensions.configuration.binder/8.0.0", + "hashPath": "microsoft.extensions.configuration.binder.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.CommandLine/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-11nsS3+lFICGkztVs9PP2NRItxf9fF+qD6xEW/T0YGto52zj07wseUeBdMAU1ah9HNVTDZyRC1u4NWdtJScwhw==", - "path": "jetbrains.annotations/2022.3.1", - "hashPath": "jetbrains.annotations.2022.3.1.nupkg.sha512" + "sha512": "sha512-NZuZMz3Q8Z780nKX3ifV1fE7lS+6pynDHK71OfU4OZ1ItgvDOhyOC7E6z+JMZrAj63zRpwbdldYFk499t3+1dQ==", + "path": "microsoft.extensions.configuration.commandline/8.0.0", + "hashPath": "microsoft.extensions.configuration.commandline.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration/7.0.0": { + "Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==", - "path": "microsoft.extensions.configuration/7.0.0", - "hashPath": "microsoft.extensions.configuration.7.0.0.nupkg.sha512" + "sha512": "sha512-plvZ0ZIpq+97gdPNNvhwvrEZ92kNml9hd1pe3idMA7svR0PztdzVLkoWLcRFgySYXUJc3kSM3Xw3mNFMo/bxRA==", + "path": "microsoft.extensions.configuration.environmentvariables/8.0.0", + "hashPath": "microsoft.extensions.configuration.environmentvariables.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration.Abstractions/7.0.0": { + "Microsoft.Extensions.Configuration.FileExtensions/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==", - "path": "microsoft.extensions.configuration.abstractions/7.0.0", - "hashPath": "microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512" + "sha512": "sha512-McP+Lz/EKwvtCv48z0YImw+L1gi1gy5rHhNaNIY2CrjloV+XY8gydT8DjMR6zWeL13AFK+DioVpppwAuO1Gi1w==", + "path": "microsoft.extensions.configuration.fileextensions/8.0.0", + "hashPath": "microsoft.extensions.configuration.fileextensions.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration.Binder/7.0.3": { + "Microsoft.Extensions.Configuration.Json/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-1eRFwJBrkkncTpvh6mivB8zg4uBVm6+Y6stEJERrVEqZZc8Hvf+N1iIgj2ySYDUQko4J1Gw1rLf1M8bG83F0eA==", - "path": "microsoft.extensions.configuration.binder/7.0.3", - "hashPath": "microsoft.extensions.configuration.binder.7.0.3.nupkg.sha512" + "sha512": "sha512-C2wqUoh9OmRL1akaCcKSTmRU8z0kckfImG7zLNI8uyi47Lp+zd5LWAD17waPQEqCz3ioWOCrFUo+JJuoeZLOBw==", + "path": "microsoft.extensions.configuration.json/8.0.0", + "hashPath": "microsoft.extensions.configuration.json.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration.CommandLine/7.0.0": { + "Microsoft.Extensions.Configuration.UserSecrets/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-a8Iq8SCw5m8W5pZJcPCgBpBO4E89+NaObPng+ApIhrGSv9X4JPrcFAaGM4sDgR0X83uhLgsNJq8VnGP/wqhr8A==", - "path": "microsoft.extensions.configuration.commandline/7.0.0", - "hashPath": "microsoft.extensions.configuration.commandline.7.0.0.nupkg.sha512" + "sha512": "sha512-ihDHu2dJYQird9pl2CbdwuNDfvCZdOS0S7SPlNfhPt0B81UTT+yyZKz2pimFZGUp3AfuBRnqUCxB2SjsZKHVUw==", + "path": "microsoft.extensions.configuration.usersecrets/8.0.0", + "hashPath": "microsoft.extensions.configuration.usersecrets.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration.EnvironmentVariables/7.0.0": { + "Microsoft.Extensions.DependencyInjection/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-RIkfqCkvrAogirjsqSrG1E1FxgrLsOZU2nhRbl07lrajnxzSU2isj2lwQah0CtCbLWo/pOIukQzM1GfneBUnxA==", - "path": "microsoft.extensions.configuration.environmentvariables/7.0.0", - "hashPath": "microsoft.extensions.configuration.environmentvariables.7.0.0.nupkg.sha512" + "sha512": "sha512-V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", + "path": "microsoft.extensions.dependencyinjection/8.0.0", + "hashPath": "microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration.FileExtensions/7.0.0": { + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==", - "path": "microsoft.extensions.configuration.fileextensions/7.0.0", - "hashPath": "microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512" + "sha512": "sha512-cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==", + "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration.Json/7.0.0": { + "Microsoft.Extensions.Diagnostics/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==", - "path": "microsoft.extensions.configuration.json/7.0.0", - "hashPath": "microsoft.extensions.configuration.json.7.0.0.nupkg.sha512" + "sha512": "sha512-3PZp/YSkIXrF7QK7PfC1bkyRYwqOHpWFad8Qx+4wkuumAeXo1NHaxpS9LboNA9OvNSAu+QOVlXbMyoY+pHSqcw==", + "path": "microsoft.extensions.diagnostics/8.0.0", + "hashPath": "microsoft.extensions.diagnostics.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Configuration.UserSecrets/7.0.0": { + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-33HPW1PmB2RS0ietBQyvOxjp4O3wlt+4tIs8KPyMn1kqp04goiZGa7+3mc69NRLv6bphkLDy0YR7Uw3aZyf8Zw==", - "path": "microsoft.extensions.configuration.usersecrets/7.0.0", - "hashPath": "microsoft.extensions.configuration.usersecrets.7.0.0.nupkg.sha512" + "sha512": "sha512-JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==", + "path": "microsoft.extensions.diagnostics.abstractions/8.0.0", + "hashPath": "microsoft.extensions.diagnostics.abstractions.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.DependencyInjection/7.0.0": { + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==", - "path": "microsoft.extensions.dependencyinjection/7.0.0", - "hashPath": "microsoft.extensions.dependencyinjection.7.0.0.nupkg.sha512" + "sha512": "sha512-ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", + "path": "microsoft.extensions.fileproviders.abstractions/8.0.0", + "hashPath": "microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.DependencyInjection.Abstractions/7.0.0": { + "Microsoft.Extensions.FileProviders.Physical/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==", - "path": "microsoft.extensions.dependencyinjection.abstractions/7.0.0", - "hashPath": "microsoft.extensions.dependencyinjection.abstractions.7.0.0.nupkg.sha512" + "sha512": "sha512-UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==", + "path": "microsoft.extensions.fileproviders.physical/8.0.0", + "hashPath": "microsoft.extensions.fileproviders.physical.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.FileProviders.Abstractions/7.0.0": { + "Microsoft.Extensions.FileSystemGlobbing/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==", - "path": "microsoft.extensions.fileproviders.abstractions/7.0.0", - "hashPath": "microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512" + "sha512": "sha512-OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ==", + "path": "microsoft.extensions.filesystemglobbing/8.0.0", + "hashPath": "microsoft.extensions.filesystemglobbing.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.FileProviders.Physical/7.0.0": { + "Microsoft.Extensions.Hosting/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==", - "path": "microsoft.extensions.fileproviders.physical/7.0.0", - "hashPath": "microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512" + "sha512": "sha512-ItYHpdqVp5/oFLT5QqbopnkKlyFG9EW/9nhM6/yfObeKt6Su0wkBio6AizgRHGNwhJuAtlE5VIjow5JOTrip6w==", + "path": "microsoft.extensions.hosting/8.0.0", + "hashPath": "microsoft.extensions.hosting.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.FileSystemGlobbing/7.0.0": { + "Microsoft.Extensions.Hosting.Abstractions/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w==", - "path": "microsoft.extensions.filesystemglobbing/7.0.0", - "hashPath": "microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512" + "sha512": "sha512-AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==", + "path": "microsoft.extensions.hosting.abstractions/8.0.0", + "hashPath": "microsoft.extensions.hosting.abstractions.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Hosting/7.0.1": { + "Microsoft.Extensions.Hosting.Systemd/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-aoeMou6XSW84wiqd895OdaGyO9PfH6nohQJ0XBcshRDafbdIU6PQIVl8TpOCssPYq3ciRseP5064hbFyCR9J9w==", - "path": "microsoft.extensions.hosting/7.0.1", - "hashPath": "microsoft.extensions.hosting.7.0.1.nupkg.sha512" + "sha512": "sha512-z69pnSzenLkMYqho8lcNtu2RoEBFucBgCWaBkgWraGNGGMD42L3VRDq8qrEBB/gNdtcPCFKZdfyaXLAaH2T0+g==", + "path": "microsoft.extensions.hosting.systemd/8.0.0", + "hashPath": "microsoft.extensions.hosting.systemd.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Hosting.Abstractions/7.0.0": { + "Microsoft.Extensions.Hosting.WindowsServices/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-43n9Je09z0p/7ViPxfRqs5BUItRLNVh5b6JH40F2Agkh2NBsY/jpNYTtbCcxrHCsA3oRmbR6RJBzUutB4VZvNQ==", - "path": "microsoft.extensions.hosting.abstractions/7.0.0", - "hashPath": "microsoft.extensions.hosting.abstractions.7.0.0.nupkg.sha512" + "sha512": "sha512-8JIvU6R9fejZj/p6QATeDaNEPtIvLuwE5Uh7qyPx7tp+Fc9FqYaAe6ylU2dM839IUpmsU4ZVev956slZyrYEhQ==", + "path": "microsoft.extensions.hosting.windowsservices/8.0.0", + "hashPath": "microsoft.extensions.hosting.windowsservices.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Hosting.Systemd/7.0.0": { + "Microsoft.Extensions.Logging/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-jL11UaMqQsHCrw12Vm3n9c1uqDkHyw8hTrj/Xv/AtayWOE2/tFlfCqb07+RLlCaQqwqvOozv2QC6864QtFxy0g==", - "path": "microsoft.extensions.hosting.systemd/7.0.0", - "hashPath": "microsoft.extensions.hosting.systemd.7.0.0.nupkg.sha512" + "sha512": "sha512-tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", + "path": "microsoft.extensions.logging/8.0.0", + "hashPath": "microsoft.extensions.logging.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Hosting.WindowsServices/7.0.0": { + "Microsoft.Extensions.Logging.Abstractions/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-h601X96iHzMVU95DeN+QKIDeXcwRyjiYcS1I+il/4P76rai+Xk0cUtnnzQ5mR5fw9eRHZfJ6O/xlM5hrAX/gpg==", - "path": "microsoft.extensions.hosting.windowsservices/7.0.0", - "hashPath": "microsoft.extensions.hosting.windowsservices.7.0.0.nupkg.sha512" + "sha512": "sha512-arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", + "path": "microsoft.extensions.logging.abstractions/8.0.0", + "hashPath": "microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Logging/7.0.0": { + "Microsoft.Extensions.Logging.Configuration/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==", - "path": "microsoft.extensions.logging/7.0.0", - "hashPath": "microsoft.extensions.logging.7.0.0.nupkg.sha512" + "sha512": "sha512-ixXXV0G/12g6MXK65TLngYN9V5hQQRuV+fZi882WIoVJT7h5JvoYoxTEwCgdqwLjSneqh1O+66gM8sMr9z/rsQ==", + "path": "microsoft.extensions.logging.configuration/8.0.0", + "hashPath": "microsoft.extensions.logging.configuration.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Logging.Abstractions/7.0.0": { + "Microsoft.Extensions.Logging.Console/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw==", - "path": "microsoft.extensions.logging.abstractions/7.0.0", - "hashPath": "microsoft.extensions.logging.abstractions.7.0.0.nupkg.sha512" + "sha512": "sha512-e+48o7DztoYog+PY430lPxrM4mm3PbA6qucvQtUDDwVo4MO+ejMw7YGc/o2rnxbxj4isPxdfKFzTxvXMwAz83A==", + "path": "microsoft.extensions.logging.console/8.0.0", + "hashPath": "microsoft.extensions.logging.console.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Logging.Configuration/7.0.0": { + "Microsoft.Extensions.Logging.Debug/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-FLDA0HcffKA8ycoDQLJuCNGIE42cLWPxgdQGRBaSzZrYTkMBjnf9zrr8pGT06psLq9Q+RKWmmZczQ9bCrXEBcA==", - "path": "microsoft.extensions.logging.configuration/7.0.0", - "hashPath": "microsoft.extensions.logging.configuration.7.0.0.nupkg.sha512" + "sha512": "sha512-dt0x21qBdudHLW/bjMJpkixv858RRr8eSomgVbU8qljOyfrfDGi1JQvpF9w8S7ziRPtRKisuWaOwFxJM82GxeA==", + "path": "microsoft.extensions.logging.debug/8.0.0", + "hashPath": "microsoft.extensions.logging.debug.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Logging.Console/7.0.0": { + "Microsoft.Extensions.Logging.EventLog/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-qt5n8bHLZPUfuRnFxJKW5q9ZwOTncdh96rtWzWpX3Y/064MlxzCSw2ELF5Jlwdo+Y4wK3I47NmUTFsV7Sg8rqg==", - "path": "microsoft.extensions.logging.console/7.0.0", - "hashPath": "microsoft.extensions.logging.console.7.0.0.nupkg.sha512" + "sha512": "sha512-3X9D3sl7EmOu7vQp5MJrmIJBl5XSdOhZPYXUeFfYa6Nnm9+tok8x3t3IVPLhm7UJtPOU61ohFchw8rNm9tIYOQ==", + "path": "microsoft.extensions.logging.eventlog/8.0.0", + "hashPath": "microsoft.extensions.logging.eventlog.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Logging.Debug/7.0.0": { + "Microsoft.Extensions.Logging.EventSource/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-tFGGyPDpJ8ZdQdeckCArP7nZuoY3am9zJWuvp4OD1bHq65S0epW9BNHzAWeaIO4eYwWnGm1jRNt3vRciH8H6MA==", - "path": "microsoft.extensions.logging.debug/7.0.0", - "hashPath": "microsoft.extensions.logging.debug.7.0.0.nupkg.sha512" + "sha512": "sha512-oKcPMrw+luz2DUAKhwFXrmFikZWnyc8l2RKoQwqU3KIZZjcfoJE0zRHAnqATfhRZhtcbjl/QkiY2Xjxp0xu+6w==", + "path": "microsoft.extensions.logging.eventsource/8.0.0", + "hashPath": "microsoft.extensions.logging.eventsource.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Logging.EventLog/7.0.0": { + "Microsoft.Extensions.Options/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-Rp7cYL9xQRVTgjMl77H5YDxszAaO+mlA+KT0BnLSVhuCoKQQOOs1sSK2/x8BK2dZ/lKeAC/CVF+20Ef2dpKXwg==", - "path": "microsoft.extensions.logging.eventlog/7.0.0", - "hashPath": "microsoft.extensions.logging.eventlog.7.0.0.nupkg.sha512" + "sha512": "sha512-JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", + "path": "microsoft.extensions.options/8.0.0", + "hashPath": "microsoft.extensions.options.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Logging.EventSource/7.0.0": { + "Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-MxQXndQFviIyOPqyMeLNshXnmqcfzEHE2wWcr7BF1unSisJgouZ3tItnq+aJLGPojrW8OZSC/ZdRoR6wAq+c7w==", - "path": "microsoft.extensions.logging.eventsource/7.0.0", - "hashPath": "microsoft.extensions.logging.eventsource.7.0.0.nupkg.sha512" + "sha512": "sha512-0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==", + "path": "microsoft.extensions.options.configurationextensions/8.0.0", + "hashPath": "microsoft.extensions.options.configurationextensions.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Options/7.0.1": { + "Microsoft.Extensions.Primitives/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-pZRDYdN1FpepOIfHU62QoBQ6zdAoTvnjxFfqAzEd9Jhb2dfhA5i6jeTdgGgcgTWFRC7oT0+3XrbQu4LjvgX1Nw==", - "path": "microsoft.extensions.options/7.0.1", - "hashPath": "microsoft.extensions.options.7.0.1.nupkg.sha512" + "sha512": "sha512-bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==", + "path": "microsoft.extensions.primitives/8.0.0", + "hashPath": "microsoft.extensions.primitives.8.0.0.nupkg.sha512" }, - "Microsoft.Extensions.Options.ConfigurationExtensions/7.0.0": { + "MQTTnet/4.3.3.952": { "type": "package", "serviceable": true, - "sha512": "sha512-95UnxZkkFdXxF6vSrtJsMHCzkDeSMuUWGs2hDT54cX+U5eVajrCJ3qLyQRW+CtpTt5OJ8bmTvpQVHu1DLhH+cA==", - "path": "microsoft.extensions.options.configurationextensions/7.0.0", - "hashPath": "microsoft.extensions.options.configurationextensions.7.0.0.nupkg.sha512" + "sha512": "sha512-6AFOGkdnqzIfvaPbTnPLYvBibBdGfJlTTWonIZp+VHpRy6fEl+KT9Z1AG1/4AaDAw5TJ0WpqCmrV9TVUWkLffg==", + "path": "mqttnet/4.3.3.952", + "hashPath": "mqttnet.4.3.3.952.nupkg.sha512" }, - "Microsoft.Extensions.Primitives/7.0.0": { + "MQTTnet.Extensions.ManagedClient/4.3.3.952": { "type": "package", "serviceable": true, - "sha512": "sha512-um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==", - "path": "microsoft.extensions.primitives/7.0.0", - "hashPath": "microsoft.extensions.primitives.7.0.0.nupkg.sha512" + "sha512": "sha512-MiW1BOEkJcJihJlE6qPdxWf62z8X6wrfekuN4OGOr0hRYUsLCEa16Uxm7trT4mTO76KiTfJrn78nRtFFMZzxXw==", + "path": "mqttnet.extensions.managedclient/4.3.3.952", + "hashPath": "mqttnet.extensions.managedclient.4.3.3.952.nupkg.sha512" }, - "MQTTnet/4.1.4.563": { + "runtime.linux-arm.runtime.native.System.IO.Ports/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-gO9segUcKyQJcjV7w7OOdoAIkec7cUN65vEhYutbdWcj4rbtz/oL/RDvQVVbameXc6ChkjKx7/HbO+R8ejAUZQ==", - "path": "mqttnet/4.1.4.563", - "hashPath": "mqttnet.4.1.4.563.nupkg.sha512" + "sha512": "sha512-gK720fg6HemDg8sXcfy+xCMZ9+hF78Gc7BmREbmkS4noqlu1BAr9qZtuWGhLzFjBfgecmdtl4+SYVwJ1VneZBQ==", + "path": "runtime.linux-arm.runtime.native.system.io.ports/8.0.0", + "hashPath": "runtime.linux-arm.runtime.native.system.io.ports.8.0.0.nupkg.sha512" }, - "runtime.linux-arm.runtime.native.System.IO.Ports/7.0.0": { + "runtime.linux-arm64.runtime.native.System.IO.Ports/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-CBvgRaF+M0xGLDv2Geb/0v0LEADheH8aK72GRAUJdnqnJVsQO60ki1XO8M3keEhnjm+T5NvLm41pNXAVYAPiSg==", - "path": "runtime.linux-arm.runtime.native.system.io.ports/7.0.0", - "hashPath": "runtime.linux-arm.runtime.native.system.io.ports.7.0.0.nupkg.sha512" + "sha512": "sha512-KYG6/3ojhEWbb3FwQAKgGWPHrY+HKUXXdVjJlrtyCLn3EMcNTaNcPadb2c0ndQzixZSmAxZKopXJr0nLwhOrpQ==", + "path": "runtime.linux-arm64.runtime.native.system.io.ports/8.0.0", + "hashPath": "runtime.linux-arm64.runtime.native.system.io.ports.8.0.0.nupkg.sha512" }, - "runtime.linux-arm64.runtime.native.System.IO.Ports/7.0.0": { + "runtime.linux-x64.runtime.native.System.IO.Ports/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-5VCyRCtCIYU8FR/W8oo7ouFuJ8tmAg9ddsuXhfCKZfZrbaVZSKxkmNBa6fxkfYPueD0jQfOvwFBmE5c6zalCSw==", - "path": "runtime.linux-arm64.runtime.native.system.io.ports/7.0.0", - "hashPath": "runtime.linux-arm64.runtime.native.system.io.ports.7.0.0.nupkg.sha512" + "sha512": "sha512-Wnw5vhA4mgGbIFoo6l9Fk3iEcwRSq49a1aKwJgXUCUtEQLCSUDjTGSxqy/oMUuOyyn7uLHsH8KgZzQ1y3lReiQ==", + "path": "runtime.linux-x64.runtime.native.system.io.ports/8.0.0", + "hashPath": "runtime.linux-x64.runtime.native.system.io.ports.8.0.0.nupkg.sha512" }, - "runtime.linux-x64.runtime.native.System.IO.Ports/7.0.0": { + "runtime.native.System.IO.Ports/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-DV9dWDUs23OoZqMWl5IhLr3D+b9koDiSHQxFKdYgWnQbnthv8c/yDjrlrI8nMrDc71RAKCO8jlUojzuPMX04gg==", - "path": "runtime.linux-x64.runtime.native.system.io.ports/7.0.0", - "hashPath": "runtime.linux-x64.runtime.native.system.io.ports.7.0.0.nupkg.sha512" + "sha512": "sha512-Ee7Sz5llLpTgyKIWzKI/GeuRSbFkOABgJRY00SqTY0OkTYtkB+9l5rFZfE7fxPA3c22RfytCBYkUdAkcmwMjQg==", + "path": "runtime.native.system.io.ports/8.0.0", + "hashPath": "runtime.native.system.io.ports.8.0.0.nupkg.sha512" }, - "runtime.native.System.IO.Ports/7.0.0": { + "runtime.osx-arm64.runtime.native.System.IO.Ports/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-L4Ivegqc3B0Fee7VifFy2JST9nndm+uvJ0viLIZUaImDfnr+JmRin9Tbqd56KuMtm0eVxHpNOWZBPtKrA/1h5Q==", - "path": "runtime.native.system.io.ports/7.0.0", - "hashPath": "runtime.native.system.io.ports.7.0.0.nupkg.sha512" + "sha512": "sha512-rbUBLAaFW9oVkbsb0+XSrAo2QdhBeAyzLl5KQ6Oci9L/u626uXGKInsVJG6B9Z5EO8bmplC8tsMiaHK8wOBZ+w==", + "path": "runtime.osx-arm64.runtime.native.system.io.ports/8.0.0", + "hashPath": "runtime.osx-arm64.runtime.native.system.io.ports.8.0.0.nupkg.sha512" }, - "runtime.osx-arm64.runtime.native.System.IO.Ports/7.0.0": { + "runtime.osx-x64.runtime.native.System.IO.Ports/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-jFwh4sKSXZ7al5XrItEO4GdGWa6XNxvNx+LhEHjrSzOwawO1znwJ+Dy+VjnrkySX9Qi4bnHNLoiqOXbqMuka4g==", - "path": "runtime.osx-arm64.runtime.native.system.io.ports/7.0.0", - "hashPath": "runtime.osx-arm64.runtime.native.system.io.ports.7.0.0.nupkg.sha512" + "sha512": "sha512-IcfB4jKtM9pkzP9OpYelEcUX1MiDt0IJPBh3XYYdEISFF+6Mc+T8WWi0dr9wVh1gtcdVjubVEIBgB8BHESlGfQ==", + "path": "runtime.osx-x64.runtime.native.system.io.ports/8.0.0", + "hashPath": "runtime.osx-x64.runtime.native.system.io.ports.8.0.0.nupkg.sha512" }, - "runtime.osx-x64.runtime.native.System.IO.Ports/7.0.0": { + "Serilog/3.1.1": { "type": "package", "serviceable": true, - "sha512": "sha512-X4LrHEfke/z9+z+iuVr35NlkhdZldY8JGNMYUN+sfPK/U/6TcE+vP44I0Yv0ir1v0bqIzq3v6Qdv1c1vmp8s4g==", - "path": "runtime.osx-x64.runtime.native.system.io.ports/7.0.0", - "hashPath": "runtime.osx-x64.runtime.native.system.io.ports.7.0.0.nupkg.sha512" + "sha512": "sha512-P6G4/4Kt9bT635bhuwdXlJ2SCqqn2nhh4gqFqQueCOr9bK/e7W9ll/IoX1Ter948cV2Z/5+5v8pAfJYUISY03A==", + "path": "serilog/3.1.1", + "hashPath": "serilog.3.1.1.nupkg.sha512" }, - "Serilog/2.10.0": { + "Serilog.Extensions.Hosting/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-+QX0hmf37a0/OZLxM3wL7V6/ADvC1XihXN4Kq/p6d8lCPfgkRdiuhbWlMaFjR9Av0dy5F0+MBeDmDdRZN/YwQA==", - "path": "serilog/2.10.0", - "hashPath": "serilog.2.10.0.nupkg.sha512" + "sha512": "sha512-db0OcbWeSCvYQkHWu6n0v40N4kKaTAXNjlM3BKvcbwvNzYphQFcBR+36eQ/7hMMwOkJvAyLC2a9/jNdUL5NjtQ==", + "path": "serilog.extensions.hosting/8.0.0", + "hashPath": "serilog.extensions.hosting.8.0.0.nupkg.sha512" }, - "Serilog.Extensions.Hosting/5.0.1": { + "Serilog.Extensions.Logging/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-o0VUyt3npAqOJaZ6CiWLFeLYs3CYJwfcAqaUqprzsmj7qYIvorcn8cZLVR8AQX6vzX7gee2bD0sQeA17iO2/Aw==", - "path": "serilog.extensions.hosting/5.0.1", - "hashPath": "serilog.extensions.hosting.5.0.1.nupkg.sha512" + "sha512": "sha512-YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==", + "path": "serilog.extensions.logging/8.0.0", + "hashPath": "serilog.extensions.logging.8.0.0.nupkg.sha512" }, - "Serilog.Extensions.Logging/3.1.0": { + "Serilog.Sinks.Console/5.0.1": { "type": "package", "serviceable": true, - "sha512": "sha512-IWfem7wfrFbB3iw1OikqPFNPEzfayvDuN4WP7Ue1AVFskalMByeWk3QbtUXQR34SBkv1EbZ3AySHda/ErDgpcg==", - "path": "serilog.extensions.logging/3.1.0", - "hashPath": "serilog.extensions.logging.3.1.0.nupkg.sha512" + "sha512": "sha512-6Jt8jl9y2ey8VV7nVEUAyjjyxjAQuvd5+qj4XYAT9CwcsvR70HHULGBeD+K2WCALFXf7CFsNQT4lON6qXcu2AA==", + "path": "serilog.sinks.console/5.0.1", + "hashPath": "serilog.sinks.console.5.0.1.nupkg.sha512" }, - "Serilog.Sinks.Console/4.1.0": { + "SonarAnalyzer.CSharp/9.20.0.85982": { "type": "package", "serviceable": true, - "sha512": "sha512-K6N5q+5fetjnJPvCmkWOpJ/V8IEIoMIB1s86OzBrbxwTyHxdx3pmz4H+8+O/Dc/ftUX12DM1aynx/dDowkwzqg==", - "path": "serilog.sinks.console/4.1.0", - "hashPath": "serilog.sinks.console.4.1.0.nupkg.sha512" + "sha512": "sha512-c0IYtFg4mYusTafTy0Bs5wev45vRKNShkuoWyQyPMbC6imEFHL7tY/7xbbUJd6JNLYx5vP8wyi2LgiBsMHqb2Q==", + "path": "sonaranalyzer.csharp/9.20.0.85982", + "hashPath": "sonaranalyzer.csharp.9.20.0.85982.nupkg.sha512" }, - "System.Diagnostics.DiagnosticSource/7.0.1": { + "System.Diagnostics.DiagnosticSource/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-T9SLFxzDp0SreCffRDXSAS5G+lq6E8qP4knHS2IBjwCdx2KEvGnGZsq7gFpselYOda7l6gXsJMD93TQsFj/URA==", - "path": "system.diagnostics.diagnosticsource/7.0.1", - "hashPath": "system.diagnostics.diagnosticsource.7.0.1.nupkg.sha512" + "sha512": "sha512-c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==", + "path": "system.diagnostics.diagnosticsource/8.0.0", + "hashPath": "system.diagnostics.diagnosticsource.8.0.0.nupkg.sha512" }, - "System.Diagnostics.EventLog/7.0.0": { + "System.Diagnostics.EventLog/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-eUDP47obqQm3SFJfP6z+Fx2nJ4KKTQbXB4Q9Uesnzw9SbYdhjyoGXuvDn/gEmFY6N5Z3bFFbpAQGA7m6hrYJCw==", - "path": "system.diagnostics.eventlog/7.0.0", - "hashPath": "system.diagnostics.eventlog.7.0.0.nupkg.sha512" + "sha512": "sha512-fdYxcRjQqTTacKId/2IECojlDSFvp7LP5N78+0z/xH7v/Tuw5ZAxu23Y6PTCRinqyu2ePx+Gn1098NC6jM6d+A==", + "path": "system.diagnostics.eventlog/8.0.0", + "hashPath": "system.diagnostics.eventlog.8.0.0.nupkg.sha512" }, - "System.IO.Ports/7.0.0": { + "System.IO.Ports/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-0nWQjM5IofaIGpvkifN+LLuYwBG6BHlpmphLhhOJepcW12G8qToGuNDRgBzeTVBZzp33wVsESSZ8hUOCfq+8QA==", - "path": "system.io.ports/7.0.0", - "hashPath": "system.io.ports.7.0.0.nupkg.sha512" + "sha512": "sha512-MaiPbx2/QXZc62gm/DrajRrGPG1lU4m08GWMoWiymPYM+ba4kfACp2PbiYpqJ4QiFGhHD00zX3RoVDTucjWe9g==", + "path": "system.io.ports/8.0.0", + "hashPath": "system.io.ports.8.0.0.nupkg.sha512" }, - "System.ServiceProcess.ServiceController/7.0.0": { + "System.ServiceProcess.ServiceController/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-7W5e7z2LSsxEvnix0F4pQuo22l46vx69+VHZyN9vtMFTtB2kWInimBmhbFXKIv1hK2O2D4hGnBn4bAZGzse8PQ==", - "path": "system.serviceprocess.servicecontroller/7.0.0", - "hashPath": "system.serviceprocess.servicecontroller.7.0.0.nupkg.sha512" + "sha512": "sha512-jtYVG3bpw2n/NvNnP2g/JLri0D4UtfusTvLeH6cZPNAEjJXJVGspS3wLgVvjNbm+wjaYkFgsXejMTocV1T5DIQ==", + "path": "system.serviceprocess.servicecontroller/8.0.0", + "hashPath": "system.serviceprocess.servicecontroller.8.0.0.nupkg.sha512" }, - "System.Text.Encodings.Web/7.0.0": { + "System.Text.Encodings.Web/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==", - "path": "system.text.encodings.web/7.0.0", - "hashPath": "system.text.encodings.web.7.0.0.nupkg.sha512" + "sha512": "sha512-yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==", + "path": "system.text.encodings.web/8.0.0", + "hashPath": "system.text.encodings.web.8.0.0.nupkg.sha512" }, - "System.Text.Json/7.0.0": { + "System.Text.Json/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==", - "path": "system.text.json/7.0.0", - "hashPath": "system.text.json.7.0.0.nupkg.sha512" + "sha512": "sha512-OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==", + "path": "system.text.json/8.0.0", + "hashPath": "system.text.json.8.0.0.nupkg.sha512" }, "InMemoryBus/1.0.0": { "type": "project", diff --git a/addon/Easywave2MQTT/app/Easywave2Mqtt.dll b/addon/Easywave2MQTT/app/Easywave2Mqtt.dll index 42434c1..860b9fa 100644 Binary files a/addon/Easywave2MQTT/app/Easywave2Mqtt.dll and b/addon/Easywave2MQTT/app/Easywave2Mqtt.dll differ diff --git a/addon/Easywave2MQTT/app/Easywave2Mqtt.exe b/addon/Easywave2MQTT/app/Easywave2Mqtt.exe index 6a70a92..bb77cc3 100644 Binary files a/addon/Easywave2MQTT/app/Easywave2Mqtt.exe and b/addon/Easywave2MQTT/app/Easywave2Mqtt.exe differ diff --git a/addon/Easywave2MQTT/app/Easywave2Mqtt.runtimeconfig.json b/addon/Easywave2MQTT/app/Easywave2Mqtt.runtimeconfig.json index 398903e..d784515 100644 --- a/addon/Easywave2MQTT/app/Easywave2Mqtt.runtimeconfig.json +++ b/addon/Easywave2MQTT/app/Easywave2Mqtt.runtimeconfig.json @@ -1,12 +1,13 @@ { "runtimeOptions": { - "tfm": "net7.0", + "tfm": "net8.0", "framework": { "name": "Microsoft.NETCore.App", - "version": "7.0.0" + "version": "8.0.0" }, "configProperties": { - "System.Reflection.Metadata.MetadataUpdater.IsSupported": false + "System.Reflection.Metadata.MetadataUpdater.IsSupported": false, + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false } } } \ No newline at end of file diff --git a/addon/Easywave2MQTT/app/InMemoryBus.dll b/addon/Easywave2MQTT/app/InMemoryBus.dll index 288055f..b73d1e2 100644 Binary files a/addon/Easywave2MQTT/app/InMemoryBus.dll and b/addon/Easywave2MQTT/app/InMemoryBus.dll differ diff --git a/addon/Easywave2MQTT/app/JetBrains.Annotations.dll b/addon/Easywave2MQTT/app/JetBrains.Annotations.dll deleted file mode 100644 index 0749354..0000000 Binary files a/addon/Easywave2MQTT/app/JetBrains.Annotations.dll and /dev/null differ diff --git a/addon/Easywave2MQTT/app/MQTTnet.Extensions.ManagedClient.dll b/addon/Easywave2MQTT/app/MQTTnet.Extensions.ManagedClient.dll new file mode 100644 index 0000000..aefae14 Binary files /dev/null and b/addon/Easywave2MQTT/app/MQTTnet.Extensions.ManagedClient.dll differ diff --git a/addon/Easywave2MQTT/app/MQTTnet.dll b/addon/Easywave2MQTT/app/MQTTnet.dll index 325aa19..801151b 100644 Binary files a/addon/Easywave2MQTT/app/MQTTnet.dll and b/addon/Easywave2MQTT/app/MQTTnet.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.Abstractions.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.Abstractions.dll index 058b124..a5ab313 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.Abstractions.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.Abstractions.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.Binder.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.Binder.dll index 3976a23..19df35e 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.Binder.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.Binder.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.CommandLine.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.CommandLine.dll index eb3333a..2aa287c 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.CommandLine.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.CommandLine.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.EnvironmentVariables.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.EnvironmentVariables.dll index 9e0eec9..09657dd 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.EnvironmentVariables.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.EnvironmentVariables.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.FileExtensions.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.FileExtensions.dll index def889a..4efc1a5 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.FileExtensions.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.FileExtensions.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.Json.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.Json.dll index e8bdcc1..296db6a 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.Json.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.Json.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.UserSecrets.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.UserSecrets.dll index 308ea3f..e771695 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.UserSecrets.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.UserSecrets.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.dll index fd14a98..d3e5c22 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Configuration.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.DependencyInjection.Abstractions.dll index 048ba41..0b3c8e9 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.DependencyInjection.Abstractions.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.DependencyInjection.Abstractions.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.DependencyInjection.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.DependencyInjection.dll index 2dcd31b..c87ed43 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.DependencyInjection.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.DependencyInjection.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Diagnostics.Abstractions.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Diagnostics.Abstractions.dll new file mode 100644 index 0000000..85d852e Binary files /dev/null and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Diagnostics.Abstractions.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Diagnostics.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Diagnostics.dll new file mode 100644 index 0000000..5b784c8 Binary files /dev/null and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Diagnostics.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.FileProviders.Abstractions.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.FileProviders.Abstractions.dll index dc9b7ee..f907206 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.FileProviders.Abstractions.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.FileProviders.Abstractions.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.FileProviders.Physical.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.FileProviders.Physical.dll index b186402..6fb7f47 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.FileProviders.Physical.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.FileProviders.Physical.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.FileSystemGlobbing.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.FileSystemGlobbing.dll index 683ac38..e590735 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.FileSystemGlobbing.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.FileSystemGlobbing.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.Abstractions.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.Abstractions.dll index 6c41818..c769057 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.Abstractions.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.Abstractions.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.Systemd.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.Systemd.dll index 4ce1e4e..67f64c9 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.Systemd.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.Systemd.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.WindowsServices.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.WindowsServices.dll index caa6f7d..7132780 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.WindowsServices.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.WindowsServices.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.dll index 6574b85..c235ca0 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Hosting.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Abstractions.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Abstractions.dll index 41909d2..085f415 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Abstractions.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Abstractions.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Configuration.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Configuration.dll index 6b60164..cbea37f 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Configuration.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Configuration.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Console.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Console.dll index c271287..a722e34 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Console.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Console.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Debug.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Debug.dll index 830cb61..38d93db 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Debug.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.Debug.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.EventLog.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.EventLog.dll index cb66859..a6c6931 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.EventLog.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.EventLog.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.EventSource.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.EventSource.dll index 1c2f13e..56c6f07 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.EventSource.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.EventSource.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.dll index f21b68b..75e0fbf 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Logging.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Options.ConfigurationExtensions.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Options.ConfigurationExtensions.dll index 7473029..cbb29a1 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Options.ConfigurationExtensions.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Options.ConfigurationExtensions.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Options.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Options.dll index 09a4ad5..69c35a5 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Options.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Options.dll differ diff --git a/addon/Easywave2MQTT/app/Microsoft.Extensions.Primitives.dll b/addon/Easywave2MQTT/app/Microsoft.Extensions.Primitives.dll index 9953143..c24f2a0 100644 Binary files a/addon/Easywave2MQTT/app/Microsoft.Extensions.Primitives.dll and b/addon/Easywave2MQTT/app/Microsoft.Extensions.Primitives.dll differ diff --git a/addon/Easywave2MQTT/app/Serilog.Extensions.Hosting.dll b/addon/Easywave2MQTT/app/Serilog.Extensions.Hosting.dll index 37eb2ec..2204d10 100644 Binary files a/addon/Easywave2MQTT/app/Serilog.Extensions.Hosting.dll and b/addon/Easywave2MQTT/app/Serilog.Extensions.Hosting.dll differ diff --git a/addon/Easywave2MQTT/app/Serilog.Extensions.Logging.dll b/addon/Easywave2MQTT/app/Serilog.Extensions.Logging.dll index 27dc8cf..f2f78c7 100644 Binary files a/addon/Easywave2MQTT/app/Serilog.Extensions.Logging.dll and b/addon/Easywave2MQTT/app/Serilog.Extensions.Logging.dll differ diff --git a/addon/Easywave2MQTT/app/Serilog.Sinks.Console.dll b/addon/Easywave2MQTT/app/Serilog.Sinks.Console.dll index eb3745f..638da35 100644 Binary files a/addon/Easywave2MQTT/app/Serilog.Sinks.Console.dll and b/addon/Easywave2MQTT/app/Serilog.Sinks.Console.dll differ diff --git a/addon/Easywave2MQTT/app/Serilog.dll b/addon/Easywave2MQTT/app/Serilog.dll index 78688c8..50bdb5a 100644 Binary files a/addon/Easywave2MQTT/app/Serilog.dll and b/addon/Easywave2MQTT/app/Serilog.dll differ diff --git a/addon/Easywave2MQTT/app/System.Diagnostics.EventLog.dll b/addon/Easywave2MQTT/app/System.Diagnostics.EventLog.dll index 74b4f9d..f293ce4 100644 Binary files a/addon/Easywave2MQTT/app/System.Diagnostics.EventLog.dll and b/addon/Easywave2MQTT/app/System.Diagnostics.EventLog.dll differ diff --git a/addon/Easywave2MQTT/app/System.IO.Ports.dll b/addon/Easywave2MQTT/app/System.IO.Ports.dll index d5dabe7..a1366fa 100644 Binary files a/addon/Easywave2MQTT/app/System.IO.Ports.dll and b/addon/Easywave2MQTT/app/System.IO.Ports.dll differ diff --git a/addon/Easywave2MQTT/app/System.ServiceProcess.ServiceController.dll b/addon/Easywave2MQTT/app/System.ServiceProcess.ServiceController.dll index d18c942..4e9e1b2 100644 Binary files a/addon/Easywave2MQTT/app/System.ServiceProcess.ServiceController.dll and b/addon/Easywave2MQTT/app/System.ServiceProcess.ServiceController.dll differ diff --git a/addon/Easywave2MQTT/app/appsettings.json b/addon/Easywave2MQTT/app/appsettings.json index 1117e80..4ed38a1 100644 --- a/addon/Easywave2MQTT/app/appsettings.json +++ b/addon/Easywave2MQTT/app/appsettings.json @@ -1,14 +1,12 @@ { - //These options get overriden by the addon options "LogLevel": "Information", "SerialPort": "/dev/ttyUSB0", "EasywaveActionTimeout": "500", "EasywaveRepeatTimeout": "80", - "MQTTServer": "192.168.0.13", + "MQTTServer": "192.168.1.13", "MQTTPort": "1883", "MQTTUser": "mqtt", "MQTTPassword": "mqtt", - //These options need to be altered manually, until I figure out how to do it from Home Assistant. "Devices": [ { "Id": "229ad6", @@ -53,14 +51,14 @@ "Buttons": [ "A", "B" ] }, { - "Id": "229630", + "Id": "22963e", "Type": "Transmitter", "Name": "Schakelaar Hal Badkamer", "Area": "Hal", "Buttons": [ "A", "B" ] }, { - "Id": "22963e", + "Id": "229630", "Type": "Transmitter", "Name": "Schakelaar Hal Nina", "Area": "Hal", @@ -204,6 +202,30 @@ "KeyCode": "A" } ] + }, + { + "Id": "18df10", + "Type": "Transmitter", + "Name": "Buro OG", + "Area": "Living", + "Buttons": [ "A", "B", "C" ] + }, + { + "Id": "buro", + "Type": "Blind", + "Name": "Buro", + "Area": "Living", + "Subscriptions": [ + { + "Address": "18df10", + "KeyCode": "A" + }, + { + "Address": "000011", + "KeyCode": "A", + "CanSend": "true" + } + ] } ] } diff --git a/addon/Easywave2MQTT/app/runtimes/linux-arm/native/libSystem.IO.Ports.Native.so b/addon/Easywave2MQTT/app/runtimes/linux-arm/native/libSystem.IO.Ports.Native.so index a614904..8556bfe 100644 Binary files a/addon/Easywave2MQTT/app/runtimes/linux-arm/native/libSystem.IO.Ports.Native.so and b/addon/Easywave2MQTT/app/runtimes/linux-arm/native/libSystem.IO.Ports.Native.so differ diff --git a/addon/Easywave2MQTT/app/runtimes/linux-arm64/native/libSystem.IO.Ports.Native.so b/addon/Easywave2MQTT/app/runtimes/linux-arm64/native/libSystem.IO.Ports.Native.so index 0082c61..011e88a 100644 Binary files a/addon/Easywave2MQTT/app/runtimes/linux-arm64/native/libSystem.IO.Ports.Native.so and b/addon/Easywave2MQTT/app/runtimes/linux-arm64/native/libSystem.IO.Ports.Native.so differ diff --git a/addon/Easywave2MQTT/app/runtimes/linux-x64/native/libSystem.IO.Ports.Native.so b/addon/Easywave2MQTT/app/runtimes/linux-x64/native/libSystem.IO.Ports.Native.so index 8c12532..291295f 100644 Binary files a/addon/Easywave2MQTT/app/runtimes/linux-x64/native/libSystem.IO.Ports.Native.so and b/addon/Easywave2MQTT/app/runtimes/linux-x64/native/libSystem.IO.Ports.Native.so differ diff --git a/addon/Easywave2MQTT/app/runtimes/osx-arm64/native/libSystem.IO.Ports.Native.dylib b/addon/Easywave2MQTT/app/runtimes/osx-arm64/native/libSystem.IO.Ports.Native.dylib index 7674a52..79781a5 100644 Binary files a/addon/Easywave2MQTT/app/runtimes/osx-arm64/native/libSystem.IO.Ports.Native.dylib and b/addon/Easywave2MQTT/app/runtimes/osx-arm64/native/libSystem.IO.Ports.Native.dylib differ diff --git a/addon/Easywave2MQTT/app/runtimes/osx-x64/native/libSystem.IO.Ports.Native.dylib b/addon/Easywave2MQTT/app/runtimes/osx-x64/native/libSystem.IO.Ports.Native.dylib index 69f8e76..86b8522 100644 Binary files a/addon/Easywave2MQTT/app/runtimes/osx-x64/native/libSystem.IO.Ports.Native.dylib and b/addon/Easywave2MQTT/app/runtimes/osx-x64/native/libSystem.IO.Ports.Native.dylib differ diff --git a/addon/Easywave2MQTT/app/runtimes/unix/lib/net7.0/System.IO.Ports.dll b/addon/Easywave2MQTT/app/runtimes/unix/lib/net7.0/System.IO.Ports.dll deleted file mode 100644 index 52dd1e9..0000000 Binary files a/addon/Easywave2MQTT/app/runtimes/unix/lib/net7.0/System.IO.Ports.dll and /dev/null differ diff --git a/addon/Easywave2MQTT/app/runtimes/unix/lib/net8.0/System.IO.Ports.dll b/addon/Easywave2MQTT/app/runtimes/unix/lib/net8.0/System.IO.Ports.dll new file mode 100644 index 0000000..56ce09e Binary files /dev/null and b/addon/Easywave2MQTT/app/runtimes/unix/lib/net8.0/System.IO.Ports.dll differ diff --git a/addon/Easywave2MQTT/app/runtimes/win/lib/net7.0/System.Diagnostics.EventLog.dll b/addon/Easywave2MQTT/app/runtimes/win/lib/net7.0/System.Diagnostics.EventLog.dll deleted file mode 100644 index eb0f2aa..0000000 Binary files a/addon/Easywave2MQTT/app/runtimes/win/lib/net7.0/System.Diagnostics.EventLog.dll and /dev/null differ diff --git a/addon/Easywave2MQTT/app/runtimes/win/lib/net7.0/System.IO.Ports.dll b/addon/Easywave2MQTT/app/runtimes/win/lib/net7.0/System.IO.Ports.dll deleted file mode 100644 index d3530de..0000000 Binary files a/addon/Easywave2MQTT/app/runtimes/win/lib/net7.0/System.IO.Ports.dll and /dev/null differ diff --git a/addon/Easywave2MQTT/app/runtimes/win/lib/net7.0/System.ServiceProcess.ServiceController.dll b/addon/Easywave2MQTT/app/runtimes/win/lib/net7.0/System.ServiceProcess.ServiceController.dll deleted file mode 100644 index afde528..0000000 Binary files a/addon/Easywave2MQTT/app/runtimes/win/lib/net7.0/System.ServiceProcess.ServiceController.dll and /dev/null differ diff --git a/addon/Easywave2MQTT/app/runtimes/win/lib/net7.0/System.Diagnostics.EventLog.Messages.dll b/addon/Easywave2MQTT/app/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll similarity index 98% rename from addon/Easywave2MQTT/app/runtimes/win/lib/net7.0/System.Diagnostics.EventLog.Messages.dll rename to addon/Easywave2MQTT/app/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll index 3b971e3..a8d91f3 100644 Binary files a/addon/Easywave2MQTT/app/runtimes/win/lib/net7.0/System.Diagnostics.EventLog.Messages.dll and b/addon/Easywave2MQTT/app/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll differ diff --git a/addon/Easywave2MQTT/app/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll b/addon/Easywave2MQTT/app/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll new file mode 100644 index 0000000..33066bd Binary files /dev/null and b/addon/Easywave2MQTT/app/runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll differ diff --git a/addon/Easywave2MQTT/app/runtimes/win/lib/net8.0/System.IO.Ports.dll b/addon/Easywave2MQTT/app/runtimes/win/lib/net8.0/System.IO.Ports.dll new file mode 100644 index 0000000..f1ec0ae Binary files /dev/null and b/addon/Easywave2MQTT/app/runtimes/win/lib/net8.0/System.IO.Ports.dll differ diff --git a/addon/Easywave2MQTT/app/runtimes/win/lib/net8.0/System.ServiceProcess.ServiceController.dll b/addon/Easywave2MQTT/app/runtimes/win/lib/net8.0/System.ServiceProcess.ServiceController.dll new file mode 100644 index 0000000..efb3425 Binary files /dev/null and b/addon/Easywave2MQTT/app/runtimes/win/lib/net8.0/System.ServiceProcess.ServiceController.dll differ diff --git a/addon/Easywave2MQTT/config.yaml b/addon/Easywave2MQTT/config.yaml index cf6b5cb..51f379f 100644 --- a/addon/Easywave2MQTT/config.yaml +++ b/addon/Easywave2MQTT/config.yaml @@ -1,15 +1,17 @@ name: "Easywave2MQTT" -description: "Support Easywave devices in Home Assistant using MQTT" -version: "0.7.1" -url: "https://github.com/marcselis/Easywave2MQTT" +version: "1.0.0" slug: "easywave2mqtt" -init: false +description: "Support Easywave devices (Buttons, Lights & Blinds) in Home Assistant using MQTT" arch: - aarch64 - amd64 - armhf - armv7 - i386 +url: "https://github.com/marcselis/Easywave2MQTT" +startup: "application" +boot: "auto" +init: false uart: true options: loglevel: "Information" diff --git a/src/Easywave2Mqtt/Configuration/Device.cs b/src/Easywave2Mqtt/Configuration/Device.cs index 1a1ac42..184dbb8 100644 --- a/src/Easywave2Mqtt/Configuration/Device.cs +++ b/src/Easywave2Mqtt/Configuration/Device.cs @@ -3,7 +3,6 @@ namespace Easywave2Mqtt.Configuration { - [UsedImplicitly(ImplicitUseTargetFlags.WithMembers)] public class Device { public string? Id { get; set; } diff --git a/src/Easywave2Mqtt/Configuration/Settings.cs b/src/Easywave2Mqtt/Configuration/Settings.cs index 78c3931..bec8210 100644 --- a/src/Easywave2Mqtt/Configuration/Settings.cs +++ b/src/Easywave2Mqtt/Configuration/Settings.cs @@ -4,7 +4,6 @@ namespace Easywave2Mqtt.Configuration { - [UsedImplicitly(ImplicitUseTargetFlags.WithMembers)] public class Settings { public LogEventLevel LogLevel { get; set; } diff --git a/src/Easywave2Mqtt/Configuration/Subscription.cs b/src/Easywave2Mqtt/Configuration/Subscription.cs index 924f5d9..407f900 100644 --- a/src/Easywave2Mqtt/Configuration/Subscription.cs +++ b/src/Easywave2Mqtt/Configuration/Subscription.cs @@ -2,7 +2,6 @@ namespace Easywave2Mqtt.Configuration { - [UsedImplicitly(ImplicitUseTargetFlags.WithMembers)] public class Subscription { public string? Address { get; set; } diff --git a/src/Easywave2Mqtt/Easywave/EasywaveBlind.cs b/src/Easywave2Mqtt/Easywave/EasywaveBlind.cs index 669bf32..46d5e7d 100644 --- a/src/Easywave2Mqtt/Easywave/EasywaveBlind.cs +++ b/src/Easywave2Mqtt/Easywave/EasywaveBlind.cs @@ -7,7 +7,9 @@ public partial class EasywaveBlind(string id, string name, ILogger _logger = logger; private BlindState _state = BlindState.Unknown; +#pragma warning disable S4487 // Unread "private" fields should be removed private Task? _timer = null; +#pragma warning restore S4487 // Unread "private" fields should be removed private CancellationTokenSource? _cancellationTokenSource = null; public string Name { get; set; } = name; @@ -58,11 +60,7 @@ public async Task HandleCommand(string command) break; case Cover.StopCommand: await RequestSend(trigger.Address, (char)(trigger.KeyCode + 2)).ConfigureAwait(false); - if (_cancellationTokenSource != null) - { - _cancellationTokenSource.Cancel(); - _cancellationTokenSource.Dispose(); - } + StopDelay(); State = BlindState.Stopped; break; } @@ -72,13 +70,20 @@ public async Task HandleCommand(string command) private void DelayState(BlindState newState) { - if (_cancellationTokenSource != null) + StopDelay(); + _cancellationTokenSource = new CancellationTokenSource(); + _timer = Task.Delay(10000, _cancellationTokenSource.Token).ContinueWith(_ => State = newState, _cancellationTokenSource.Token); + } + + private void StopDelay() + { + if (_cancellationTokenSource != null && !_cancellationTokenSource.IsCancellationRequested) { + _timer = null; _cancellationTokenSource.Cancel(); _cancellationTokenSource.Dispose(); + _cancellationTokenSource = null; } - _cancellationTokenSource = new CancellationTokenSource(); - _timer = Task.Delay(10000, _cancellationTokenSource.Token).ContinueWith(_ => State=newState, _cancellationTokenSource.Token); } public Task HandleEvent(string address, char keyCode, string action) diff --git a/src/Easywave2Mqtt/Easywave/EldatRx09Transceiver.cs b/src/Easywave2Mqtt/Easywave/EldatRx09Transceiver.cs index 6361241..3bf72fd 100644 --- a/src/Easywave2Mqtt/Easywave/EldatRx09Transceiver.cs +++ b/src/Easywave2Mqtt/Easywave/EldatRx09Transceiver.cs @@ -68,11 +68,11 @@ public override Task StartAsync(CancellationToken cancellationToken) return base.StartAsync(cancellationToken); } - public override Task StopAsync(CancellationToken cancellationToken) + public override async Task StopAsync(CancellationToken cancellationToken) { LogServiceStopping(); + await base.StopAsync(cancellationToken); Close(); - return base.StopAsync(cancellationToken); } /// @@ -161,11 +161,17 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken) } catch (TimeoutException) { - await Task.Delay(PauseTime, stoppingToken).ConfigureAwait(false); + if (!stoppingToken.IsCancellationRequested) + { + await Task.Delay(PauseTime, stoppingToken).ConfigureAwait(false); + } } catch (IOException ex) when (ex.HResult == TimeoutResult) { - await Task.Delay(PauseTime, stoppingToken).ConfigureAwait(false); + if (!stoppingToken.IsCancellationRequested) + { + await Task.Delay(PauseTime, stoppingToken).ConfigureAwait(false); + } } } } diff --git a/src/Easywave2Mqtt/Easywave2Mqtt.csproj b/src/Easywave2Mqtt/Easywave2Mqtt.csproj index 86e7b61..e26ee81 100644 --- a/src/Easywave2Mqtt/Easywave2Mqtt.csproj +++ b/src/Easywave2Mqtt/Easywave2Mqtt.csproj @@ -8,18 +8,16 @@ AnyCPU true True + Marc Selis + This application bridges the Easywave & MQTT worlds + ©2022-2024 Marc Selis, License LGPL-2.1 + 1.0.0 - - All - - - - diff --git a/src/Easywave2Mqtt/Mqtt/Cover.cs b/src/Easywave2Mqtt/Mqtt/Cover.cs index b835ed6..f42a255 100644 --- a/src/Easywave2Mqtt/Mqtt/Cover.cs +++ b/src/Easywave2Mqtt/Mqtt/Cover.cs @@ -29,7 +29,7 @@ public class Cover public string StateTopic { get; set; } [JsonPropertyName("qos")] - public uint QoS { get; set; } = 0; + public uint QoS { get; set; } = 1; [JsonPropertyName("retain")] public bool Retain { get; set; } = true; diff --git a/src/Easywave2Mqtt/Mqtt/Light.cs b/src/Easywave2Mqtt/Mqtt/Light.cs index f949a0d..945c9e1 100644 --- a/src/Easywave2Mqtt/Mqtt/Light.cs +++ b/src/Easywave2Mqtt/Mqtt/Light.cs @@ -17,7 +17,7 @@ public class Light public string? Area { get; set; } [JsonPropertyName("qos")] - public uint QoS { get; set; } = 0; + public uint QoS { get; set; } = 1; [JsonPropertyName("retain")] public bool Retain { get; set; } = true; diff --git a/src/Easywave2Mqtt/Mqtt/MessagingService.cs b/src/Easywave2Mqtt/Mqtt/MessagingService.cs index f93cf26..d88359c 100644 --- a/src/Easywave2Mqtt/Mqtt/MessagingService.cs +++ b/src/Easywave2Mqtt/Mqtt/MessagingService.cs @@ -5,6 +5,7 @@ using InMemoryBus; using MQTTnet; using MQTTnet.Client; +using MQTTnet.Extensions.ManagedClient; using MQTTnet.Formatter; using MQTTnet.Packets; using MQTTnet.Protocol; @@ -14,26 +15,14 @@ namespace Easywave2Mqtt.Mqtt public sealed partial class MessagingService : BackgroundService { - private readonly IMqttClient _client = new MqttFactory().CreateMqttClient(); - private readonly MqttClientOptions _clientOptions; + private readonly IManagedMqttClient _client = new MqttFactory().CreateManagedMqttClient(); private readonly IBus _bus; private readonly ILogger _logger; - private readonly MqttTopicFilter _outgoing = new MqttTopicFilterBuilder().WithAtLeastOnceQoS().WithTopic("easywave2mqtt/#").Build(); - private readonly MqttTopicFilter _incoming = new MqttTopicFilterBuilder().WithAtLeastOnceQoS().WithTopic("mqtt2easywave/#").Build(); - private readonly MqttClientSubscribeOptions _subscribeOptions; - private bool _reconnecting = false; public MessagingService(ILogger logger, IBus bus) { _logger = logger; _bus = bus; - _clientOptions = new MqttClientOptionsBuilder() - .WithClientId("Easywave2MQTT") - .WithTcpServer(Program.Settings!.MQTTServer, Program.Settings!.MQTTPort) - .WithCredentials(Program.Settings!.MQTTUser, Program.Settings!.MQTTPassword) - .WithProtocolVersion(MqttProtocolVersion.V500) - .Build(); - _subscribeOptions = new MqttClientSubscribeOptionsBuilder().WithTopicFilter(_outgoing).WithTopicFilter(_incoming).Build(); } public override void Dispose() @@ -45,110 +34,68 @@ public override void Dispose() public override async Task StartAsync(CancellationToken cancellationToken) { LogServiceStart(); + var clientOptions = new MqttClientOptionsBuilder() + .WithClientId("Easywave2MQTT") + .WithTcpServer(Program.Settings!.MQTTServer, Program.Settings!.MQTTPort) + .WithCredentials(Program.Settings!.MQTTUser, Program.Settings!.MQTTPassword) + .WithProtocolVersion(MqttProtocolVersion.V500) + .Build(); + var managedClientOptions = new ManagedMqttClientOptionsBuilder().WithClientOptions(clientOptions).Build(); + _client.ConnectedAsync += args => { LogClientReconnected(); return Task.CompletedTask; }; + _client.ConnectingFailedAsync += args => { LogClientConnectionFailed(args.ConnectResult); return Task.CompletedTask; }; + await _client.StartAsync(managedClientOptions).ConfigureAwait(false); _client.ApplicationMessageReceivedAsync += MessageHandler; - _client.DisconnectedAsync += DisconnectedHandler; - var connectResult = await ConnectAsync().ConfigureAwait(false); - Debug.Assert(_client.IsConnected); - if (connectResult.ResultCode != MqttClientConnectResultCode.Success) - { - LogClientConnectionFailed(connectResult.ResultCode); - return; - } + _client.SynchronizingSubscriptionsFailedAsync += SynchronizingSubscriptionsFailed; - var subscribeResult = await SubscribeAsync().ConfigureAwait(false); - foreach (var item in subscribeResult.Items) - { - if (item.ResultCode != MqttClientSubscribeResultCode.GrantedQoS1) - { - LogClientSubscriptionFailed(item.TopicFilter.Topic, item.ResultCode); - } - } + await _client.SubscribeAsync([new MqttTopicFilterBuilder().WithAtLeastOnceQoS().WithTopic("easywave2mqtt/#").Build(), new MqttTopicFilterBuilder().WithAtLeastOnceQoS().WithTopic("mqtt2easywave/#").Build()]); await base.StartAsync(cancellationToken).ConfigureAwait(false); } - private async Task DisconnectedHandler(MqttClientDisconnectedEventArgs arg) + private Task SynchronizingSubscriptionsFailed(ManagedProcessFailedEventArgs args) { - if (_reconnecting) - { - return; - } - - _reconnecting = true; - LogClientConnectionBroken(); - - while (!_client.IsConnected) - { - try - { - _ = await ConnectAsync().ConfigureAwait(false); - _ = await SubscribeAsync().ConfigureAwait(false); - LogClientReconnected(); - _reconnecting = false; - break; - } - catch (Exception ex) - { - LogClientReconnectFailed(ex.Message); - await Task.Delay(TimeSpan.FromSeconds(10)).ConfigureAwait(false); - } - } - } - - private Task ConnectAsync() - { - return _client.ConnectAsync(_clientOptions); - } - - private Task SubscribeAsync() - { - return _client.SubscribeAsync(_subscribeOptions); + return Task.CompletedTask; } public override async Task StopAsync(CancellationToken cancellationToken) { LogServiceStop(); + // Stop handling incoming messages _client.ApplicationMessageReceivedAsync -= MessageHandler; - await _client.DisconnectAsync(new MqttClientDisconnectOptions { Reason = MqttClientDisconnectOptionsReason.NormalDisconnection, ReasonString = "Service stopping" }, cancellationToken).ConfigureAwait(false); + // Stop the ExecuteAsync task await base.StopAsync(cancellationToken).ConfigureAwait(false); + // Signal unavailability of all Easywave devices to Home Assistant + await Send("easywave2mqtt", "unavailable", true).ConfigureAwait(false); + // Wait max 10 seconds until all pending messages are sent + _ = SpinWait.SpinUntil(() => _client.PendingApplicationMessagesCount == 0, 10000); + // Close the MQTT connection + await _client.StopAsync(cleanDisconnect: true).ConfigureAwait(false); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { LogServiceRunning(); await Send("easywave2mqtt", "available", true).ConfigureAwait(false); - try + using (_bus.Subscribe(btn => DeclareButton(btn.Address, btn.KeyCode, btn.Name, btn.Area, btn.Count))) + using (_bus.Subscribe(sw => DeclareLight(sw.Id, sw.Name, sw.Area))) + using (_bus.Subscribe(sw => DeclareCover(sw.Id, sw.Name, sw.Area))) + using (_bus.Subscribe(btn => SendButtonPress(btn.Address, btn.KeyCode))) + using (_bus.Subscribe(btn => SendButtonDoublePress(btn.Address, btn.KeyCode))) + using (_bus.Subscribe(btn => SendButtonTriplePress(btn.Address, btn.KeyCode))) + using (_bus.Subscribe(btn => SendButtonHold(btn.Address, btn.KeyCode))) + using (_bus.Subscribe(btn => SendButtonRelease(btn.Address, btn.KeyCode))) + using (_bus.Subscribe(SendSwitchTurnedOn)) + using (_bus.Subscribe(SendSwitchTurnedOff)) + using (_bus.Subscribe(SendBlindOpening)) + using (_bus.Subscribe(SendBlindOpen)) + using (_bus.Subscribe(SendBlindClosing)) + using (_bus.Subscribe(SendBlindClosed)) + using (_bus.Subscribe(SendBlindStopped)) { - using (_bus.Subscribe(btn => DeclareButton(btn.Address, btn.KeyCode, btn.Name, btn.Area, btn.Count))) - using (_bus.Subscribe(sw => DeclareLight(sw.Id, sw.Name, sw.Area))) - using (_bus.Subscribe(sw => DeclareBlind(sw.Id, sw.Name, sw.Area))) - using (_bus.Subscribe(btn => SendButtonPress(btn.Address, btn.KeyCode))) - using (_bus.Subscribe(btn => SendButtonDoublePress(btn.Address, btn.KeyCode))) - using (_bus.Subscribe(btn => SendButtonTriplePress(btn.Address, btn.KeyCode))) - using (_bus.Subscribe(btn => SendButtonHold(btn.Address, btn.KeyCode))) - using (_bus.Subscribe(btn => SendButtonRelease(btn.Address, btn.KeyCode))) - using (_bus.Subscribe(SendSwitchTurnedOn)) - using (_bus.Subscribe(SendSwitchTurnedOff)) - using (_bus.Subscribe(SendBlindOpening)) - using (_bus.Subscribe(SendBlindOpen)) - using (_bus.Subscribe(SendBlindClosing)) - using (_bus.Subscribe(SendBlindClosed)) - using(_bus.Subscribe(SendBlindStopped)) + while (!stoppingToken.IsCancellationRequested) { - while (!stoppingToken.IsCancellationRequested) - { - await Task.Delay(100, stoppingToken).ConfigureAwait(false); - } + await Task.Delay(100, CancellationToken.None).ConfigureAwait(false); } } - catch(TaskCanceledException) - { - // Ignore - } - catch (OperationCanceledException) - { - // Ignore - } - await Send("easywave2mqtt", "unavailable", true).ConfigureAwait(false); LogServiceStopped(); } @@ -186,6 +133,7 @@ private Task SendBlindStopped(EasywaveBlindIsStopped bl) { return Send($"easywave2mqtt/{bl.Id}/state", Cover.StoppedState, true); } + private async Task MessageHandler(MqttApplicationMessageReceivedEventArgs arg) { LogTopicReceived(arg.ApplicationMessage.Topic, arg.ApplicationMessage.ConvertPayloadToString()); @@ -241,7 +189,7 @@ private Task DeclareLight(string id, string name, string? area) return Send($"homeassistant/light/{id}/config", payload); } - private Task DeclareBlind(string id, string name, string? area) + private Task DeclareCover(string id, string name, string? area) { var sw = new Cover(id, name, area); var payload = JsonSerializer.Serialize(sw, MyJsonContext.Default.Cover); @@ -281,17 +229,12 @@ private Task SendButtonHold(string id, char btn) private async Task Send(string topic, string payload, bool retain = false) { LogTopicPublish(topic, payload); - MqttClientPublishResult publishResult = await _client.PublishAsync(new MqttApplicationMessageBuilder() + await _client.EnqueueAsync(new MqttApplicationMessageBuilder() .WithTopic(topic) .WithPayload(payload) .WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce) .WithRetainFlag(retain) .Build()); - - if (publishResult.ReasonCode != MqttClientPublishReasonCode.Success) - { - LogPublishFailed(publishResult.ReasonCode, publishResult.ReasonString); - } } #region LoggingMethods @@ -323,7 +266,7 @@ private async Task Send(string topic, string payload, bool retain = false) private partial void LogClientReconnectFailed(string message); [LoggerMessage(EventId = 10, Level = LogLevel.Error, Message = "Failed to connect to MQTT broker: {Result}")] - private partial void LogClientConnectionFailed(MqttClientConnectResultCode result); + private partial void LogClientConnectionFailed(MqttClientConnectResult result); [LoggerMessage(EventId = 11, Level = LogLevel.Error, Message = "Failed to subscribe to topic {Topic}: {Result}")] private partial void LogClientSubscriptionFailed(string topic, MqttClientSubscribeResultCode result); diff --git a/src/Easywave2Mqtt/Properties/PublishProfiles/FolderProfile.pubxml b/src/Easywave2Mqtt/Properties/PublishProfiles/FolderProfile.pubxml index 22d04d1..18d0edc 100644 --- a/src/Easywave2Mqtt/Properties/PublishProfiles/FolderProfile.pubxml +++ b/src/Easywave2Mqtt/Properties/PublishProfiles/FolderProfile.pubxml @@ -1,7 +1,4 @@  - Release diff --git a/src/Easywave2Mqtt/Worker.cs b/src/Easywave2Mqtt/Worker.cs index 635db81..ee37f6f 100644 --- a/src/Easywave2Mqtt/Worker.cs +++ b/src/Easywave2Mqtt/Worker.cs @@ -1,5 +1,4 @@ using System.Collections.Concurrent; -using System.Reflection; using Easywave2Mqtt.Configuration; using Easywave2Mqtt.Easywave; using Easywave2Mqtt.Events; @@ -9,7 +8,7 @@ namespace Easywave2Mqtt { - public sealed partial class Worker(IBus bus, IHostApplicationLifetime applicationLifetime, ILoggerFactory loggerFactory, Settings config) : BackgroundService + public sealed partial class Worker(IBus bus, ILoggerFactory loggerFactory, Settings config) : BackgroundService { private readonly CancellationTokenSource _cancellationTokenSource = new(); private readonly ConcurrentDictionary _devices = new(); @@ -68,34 +67,23 @@ public override async Task StartAsync(CancellationToken cancellationToken) public override Task StopAsync(CancellationToken cancellationToken) { - _cancellationTokenSource.Cancel(); LogServiceStopping(); + _cancellationTokenSource.Cancel(); return base.StopAsync(cancellationToken); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { LogServiceRunning(); - try + using (bus.Subscribe(HandleEasywaveEvent)) + using (bus.Subscribe(HandleMqttCommand)) + using (bus.Subscribe(HandleMqttMessage)) { - using (bus.Subscribe(HandleEasywaveEvent)) - using (bus.Subscribe(HandleMqttCommand)) - using (bus.Subscribe(HandleMqttMessage)) + while (!_cancellationTokenSource.IsCancellationRequested) { - while (!_cancellationTokenSource.IsCancellationRequested) - { - await Task.Delay(1000, stoppingToken).ConfigureAwait(false); - } + await Task.Delay(100, CancellationToken.None).ConfigureAwait(false); } } - catch(TaskCanceledException) - { - // Ignore - } - catch (OperationCanceledException) - { - // Ignore - } LogServiceStopped(); } @@ -112,7 +100,7 @@ private async Task CreateDevices() EasywaveBlind? blind = await AddBlind(id, name, device.Area).ConfigureAwait(false); foreach (Subscription sub in device.Subscriptions) { - var address = sub.Address ?? throw new InvalidConfigurationException($"Device {id} has a subscription without address"); + var address = sub.Address ?? throw new InvalidConfigurationException($"Blind {id} has a subscription without address"); if (sub.CanSend) { blind.AddSubscription(address, sub.KeyCode, true); @@ -138,7 +126,7 @@ private async Task CreateDevices() EasywaveSwitch? light = await AddLight(id, name, device.Area, device.IsToggle).ConfigureAwait(false); foreach (Subscription sub in device.Subscriptions) { - var address = sub.Address ?? throw new InvalidConfigurationException($"Device {id} has a subscription without address"); + var address = sub.Address ?? throw new InvalidConfigurationException($"Light {id} has a subscription without address"); if (sub.CanSend) { light.AddSubscription(address, sub.KeyCode, true); @@ -170,7 +158,7 @@ private async Task CreateDevices() break; } default: - throw new NotSupportedException($"Device {device.Id} has an unsupported type {device.Type}"); + throw new InvalidConfigurationException($"Device {device.Id} has an unsupported type {device.Type}"); } } } @@ -282,7 +270,7 @@ private Task HandleEasywaveBlindStateChanged(EasywaveBlind sender) private Task HandleUnsupprtedState(string id, BlindState state) { - LogUnsupportedBlindState(id, state); + LogUnsupportedBlindState(id, state); return Task.CompletedTask; } @@ -312,10 +300,10 @@ private Task HandleUnsupprtedState(string id, BlindState state) [LoggerMessage(EventId = 7, Level = LogLevel.Information, Message = " Declaring light {Name} ({Id}:{IsToggle}) in {Area}")] public partial void LogLightDeclare(string id, string? name = "<>", string? area = "<>", bool isToggle = false); - [LoggerMessage(EventId=8, Level =LogLevel.Information, Message = " Declaring blind {Name} ({Id}) in {Area}")] + [LoggerMessage(EventId = 8, Level = LogLevel.Information, Message = " Declaring blind {Name} ({Id}) in {Area}")] public partial void LogBlindDeclare(string id, string? name = "<>", string? area = "<>"); - [LoggerMessage(EventId=9, Level =LogLevel.Warning, Message="Detected an unsupported state {State} for blind {Id}!")] + [LoggerMessage(EventId = 9, Level = LogLevel.Warning, Message = "Detected an unsupported state {State} for blind {Id}!")] public partial void LogUnsupportedBlindState(string id, BlindState state); #endregion }