diff --git a/paramod.yaml b/paramod.yaml index 4708c23..abb8886 100644 --- a/paramod.yaml +++ b/paramod.yaml @@ -8,6 +8,7 @@ mqtt: password: 97sm3pHNSMZ4M5qUj0x8 path: heizung/paradigma leitsystem_path: heizung/leitsystem2 + set_write_interval_ms: 2000 influxdb: bucket: Paradigma org: skaville diff --git a/src/main.rs b/src/main.rs index ca26ed5..059e076 100644 --- a/src/main.rs +++ b/src/main.rs @@ -127,18 +127,10 @@ async fn settings_page(data: web::Data) -> Result { -#[derive(Serialize, Deserialize, Clone)] -#[serde(untagged)] -enum SaveTableRows { - InputRegister(Vec>), - HoldingRegister(Vec>), - Coils(Vec>), -} - #[derive(Serialize, Deserialize)] struct SaveTableRequest { table_id: String, - rows: SaveTableRows, + rows: serde_json::Value, } async fn save_table( @@ -149,25 +141,28 @@ async fn save_table( let conf_path = "paramod.yaml"; match req.table_id.as_str() { "modbus_input_register" => { - 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")); - } + let rows: Vec> = + match serde_json::from_value(req.rows.clone()) { + Ok(v) => v, + Err(e) => return Ok(HttpResponse::BadRequest().body(format!("Falscher Typ für input_register: {}", e))), + }; + config.modbus_input_register = Some(rows); } "modbus_holding_register" => { - 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")); - } + let rows: Vec> = + match serde_json::from_value(req.rows.clone()) { + Ok(v) => v, + Err(e) => return Ok(HttpResponse::BadRequest().body(format!("Falscher Typ für holding_register: {}", e))), + }; + config.modbus_holding_register = Some(rows); } "modbus_coils" => { - if let SaveTableRows::Coils(rows) = req.rows.clone() { - config.modbus_coils = Some(rows); - } else { - return Ok(HttpResponse::BadRequest().body("Falscher Typ für coils")); - } + let rows: Vec> = + match serde_json::from_value(req.rows.clone()) { + Ok(v) => v, + Err(e) => return Ok(HttpResponse::BadRequest().body(format!("Falscher Typ für coils: {}", e))), + }; + config.modbus_coils = Some(rows); } _ => return Ok(HttpResponse::BadRequest().body("Invalid table_id")), } diff --git a/static/script.js b/static/script.js index efc39bd..e944c07 100644 --- a/static/script.js +++ b/static/script.js @@ -56,7 +56,7 @@ function addRow() { `; - } else if (typeof tableId !== 'undefined' && tableId === 'modbus_holding_registers') { + } else if (typeof tableId !== 'undefined' && tableId === 'modbus_holding_register') { newRow.innerHTML = ` @@ -147,14 +147,14 @@ async function saveTable() { influxdb: influxdb, comment: comment }; - } else if (typeof tableId !== 'undefined' && tableId === 'modbus_holding_registers') { + } else if (typeof tableId !== 'undefined' && tableId === 'modbus_holding_register') { const write = row.querySelector("input[data-field='write']")?.checked || false; - const rtype = row.querySelector("input[data-field='type']")?.value || null; + const type = row.querySelector("input[data-field='type']")?.value || null; const factor = parseFloat(row.querySelector("input[data-field='factor']")?.value || row.querySelector("input[data-field='faktor']")?.value || '1.0'); const comment = row.querySelector("input[data-field='comment']")?.value || null; value = { addr: addr, - rtype: rtype, + type: type, factor: factor, write: write, mqtt: mqtt, @@ -162,12 +162,12 @@ async function saveTable() { comment: comment }; } else { - const rtype = row.querySelector("input[data-field='type']")?.value || null; + const type = row.querySelector("input[data-field='type']")?.value || null; const factor = parseFloat(row.querySelector("input[data-field='factor']")?.value || row.querySelector("input[data-field='faktor']")?.value || '1.0'); const comment = row.querySelector("input[data-field='comment']")?.value || null; value = { addr: addr, - rtype: rtype, + type: type, factor: factor, mqtt: mqtt, influxdb: influxdb, @@ -196,8 +196,9 @@ async function saveTable() { messageDiv.className = 'message success'; messageDiv.textContent = '✓ Erfolgreich gespeichert!'; } else { + const errorText = (await response.text()) || 'Unbekannter Fehler'; messageDiv.className = 'message error'; - messageDiv.textContent = '✗ Fehler beim Speichern!'; + messageDiv.textContent = `✗ Fehler beim Speichern: ${errorText}`; } setTimeout(() => {