bikeshedder / sunspec

Rust crate for accessing SunSpec compliant devices in a safe and convenient way.
Apache License 2.0
4 stars 3 forks source link

Missing String SOC and SOH for Model 803 #12

Open kenny-peak-energy opened 4 hours ago

kenny-peak-energy commented 4 hours ago

Hi,

Thanks for the library.

It seems that the string state-of-charge and state-of-health are not represented in the 803 model. Also wondering why the name so_c_sf rather than soc_sf?

From the Sunspec JSON:

                    {
                        "desc": "Battery string state of charge, expressed as a percentage.",
                        "label": "String State of Charge",
                        "mandatory": "M",
                        "name": "StrSoC",
                        "sf": "SoC_SF",
                        "size": 1,
                        "type": "uint16",
                        "units": "%"
                    },
impl crate::Model for Model803 {
    const ID: u16 = 803;
    fn from_data(data: &[u16]) -> Result<Self, crate::ReadModelError> {
        Ok(Self {
            n_str: Self::N_STR.from_data(data)?,
            n_str_con: Self::N_STR_CON.from_data(data)?,
            mod_tmp_max: Self::MOD_TMP_MAX.from_data(data)?,
            mod_tmp_max_str: Self::MOD_TMP_MAX_STR.from_data(data)?,
            mod_tmp_max_mod: Self::MOD_TMP_MAX_MOD.from_data(data)?,
            mod_tmp_min: Self::MOD_TMP_MIN.from_data(data)?,
            mod_tmp_min_str: Self::MOD_TMP_MIN_STR.from_data(data)?,
            mod_tmp_min_mod: Self::MOD_TMP_MIN_MOD.from_data(data)?,
            mod_tmp_avg: Self::MOD_TMP_AVG.from_data(data)?,
            str_v_max: Self::STR_V_MAX.from_data(data)?,
            str_v_max_str: Self::STR_V_MAX_STR.from_data(data)?,
            str_v_min: Self::STR_V_MIN.from_data(data)?,
            str_v_min_str: Self::STR_V_MIN_STR.from_data(data)?,
            str_v_avg: Self::STR_V_AVG.from_data(data)?,
            str_a_max: Self::STR_A_MAX.from_data(data)?,
            str_a_max_str: Self::STR_A_MAX_STR.from_data(data)?,
            str_a_min: Self::STR_A_MIN.from_data(data)?,
            str_a_min_str: Self::STR_A_MIN_STR.from_data(data)?,
            str_a_avg: Self::STR_A_AVG.from_data(data)?,
            n_cell_bal: Self::N_CELL_BAL.from_data(data)?,
            cell_v_sf: Self::CELL_V_SF.from_data(data)?,
            mod_tmp_sf: Self::MOD_TMP_SF.from_data(data)?,
            a_sf: Self::A_SF.from_data(data)?,
            so_h_sf: Self::SO_H_SF.from_data(data)?,
            so_c_sf: Self::SO_C_SF.from_data(data)?,
            v_sf: Self::V_SF.from_data(data)?,
        })
    }
}
kenny-peak-energy commented 4 hours ago

Should this also be an Option?

    /// State of Charge
    ///
    /// State of charge, expressed as a percentage.
    ///
    /// Notes: Measurement.
    pub so_c: u16,