diff --git a/Dockerfile b/Dockerfile index f77f3dc..0dd72d8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,7 +14,7 @@ COPY db db RUN cargo install --path . -FROM debian:bullseye-slim -RUN apt-get update && apt-get install -y libssl1.1 && rm -rf /var/lib/apt/lists/* +FROM debian:bookworm-slim +RUN apt-get update && apt-get install -y openssl && rm -rf /var/lib/apt/lists/* COPY --from=builder /usr/local/cargo/bin/lxp-bridge /usr/local/bin/lxp-bridge ENTRYPOINT ["lxp-bridge", "-c", "/etc/config.yaml"] diff --git a/src/home_assistant.rs b/src/home_assistant.rs index 51623fe..25ec9bf 100644 --- a/src/home_assistant.rs +++ b/src/home_assistant.rs @@ -278,6 +278,21 @@ impl Config { name: "EPS Voltage", ..voltage.clone() }, + Entity { + key: "v_gen", + name: "Generator Voltage", + ..voltage.clone() + }, + Entity { + key: "v_eps_l1", + name: "EPS Voltage L1", + ..voltage.clone() + }, + Entity { + key: "v_eps_l2", + name: "EPS Voltage L2", + ..voltage.clone() + }, Entity { key: "f_ac", name: "Grid Frequency", @@ -288,6 +303,11 @@ impl Config { name: "EPS Frequency", ..frequency.clone() }, + Entity { + key: "f_gen", + name: "Generator Frequency", + ..frequency.clone() + }, Entity { key: "s_eps", name: "Apparent EPS Power", @@ -295,6 +315,20 @@ impl Config { unit_of_measurement: Some("VA"), ..power.clone() }, + Entity { + key: "s_eps_l1", + name: "Apparent EPS Power L1", + device_class: Some("apparent_power"), + unit_of_measurement: Some("VA"), + ..power.clone() + }, + Entity { + key: "s_eps_l2", + name: "Apparent EPS Power L2", + device_class: Some("apparent_power"), + unit_of_measurement: Some("VA"), + ..power.clone() + }, Entity { key: "p_pv", name: "PV Power (Array)", @@ -360,6 +394,21 @@ impl Config { name: "AC Charge Power", ..power.clone() }, + Entity { + key: "p_gen", + name: "Generator Power", + ..power.clone() + }, + Entity { + key: "p_eps_l1", + name: "EPS Power L1", + ..power.clone() + }, + Entity { + key: "p_eps_l2", + name: "EPS Power L2", + ..power.clone() + }, Entity { key: "e_pv_all", name: "PV Generation (All time)", @@ -470,6 +519,36 @@ impl Config { name: "Energy of Inverter (Today)", ..energy.clone() }, + Entity { + key: "e_gen_all", + name: "Energy of Generator (All time)", + ..energy.clone() + }, + Entity { + key: "e_gen_day", + name: "Energy of Generator (Today)", + ..energy.clone() + }, + Entity { + key: "e_eps_l1_all", + name: "Energy of EPS L1 (All time)", + ..energy.clone() + }, + Entity { + key: "e_eps_l1_day", + name: "Energy of EPS L1 (Today)", + ..energy.clone() + }, + Entity { + key: "e_eps_l2_all", + name: "Energy of EPS L2 (All time)", + ..energy.clone() + }, + Entity { + key: "e_eps_l2_day", + name: "Energy of EPS L2 (Today)", + ..energy.clone() + }, Entity { key: "t_inner", name: "Inverter Temperature", diff --git a/src/lxp/packet.rs b/src/lxp/packet.rs index 273d17d..0127cdc 100644 --- a/src/lxp/packet.rs +++ b/src/lxp/packet.rs @@ -198,6 +198,22 @@ pub struct ReadInputAll { pub e_gen_day: f64, #[nom(Parse = "Utils::le_u32_div10")] pub e_gen_all: f64, + #[nom(Parse = "Utils::le_u16_div10")] + pub v_eps_l1: f64, + #[nom(Parse = "Utils::le_u16_div10")] + pub v_eps_l2: f64, + pub p_eps_l1: u16, + pub p_eps_l2: u16, + pub s_eps_l1: u16, + pub s_eps_l2: u16, + #[nom(Parse = "Utils::le_u16_div10")] + pub e_eps_l1_day: f64, + #[nom(Parse = "Utils::le_u16_div10")] + pub e_eps_l2_day: f64, + #[nom(Parse = "Utils::le_u32_div10")] + pub e_eps_l1_all: f64, + #[nom(Parse = "Utils::le_u32_div10")] + pub e_eps_l2_all: f64, // EPS data; unsure what this is @@ -422,6 +438,22 @@ pub struct ReadInput4 { pub e_gen_day: f64, #[nom(Parse = "Utils::le_u32_div10")] pub e_gen_all: f64, + #[nom(Parse = "Utils::le_u16_div10")] + pub v_eps_l1: f64, + #[nom(Parse = "Utils::le_u16_div10")] + pub v_eps_l2: f64, + pub p_eps_l1: u16, + pub p_eps_l2: u16, + pub s_eps_l1: u16, + pub s_eps_l2: u16, + #[nom(Parse = "Utils::le_u16_div10")] + pub e_eps_l1_day: f64, + #[nom(Parse = "Utils::le_u16_div10")] + pub e_eps_l2_day: f64, + #[nom(Parse = "Utils::le_u32_div10")] + pub e_eps_l1_all: f64, + #[nom(Parse = "Utils::le_u32_div10")] + pub e_eps_l2_all: f64, // EPS data; unsure what this is #[nom(Ignore)] pub datalog: Serial, @@ -552,6 +584,16 @@ impl ReadInputs { p_gen: ri4.p_gen, e_gen_day: ri4.e_gen_day, e_gen_all: ri4.e_gen_all, + v_eps_l1: ri4.v_eps_l1, + v_eps_l2: ri4.v_eps_l2, + p_eps_l1: ri4.p_eps_l1, + p_eps_l2: ri4.p_eps_l2, + s_eps_l1: ri4.s_eps_l1, + s_eps_l2: ri4.s_eps_l2, + e_eps_l1_day: ri4.e_eps_l1_day, + e_eps_l2_day: ri4.e_eps_l2_day, + e_eps_l1_all: ri4.e_eps_l1_all, + e_eps_l2_all: ri4.e_eps_l2_all, datalog: ri1.datalog, time: ri1.time.clone(), }), diff --git a/src/mqtt.rs b/src/mqtt.rs index 0353e69..6f58c23 100644 --- a/src/mqtt.rs +++ b/src/mqtt.rs @@ -179,6 +179,7 @@ impl Message { ["read", "inputs", "1"] => ReadInputs(inverter, 1), ["read", "inputs", "2"] => ReadInputs(inverter, 2), ["read", "inputs", "3"] => ReadInputs(inverter, 3), + ["read", "inputs", "4"] => ReadInputs(inverter, 4), ["read", "input", register] => { ReadInput(inverter, register.parse()?, self.payload_int_or_1()?) }