Skip to main content

Asset

Enum Asset 

Source
pub enum Asset {
    Pv(PvArray),
    Battery(Battery),
    Evse(Evse),
    HeatPump(HeatPump),
    Dhw(DhwTank),
    Load(FlexibleLoad),
    Meter(Meter),
    Relay(Relay),
}
Expand description

Anything that consumes, produces, stores or measures.

Variants§

§

Pv(PvArray)

A photovoltaic array.

§

Battery(Battery)

A stationary battery.

§

Evse(Evse)

A charge point.

§

HeatPump(HeatPump)

A heat pump.

§

Dhw(DhwTank)

A hot water tank.

§

Load(FlexibleLoad)

Any other load.

§

Meter(Meter)

A meter.

§

Relay(Relay)

A switched output.

Implementations§

Source§

impl Asset

Source

pub fn meta(&self) -> &AssetMeta

The facts common to every asset.

Source

pub fn id(&self) -> &AssetId

The identifier.

Source

pub fn capabilities(&self) -> Capabilities

What the driver can do with it.

Source

pub fn fallgruppe(&self) -> Option<Fallgruppe>

Which § 14a Fallgruppe the asset falls into, ignoring thresholds, exemptions and commissioning dates — those are hems-grid’s decision.

A hot water tank’s heater is not a Fallgruppe of its own: [A1 2.4.1.b] counts auxiliary and emergency heaters with the heat pump, and a tank without a heat pump behind it is an ordinary load.

Source

pub fn symmetry_relevant(&self) -> bool

Whether VDE-AR-N 4100’s symmetry requirement applies to this device.

Not to everything behind the connection, which is the reading that looks obvious and is wrong. The VDE FNN Hinweis Symmetrischer Anschluss und Betrieb in Kundenanlagen is explicit about the scope of Abschnitt 5.5.2: “Die Anforderungen zum symmetrischen Betrieb gelten nur für Geräte die elektrische Energie einspeisen oder speichern können, also Erzeugungsanlagen, Speicher, Ladeeinrichtungen für Elektrofahrzeuge.”

So an inverter, a battery and a charge point are in scope; a heat pump, a hot-water tank and the household’s own single-phase load are not. Counting them made the site look more unbalanced than the rule says it is, and spent the difference on the one device the manager could still move.

Source

pub fn steuve_power(&self) -> Power

The power the § 14a threshold is applied to.

For a heat pump this is compressor plus heating rod [A1 2.4.1.b].

Source

pub fn ratings(&self) -> Envelope

What the hardware itself can do, before any rule applies.

The nameplate connection_power is what the network operator sees, and it is symmetric — which is wrong for almost every asset. A photovoltaic array cannot consume, a charge point without bidirectional hardware cannot export, and a battery’s charging and discharging ratings are routinely different. Handing the guard a symmetric interval invites it to command a value the device will silently ignore, and an ignored command is indistinguishable from a driver fault in the log.

Trait Implementations§

Source§

impl Clone for Asset

Source§

fn clone(&self) -> Asset

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Asset

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Asset

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Asset

Source§

fn eq(&self, other: &Asset) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for Asset

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for Asset

Auto Trait Implementations§

§

impl Freeze for Asset

§

impl RefUnwindSafe for Asset

§

impl Send for Asset

§

impl Sync for Asset

§

impl Unpin for Asset

§

impl UnsafeUnpin for Asset

§

impl UnwindSafe for Asset

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.