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 serde::{Deserialize, Serialize};
use std::collections::HashMap; use std::collections::HashMap;
use crate::modbus_types::{ModbusRegisterConfig, ModbusCoilsConfig}; use crate::modbus_types::{ModbusCoilsConfig, ModbusInputRegisterConfig, ModbusHoldingRegisterConfig};
#[derive(Debug, Serialize, Deserialize, Clone)] #[derive(Debug, Serialize, Deserialize, Clone)]
pub struct DefaultConfig { pub struct DefaultConfig {
@ -46,8 +46,8 @@ pub struct AppConfig {
pub influxdb: InfluxConfig, pub influxdb: InfluxConfig,
pub modbus: ModbusConfig, pub modbus: ModbusConfig,
pub modbus_coils: Option<Vec<HashMap<String, ModbusCoilsConfig>>>, pub modbus_coils: Option<Vec<HashMap<String, ModbusCoilsConfig>>>,
pub modbus_input_register: Option<Vec<HashMap<String, ModbusRegisterConfig>>>, pub modbus_input_register: Option<Vec<HashMap<String, ModbusInputRegisterConfig>>>,
pub modbus_holding_register: Option<Vec<HashMap<String, ModbusRegisterConfig>>>, pub modbus_holding_register: Option<Vec<HashMap<String, ModbusHoldingRegisterConfig>>>,
} }
#[derive(Debug, Default, Clone)] #[derive(Debug, Default, Clone)]

View File

@ -11,7 +11,7 @@ mod modbus;
mod app_state; mod app_state;
pub mod modbus_types; pub mod modbus_types;
use crate::config::{AppConfig, ModbusValueMaps}; use crate::config::{AppConfig, ModbusValueMaps};
use crate::modbus_types::{ModbusRegisterConfig, ModbusCoilsConfig}; use crate::modbus_types::{ModbusInputRegisterConfig, ModbusHoldingRegisterConfig, ModbusCoilsConfig};
use crate::app_state::AppState; use crate::app_state::AppState;
async fn index(data: web::Data<AppState>) -> Result<HttpResponse> { 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)] #[derive(Serialize, Deserialize, Clone)]
#[serde(untagged)] #[serde(untagged)]
enum SaveTableRows { enum SaveTableRows {
Register(Vec<HashMap<String, ModbusRegisterConfig>>), InputRegister(Vec<HashMap<String, ModbusInputRegisterConfig>>),
HoldingRegister(Vec<HashMap<String, ModbusHoldingRegisterConfig>>),
Coils(Vec<HashMap<String, ModbusCoilsConfig>>), Coils(Vec<HashMap<String, ModbusCoilsConfig>>),
} }
@ -146,14 +147,14 @@ async fn save_table(
let conf_path = "paramod.yaml"; let conf_path = "paramod.yaml";
match req.table_id.as_str() { match req.table_id.as_str() {
"modbus_input_register" => { "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); config.modbus_input_register = Some(rows);
} else { } else {
return Ok(HttpResponse::BadRequest().body("Falscher Typ für input_register")); return Ok(HttpResponse::BadRequest().body("Falscher Typ für input_register"));
} }
} }
"modbus_holding_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); config.modbus_holding_register = Some(rows);
} else { } else {
return Ok(HttpResponse::BadRequest().body("Falscher Typ für holding_register")); return Ok(HttpResponse::BadRequest().body("Falscher Typ für holding_register"));

View File

@ -1,5 +1,5 @@
use crate::config::{ModbusValueMaps, ModbusConfig}; use crate::config::{ModbusValueMaps, ModbusConfig};
use crate::modbus_types::{ModbusRegisterConfig, ModbusCoilsConfig}; use crate::modbus_types::{ModbusInputRegisterConfig, ModbusHoldingRegisterConfig, ModbusCoilsConfig};
use std::collections::HashMap; use std::collections::HashMap;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use std::thread; use std::thread;
@ -12,8 +12,8 @@ use std::net::SocketAddr;
/// Startet einen Thread, der zyklisch Modbus-Register abfragt und ModbusValueMaps aktualisiert /// Startet einen Thread, der zyklisch Modbus-Register abfragt und ModbusValueMaps aktualisiert
pub fn start_modbus_polling_thread( pub fn start_modbus_polling_thread(
modbus_config: &ModbusConfig, modbus_config: &ModbusConfig,
input_registers: &Option<Vec<HashMap<String, ModbusRegisterConfig>>>, input_registers: &Option<Vec<HashMap<String, ModbusInputRegisterConfig>>>,
holding_registers: &Option<Vec<HashMap<String, ModbusRegisterConfig>>>, holding_registers: &Option<Vec<HashMap<String, ModbusHoldingRegisterConfig>>>,
coils: &Option<Vec<HashMap<String, ModbusCoilsConfig>>>, coils: &Option<Vec<HashMap<String, ModbusCoilsConfig>>>,
value_maps: Arc<Mutex<ModbusValueMaps>>, value_maps: Arc<Mutex<ModbusValueMaps>>,
poll_interval: Duration, poll_interval: Duration,

View File

@ -9,8 +9,19 @@ pub struct ModbusCoilsConfig {
pub comment: Option<String>, pub comment: Option<String>,
} }
#[derive(Debug, Serialize, Deserialize, Clone)] #[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 addr: u16,
pub r#type: Option<String>, pub r#type: Option<String>,
pub factor: Option<f64>, pub factor: Option<f64>,

View File

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