RegisterConfig aufgetrennt

This commit is contained in:
Eric Neuber 2026-02-17 19:56:33 +01:00
parent 698be221c0
commit 483d27750b
5 changed files with 25 additions and 13 deletions

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)]

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"));

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,

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>,

View File

@ -45,7 +45,7 @@ async function saveSettings() {
max_holding_addr: parseInt(document.getElementById('modbus_max_holding_addr').value, 10) || null,
modbus_coils: null,
modbus_input_register: null,
modbus_holding_register: null
modbus_holding_register: null,
};
// MQTT