diff --git a/src/config.rs b/src/config.rs index a58debf..8b2725a 100644 --- a/src/config.rs +++ b/src/config.rs @@ -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>>, - pub modbus_input_register: Option>>, - pub modbus_holding_register: Option>>, + pub modbus_input_register: Option>>, + pub modbus_holding_register: Option>>, } #[derive(Debug, Default, Clone)] diff --git a/src/main.rs b/src/main.rs index 1b6d018..6cb2e5c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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) -> Result { @@ -128,7 +128,8 @@ async fn settings_page(data: web::Data) -> Result { #[derive(Serialize, Deserialize, Clone)] #[serde(untagged)] enum SaveTableRows { - Register(Vec>), + InputRegister(Vec>), + HoldingRegister(Vec>), Coils(Vec>), } @@ -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")); diff --git a/src/modbus.rs b/src/modbus.rs index c008410..d363210 100644 --- a/src/modbus.rs +++ b/src/modbus.rs @@ -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>>, - holding_registers: &Option>>, + input_registers: &Option>>, + holding_registers: &Option>>, coils: &Option>>, value_maps: Arc>, poll_interval: Duration, diff --git a/src/modbus_types.rs b/src/modbus_types.rs index 64b9fa9..4c2677e 100644 --- a/src/modbus_types.rs +++ b/src/modbus_types.rs @@ -9,8 +9,19 @@ pub struct ModbusCoilsConfig { pub comment: Option, } + #[derive(Debug, Serialize, Deserialize, Clone)] -pub struct ModbusRegisterConfig { +pub struct ModbusInputRegisterConfig { + pub addr: u16, + pub r#type: Option, + pub factor: Option, + pub mqtt: Option, + pub influxdb: Option, + pub comment: Option, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct ModbusHoldingRegisterConfig { pub addr: u16, pub r#type: Option, pub factor: Option, diff --git a/static/settings.js b/static/settings.js index 182b970..9e74e57 100644 --- a/static/settings.js +++ b/static/settings.js @@ -44,8 +44,8 @@ async function saveSettings() { 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, modbus_coils: null, - modbus_input_register: null, - modbus_holding_register: null + modbus_input_register: null, + modbus_holding_register: null, }; // MQTT