From 64f19d7f01e2657acb4acdacbaa839178381face Mon Sep 17 00:00:00 2001 From: postcretinism Date: Fri, 17 Jan 2025 21:32:07 +0300 Subject: [PATCH 1/6] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B8=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=20=D1=81=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8?= =?UTF-8?q?=D0=BD=D0=BE=D0=BC=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D1=80=D0=B8=D1=83=D1=81=D0=B0=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ThinkingHome.Console.csproj | 1 + ThinkingHome.Console/appsettings.json | 6 +++--- .../ThinkingHome.Plugins.Tmp.csproj | 3 +++ .../ThinkingHome.Plugins.Waterius.csproj | 13 +++++++++++++ .../WateriusPlugin.cs | 18 ++++++++++++++++++ .../Resources/app/main.js | 4 ++-- ThinkingHome.sln | 15 +++++++++++++++ 7 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj create mode 100644 ThinkingHome.Plugins.Waterius/WateriusPlugin.cs diff --git a/ThinkingHome.Console/ThinkingHome.Console.csproj b/ThinkingHome.Console/ThinkingHome.Console.csproj index 7418c0f..40ea2a7 100644 --- a/ThinkingHome.Console/ThinkingHome.Console.csproj +++ b/ThinkingHome.Console/ThinkingHome.Console.csproj @@ -27,6 +27,7 @@ + diff --git a/ThinkingHome.Console/appsettings.json b/ThinkingHome.Console/appsettings.json index 56d5f4b..32eba25 100644 --- a/ThinkingHome.Console/appsettings.json +++ b/ThinkingHome.Console/appsettings.json @@ -19,9 +19,6 @@ ], "Serilog": { - "MinimumLevel": { - "Default": "Debug" - }, "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.RollingFile" @@ -61,6 +58,9 @@ "useSSL": false, "disableCertificateValidation": true }, + "ThinkingHome.Plugins.Waterius.WateriusPlugin": { + "mqttTopic": "waterius/slon/" + }, "ThinkingHome.Plugins.Mqtt.MqttPlugin": { "host": "localhost", "port": 1883, diff --git a/ThinkingHome.Plugins.Tmp/ThinkingHome.Plugins.Tmp.csproj b/ThinkingHome.Plugins.Tmp/ThinkingHome.Plugins.Tmp.csproj index 5b4575d..2fc6446 100644 --- a/ThinkingHome.Plugins.Tmp/ThinkingHome.Plugins.Tmp.csproj +++ b/ThinkingHome.Plugins.Tmp/ThinkingHome.Plugins.Tmp.csproj @@ -45,4 +45,7 @@ + + + diff --git a/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj b/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj new file mode 100644 index 0000000..d71ff62 --- /dev/null +++ b/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs b/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs new file mode 100644 index 0000000..9422012 --- /dev/null +++ b/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs @@ -0,0 +1,18 @@ +using Microsoft.Extensions.Logging; +using ThinkingHome.Core.Plugins; + +namespace ThinkingHome.Plugins.Waterius; + +public class WateriusPlugin : PluginBase { + public string? MqttTopic => Configuration["mqttTopic"]; + + public override void InitPlugin() + { + if (string.IsNullOrWhiteSpace(MqttTopic)) { + Logger.LogWarning("MQTT Topic is undefined"); + } + else { + Logger.LogInformation("Listen to waterius in topic: {MqttTopic}...", MqttTopic); + } + } +} diff --git a/ThinkingHome.Plugins.WebUi/Resources/app/main.js b/ThinkingHome.Plugins.WebUi/Resources/app/main.js index 2ed762b..9663b1d 100644 --- a/ThinkingHome.Plugins.WebUi/Resources/app/main.js +++ b/ThinkingHome.Plugins.WebUi/Resources/app/main.js @@ -286,7 +286,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \***********************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `html,\nbody,\n#root,\n.Application {\n height: 100vh;\n}\n\n.Application {\n display: flex;\n flex-direction: column;\n}\n\n.Application-Content {\n flex: 1;\n overflow-y: scroll;\n display: flex;\n flex-direction: column;\n}\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://frontend/./frontend/components/Application.css?./node_modules/css-loader/dist/cjs.js"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `html,\r\nbody,\r\n#root,\r\n.Application {\r\n height: 100vh;\r\n}\r\n\r\n.Application {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.Application-Content {\r\n flex: 1;\r\n overflow-y: scroll;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://frontend/./frontend/components/Application.css?./node_modules/css-loader/dist/cjs.js"); /***/ }), @@ -296,7 +296,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \***********************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.ErrorScreen {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.ErrorScreen-Title {\n color: var(--bs-red);\n}\n\n.ErrorScreen-Message {\n color: var(--bs-secondary);\n white-space: nowrap;\n}\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://frontend/./frontend/components/ErrorScreen.css?./node_modules/css-loader/dist/cjs.js"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.ErrorScreen {\r\n flex: 1;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.ErrorScreen-Title {\r\n color: var(--bs-red);\r\n}\r\n\r\n.ErrorScreen-Message {\r\n color: var(--bs-secondary);\r\n white-space: nowrap;\r\n}\r\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://frontend/./frontend/components/ErrorScreen.css?./node_modules/css-loader/dist/cjs.js"); /***/ }), diff --git a/ThinkingHome.sln b/ThinkingHome.sln index eeef70c..8a46f28 100644 --- a/ThinkingHome.sln +++ b/ThinkingHome.sln @@ -50,6 +50,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThinkingHome.Plugins.Telegr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThinkingHome.Plugins.WebUi", "ThinkingHome.Plugins.WebUi\ThinkingHome.Plugins.WebUi.csproj", "{003AE996-5F8D-414E-A084-CB93B91D10B1}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThinkingHome.Plugins.Waterius", "ThinkingHome.Plugins.Waterius\ThinkingHome.Plugins.Waterius.csproj", "{207620D4-55C5-4D8E-9463-3BDE0BA31A15}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -148,6 +150,18 @@ Global {003AE996-5F8D-414E-A084-CB93B91D10B1}.Release|x64.Build.0 = Release|Any CPU {003AE996-5F8D-414E-A084-CB93B91D10B1}.Release|x86.ActiveCfg = Release|Any CPU {003AE996-5F8D-414E-A084-CB93B91D10B1}.Release|x86.Build.0 = Release|Any CPU + {207620D4-55C5-4D8E-9463-3BDE0BA31A15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {207620D4-55C5-4D8E-9463-3BDE0BA31A15}.Debug|Any CPU.Build.0 = Debug|Any CPU + {207620D4-55C5-4D8E-9463-3BDE0BA31A15}.Release|Any CPU.ActiveCfg = Release|Any CPU + {207620D4-55C5-4D8E-9463-3BDE0BA31A15}.Release|Any CPU.Build.0 = Release|Any CPU + {207620D4-55C5-4D8E-9463-3BDE0BA31A15}.Debug|x64.ActiveCfg = Debug|Any CPU + {207620D4-55C5-4D8E-9463-3BDE0BA31A15}.Debug|x64.Build.0 = Debug|Any CPU + {207620D4-55C5-4D8E-9463-3BDE0BA31A15}.Debug|x86.ActiveCfg = Debug|Any CPU + {207620D4-55C5-4D8E-9463-3BDE0BA31A15}.Debug|x86.Build.0 = Debug|Any CPU + {207620D4-55C5-4D8E-9463-3BDE0BA31A15}.Release|x64.ActiveCfg = Release|Any CPU + {207620D4-55C5-4D8E-9463-3BDE0BA31A15}.Release|x64.Build.0 = Release|Any CPU + {207620D4-55C5-4D8E-9463-3BDE0BA31A15}.Release|x86.ActiveCfg = Release|Any CPU + {207620D4-55C5-4D8E-9463-3BDE0BA31A15}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -169,6 +183,7 @@ Global {CDCBFFD1-7FBD-496E-BD42-581F66BEB085} = {5DF04DCB-BC26-42FA-B7D6-CFC24963F1A8} {960A9C44-3D0F-42F4-8F81-F89588EAC9E0} = {5DF04DCB-BC26-42FA-B7D6-CFC24963F1A8} {003AE996-5F8D-414E-A084-CB93B91D10B1} = {5DF04DCB-BC26-42FA-B7D6-CFC24963F1A8} + {207620D4-55C5-4D8E-9463-3BDE0BA31A15} = {5DF04DCB-BC26-42FA-B7D6-CFC24963F1A8} EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution Policies = $0 From 582957edc7524058548e1aad53a072f038cfbbbd Mon Sep 17 00:00:00 2001 From: postcretinism Date: Fri, 17 Jan 2025 22:50:16 +0300 Subject: [PATCH 2/6] =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B8=D0=BB=D0=B8=20=D0=BA=20=D0=B2=D0=B0=D1=82=D0=B5=D1=80?= =?UTF-8?q?=D0=B8=D1=83=D1=81=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D1=83?= =?UTF-8?q?=20=D0=BC=D0=BA=D1=82=D1=82=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8?= =?UTF-8?q?=D0=BD=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B8?= =?UTF-8?q?=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=BA=D1=83=20=D0=B2=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ThinkingHome.Core.Plugins/README.md | 2 +- .../ThinkingHome.Plugins.Waterius.csproj | 1 + ThinkingHome.Plugins.Waterius/WateriusPlugin.cs | 8 ++++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ThinkingHome.Core.Plugins/README.md b/ThinkingHome.Core.Plugins/README.md index e6b11b1..291e31c 100644 --- a/ThinkingHome.Core.Plugins/README.md +++ b/ThinkingHome.Core.Plugins/README.md @@ -68,7 +68,7 @@ public class MyPlugin : PluginBase { private readonly OtherPlugin otherPlugin; - public PluginBase(OtherPlugin otherPlugin) { + public MyPlugin(OtherPlugin otherPlugin) { // сохраняем полученный экземпляр плагина в поле своего плагина this.otherPlugin = otherPlugin; } diff --git a/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj b/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj index d71ff62..566f732 100644 --- a/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj +++ b/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj @@ -8,6 +8,7 @@ + diff --git a/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs b/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs index 9422012..30c2dc7 100644 --- a/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs +++ b/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs @@ -1,10 +1,18 @@ using Microsoft.Extensions.Logging; using ThinkingHome.Core.Plugins; +using ThinkingHome.Plugins.Mqtt; namespace ThinkingHome.Plugins.Waterius; public class WateriusPlugin : PluginBase { public string? MqttTopic => Configuration["mqttTopic"]; + + private readonly MqttPlugin mqttPlugin; + + public WateriusPlugin(MqttPlugin mqttPlugin) + { + this.mqttPlugin = mqttPlugin; + } public override void InitPlugin() { From 630790c9feb94e61bccf32ce79cf9e612ec0ff9b Mon Sep 17 00:00:00 2001 From: postcretinism Date: Wed, 29 Jan 2025 00:04:40 +0300 Subject: [PATCH 3/6] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B4=D0=BF=D0=B8=D1=81=D0=BA=D1=83=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BE=D1=82=20=D0=B2=D0=B0=D1=82=D0=B5=D1=80=D0=B8=D1=83?= =?UTF-8?q?=D1=81=D0=B0=20=D0=BF=D0=BE=20=D0=BF=D1=80=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D0=BA=D0=BE=D0=BB=D1=83=20=D0=BC=D0=BA=D1=82=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ThinkingHome.Plugins.Waterius/WateriusPlugin.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs b/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs index 30c2dc7..49515ec 100644 --- a/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs +++ b/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs @@ -1,10 +1,25 @@ -using Microsoft.Extensions.Logging; +using System.Text; +using Microsoft.Extensions.Logging; using ThinkingHome.Core.Plugins; using ThinkingHome.Plugins.Mqtt; +using ThinkingHome.Plugins.Mqtt.DynamicConfiguration; namespace ThinkingHome.Plugins.Waterius; public class WateriusPlugin : PluginBase { + + [ConfigureMqtt] + public void WateriusListeners(MqttConfigurationBuilder config) + { + config.RegisterListener(MqttTopic?.Trim('/') + "/#", HandleMqttMessage); + } + + private void HandleMqttMessage(string topic, byte[] payload) + { + var str = Encoding.UTF8.GetString(payload); + + Logger.LogInformation($"{topic}: {str}"); + } public string? MqttTopic => Configuration["mqttTopic"]; private readonly MqttPlugin mqttPlugin; From 2696d66d63ff0b6f6e01696342760d8d57dd2024 Mon Sep 17 00:00:00 2001 From: postcretinism Date: Wed, 29 Jan 2025 23:58:47 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B8=20=D0=BC=D0=B8=D0=B3=D1=80=D0=B0=D1=86=D0=B8=D1=8E=20?= =?UTF-8?q?=D0=B8=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C=20=D0=BA=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B5=20=D1=85=D1=80=D0=B0=D0=BD=D1=8F=D1=82?= =?UTF-8?q?=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D1=81=D1=87=D0=B5?= =?UTF-8?q?=D1=82=D1=87=D0=B8=D0=BA=D0=BE=D0=B2=20=D0=B2=D0=BE=D0=B4=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Model/MeterData.cs | 8 +++++++ .../Model/Migrations/Migration01.cs | 24 +++++++++++++++++++ .../ThinkingHome.Plugins.Waterius.csproj | 4 ++++ 3 files changed, 36 insertions(+) create mode 100644 ThinkingHome.Plugins.Waterius/Model/MeterData.cs create mode 100644 ThinkingHome.Plugins.Waterius/Model/Migrations/Migration01.cs diff --git a/ThinkingHome.Plugins.Waterius/Model/MeterData.cs b/ThinkingHome.Plugins.Waterius/Model/MeterData.cs new file mode 100644 index 0000000..32ba426 --- /dev/null +++ b/ThinkingHome.Plugins.Waterius/Model/MeterData.cs @@ -0,0 +1,8 @@ +namespace ThinkingHome.Plugins.Waterius.Model; + +public class MeterData { + public Guid Id { get; set; } + public DateTime Date { get; set; } + public float Value0 { get; set; } + public float Value1 { get; set; } +} diff --git a/ThinkingHome.Plugins.Waterius/Model/Migrations/Migration01.cs b/ThinkingHome.Plugins.Waterius/Model/Migrations/Migration01.cs new file mode 100644 index 0000000..c93a2b7 --- /dev/null +++ b/ThinkingHome.Plugins.Waterius/Model/Migrations/Migration01.cs @@ -0,0 +1,24 @@ +using System.Data; +using ThinkingHome.Migrator.Framework; + +namespace ThinkingHome.Plugins.Waterius.Model.Migrations; + +[Migration(1)] +public class Migration01 : Migration +{ + + public override void Apply() + { + Database.AddTable("Waterius_MeterData", + new Column("Id", DbType.Guid, ColumnProperty.PrimaryKey), + new Column("Date", DbType.Date, ColumnProperty.NotNull), + new Column("Value0", DbType.Decimal, ColumnProperty.Null), + new Column("Value1", DbType.Decimal, ColumnProperty.Null) + ); + } + + public override void Revert() + { + Database.RemoveTable("Waterius_MeterData"); + } +} diff --git a/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj b/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj index 566f732..0263c45 100644 --- a/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj +++ b/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj @@ -11,4 +11,8 @@ + + + + From d9148e0a869b126c5e77c87a6a45851eec96c063 Mon Sep 17 00:00:00 2001 From: postcretinism Date: Wed, 29 Jan 2025 23:59:30 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B8=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=81=D0=B2=D1=8F=D0=B7=D0=B8=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B8=20=D1=81=20=D0=B1=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ThinkingHome.Plugins.Waterius/WateriusPlugin.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs b/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs index 49515ec..b8c35c4 100644 --- a/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs +++ b/ThinkingHome.Plugins.Waterius/WateriusPlugin.cs @@ -1,12 +1,21 @@ using System.Text; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using ThinkingHome.Core.Plugins; +using ThinkingHome.Plugins.Database; using ThinkingHome.Plugins.Mqtt; using ThinkingHome.Plugins.Mqtt.DynamicConfiguration; +using ThinkingHome.Plugins.Waterius.Model; namespace ThinkingHome.Plugins.Waterius; public class WateriusPlugin : PluginBase { + + [DbModelBuilder] + public void InitModel(ModelBuilder modelBuilder) + { + modelBuilder.Entity(cfg => cfg.ToTable("Waterius_MeterData")); + } [ConfigureMqtt] public void WateriusListeners(MqttConfigurationBuilder config) From db4a4318640378c1744461fa350d400820a834ae Mon Sep 17 00:00:00 2001 From: Dmitry Andriyanov Date: Fri, 31 Jan 2025 11:56:50 +0300 Subject: [PATCH 6/6] =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20dotnet=20=D0=B2=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B5?= =?UTF-8?q?=20waterius=20=D0=B4=D0=BE=209?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ThinkingHome.Console/appsettings.json | 3 +++ ThinkingHome.Plugins.Tmp/ThinkingHome.Plugins.Tmp.csproj | 5 +---- .../ThinkingHome.Plugins.Waterius.csproj | 5 +++-- ThinkingHome.Plugins.WebUi/Resources/app/main.js | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/ThinkingHome.Console/appsettings.json b/ThinkingHome.Console/appsettings.json index 32eba25..f760a65 100644 --- a/ThinkingHome.Console/appsettings.json +++ b/ThinkingHome.Console/appsettings.json @@ -19,6 +19,9 @@ ], "Serilog": { + "MinimumLevel": { + "Default": "Debug" + }, "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.RollingFile" diff --git a/ThinkingHome.Plugins.Tmp/ThinkingHome.Plugins.Tmp.csproj b/ThinkingHome.Plugins.Tmp/ThinkingHome.Plugins.Tmp.csproj index 2fc6446..7798716 100644 --- a/ThinkingHome.Plugins.Tmp/ThinkingHome.Plugins.Tmp.csproj +++ b/ThinkingHome.Plugins.Tmp/ThinkingHome.Plugins.Tmp.csproj @@ -36,7 +36,7 @@ - + @@ -45,7 +45,4 @@ - - - diff --git a/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj b/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj index 0263c45..38535f8 100644 --- a/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj +++ b/ThinkingHome.Plugins.Waterius/ThinkingHome.Plugins.Waterius.csproj @@ -1,7 +1,8 @@  - net8.0 + ThinkingHome plugin that receives water meter readings and stores them in a database. The following device is used to interact with water meters https://waterius.ru + net9.0 enable enable @@ -12,7 +13,7 @@ - + diff --git a/ThinkingHome.Plugins.WebUi/Resources/app/main.js b/ThinkingHome.Plugins.WebUi/Resources/app/main.js index 9663b1d..2ed762b 100644 --- a/ThinkingHome.Plugins.WebUi/Resources/app/main.js +++ b/ThinkingHome.Plugins.WebUi/Resources/app/main.js @@ -286,7 +286,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \***********************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `html,\r\nbody,\r\n#root,\r\n.Application {\r\n height: 100vh;\r\n}\r\n\r\n.Application {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.Application-Content {\r\n flex: 1;\r\n overflow-y: scroll;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://frontend/./frontend/components/Application.css?./node_modules/css-loader/dist/cjs.js"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `html,\nbody,\n#root,\n.Application {\n height: 100vh;\n}\n\n.Application {\n display: flex;\n flex-direction: column;\n}\n\n.Application-Content {\n flex: 1;\n overflow-y: scroll;\n display: flex;\n flex-direction: column;\n}\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://frontend/./frontend/components/Application.css?./node_modules/css-loader/dist/cjs.js"); /***/ }), @@ -296,7 +296,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \***********************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.ErrorScreen {\r\n flex: 1;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.ErrorScreen-Title {\r\n color: var(--bs-red);\r\n}\r\n\r\n.ErrorScreen-Message {\r\n color: var(--bs-secondary);\r\n white-space: nowrap;\r\n}\r\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://frontend/./frontend/components/ErrorScreen.css?./node_modules/css-loader/dist/cjs.js"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.ErrorScreen {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.ErrorScreen-Title {\n color: var(--bs-red);\n}\n\n.ErrorScreen-Message {\n color: var(--bs-secondary);\n white-space: nowrap;\n}\n`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://frontend/./frontend/components/ErrorScreen.css?./node_modules/css-loader/dist/cjs.js"); /***/ }),