use core::str::FromStr;
macro_rules! define_fox_variables {
(
$(
[$variant:ident, $key:literal, $doc:literal $(;
values: { $( $val:literal => $val_doc:literal ),+ $(,)? }
)?]
),+ $(,)?
) => {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum FoxVariables {
$(
#[doc = $doc]
$(
#[doc = ""]
#[doc = "Possible values:"]
$(
#[doc = concat!("- `", $val, "`: ", $val_doc)]
)+
)?
$variant,
)+
}
impl FoxVariables {
#[inline]
pub const fn as_str(&self) -> &'static str {
match self {
$(
Self::$variant => $key,
)+
}
}
}
impl FromStr for FoxVariables {
type Err = ();
#[inline]
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
$(
$key => Ok(Self::$variant),
)+
_ => Err(()),
}
}
}
};
}
define_fox_variables! {
[AmbientTemperation, "ambientTemperation", "AmbientTemperature, unit: ℃"],
[BatChargePower, "batChargePower", "Charge Power, unit: kW"],
[BatCurrent, "batCurrent", "BatCurrent, unit: A"],
[BatDischargePower, "batDischargePower", "Discharge Power, unit: kW"],
[BatStatus, "batStatus", "Battery Status"],
[BatStatusV2, "batStatusV2", "Battery Status Name"],
[BatTemperature, "batTemperature", "batTemperature, unit: ℃"],
[BatVolt, "batVolt", "BatVolt, unit: V"],
[BoostTemperation, "boostTemperation", "BoostTemperature, unit: ℃"],
[ChargeEnergyToTal, "chargeEnergyToTal", "Total charge energy, unit: kWh"],
[ChargeTemperature, "chargeTemperature", "ChargeTemperature, unit: ℃"],
[CurrentFault, "currentFault", "The current error code is reported"],
[CurrentFaultCount, "currentFaultCount", "The number of errors"],
[DischargeEnergyToTal, "dischargeEnergyToTal", "Total discharge energy, unit: kWh"],
[DspTemperature, "dspTemperature", "DSPTemperature, unit: ℃"],
[EnergyThroughput, "energyThroughput", "Battery throughput, unit: kWh"],
[EpsCurrentR, "epsCurrentR", "EPS-RCurrent, unit: A"],
[EpsCurrentS, "epsCurrentS", "EPS-SCurrent, unit: A"],
[EpsCurrentT, "epsCurrentT", "EPS-TCurrent, unit: A"],
[EpsPower, "epsPower", "EPSPower, unit: kW"],
[EpsPowerR, "epsPowerR", "EPS-RPower, unit: kW"],
[EpsPowerS, "epsPowerS", "EPS-SPower, unit: kW"],
[EpsPowerT, "epsPowerT", "EPS-TPower, unit: kW"],
[EpsVoltR, "epsVoltR", "EPS-RVolt, unit: V"],
[EpsVoltS, "epsVoltS", "EPS-SVolt, unit: V"],
[EpsVoltT, "epsVoltT", "EPS-TVolt, unit: V"],
[Feedin, "feedin", "The total energy of the feeder, unit: kWh"],
[Feedin2, "feedin2", "Total feed network electricity consumption for Meter 2, unit: kWh"],
[FeedinPower, "feedinPower", "Feed-in Power, unit: kW"],
[Generation, "generation", "Cumulative power generation, unit: kWh"],
[GenerationPower, "generationPower", "Output Power, unit: kW"],
[GridConsumption, "gridConsumption", "Total grid electricity consumption, unit: kWh"],
[GridConsumption2, "gridConsumption2", "Total electricity consumption of Meter 2, unit: kWh"],
[GridConsumptionPower, "gridConsumptionPower", "GridConsumption Power, unit: kW"],
[InvBatCurrent, "invBatCurrent", "InvBatCurrent, unit: A"],
[InvBatPower, "invBatPower", "invBatPower, unit: kW"],
[InvBatVolt, "invBatVolt", "InvBatVolt, unit: V"],
[InvTemperation, "invTemperation", "InvTemperation, unit: ℃"],
[Loads, "loads", "Load power consumption, unit: kWh"],
[LoadsPower, "loadsPower", "Load Power, unit: kW"],
[LoadsPowerR, "loadsPowerR", "LoadsRPower, unit: kW"],
[LoadsPowerS, "loadsPowerS", "LoadsSPower, unit: kW"],
[LoadsPowerT, "loadsPowerT", "LoadsTPower, unit: kW"],
[MaxChargeCurrent, "maxChargeCurrent", "Maximum charge current, unit: A"],
[MaxDischargeCurrent, "maxDischargeCurrent", "Maximum discharge current, unit: A"],
[MeterPower, "meterPower", "MeterPower, unit: kW"],
[MeterPower2, "meterPower2", "Meter2Power, unit: kW"],
[MeterPowerR, "meterPowerR", "MeterRPower, unit: kW"],
[MeterPowerS, "meterPowerS", "MeterSPower, unit: kW"],
[MeterPowerT, "meterPowerT", "MeterTPower, unit: kW"],
[PowerFactor, "PowerFactor", "PowerFactor"],
[Pv10Current, "pv10Current", "PV10Current, unit: A"],
[Pv10Power, "pv10Power", "PV10Power, unit: kW"],
[Pv10Volt, "pv10Volt", "PV10Volt, unit: V"],
[Pv11Current, "pv11Current", "PV11Current, unit: A"],
[Pv11Power, "pv11Power", "PV11Power, unit: kW"],
[Pv11Volt, "pv11Volt", "PV11Volt, unit: V"],
[Pv12Current, "pv12Current", "PV12Current, unit: A"],
[Pv12Power, "pv12Power", "PV12Power, unit: kW"],
[Pv12Volt, "pv12Volt", "PV12Volt, unit: V"],
[Pv13Current, "pv13Current", "PV13Current, unit: A"],
[Pv13Power, "pv13Power", "PV13Power, unit: kW"],
[Pv13Volt, "pv13Volt", "PV13Volt, unit: V"],
[Pv14Current, "pv14Current", "PV14Current, unit: A"],
[Pv14Power, "pv14Power", "PV14Power, unit: kW"],
[Pv14Volt, "pv14Volt", "PV14Volt, unit: V"],
[Pv15Current, "pv15Current", "PV15Current, unit: A"],
[Pv15Power, "pv15Power", "PV15Power, unit: kW"],
[Pv15Volt, "pv15Volt", "PV15Volt, unit: V"],
[Pv16Current, "pv16Current", "PV16Current, unit: A"],
[Pv16Power, "pv16Power", "PV16Power, unit: kW"],
[Pv16Volt, "pv16Volt", "PV16Volt, unit: V"],
[Pv17Current, "pv17Current", "PV17Current, unit: A"],
[Pv17Power, "pv17Power", "PV17Power, unit: kW"],
[Pv17Volt, "pv17Volt", "PV17Volt, unit: V"],
[Pv18Current, "pv18Current", "PV18Current, unit: A"],
[Pv18Power, "pv18Power", "PV18Power, unit: kW"],
[Pv18Volt, "pv18Volt", "PV18Volt, unit: V"],
[Pv19Current, "pv19Current", "PV19Current, unit: A"],
[Pv19Power, "pv19Power", "PV19Power, unit: kW"],
[Pv19Volt, "pv19Volt", "PV19Volt, unit: V"],
[Pv1Current, "pv1Current", "PV1Current, unit: A"],
[Pv1Power, "pv1Power", "PV1Power, unit: kW"],
[Pv1Volt, "pv1Volt", "PV1Volt, unit: V"],
[Pv20Current, "pv20Current", "PV20Current, unit: A"],
[Pv20Power, "pv20Power", "PV20Power, unit: kW"],
[Pv20Volt, "pv20Volt", "PV20Volt, unit: V"],
[Pv21Current, "pv21Current", "PV21Current, unit: A"],
[Pv21Power, "pv21Power", "PV21Power, unit: kW"],
[Pv21Volt, "pv21Volt", "PV21Volt, unit: V"],
[Pv22Current, "pv22Current", "PV22Current, unit: A"],
[Pv22Power, "pv22Power", "PV22Power, unit: kW"],
[Pv22Volt, "pv22Volt", "PV22Volt, unit: V"],
[Pv23Current, "pv23Current", "PV23Current, unit: A"],
[Pv23Power, "pv23Power", "PV23Power, unit: kW"],
[Pv23Volt, "pv23Volt", "PV23Volt, unit: V"],
[Pv24Current, "pv24Current", "PV24Current, unit: A"],
[Pv24Power, "pv24Power", "PV24Power, unit: kW"],
[Pv24Volt, "pv24Volt", "PV24Volt, unit: V"],
[Pv2Current, "pv2Current", "PV2Current, unit: A"],
[Pv2Power, "pv2Power", "PV2Power, unit: kW"],
[Pv2Volt, "pv2Volt", "PV2Volt, unit: V"],
[Pv3Current, "pv3Current", "PV3Current, unit: A"],
[Pv3Power, "pv3Power", "PV3Power, unit: kW"],
[Pv3Volt, "pv3Volt", "PV3Volt, unit: V"],
[Pv4Current, "pv4Current", "PV4Current, unit: A"],
[Pv4Power, "pv4Power", "PV4Power, unit: kW"],
[Pv4Volt, "pv4Volt", "PV4Volt, unit: V"],
[Pv5Current, "pv5Current", "PV5Current, unit: A"],
[Pv5Power, "pv5Power", "PV5Power, unit: kW"],
[Pv5Volt, "pv5Volt", "PV5Volt, unit: V"],
[Pv6Current, "pv6Current", "PV6Current, unit: A"],
[Pv6Power, "pv6Power", "PV6Power, unit: kW"],
[Pv6Volt, "pv6Volt", "PV6Volt, unit: V"],
[Pv7Current, "pv7Current", "PV7Current, unit: A"],
[Pv7Power, "pv7Power", "PV7Power, unit: kW"],
[Pv7Volt, "pv7Volt", "PV7Volt, unit: V"],
[Pv8Current, "pv8Current", "PV8Current, unit: A"],
[Pv8Power, "pv8Power", "PV8Power, unit: kW"],
[Pv8Volt, "pv8Volt", "PV8Volt, unit: V"],
[Pv9Current, "pv9Current", "PV9Current, unit: A"],
[Pv9Power, "pv9Power", "PV9Power, unit: kW"],
[Pv9Volt, "pv9Volt", "PV9Volt, unit: V"],
[PVEnergyTotal, "PVEnergyTotal", "Photovoltaic power generation, unit: kWh"],
[PvPower, "pvPower", "PVPower, unit: kW"],
[RCurrent, "RCurrent", "RCurrent, unit: A"],
[ReactivePower, "ReactivePower", "ReactivePower, unit: kVar"],
[ResidualEnergy, "ResidualEnergy", "Battery Residual Energy, unit: 0.01kWh"],
[RFreq, "RFreq", "RFreq, unit: Hz"],
[RPower, "RPower", "RPower, unit: kW"],
[RunningState, "runningState", "Running State"; values: { "160" => "self-test", "161" => "waiting", "162" => "checking", "163" => "on-grid", "164" => "off-grid", "165" => "fault", "166" => "permanent-fault", "167" => "standby", "168" => "upgrading", "169" => "fct", "170" => "illegal" }],
[RVolt, "RVolt", "RVolt, unit: V"],
[SCurrent, "SCurrent", "SCurrent, unit: A"],
[SFreq, "SFreq", "SFreq, unit: Hz"],
[SoC, "SoC", "SoC, unit: %"],
[SOH, "SOH", "SOH, unit: %"],
[SPower, "SPower", "SPower, unit: kW"],
[SVolt, "SVolt", "SVolt, unit: V"],
[TCurrent, "TCurrent", "TCurrent, unit: A"],
[TFreq, "TFreq", "TFreq, unit: Hz"],
[TodayYield, "todayYield", "Today’s power generation, unit: kW"],
[TPower, "TPower", "TPower, unit: kW"],
[TVolt, "TVolt", "TVolt, unit: V"],
}