RegisterConfig aufgetrennt

This commit is contained in:
eneuber committed 2026-02-17 19:56:33 +01:00
1 parent 698be221c0
commit 483d27750b
5 files changed
+25 -13

No files matched your search

+3 -3
View File
@@ -1,6 +1,6 @@
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use crate::modbus_types::{ModbusRegisterConfig, ModbusCoilsConfig};
use crate::modbus_types::{ModbusCoilsConfig, ModbusInputRegisterConfig, ModbusHoldingRegisterConfig};
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct DefaultConfig {
@@ -46,8 +46,8 @@ pub struct AppConfig {
pub influxdb: InfluxConfig,
pub modbus: ModbusConfig,
pub modbus_coils: Option<Vec<HashMap<String, ModbusCoilsConfig>>>,
pub modbus_input_register: Option<Vec<HashMap<String, ModbusRegisterConfig>>>,
pub modbus_holding_register: Option<Vec<HashMap<String, ModbusRegisterConfig>>>,
pub modbus_input_register: Option<Vec<HashMap<String, ModbusInputRegisterConfig>>>,
pub modbus_holding_register: Option<Vec<HashMap<String, ModbusHoldingRegisterConfig>>>,
}
#[derive(Debug, Default, Clone)]
+5 -4
View File
@@ -11,7 +11,7 @@ mod modbus;
mod app_state;
pub mod modbus_types;
use crate::config::{AppConfig, ModbusValueMaps};
use crate::modbus_types::{ModbusRegisterConfig, ModbusCoilsConfig};
use crate::modbus_types::{ModbusInputRegisterConfig, ModbusHoldingRegisterConfig, ModbusCoilsConfig};
use crate::app_state::AppState;
async fn index(data: web::Data<AppState>) -> Result<HttpResponse> {
@@ -128,7 +128,8 @@ async fn settings_page(data: web::Data<AppState>) -> Result<HttpResponse> {
#[derive(Serialize, Deserialize, Clone)]
#[serde(untagged)]
enum SaveTableRows {
Register(Vec<HashMap<String, ModbusRegisterConfig>>),
InputRegister(Vec<HashMap<String, ModbusInputRegisterConfig>>),
HoldingRegister(Vec<HashMap<String, ModbusHoldingRegisterConfig>>),
Coils(Vec<HashMap<String, ModbusCoilsConfig>>),
}
@@ -146,14 +147,14 @@ async fn save_table(
let conf_path = "paramod.yaml";
match req.table_id.as_str() {
"modbus_input_register" => {
if let SaveTableRows::Register(rows) = req.rows.clone() {
if let SaveTableRows::InputRegister(rows) = req.rows.clone() {
config.modbus_input_register = Some(rows);
} else {
return Ok(HttpResponse::BadRequest().body("Falscher Typ für input_register"));
}
}
"modbus_holding_register" => {
if let SaveTableRows::Register(rows) = req.rows.clone() {
if let SaveTableRows::HoldingRegister(rows) = req.rows.clone() {
config.modbus_holding_register = Some(rows);
} else {
return Ok(HttpResponse::BadRequest().body("Falscher Typ für holding_register"));
+3 -3
View File
@@ -1,5 +1,5 @@
use crate::config::{ModbusValueMaps, ModbusConfig};
use crate::modbus_types::{ModbusRegisterConfig, ModbusCoilsConfig};
use crate::modbus_types::{ModbusInputRegisterConfig, ModbusHoldingRegisterConfig, ModbusCoilsConfig};
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
use std::thread;
@@ -12,8 +12,8 @@ use std::net::SocketAddr;
/// Startet einen Thread, der zyklisch Modbus-Register abfragt und ModbusValueMaps aktualisiert
pub fn start_modbus_polling_thread(
modbus_config: &ModbusConfig,
input_registers: &Option<Vec<HashMap<String, ModbusRegisterConfig>>>,
holding_registers: &Option<Vec<HashMap<String, ModbusRegisterConfig>>>,
input_registers: &Option<Vec<HashMap<String, ModbusInputRegisterConfig>>>,
holding_registers: &Option<Vec<HashMap<String, ModbusHoldingRegisterConfig>>>,
coils: &Option<Vec<HashMap<String, ModbusCoilsConfig>>>,
value_maps: Arc<Mutex<ModbusValueMaps>>,
poll_interval: Duration,
+12 -1
View File
@@ -9,8 +9,19 @@ pub struct ModbusCoilsConfig {
pub comment: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ModbusRegisterConfig {
pub struct ModbusInputRegisterConfig {
pub addr: u16,
pub r#type: Option<String>,
pub factor: Option<f64>,
pub mqtt: Option<bool>,
pub influxdb: Option<bool>,
pub comment: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ModbusHoldingRegisterConfig {
pub addr: u16,
pub r#type: Option<String>,
pub factor: Option<f64>,