PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX s4ener: <https://saref.etsi.org/saref4ener/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

s4ener:PowerSequenceElement a rdfs:Class ;
  rdfs:label "Power sequence element"@en ;
  rdfs:comment "An element of a power sequence, roughly equivalent to slots in the existing S4ener."@en .

<https://saref.etsi.org/core/Device> a rdfs:Class .

s4ener:hasManufacturerNodeIdentification a rdf:Property ;
  rdfs:label "has manufacturer node identification"@en ;
  rdfs:comment "A node identification for the device as defined by the manufacturer. This could be used for the identification of a device, even if it was removed from the network and re-joined later with changed node address."@en ;
  rdfs:domain <https://saref.etsi.org/core/Device> ;
  rdfs:range <https://w3id.org/linkml/Any> ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasIdentifier> .

s4ener:PPBCInstruction a rdfs:Class ;
  rdfs:label "Power Profile Based Control Instruction"@en ;
  rdfs:comment "An instruction for a Power Profile Based Flexibility Profile."@en ;
  rdfs:subClassOf s4ener:FlexibilityInstruction .

s4ener:hasExecutionTime a rdf:Property ;
  rdfs:label "has execution time"@en ;
  rdfs:comment "Start time of the instruction"@en ;
  rdfs:domain s4ener:FlexibilityInstruction ;
  rdfs:range xsd:dateTimeStamp ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasTimestamp> .

s4ener:relatesToPowerProfileSequence a rdf:Property ;
  rdfs:label "Relates to power profile sequence"@en ;
  rdfs:comment "ID of the PPBC.PowerSequence that is being selected and scheduled by the CEM."@en ;
  rdfs:domain s4ener:PPBCInstruction ;
  rdfs:range s4ener:PowerSequence .

s4ener:abnormalCondition a rdf:Property ;
  rdfs:label "abnormal condition"@en ;
  rdfs:comment "Indicates if this is an instruction during an abnormal condition"@en ;
  rdfs:domain s4ener:FlexibilityInstruction ;
  rdfs:range xsd:boolean .

s4ener:relatesToPowerProfileSequenceContainer a rdf:Property ;
  rdfs:label "Relates to power profile sequence container"@en ;
  rdfs:comment "ID of the PPBC.PowerSequnceContainer of which the PPBC.PowerSequence is being selected and scheduled by the CEM."@en ;
  rdfs:domain s4ener:PPBCInstruction ;
  rdfs:range s4ener:PowerSequenceContainer .

s4ener:relatesToOffer a rdf:Property ;
  rdfs:label "relates to offer"@en ;
  rdfs:comment "The relationship between the s4ener:FlexibilityInstruction and the flexibility offer."@en ;
  rdfs:domain s4ener:FlexibilityInstruction ;
  rdfs:range s4ener:FlexOffer .

s4ener:relatesToPowerProfile a rdf:Property ;
  rdfs:label "Relates to power profile"@en ;
  rdfs:comment "ID of the PPBC.PowerProfileDefinition of which the PPBC.PowerSequence is being selected and scheduled by the CEM."@en ;
  rdfs:domain s4ener:PPBCInstruction ;
  rdfs:range s4ener:PowerProfile .

s4ener:hasCost a rdf:Property ;
  rdfs:label "has cost"@en ;
  rdfs:comment " Additional costs per second (e.g. wear, services) associated with this operation mode in the currency defined by the ResourceManagerDetails , excluding the commodity cost. The range is expressing uncertainty and is not linked to the operation_mode_factor."@en ;
  rdfs:domain s4ener:FlexibilityInstruction ;
  rdfs:range s4ener:DataPoint .

s4ener:LoadControlEventAction a rdfs:Class ;
  rdfs:label "Load Control event action"@en ;
  rdfs:comment "An action type used to express the action to be performed as a consequence of an event used to send overload warning severity level and related load control commands to a device (e.g. a household appliance or a smart meter)."@en .

<http://www.w3.org/2006/time#Interval> a rdfs:Class .

s4ener:OperationModeProfile a rdfs:Class ;
  rdfs:label "Operation mode control"@en ;
  rdfs:comment "A resource manager can declare multiple operation modes for a device. An operation mode is a mode/state that a device can find itself in, that is associated with a specific power value."@en ;
  rdfs:subClassOf s4ener:FlexibilityProfile .

s4ener:hasTransition a rdf:Property ;
  rdfs:label "has transition"@en ;
  rdfs:comment "The transitions between various saref:States or s4ener:OperationModes that either the Actuator or the OperationModeProfile can support."@en ;
  rdfs:range s4ener:Transition .

s4ener:hasTimer a rdf:Property ;
  rdfs:label "Has Timer"@en ;
  rdfs:comment "The set of timers that are available in this Actuator or OperationModeProfile"@en ;
  rdfs:range s4ener:Timer .

s4ener:ActuatorLevel a rdfs:Class ;
  rdfs:label "Actuator level"@en ;
  rdfs:comment "Independent from the ActuatorSwitch class, the ActuatorLevel class enables a user or application to model LEVEL commands (start, up, percentageAbsolute, relative, etc.). This can be used to dim a light, set the speed of an electric motor, etc."@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/Actuator> .

s4ener:hasTransitionTimestamp a rdf:Property ;
  rdfs:label "transition Timestamp"@en ;
  rdfs:comment "Time at which the transition from the previous Operation Mode was initiated. This value shall always be provided, unless the active OperationMode is the first OperationMode the Resource Manager is aware of."@en ;
  rdfs:range xsd:dateTimeStamp ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasTimestamp> .

s4ener:hasPreviousOperationMode a rdf:Property ;
  rdfs:label "has previous operation mode"@en ;
  rdfs:comment "The previous operation mode this device was in"@en ;
  rdfs:range s4ener:OperationMode .

s4ener:hasActiveOperationMode a rdf:Property ;
  rdfs:label "has active operation mode"@en ;
  rdfs:comment "A reference to the OperationMode that is presently active"@en ;
  rdfs:range s4ener:OperationMode .

s4ener:Transition a rdfs:Class ;
  rdfs:label "Transition"@en ;
  rdfs:comment "Possible transitions to switch from one Operation Mode to another or to set new parameters."@en .

s4ener:hasTransitionDuration a rdf:Property ;
  rdfs:label "Transition Duration"@en ;
  rdfs:comment "Indicates the time between the initiation of this Transition, and the time at which the device behaves according to the Operation Mode which is defined in the appropriate data element. When no value is provided it is assumed the transition duration is negligible."@en ;
  rdfs:domain s4ener:Transition ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:hasTransitionCosts a rdf:Property ;
  rdfs:label "has transition costs"@en ;
  rdfs:comment "Absolute costs for going through this Transition in the currency as described in the ResourceManagerDetails."@en ;
  rdfs:domain s4ener:Transition ;
  rdfs:range xsd:decimal .

s4ener:toOperationMode a rdf:Property ;
  rdfs:label "to state operation mode"@en ;
  rdfs:comment "ID of the OperationMode (exact type differs per ControlType) that will be switched to."@en ;
  rdfs:domain s4ener:Transition ;
  rdfs:range s4ener:OperationMode .

s4ener:isBlockedBy a rdf:Property ;
  rdfs:label "is blocked by"@en ;
  rdfs:comment "The Timers that block this Transition from initiating while at least one of these Timers is not yet finished"@en ;
  rdfs:domain s4ener:Transition ;
  rdfs:range s4ener:Timer .

s4ener:fromOperationMode a rdf:Property ;
  rdfs:label "from operation mode"@en ;
  rdfs:comment "ID of the OperationMode (exact type differs per ControlType) that should be switched from."@en ;
  rdfs:domain s4ener:Transition ;
  rdfs:range s4ener:OperationMode .

s4ener:startsTimer a rdf:Property ;
  rdfs:label "Starts Timer"@en ;
  rdfs:comment "List of IDs of Timers that will be (re)started when this transition is initiated"@en ;
  rdfs:domain s4ener:Transition ;
  rdfs:range s4ener:Timer .

s4ener:FillRateProfile a rdfs:Class ;
  rdfs:label "Fill rate control"@en ;
  rdfs:comment "A flexibility profile specified through a Fill Rate Based Profile."@en ;
  rdfs:subClassOf s4ener:FlexibilityProfile .

s4ener:hasStorage a rdf:Property ;
  rdfs:label "has storage"@en ;
  rdfs:comment "The storage regulated by the related Fill Rate Profile."@en ;
  rdfs:domain s4ener:FillRateProfile ;
  rdfs:range s4ener:Storage .

s4ener:isActuatedBy a rdf:Property ;
  rdfs:label "is actuated by"@en ;
  rdfs:comment "A reference to an (external) actuator that can potentially activate this profile or where the instruction originates from."@en ;
  rdfs:range <https://saref.etsi.org/core/Actuator> .

s4ener:NominalPowerLimit a rdfs:Class ;
  rdfs:label "Nominal Power Limit"@en ;
  rdfs:comment "A device may have nominal power consumption and/or production values that are defined by the manufacturer and must not be exceeded, so that the power limit must stay within these constraints."@en ;
  rdfs:subClassOf s4ener:PowerLimit .

s4ener:hasPowerLimitProductionMax a rdf:Property ;
  rdfs:label "has power limit production Max"@en ;
  rdfs:comment "The relationship between the power limit and the value indicating the max limit production."@en ;
  rdfs:domain s4ener:PowerLimit ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> .

s4ener:rangeBoundary a rdf:Property ;
  rdfs:label "range boundary"@en ;
  rdfs:comment "Boundaries of the power range of this PEBC.AllowedLimitRange. The CEM is allowed to choose values within this range for the power envelope for the limit as described in limit_type. The start of the range shall be smaller or equal than the end of the range."@en ;
  rdfs:range s4ener:NumberRange .

s4ener:isObligatory a rdf:Property ;
  rdfs:label "is obligatory"@en ;
  rdfs:comment "A relationship between the power limit and the boolean value indicating whether the power limit is obligatory"@en ;
  rdfs:domain s4ener:PowerLimit ;
  rdfs:range xsd:boolean .

s4ener:hasNominalProduction a rdf:Property ;
  rdfs:label "has nominal production Max"@en ;
  rdfs:comment "The relationship between the nominal power limit and the value indicating the max limit production."@en ;
  rdfs:domain s4ener:NominalPowerLimit ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> ;
  rdfs:subPropertyOf s4ener:hasPowerLimitProductionMax .

s4ener:hasPowerLimitDuration a rdf:Property ;
  rdfs:label "has power limit duration"@en ;
  rdfs:comment "The relationship between the power limit and its duration. Power limit may come with a time period of validity based on duration"@en ;
  rdfs:domain s4ener:PowerLimit ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:hasPowerLimitState a rdf:Property ;
  rdfs:label "has power limit state"@en ;
  rdfs:comment "The relationship between the power limit state and its state (active/ inactive)."@en ;
  rdfs:domain s4ener:PowerLimit ;
  rdfs:range <https://w3id.org/linkml/Any> .

s4ener:isChangeable a rdf:Property ;
  rdfs:label "is changeable"@en ;
  rdfs:comment """A relationship indicating that this element can be changed by its operator. The boolean value indicates whether it is indeed changeable.

In the SAREF4ENER extension this property is intended for PowerLimits and IncentiveTable elements, such as the IncentiveTableProfile, IncentiveTableSlot, and the IncentiveTableTier."""@en ;
  rdfs:range xsd:boolean .

s4ener:isActive a rdf:Property ;
  rdfs:label "is active"@en ;
  rdfs:comment "Indicates whether the power limit is currently active"@en ;
  rdfs:domain s4ener:PowerLimit ;
  rdfs:range xsd:boolean .

s4ener:hasPowerLimitConsumptionMax a rdf:Property ;
  rdfs:label "has power limit consumption Max"@en ;
  rdfs:comment "The relationship between the power limit and the value indicating the max limit consumption."@en ;
  rdfs:domain s4ener:PowerLimit ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> .

s4ener:hasNominalConsumption a rdf:Property ;
  rdfs:label "has nominal consumption Max"@en ;
  rdfs:comment "The relationship between the nominal power limit and the value indicating the max limit consumption."@en ;
  rdfs:domain s4ener:NominalPowerLimit ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> ;
  rdfs:subPropertyOf s4ener:hasPowerLimitConsumptionMax .

s4ener:limitType a rdf:Property ;
  rdfs:label "Limit Type"@en ;
  rdfs:comment "Indicates if this ranges applies to the upper limit or the lower limit."@en ;
  rdfs:domain s4ener:AllowedLimitRange ;
  rdfs:range s4ener:PowerEnvelopeLimitType .

s4ener:Storage a rdfs:Class ;
  rdfs:label "Storage"@en ;
  rdfs:comment "storage device which is the main component of Fill Rate Based Control type.). In the context of flexibility control and instructuons, a device shall be able to inform the CEM about its fill level, a measure of how full the storage is, and the lower and upper boundaries that the fill level should remain within. "@en ;
  rdfs:subClassOf s4ener:Device .

s4ener:deviceName a rdf:Property ;
  rdfs:label "device name"@en ;
  rdfs:comment "Provides the name of the device as defined by the manufacturer."@en ;
  rdfs:range xsd:string .

s4ener:hardwareRevision a rdf:Property ;
  rdfs:label "hardware revision "@en ;
  rdfs:comment "Indicates the hardware revision of the device as defined by the manufacturer."@en ;
  rdfs:range xsd:string .

s4ener:hasFillLevelRange a rdf:Property ;
  rdfs:label "Fill Level Range"@en ;
  rdfs:comment """The range of the fill level for which this FRBC.OperationModeElement applies. 

If this concept is applied on a Storage it indicated the range in which a storage should remain."""@en ;
  rdfs:range s4ener:NumberRange .

s4ener:presentFillLevel a rdf:Property ;
  rdfs:label "present fill level"@en ;
  rdfs:comment "A saref:PropertyValue with a percentage value indicating the fill level of the storage."@en ;
  rdfs:domain s4ener:Storage ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> .

<https://saref.etsi.org/core/hasManufacturer> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

s4ener:receives a rdf:Property ;
  rdfs:label "receives"@en ;
  rdfs:comment "A relationship between a device (e.g., an appliance or a smart meter) and a load control event"@en ;
  rdfs:range s4ener:LoadControlEventData .

s4ener:serialNumber a rdf:Property ;
  rdfs:label "serial number"@en ;
  rdfs:comment "Indicates the serial number of a device as defined by the manufacturer. Usually the same as printed on the case."@en ;
  rdfs:range xsd:string .

s4ener:firmwareVersion a rdf:Property ;
  rdfs:label "has firmware version"@en ;
  rdfs:comment "Version identifier of the firmware used in the device (provided by the manufacturer)"@en ;
  rdfs:domain s4ener:Device ;
  rdfs:range xsd:string .

s4ener:hasLeakageBehaviour a rdf:Property ;
  rdfs:label "has leakage behaviour"@en ;
  rdfs:comment "The Leakage Behaviour associated with this storage."@en ;
  rdfs:domain s4ener:Storage ;
  rdfs:range s4ener:LeakageBehaviour .

s4ener:hasRole a rdf:Property ;
  rdfs:label "performs role"@en ;
  rdfs:comment "Each Resource Manager provides one or more energy Roles"@en ;
  rdfs:domain s4ener:Device ;
  rdfs:range s4ener:Role .

s4ener:deviceCode a rdf:Property ;
  rdfs:label "device code"@en ;
  rdfs:comment "Provides a device code for the device as defined by the manufacturer."@en ;
  rdfs:range xsd:string .

s4ener:vendorName a rdf:Property ;
  rdfs:label "vendor name"@en ;
  rdfs:comment "Provides the name of the vendor of the device as defined by the manufacturer."@en ;
  rdfs:range xsd:string .

s4ener:hasPowerSource a rdf:Property ;
  rdfs:label "Power source"@en ;
  rdfs:comment "Indicates the power source of a device. Possible values are e.g. mainsSinglePhase or battery "@en ;
  rdfs:range s4ener:PowerSource .

s4ener:fillRate a rdf:Property ;
  rdfs:label "Fill Rate Level"@en ;
  rdfs:comment "Indicates the change in fill_level per second. The lower_boundary of the NumberRange is associated with an operation_mode_factor of 0, the upper_boundary is associated with an operation_mode_factor of 1."@en ;
  rdfs:range s4ener:NumberRange .

s4ener:vendorCode a rdf:Property ;
  rdfs:label "vendor code"@en ;
  rdfs:comment "Provides a code for the vendor of the device as defined by the manufacturer."@en ;
  rdfs:range xsd:string .

s4ener:softwareRevision a rdf:Property ;
  rdfs:label "software revision"@en ;
  rdfs:comment "Indicates the software revision of a device as defined by the manufacturer."@en ;
  rdfs:range xsd:string .

s4ener:hasFillLevelTargetProfile a rdf:Property ;
  rdfs:label "has fill level target profile"@en ;
  rdfs:comment """The Fill Level Target Profile of the storage that the current Fill Rate Profile tries to accomodate for. 

NB. This cannot be modelled as a TimeSeries, since the x-axis is not time."""@en ;
  rdfs:domain s4ener:Storage ;
  rdfs:range s4ener:FillLevelTargetProfile .

s4ener:brandName a rdf:Property ;
  rdfs:label "brand name"@en ;
  rdfs:comment "Provides the name of the brand of a device. Useful where the name of the brand and the vendor differs."@en ;
  rdfs:range xsd:string .

s4ener:EndTimeDurationDescription a rdfs:Class ;
  rdfs:label "End time duration Description"@en ;
  rdfs:comment "The duration description for the end time duration temporal entities"@en ;
  rdfs:subClassOf <http://www.w3.org/2006/time#DurationDescription> .

s4ener:FlexRequest a rdfs:Class ;
  rdfs:label "Flex request"@en ;
  rdfs:comment "The flexibility request"@en .

s4ener:producedBy a rdf:Property ;
  rdfs:label "produced by"@en ;
  rdfs:comment """A relation between an entity (datapoint, message, timeseries, instruction) that has been produced by a device or other agent.
  
  In the context of SAREF4ENER this property is intended for s4ener:DataPoint, s4ener:TimeSeries, and the various types of flexibility instructions, FlexOffers and FlexRequests."""@en ;
  rdfs:range xsd:string .

s4ener:hasRecipient a rdf:Property ;
  rdfs:label "has recipient"@en ;
  rdfs:comment "This property can be used to connect a flexibility offer or/and flexibility request to a foaf:agent or saref:Device."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

s4ener:hasEffectivePeriod a rdf:Property ;
  rdfs:label "has effective period"@en ;
  rdfs:comment """This connects to the temporal entity which describes when (time interval) the quantity of this data point was, is, or will be in effect. This is the time interval which is covered by the forecast.
This should be equivalent to the time interval covered by the time-series that express the forecast."""@en ;
  rdfs:range <http://www.w3.org/2006/time#Interval> .

s4ener:hasCreationTime a rdf:Property ;
  rdfs:label "has creation time"@en ;
  rdfs:comment """The time instant that defines the creation time of a data point or quantity or forecast or similar entities. This is not the same as the time at which the quantity is in effect. For example, if a temperature is forecasted today at 12:30 (creation time of the forecast) for the following day at 14:45 (time when the temperature is expected to be in effect), the this instant should be 12:30 of today.

A creation time (instant). This is the point in time when the data point was created, which is not necessarily the time for which it is valid. In the case of soft-sensors or forecasters, a data point might have been created ahead of time, in the case of a direct observation a data point might created at its time of validity (or at the end of its validity time interval) and in the case of an archived value the data point might have been created after the fact."""@en ;
  rdfs:range xsd:dateTime , xsd:dateTimeStamp .

s4ener:includes a rdf:Property ;
  rdfs:label "includes"@en ;
  rdfs:comment "This property can be used to connect the flexibility offer and/or flexibility request to the flexibility profile. Additionally, it can be used to specify the s4ener:datapoint, s4ener:timeseries and ic-fc:forecast included in the flexibility offer and/or  flexibility request."@en ;
  rdfs:range <https://w3id.org/linkml/Any> .

s4ener:LoadControlEventState a rdfs:Class ;
  rdfs:label "Load control event state "@en ;
  rdfs:comment "In the load control, it expresses the possible states of an event used to send overload warning severity level and related load control commands to a device (e.g. a household appliance or a smart meter)."@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/State> .

s4ener:PowerLimit a rdfs:Class ;
  rdfs:label "Power Limit"@en ;
  rdfs:comment "A power limit is defined as the maximum value for power consumption and/or production that must not be exceeded by e.g. a (group of) device(s), a building, or also a district."@en ;
  rdfs:subClassOf s4ener:AllowedLimitRange .

s4ener:FillLevelTargetProfileElement a rdfs:Class ;
  rdfs:label "Fill level target profile element"@en ;
  rdfs:comment "A description of the various Elements detailing the Fill Level Target Profile consists."@en .

<https://saref.etsi.org/core/Actuator> a rdfs:Class .

s4ener:LoadControlEventData a rdfs:Class ;
  rdfs:label "Load control event data"@en ;
  rdfs:comment "An event used to send overload warning severity level and related load control commands to a device (e.g. a household appliance or a smart meter)."@en .

s4ener:triggersEventActionProduce a rdf:Property ;
  rdfs:label "triggers event action produce"@en ;
  rdfs:comment "A relationship between a load control event and the produce action triggered by this event"@en ;
  rdfs:range s4ener:EventActionProduce .

s4ener:triggersEventActionConsume a rdf:Property ;
  rdfs:label "triggers event action consume"@en ;
  rdfs:comment "A relationship between a load control event and the consume action triggered by this event"@en ;
  rdfs:range s4ener:EventActionConsume .

s4ener:hasDevice a rdf:Property ;
  rdfs:label "has device"@en ;
  rdfs:comment "A relationship between a load control event (used to send overload warning severity level and related load control commands) and the device interested by this event."@en ;
  rdfs:range s4ener:Device .

<https://saref.etsi.org/core/hasTimestamp> a rdf:Property ;
  rdfs:range xsd:dateTime .

<https://saref.etsi.org/core/hasIdentifier> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

s4ener:PowerEnvelopeProfile a rdfs:Class ;
  rdfs:label "Power envelope control"@en ;
  rdfs:comment "A Flexibility Profile described through a Power Envelope Profile."@en ;
  rdfs:subClassOf s4ener:FlexibilityProfile .

s4ener:hasPowerEnvelope a rdf:Property ;
  rdfs:label "has power envelope"@en ;
  rdfs:comment "The PEBC.PowerEnvelope(s) that should be followed by the Resource Manager. There shall be at least one PEBC.PowerEnvelope, but at most one PEBC.PowerEnvelope for each Commodity."@en ;
  rdfs:range s4ener:PowerEnvelope .

s4ener:hasPowerEnvelopeElement a rdf:Property ;
  rdfs:label "has power envelope element"@en ;
  rdfs:comment "This property relates a PowerEnvelopeProfile to the various specific PowerEnvelops contained in the profile."@en ;
  rdfs:domain s4ener:PowerEnvelopeProfile ;
  rdfs:range s4ener:PowerEnvelope .

s4ener:hasConstraints a rdf:Property ;
  rdfs:label "has constraints"@en ;
  rdfs:comment "This property relates a Power Envelop Instruction or Profile to the constraints it needs to follow. There are two types of constraints modelled: Power constraints and energy constraints."@en ;
  rdfs:range xsd:string .

s4ener:PowerProfile a rdfs:Class ;
  rdfs:label "Power profile control"@en ;
  rdfs:comment "PPBC.PowerProfileDefinition"@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/Profile> .

<https://saref.etsi.org/core/consistsOf> a rdf:Property ;
  rdfs:range s4ener:AlternativesGroup , s4ener:Slot , <https://w3id.org/linkml/Any> , s4ener:PowerSequence .

s4ener:nodeRemoteControllable a rdf:Property ;
  rdfs:label "node remote controllable"@en ;
  rdfs:comment "Indicates whether the power profile of a device is configured for remote control (e.g., by an energy management system).This refers to the selection chosen by the user on the remote control feature of the device. If nodeRemoteControllable is equal to FALSE, all the supported power sequences shall set the sequenceRemoteControllable property to FALSE. If nodeRemoteControllable is equal to TRUE, at least one power sequence shall be remotely controllable by setting the sequenceRemoteControllable property to TRUE."@en ;
  rdfs:range xsd:boolean .

s4ener:totalSequencesCountMax a rdf:Property ;
  rdfs:label "total sequences count max"@en ;
  rdfs:comment "Represents the total number of power sequences supported by the power profile of a device"@en ;
  rdfs:range xsd:unsignedInt .

s4ener:supportsSingleSlotSchedulingOnly a rdf:Property ;
  rdfs:label "supports single slot scheduling only"@en ;
  rdfs:comment "If set toTRUE, the power profile of a device does NOT permit the modification of more than one slot per configuration command."@en ;
  rdfs:range xsd:boolean .

s4ener:belongsTo a rdf:Property ;
  rdfs:label "belongs to"@en ;
  rdfs:comment "A relationship identifying the ownership of an entity. In particular, a slot belongs to a power sequence, a power sequence belongs to an alternative, an alternative  belongs to a power profile, a power profile belongs to a device.  "@en ;
  rdfs:range s4ener:Device , s4ener:PowerSequence , s4ener:AlternativesGroup , s4ener:PowerProfile .

s4ener:supportsReselection a rdf:Property ;
  rdfs:label "supports reselection"@en ;
  rdfs:comment "If set toTRUE, the power profile of a device does not restrict the number of power sequence re-selections by the CEM, i.e. within a given alternative the CEM may first choose one power sequence, alter the selection by configuring another sequence later on, then alter the selection again, etc. (provided the process rules and data still permit configuration). If supportsReselection is set to FALSE, the device permits the CEM to select a power sequence of an alternative only once."@en ;
  rdfs:range xsd:boolean .

s4ener:hasPowerSequenceContainer a rdf:Property ;
  rdfs:label "has power sequence container"@en ;
  rdfs:comment "The various power sequence containers contained within an S2 Power Profile. The containers have to executed one after the other. Each container contains various Power Sequence anong which the EMS can choose the appropriate Power Sequence for the current energy demands."@en ;
  rdfs:domain s4ener:PowerProfile ;
  rdfs:range s4ener:PowerSequenceContainer .

s4ener:Role a rdfs:Class ;
  rdfs:label "Role"@en ;
  rdfs:comment "A codelist containing the various roles a device can take: producer, consumer, and storage."@en .

s4ener:hasRoleType a rdf:Property ;
  rdfs:label "role type"@en ;
  rdfs:comment "The type of this specific role"@en ;
  rdfs:domain s4ener:Role ;
  rdfs:range s4ener:RoleType .

s4ener:hasCommodity a rdf:Property ;
  rdfs:label "Uses commodity"@en ;
  rdfs:comment "An indication of which commodity this Role is a consumer, producer, or storer of."@en ;
  rdfs:domain s4ener:Role ;
  rdfs:range <https://saref.etsi.org/core/Commodity> .

s4ener:Incentive a rdfs:Class ;
  rdfs:label "Incentive"@en ;
  rdfs:comment "An Incentive indicates the intersection of a tier with a slot. In this particular combination of slot and tier there are a particular costs to draw this type of energy. For example, drawing power from the grid costs 0.30 euro per kilowatthour during the afternoon, but will only be activated from a lower boundary of 3000W."@en ;
  rdfs:subClassOf s4ener:DataPoint .

s4ener:hasUsage a rdf:Property ;
  rdfs:label "has usage"@en ;
  rdfs:comment "This property provides the possibility to add some additional information about the usage of a data-point or time-series. For example, a data point or time series can be used as an upper limit, a lower limit, a baseline, a maximum versus minimum value, or a consumption versus a production value."@en ;
  rdfs:range s4ener:Usage .

s4ener:hasQuantile a rdf:Property ;
  rdfs:label "has quantile"@en ;
  rdfs:comment "Used to define a quantile for example on a data point of a quantile time series. The quantile must be a ratio, usually a percentage. In a quantile forecast the hasQuantile property cannot be empty. his property assigns to the data point the percentage of values that are below this value. In other words, a data point with quantile 90 indicates that 90 % of other measurements are (estimated to be) lower. "@en ;
  rdfs:domain s4ener:DataPoint ;
  rdfs:range xsd:decimal .

s4ener:hasLowerBoundary a rdf:Property ;
  rdfs:label "has lower boundary"@en ;
  rdfs:comment "This property relates an IncentiveTableBoundary to the datapoint describing its lower boundary or starting point at which this boundary becomes active."@en ;
  rdfs:domain s4ener:Incentive ;
  rdfs:range s4ener:DataPoint .

s4ener:belongsToTimeSeries a rdf:Property ;
  rdfs:label "belongs to time series"@en ;
  rdfs:comment "The relationship that connects a data point to a time series."@en ;
  rdfs:domain s4ener:DataPoint ;
  rdfs:range s4ener:TimeSeries .

s4ener:hasUpperBoundary a rdf:Property ;
  rdfs:label "has upper boundary"@en ;
  rdfs:comment "This property relates a boundary to its upper boundary or the value at which this incentive becomes inactive. This value is optional, because the upper boundary can be inferred from the lower boundary of the next boundary."@en ;
  rdfs:domain s4ener:Incentive ;
  rdfs:range s4ener:DataPoint .

s4ener:hasUpdateRate a rdf:Property ;
  rdfs:label "has update rate"@en ;
  rdfs:comment """The rate at which a data point or time-series or forecast or other data entity is being updated.

If the time series gets regularly updated, then the time between two updates can be recorded here."""@en ;
  rdfs:range xsd:duration .

s4ener:GaussianDataPoint a rdfs:Class ;
  rdfs:label "Gaussian data point"@en ;
  rdfs:comment "A data point whose quantity is a standard deviation."@en ;
  rdfs:subClassOf s4ener:DataPoint .

s4ener:hasStandardDeviation a rdf:Property ;
  rdfs:label "has standard deviation"@en ;
  rdfs:comment "The standard deviation (i.e. the square root of the average of the squared deviations of the values subtracted from their average value) can be described with this property."@en ;
  rdfs:domain s4ener:GaussianDataPoint ;
  rdfs:range xsd:decimal .

s4ener:ContractualPowerLimit a rdfs:Class ;
  rdfs:label "Contractual Power Limit"@en ;
  rdfs:comment "The contractual power limit of a device"@en ;
  rdfs:subClassOf s4ener:PowerLimit .

s4ener:hasContractualConsumptionMax a rdf:Property ;
  rdfs:label "has contractual consumption Max"@en ;
  rdfs:comment "The relationship between the contractual power limit and the value indicating the max limit consumption."@en ;
  rdfs:domain s4ener:ContractualPowerLimit ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> ;
  rdfs:subPropertyOf s4ener:hasPowerLimitConsumptionMax .

s4ener:hasContractualProductionMax a rdf:Property ;
  rdfs:label "has contractual production Max"@en ;
  rdfs:comment "The relationship between the contractual power limit and the value indicating the max limit production."@en ;
  rdfs:domain s4ener:ContractualPowerLimit ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> ;
  rdfs:subPropertyOf s4ener:hasPowerLimitProductionMax .

<https://saref.etsi.org/core/PropertyValue> a rdfs:Class .

s4ener:IncentiveTableSlot a rdfs:Class ;
  rdfs:label "Incentive table slot"@en ;
  rdfs:comment "This concept describes a slot that belongs to a Incentive Table. Each slot of the Incentive Table consists of a series of (lower) boundaries, each indicating the power at which a change to another incentive takes place. Additionally, each boundary is associated with a IncentiveTableTier."@en ;
  rdfs:subClassOf s4ener:Slot .

s4ener:hasLatestEndTime a rdf:Property ;
  rdfs:label "has latest end time"@en ;
  rdfs:comment """The latest possible end time for a power sequence or a slot. Only 'xs:duration' value types SHALL be used to denote a relative time which relates to 'now' as time 0.

Note: This element applies to the first repetition of the slot number only.

This property is suggested to be added to SAREF4Ener_v2 to replace the time:TemporalEntity and/or time:DurationDescription."""@en ;
  rdfs:range <https://w3id.org/linkml/Any> ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasTimestamp> .

s4ener:optionalSlot a rdf:Property ;
  rdfs:label "optional slot"@en ;
  rdfs:comment "Indicates whether a slot is optional (if set to TRUE). Otherwise, if a slot is mandatory, SHALL be omitted or set to FALSE. Note: This element applies to every repetition of the slot number."@en ;
  rdfs:range xsd:boolean .

s4ener:hasMinDuration a rdf:Property ;
  rdfs:label "has min duration"@en ;
  rdfs:comment "If a slot has a configurable duration, it SHALL be present and denote the minimum supported configuration. Note: This element applies to the first repetition of the slot number only."@en ;
  rdfs:domain s4ener:PowerSequence ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:hasSlotValue a rdf:Property ;
  rdfs:label "has slot value"@en ;
  rdfs:comment "This property is intended to specify the power or energy value of a slot in a power sequence as part of a power profile."@en ;
  rdfs:domain s4ener:Slot ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> .

s4ener:hasEndTime a rdf:Property ;
  rdfs:label "end time"@en ;
  rdfs:comment """The endTime of a power sequence. If the value is available, it SHALL be denoted here. Otherwise the element SHALL be omitted.
The end time of a slot MAY be stated in this element. The following equation SHALL apply: endTime - startTime = defaultDuration."""@en ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasTimestamp> .

s4ener:hasDurationUncertainty a rdf:Property ;
  rdfs:label "Duration uncertainty"@en ;
  rdfs:comment "The uncertainty of the duration given in the s4ener:defaultDuration property."@en ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:hasRemainingPauseTime a rdf:Property ;
  rdfs:label "has remaining pause time"@en ;
  rdfs:comment "The duration that the current slot (s4ee:activeSlotNumber) permits being paused. This element SHALL ONLY be present if the power sequence is interruptible. Otherwise, it SHALL be omitted. In case the power sequence is interruptible the following rules apply: If the element is absent this means there is no explicit pause duration restriction for the current slot; a value of 0s denoted the slot does not permit being paused."@en ;
  rdfs:range xsd:duration .

s4ener:hasDefaultDuration a rdf:Property ;
  rdfs:label "has default duration"@en ;
  rdfs:comment """The duration of a slot (SHALL be present in case of 'determined slot'). If a slot has a configurable lenght, this element SHALL reflect the currently configured lenght

This property is suggested to be added to SAREF4Ener_v2 to replace the time:TemporalEntity and/or time:DurationDescription."""@en ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:hasEarliestStartTime a rdf:Property ;
  rdfs:label "has earliest start time"@en ;
  rdfs:comment """The earliest possible start time for a power sequence or a slot. Only 'xs:duration' value types SHALL be used to denote a relative time which relates to 'now' as time 0.

Note: This element applies to the first repetition of the slot number only.

This property is suggested to be added to SAREF4Ener_v2 to replace the time:TemporalEntity and/or time:DurationDescription."""@en ;
  rdfs:range xsd:dateTimeStamp ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasTimestamp> .

s4ener:hasMaxDuration a rdf:Property ;
  rdfs:label "has max duration"@en ;
  rdfs:comment "If a slot has a configurable duration, it SHALL be present and denote the maximum supported configuration. Note: This element applies to the first repetition of the slot number only"@en ;
  rdfs:domain s4ener:PowerSequence ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:slotActivated a rdf:Property ;
  rdfs:label "slot activated"@en ;
  rdfs:comment "If a slot is optional, represents the current status of the slot (true = the slot will be executed, false = the slot will not be executed). If the slot is not optional, this element SHALL be absent."@en ;
  rdfs:range xsd:boolean .

s4ener:hasStartTime a rdf:Property ;
  rdfs:label "has start time"@en ;
  rdfs:comment "The startTime of a power sequence or slot. SHALL be present"@en ;
  rdfs:range xsd:dateTimeStamp ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasTimestamp> .

s4ener:hasIncentive a rdf:Property ;
  rdfs:label "has incentive"@en ;
  rdfs:comment "This property relates an IncentiveTable element, such as an IncentiveTableSlot or an IncentiveTableTier to the boundaries that it consists of."@en ;
  rdfs:range s4ener:Incentive .

s4ener:slotNumber a rdf:Property ;
  rdfs:label "slot number"@en ;
  rdfs:comment "Provides a unique slot identifier for a certain power sequence"@en ;
  rdfs:range xsd:unsignedInt .

s4ener:OperationMode a rdfs:Class ;
  rdfs:label "Operation Mode"@en ;
  rdfs:comment "A resource manager can declare multiple operation modes for a device. An operation mode is a mode/state that a device can find itself in, that is associated with a specific power value."@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/State> .

s4ener:hasPowerRange a rdf:Property ;
  rdfs:label "has power ranges"@en ;
  rdfs:comment "The power produced or consumed by this operation mode. The start of each PowerRange is associated with an operation_mode_factor of 0, the end is associated with an operation_mode_factor of 1. In the array there must be at least one PowerRange, and at most one PowerRange per Commodity."@en ;
  rdfs:range s4ener:PowerRange .

s4ener:hasSupplyRange a rdf:Property ;
  rdfs:label "Has Supply Range"@en ;
  rdfs:comment "The SupplyRange this OperationMode of a Demand Driven Profile can deliver for the CEM to match the DemandRate. The start of the NumberRange is associated with an operation_mode_factor of 0, the end is associated with an operation_mode_factor of 1."@en ;
  rdfs:domain s4ener:OperationMode ;
  rdfs:range s4ener:NumberRange .

s4ener:hasOperationModeElement a rdf:Property ;
  rdfs:label "Has Operation Mode Element"@en ;
  rdfs:comment "List of OperationModeElements, which describe the properties of this FRBC.OperationMode depending on the fill_level. The fill_level_ranges of the items in the Array must be contiguous."@en ;
  rdfs:domain s4ener:OperationMode ;
  rdfs:range s4ener:OperationModeElement .

s4ener:FillLevelTargetProfile a rdfs:Class ;
  rdfs:label "Fill level target profile"@en ;
  rdfs:comment "The target profile that a fill rate based control flexibility profile tries to follow."@en .

s4ener:hasFillLevelTargetProfileElement a rdf:Property ;
  rdfs:label "has fill level target profile element"@en ;
  rdfs:comment "The various Fill Level Target Profile Elements detailing the Fill Level Target Profile that the current Fill Level Based Profile tries to accomodate for."@en ;
  rdfs:domain s4ener:FillLevelTargetProfile ;
  rdfs:range s4ener:FillLevelTargetProfileElement .

s4ener:Device a rdfs:Class ;
  rdfs:label "Device"@en ;
  rdfs:comment "A specialization of a saref:Device that exposes a power profile with power sequences to the CEM. Most of the existing devices can expose at most one power profile, but there are special cases in which more than one power profiles can be exposed by the same device. For example, consider the case of a combined fridge-freezer in which there are 2 logical devices (fridge and freezer) combined in 1 physical device. This combined device can expose 2 power profiles, one for the fridge and one for the freezer. A s4ee:Device (e.g. a household appliance or a smart meter) can also receive events about overload warning severity level and related load control commands (LoadControlEventData)"@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/Device> .

s4ener:StartInterruptionInstruction a rdfs:Class ;
  rdfs:label "Start Interruption Instruction"@en ;
  rdfs:comment "An instruction or message indicating the start of an interruption."@en ;
  rdfs:subClassOf s4ener:InterruptionInstruction .

s4ener:hasInterruptionStartTime a rdf:Property ;
  rdfs:label "Has Interruption Start Time"@en ;
  rdfs:comment "The start time included in an Interruption Instruction message indicating when the interruption should start."@en ;
  rdfs:domain s4ener:InterruptionInstruction ;
  rdfs:range xsd:dateTimeStamp ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasTimestamp> .

s4ener:hasInterruptionEndTime a rdf:Property ;
  rdfs:label "has end time Interruption"@en ;
  rdfs:comment "The end time included in an Interruption Instruction message indicating when the interruption should end."@en ;
  rdfs:domain s4ener:InterruptionInstruction ;
  rdfs:range xsd:dateTimeStamp ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasTimestamp> .

s4ener:FlexibilityProfile a rdfs:Class ;
  rdfs:label "Flexibility Profile"@en ;
  rdfs:comment """Different control types to describe the energy flexibility that a device has to offer.  Charging of an EV for instance, may be controlled by power profile-based control or fill-rate -based control. It is not allowed to mix different control types at the same time, but different control types may be used sequentially.
Control Types dictates flexibility instructions. Control Type provides Flexibility options."""@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/Profile> .

s4ener:IncentiveTableTier a rdfs:Class ;
  rdfs:label "Incentive table tier"@en ;
  rdfs:comment "This concept specifies a Tier that an Incentive Table consists of. Each Tier indicates through a series of Boundaries the price per kilowatthour this incentive costs. For example, a tier may describe grid power, solar panel power, or surplus power."@en ;
  rdfs:subClassOf s4ener:TimeSeries .

s4ener:hasTemporalResolution a rdf:Property ;
  rdfs:label "has temporal resolution"@en ;
  rdfs:comment "The resolution is the distance between two observation timestamps. This only makes sense if the observations are equidistant."@en ;
  rdfs:range xsd:duration .

s4ener:hasDataPoint a rdf:Property ;
  rdfs:label "has data point"@en ;
  rdfs:comment "This relationship connects a time series to data point."@en ;
  rdfs:domain s4ener:TimeSeries ;
  rdfs:range s4ener:DataPoint .

s4ener:hasIncentiveType a rdf:Property ;
  rdfs:label "has incentive type"@en ;
  rdfs:comment "The relationship between the tier and its incentive type"@en ;
  rdfs:domain s4ener:IncentiveTableTier ;
  rdfs:range s4ener:IncentiveType .

s4ener:PowerLimitProfile a rdfs:Class ;
  rdfs:label "Power limit profile"@en ;
  rdfs:comment "This profile describes the energy flexibility of a device via a set of power limits, following the SPINE documentation"@en ;
  rdfs:subClassOf s4ener:FlexibilityProfile .

s4ener:isProtectedBy a rdf:Property ;
  rdfs:label "is protected by"@en ;
  rdfs:comment "The relationship between the device and the nominal power limit"@en ;
  rdfs:domain s4ener:PowerLimitProfile ;
  rdfs:range s4ener:NominalPowerLimit .

s4ener:isBoundTo a rdf:Property ;
  rdfs:label "is bound to"@en ;
  rdfs:comment "The relationship between a device and its contractual power limit"@en ;
  rdfs:domain s4ener:PowerLimitProfile ;
  rdfs:range s4ener:ContractualPowerLimit .

s4ener:isLimitedWith a rdf:Property ;
  rdfs:label "is limited with"@en ;
  rdfs:comment "The relationship between device and failsafe power limit"@en ;
  rdfs:domain s4ener:PowerLimitProfile ;
  rdfs:range s4ener:FailsafePowerLimit .

s4ener:receivesPowerLimit a rdf:Property ;
  rdfs:label "receives power limit"@en ;
  rdfs:comment "The relationship between a power limit profile and the power limit it has received for its device to follow"@en ;
  rdfs:domain s4ener:PowerLimitProfile ;
  rdfs:range s4ener:PowerLimit .

s4ener:PowerSequence a rdfs:Class ;
  rdfs:label "Power sequence"@en ;
  rdfs:comment "A Power Sequence following S2 is a container containing one or more PowerSequenceElements among which the EMS can choose the Element with the best fit to the current energy demands."@en .

s4ener:activeRepetitionNumber a rdf:Property ;
  rdfs:label "active repetition number"@en ;
  rdfs:comment "Indicates the current repetition of the sequence of slots. SHALL be present if a power sequence can repeat its sequence of slots (i.e., if s4ee:repetitionTotal is present and has a value > 1). Otherwise, it SHALL be absent. "@en ;
  rdfs:range xsd:unsignedInt .

s4ener:hasActiveDurationMin a rdf:Property ;
  rdfs:label "has active duration min"@en ;
  rdfs:comment """The active mininum duration a power sequence can run without interruption.

This property is suggested to be added to SAREF4Ener_v2 to replace the time:TemporalEntity and/or time:DurationDescription."""@en ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:hasResumeCostEstimated a rdf:Property ;
  rdfs:label "Resume cost estimated"@en ;
  rdfs:comment "In a power sequence the additional costs for the resumption of a device to its normal operation (after a pause)."@en ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasPropertyValue> .

s4ener:isInterruptible a rdf:Property ;
  rdfs:label "is interruptible"@en ;
  rdfs:comment "This property indicates whether the PowerSequence is interruptible."@en ;
  rdfs:domain s4ener:PowerSequence ;
  rdfs:range xsd:boolean .

s4ener:isStoppable a rdf:Property ;
  rdfs:label "is stoppable"@en ;
  rdfs:comment "Specifies if the power sequence is stoppable."@en ;
  rdfs:range xsd:boolean .

s4ener:isPausable a rdf:Property ;
  rdfs:label "is pausable"@en ;
  rdfs:comment "Specifies if the power sequence is pausable."@en ;
  rdfs:range xsd:boolean .

s4ener:hasElapsedSlotTime a rdf:Property ;
  rdfs:label "has elapsed slot time"@en ;
  rdfs:comment "If state is set to 'running' or 'paused' AND the slot is determined, this property CAN contain the time the slot has already been in 'running' state (this also means the value remains constant during a 'paused' state). Otherwise it SHALL be omitted."@en ;
  rdfs:range <http://www.w3.org/2006/time#TemporalEntity> .

s4ener:cheapest a rdf:Property ;
  rdfs:label "cheapest"@en ;
  rdfs:comment "Indicates whether a power sequence applies a configuration that minimises the user's energy bill (if set to TRUE). MAY be present. Absence of this element is equal to the presence with value FALSE. "@en ;
  rdfs:range xsd:boolean .

s4ener:hasActiveDurationSumMin a rdf:Property ;
  rdfs:label "has active duration sum min"@en ;
  rdfs:comment """The active minimum duration a power sequence must run in total (summation of all active times).

This property is suggested to be added to SAREF4Ener_v2 to replace the time:TemporalEntity and/or time:DurationDescription."""@en ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

<https://saref.etsi.org/core/hasState> a rdf:Property ;
  rdfs:range s4ener:PowerSequenceState .

s4ener:sequenceRemoteControllable a rdf:Property ;
  rdfs:label "sequence remote controllable"@en ;
  rdfs:comment "Denotes whether a power sequence is modifiable (if value is TRUE) or not (if value is FALSE). Modifiability is required to configure power sequences and slots. It is also required to change a power sequence state."@en ;
  rdfs:range xsd:boolean .

s4ener:hasActiveDurationMax a rdf:Property ;
  rdfs:label "has active duration max"@en ;
  rdfs:comment """The active maximum duration a power sequence can run without interruption.

This property is suggested to be added to SAREF4Ener_v2 to replace the time:TemporalEntity and/or time:DurationDescription."""@en ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:greenest a rdf:Property ;
  rdfs:label "greenest"@en ;
  rdfs:comment "Indicates whether a power sequence optimises the configuration towards the maximum availability of renewable energy (if set to TRUE). MAY be present. Absence of this element is equal to the presence with value FALSE. "@en ;
  rdfs:range xsd:boolean .

s4ener:hasMaxPauseBefore a rdf:Property ;
  rdfs:label "max pause before"@en ;
  rdfs:comment "The maximum duration for which a device can be paused between the end of the previous running sequence and the start of this one"@en ;
  rdfs:domain s4ener:PowerSequence ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:activeSlotNumber a rdf:Property ;
  rdfs:label "active slot number"@en ;
  rdfs:comment "Indicates the currently active slot number, if the power sequence state is set to 'running' or 'paused'. Otherwise it SHALL be omitted."@en ;
  rdfs:range xsd:unsignedInt .

s4ener:hasRemainingSlotTime a rdf:Property ;
  rdfs:label "has remaining slot time"@en ;
  rdfs:comment "If state is set to 'running' or 'paused' AND the slot is determined, this element SHALL contain the time the slot still needs to be in 'running' state (this also means the value remains constant during a 'paused' state). Otherwise it SHALL be omitted."@en ;
  rdfs:range xsd:duration .

s4ener:hasPauseDurationMax a rdf:Property ;
  rdfs:label "has pause duration max"@en ;
  rdfs:comment "The maximum duration a power sequence can pause after the end of an activity."@en ;
  rdfs:domain s4ener:PowerSequence ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:hasPauseDurationMin a rdf:Property ;
  rdfs:label "has pause duration min"@en ;
  rdfs:comment "The minimum duration a power sequence can pause after the end of an activity."@en ;
  rdfs:domain s4ener:PowerSequence ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:hasTaskIdentifier a rdf:Property ;
  rdfs:label "has task identifier"@en ;
  rdfs:comment "Used by a device that wants to uniquely identify reoccurring types of power sequences. For example, specific types of washing cycles with specific parameters SHOULD have the same s4ener:taskIdentifier value every time they are offered using power sequences."@en ;
  rdfs:domain s4ener:PowerSequence ;
  rdfs:range <https://w3id.org/linkml/Any> ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasIdentifier> .

s4ener:hasValueSource a rdf:Property ;
  rdfs:label "has value source"@en ;
  rdfs:comment "Indicates the source (origin/foundation) of the observation forecasted values for a power sequence. If absent, the source is undefined. Remark: This element shall express the reliability of the forecast."@en ;
  rdfs:range s4ener:ValueSource .

s4ener:hasResumeEnergyEstimated a rdf:Property ;
  rdfs:label "Resume energy estimated"@en ;
  rdfs:comment "In a power sequence the additional energy for the resumption of a device to its normal operation (after a pause)."@en ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasPropertyValue> .

s4ener:hasActiveDurationSumMax a rdf:Property ;
  rdfs:label "has active duration sum max"@en ;
  rdfs:comment """The active maximum duration a power sequence can run in total (summation of all active times).

This property is suggested to be added to SAREF4Ener_v2 to replace the time:TemporalEntity and/or time:DurationDescription."""@en ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:hasPowerSequenceElement a rdf:Property ;
  rdfs:label "has power sequence element"@en ;
  rdfs:comment "A connection between the Power Sequence and the elements (or Slots) describing the exact contents."@en ;
  rdfs:domain s4ener:PowerSequence ;
  rdfs:range s4ener:PowerSequenceElement .

s4ener:maxCyclesPerDay a rdf:Property ;
  rdfs:label "max cycles per day"@en ;
  rdfs:comment "States the maximum amount of starts a power sequence (of a device) allows per day."@en ;
  rdfs:range xsd:unsignedInt .

s4ener:repetitionsTotal a rdf:Property ;
  rdfs:label "repetition total"@en ;
  rdfs:comment "Contains the total number of repetitions, if a power sequence repeats its sequence of slots. Absence of the element is equal to a presence with a value of 0 (zero). SHALL be absent if the value is 1. "@en ;
  rdfs:range xsd:unsignedInt .

s4ener:PowerEnvelope a rdfs:Class ;
  rdfs:label "Power Envelope"@en ;
  rdfs:comment "A specific Power Envelope to be followed by an energy manager"@en .

s4ener:hasEnvelope a rdf:Property ;
  rdfs:label "has envelope"@en ;
  rdfs:comment "This property relates a Power Envelope to the Timeseries object that describes the envelope"@en ;
  rdfs:domain s4ener:PowerEnvelope ;
  rdfs:range s4ener:TimeSeries .

<https://saref.etsi.org/core/Observation> a rdfs:Class .

s4ener:DDBCInstruction a rdfs:Class ;
  rdfs:label "Demand Driven Based Control Instruction"@en ;
  rdfs:comment "An Instruction as specified for an Demand Driven Based Control Profile."@en ;
  rdfs:subClassOf s4ener:FlexibilityInstruction .

s4ener:PowerRange a rdfs:Class ;
  rdfs:label "Power range"@en ;
  rdfs:comment "A class describing a power range, containing a start of range, an end of range, and a saref:Property indicating the type of power involved."@en .

s4ener:hasNumberRange a rdf:Property ;
  rdfs:label "has number range"@en ;
  rdfs:comment "This property provides the association between a power range and its number range."@en ;
  rdfs:domain s4ener:PowerRange ;
  rdfs:range s4ener:NumberRange .

<https://saref.etsi.org/core/Profile> a rdfs:Class .

s4ener:Timer a rdfs:Class ;
  rdfs:label "Timer"@en ;
  rdfs:comment "A timer for time-based operation mode and transition constraints."@en .

s4ener:isFinishedAt a rdf:Property ;
  rdfs:label "is finished at"@en ;
  rdfs:comment "Indicates when the Timer will be finished. If the DateTimeStamp is in the future, the timer is not yet finished. If the DateTimeStamp is in the past, the timer is finished. When the timer was never started, the value can be an arbitrary DateTimeStamp in the past."@en ;
  rdfs:domain s4ener:Timer ;
  rdfs:range xsd:dateTimeStamp ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasTimestamp> .

s4ener:LeakageBehaviour a rdfs:Class ;
  rdfs:label "Leakage behaviour"@en ;
  rdfs:comment "A description of the Leakage Behaviour associated with this Fill Rate Flexibility Profile."@en .

s4ener:hasLeakageBehaviourElement a rdf:Property ;
  rdfs:label "has leakage behaviour element"@en ;
  rdfs:comment "This property relates the LeakageBehaviour description to the LeakageBehaviourElements indicating the detailed description."@en ;
  rdfs:domain s4ener:LeakageBehaviour ;
  rdfs:range s4ener:LeakageBehaviourElement .

s4ener:OperationModeElement a rdfs:Class ;
  rdfs:label "Operation Mode Element"@en ;
  rdfs:comment "Operation Mode Elements of a Fill Rate Based Control"@en .

s4ener:hasRunningCosts a rdf:Property ;
  rdfs:label "has running costs"@en ;
  rdfs:comment "Additional costs per second (e.g. wear, services) associated with this operation mode in the currency defined by the ResourceManagerDetails , excluding the commodity cost. The range is expressing uncertainty and is not linked to the operation_mode_factor."@en ;
  rdfs:domain s4ener:OperationModeElement ;
  rdfs:range s4ener:NumberRange .

s4ener:PowerPlan a rdfs:Class ;
  rdfs:label "Power plan"@en ;
  rdfs:comment "The Power Plan that an energy manager creates for a device. It contains three timeseries indicating the minimum, average, and maximum respectively."@en ;
  rdfs:subClassOf s4ener:TimeSeries .

s4ener:isWritable a rdf:Property ;
  rdfs:label "is writable"@en ;
  rdfs:comment "This Boolean value indicates whether this power plan is writable or fixed."@en ;
  rdfs:domain s4ener:PowerPlan ;
  rdfs:range xsd:boolean .

s4ener:ActuatorSwitch a rdfs:Class ;
  rdfs:label "Actuator switch"@en ;
  rdfs:comment "Basic on/off operations on a simple actuator can be modelled with the ActuatorSwitch class. Whether the function turns a device itself ON or OFF, or whether it switches a specific feature, depends on the implementation. For example, one could model the super freeze program of a freezer using ActuatorSwitch class. An ON command would then activate the super freeze program and an OFF command would deactivate it. This example shall just give an idea how ActuatorSwitch can be used for more purposes than only turning devices on and off."@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/Actuator> .

s4ener:DataPoint a rdfs:Class ;
  rdfs:label "Data point"@en ;
  rdfs:comment """A data point is a quantity that is extended with various pieces of process information, namely
 
- A creation time (instant). This is the point in time when the data point was created, which is not necessarily the time for which it is valid. In the case of soft-sensors or forecasters, a data point might have been created ahead of time, in the case of a direct observation a data point might created at its time of validity (or at the end of its validity time interval) and in the case of an archived value the data point might have been created after the fact.

 - A validity time (temporal entity) which will be named \"time stamp\". The validity time is the instant or interval in time in which a specific quantity is in effect. For example a room temperature might be measured at 12:00, which means it is in effect at this very instant. A specific amount of energy might me expended within the time-slot between 12:30 and 12:45, which means that the energy observation is in effect during this time interval.

 - A location or topological association. For example, an observation might be taken in a specific room, a power avarage might have been measured by a specific meter, a forecast might be valid for a specific region or grid segment. This association is therefore not always a location."""@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/Observation> .

s4ener:FailsafeState a rdfs:Class ;
  rdfs:label "Fail-safe state"@en ;
  rdfs:comment "State that indicates that the device currently is in its Fail-safe state. This means that it has lost its connection to a central energy manager. This may result in the device following stricter power limits."@en .

s4ener:hasFailsafeDuration a rdf:Property ;
  rdfs:label "has failsafe duration"@en ;
  rdfs:comment "The relationship between the failsafe power limit and its duration. This property indicates the minimum duration the fail safe state will take once a device has entered that state."@en ;
  rdfs:domain s4ener:FailsafeState ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:LoadControlStateData a rdfs:Class ;
  rdfs:label "Load control state data"@en ;
  rdfs:comment "The representation of the state of an event used to send overload warning severity level and related load control commands to a device (e.g. a household appliance or a smart meter)."@en .

s4ener:hasAppliedEventActionProduce a rdf:Property ;
  rdfs:label "has applied event action produce"@en ;
  rdfs:comment "A relationship between the state of a load control event produce and the action to be performed as a consequence of this event."@en ;
  rdfs:range s4ener:EventActionProduce .

s4ener:hasEventStateProduce a rdf:Property ;
  rdfs:label "has event state produce"@en ;
  rdfs:comment "A relationship between the specification of the state of a load control event produce and the value that this state can assume."@en ;
  rdfs:range s4ener:EventStateProduce ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasState> .

s4ener:hasEventStateConsume a rdf:Property ;
  rdfs:label "has event state consume"@en ;
  rdfs:comment "A relationship between the specification of the state of a load control event consume and the value that this state can assume."@en ;
  rdfs:range s4ener:EventStateConsume ;
  rdfs:subPropertyOf <https://saref.etsi.org/core/hasState> .

s4ener:hasAppliedEventActionConsume a rdf:Property ;
  rdfs:label "has applied event action consume"@en ;
  rdfs:comment "A relationship between the state of a load control event consume and the action to be performed as a consequence of this event."@en ;
  rdfs:range s4ener:EventActionConsume .

<http://www.w3.org/2006/time#DurationDescription> a rdfs:Class .

s4ener:FRBCInstruction a rdfs:Class ;
  rdfs:label "Fill Rate Based Control Instruction"@en ;
  rdfs:comment "A Fill Rate Based Instruction message. "@en ;
  rdfs:subClassOf s4ener:FlexibilityInstruction .

s4ener:EnergyConstraint a rdfs:Class ;
  rdfs:label "Energy Constraint"@en ;
  rdfs:comment "The energy constraint described in the Allowed Limit Range or Power Limit."@en .

s4ener:hasLowerAveragePower a rdf:Property ;
  rdfs:label "has lower average power"@en ;
  rdfs:comment "The lower average power associated with this Energy constraint."@en ;
  rdfs:domain s4ener:EnergyConstraint ;
  rdfs:range xsd:integer .

s4ener:hasUpperAveragePower a rdf:Property ;
  rdfs:label "has upper average power"@en ;
  rdfs:comment "The upper average power of an Energy constraint of a Power Envelope profile."@en ;
  rdfs:domain s4ener:EnergyConstraint ;
  rdfs:range xsd:integer .

s4ener:allowedLimitRange a rdf:Property ;
  rdfs:label "allowed limit range"@en ;
  rdfs:comment "This property indicates the various AllowedLimitRanges or PowerLimits that this PowerConstraint object consists of."@en ;
  rdfs:range s4ener:AllowedLimitRange .

s4ener:ScheduleInstruction a rdfs:Class ;
  rdfs:label "Schedule Instruction"@en ;
  rdfs:comment "Schedule instruction for a power profile flexibility profile."@en ;
  rdfs:subClassOf s4ener:PPBCInstruction .

s4ener:FlexibilityInstruction a rdfs:Class ;
  rdfs:label "Flexibility Instruction"@en ;
  rdfs:comment "The various types of instructions Flexibility Sources can send and/or receive."@en .

<http://www.w3.org/2006/time#TemporalEntity> a rdfs:Class .

s4ener:DemandDrivenProfile a rdfs:Class ;
  rdfs:label "Demand driven control"@en ;
  rdfs:comment "The Flexibility Profile following the Demand Driven strategy."@en ;
  rdfs:subClassOf s4ener:FlexibilityProfile .

s4ener:hasDemandRateForecast a rdf:Property ;
  rdfs:label "has average demand rate forecast"@en ;
  rdfs:comment "This property relates a Demand Driven Profile to a TimeSeries object that indicates a forecast of the average demand rate."@en ;
  rdfs:domain s4ener:DemandDrivenProfile ;
  rdfs:range s4ener:TimeSeries .

s4ener:hasDemandRate a rdf:Property ;
  rdfs:label "has demand rate"@en ;
  rdfs:comment "The present demand rate that needs to be satisfied by the system"@en ;
  rdfs:domain s4ener:DemandDrivenProfile ;
  rdfs:range s4ener:NumberRange .

s4ener:AllowedLimitRange a rdfs:Class ;
  rdfs:label "Allowed limit range"@en ;
  rdfs:comment "The actual constraints of an Power Envelope Based Profile."@en .

s4ener:FailsafePowerLimit a rdfs:Class ;
  rdfs:label "Failsafe Power Limit"@en ;
  rdfs:comment "In case the communication between a device and the energy manager is interrupted, fail-safe values apply  and the device enters fail-safe state until the communication is re-established."@en ;
  rdfs:subClassOf s4ener:PowerLimit .

s4ener:hasFailsafeProductionMax a rdf:Property ;
  rdfs:label "has failsafe production max"@en ;
  rdfs:comment "The relationship between the failsafe power limit and the value indicating its production."@en ;
  rdfs:domain s4ener:FailsafePowerLimit ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> ;
  rdfs:subPropertyOf s4ener:hasPowerLimitProductionMax .

s4ener:hasFailsafeConsumptionMax a rdf:Property ;
  rdfs:label "has failsafe consumption max"@en ;
  rdfs:comment "The relationship between the failsafe power limit and the value indicating its consumption."@en ;
  rdfs:domain s4ener:FailsafePowerLimit ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> ;
  rdfs:subPropertyOf s4ener:hasPowerLimitConsumptionMax .

<http://xmlns.com/foaf/0.1/Agent> a rdfs:Class .

s4ener:TimeSeries a rdfs:Class ;
  rdfs:label "Time Series"@en ;
  rdfs:comment "An ordered sequence of data points of a quantity observed at spaced time intervals is referred to as a time series. Time series can be a result of prediction algorithm."@en .

s4ener:FlexOffer a rdfs:Class ;
  rdfs:label "Flex offer"@en ;
  rdfs:comment "It  allows to represent a flexibility offer (or schedule) as a combination of multiple time-series, data-points and forecasts. For example, we can create a flexibility offer that includes a time-series ex:T-power of power values, combined with a time-series ex:T-costs of associated costs."@en .

s4ener:relatesToRequest a rdf:Property ;
  rdfs:label "relates to request"@en ;
  rdfs:comment "The relationship between the flexibility offer and flexibility request"@en ;
  rdfs:domain s4ener:FlexOffer ;
  rdfs:range s4ener:FlexRequest .

s4ener:LeakageBehaviourElement a rdfs:Class ;
  rdfs:label "Leakage behaviour element"@en ;
  rdfs:comment "An element detailing the leakage behaviour of a storage."@en .

s4ener:leakageRate a rdf:Property ;
  rdfs:label "Leakage Rate"@en ;
  rdfs:comment "Indicates how fast the momentary fill level will decrease per second due to leakage within the given range of the fill level."@en ;
  rdfs:domain s4ener:LeakageBehaviourElement ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> .

s4ener:EndInterruptionInstruction a rdfs:Class ;
  rdfs:label "End Interruption Instruction"@en ;
  rdfs:comment "An Instruction message indicating when an interruption can end."@en ;
  rdfs:subClassOf s4ener:InterruptionInstruction .

s4ener:OMBCInstruction a rdfs:Class ;
  rdfs:label "Operation Mode Based Control Instruction"@en ;
  rdfs:comment "An instruction following the Operation Mode Based Profile."@en ;
  rdfs:subClassOf s4ener:FlexibilityInstruction .

s4ener:InterruptionInstruction a rdfs:Class ;
  rdfs:label "Interruption Instruction"@en ;
  rdfs:comment "An instruction indicating an interruption to the process."@en ;
  rdfs:subClassOf s4ener:PPBCInstruction .

s4ener:Slot a rdfs:Class ;
  rdfs:label "Slot"@en ;
  rdfs:comment "The single steps of a power sequence are represented by slots. A slot is associated with a slot number (while a power sequence is associated with a power sequence identifier). The slot numbers of two power sequences should be considered independent from each other, i.e., slot number 7 of sequence 1 describes a different slot than slot number 7 of sequence 2. Therefore a slot is only uniquely identified in combination with a sequence ID. "@en .

s4ener:PowerSequenceContainer a rdfs:Class ;
  rdfs:label "Power profile container"@en ;
  rdfs:comment "A container containing the various Power Sequences among which the EMS may choose for the appropriate Power Sequence at a given time."@en .

s4ener:hasPowerSequence a rdf:Property ;
  rdfs:label "has power sequence"@en ;
  rdfs:comment "The various Sequences contained in a Power Sequence Container among which the EMS can choose the proper PowerSequence for the current energy demands."@en ;
  rdfs:domain s4ener:PowerSequenceContainer ;
  rdfs:range s4ener:PowerSequence .

s4ener:progress a rdf:Property ;
  rdfs:label "progress"@en ;
  rdfs:comment "Time that has passed since the selected sequence has started. A value must be provided, unless no sequence has been selected or the selected sequence hasn't started yet."@en ;
  rdfs:domain s4ener:PowerSequenceContainer ;
  rdfs:range xsd:duration .

s4ener:hasPowerSequenceStatus a rdf:Property ;
  rdfs:label "has power sequence status"@en ;
  rdfs:comment "This property indicates the current status of this Power Sequence."@en ;
  rdfs:domain s4ener:PowerSequenceContainer ;
  rdfs:range s4ener:PowerSequenceStatus .

s4ener:IncentiveTableProfile a rdfs:Class ;
  rdfs:label "Incentive table based profile"@en ;
  rdfs:comment "This flexibility profile describes the usage of an incentive table to describe an incentive type in the form of costs (relative or absolute), CO2 emissions or renewable energy percentage that can be associated to power values (expressed as a time-series of power data-points)."@en ;
  rdfs:subClassOf s4ener:FlexibilityProfile .

s4ener:hasPowerPlan a rdf:Property ;
  rdfs:label "has power plan"@en ;
  rdfs:comment "A reference to a power plan indicating the preliminary or committed usage of the energy smart device for a specific period."@en ;
  rdfs:domain s4ener:IncentiveTableProfile ;
  rdfs:range s4ener:PowerPlan .

s4ener:hasScopeType a rdf:Property ;
  rdfs:label "has scope type"@en ;
  rdfs:comment "The relationship between the incentive table and the scope type"@en ;
  rdfs:domain s4ener:IncentiveTableProfile ;
  rdfs:range s4ener:ScopeType .

s4ener:requiresUpdate a rdf:Property ;
  rdfs:label "requiresUpdate"@en ;
  rdfs:comment """The relationship between the incentive table element and the boolean data indicating whether the incentive table requires an update.

In the SAREF4ENER extension this property is intended for the following classes:
- IncentiveTableProfile
- IncentiveTableTier
- IncentiveTableSlot"""@en ;
  rdfs:range xsd:boolean .

s4ener:hasTier a rdf:Property ;
  rdfs:label "has tier incentive"@en ;
  rdfs:comment "The relationship between the incentive table and the tiers it consists of"@en ;
  rdfs:domain s4ener:IncentiveTableProfile ;
  rdfs:range <https://w3id.org/linkml/Any> .

s4ener:NumberRange a rdfs:Class ;
  rdfs:label "Number range"@en ;
  rdfs:comment "This class describes a range via a datatype property indicating the start of the range and another datatype property indicating the end of the range."@en .

s4ener:startOfRange a rdf:Property ;
  rdfs:label "start of range"@en ;
  rdfs:comment "This property indicates the start of a number range."@en ;
  rdfs:domain s4ener:NumberRange ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> .

s4ener:endOfRange a rdf:Property ;
  rdfs:label "end of range"@en ;
  rdfs:comment "This property indicates the end of a number range."@en ;
  rdfs:domain s4ener:NumberRange ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> .

<https://saref.etsi.org/core/State> a rdfs:Class .

<https://saref.etsi.org/core/UnitOfMeasure> a rdfs:Class .

s4ener:PEBCInstruction a rdfs:Class ;
  rdfs:label "Power Envelop Based Control Instruction"@en ;
  rdfs:comment "An instruction for the Power Envelope Based Profile."@en ;
  rdfs:subClassOf s4ener:FlexibilityInstruction .

<https://w3id.org/linkml/Any> a rdfs:Class ;
  rdfs:comment "An unconstrained type or object"@en .

s4ener:PowerConstraint a rdfs:Class ;
  rdfs:label "Power constraint"@en ;
  rdfs:comment "The actual power constraint contained in the Allowed Limit Range or Power limit."@en .

s4ener:hasConsequenceType a rdf:Property ;
  rdfs:label "Has Consequence Type"@en ;
  rdfs:comment "The consequence type associated with this Power Constraint, which can be Defer or Vanish."@en ;
  rdfs:domain s4ener:PowerConstraint ;
  rdfs:range s4ener:PowerEnvelopeConsequenceType .

<https://saref.etsi.org/core/Property> a rdfs:Class .

s4ener:AlternativesGroup a rdfs:Class ;
  rdfs:label "Alternatives group"@en ;
  rdfs:comment "A collection of power sequences for a certain profile"@en .

<https://saref.etsi.org/core/hasPrice> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

<https://saref.etsi.org/core/hasPropertyValue> a rdf:Property ;
  rdfs:range <https://w3id.org/linkml/Any> .

s4ener:abnormalConditionOnly a rdf:Property ;
  rdfs:label "Abnormal Condition Only"@en ;
  rdfs:comment """Indicates if this element can only be used during an abnormal condition.

In SAREF4ENER this property is intended to be used on the following properties:
- s4ener:OperationMode
- s4ener:Transition
- s4ener:AllowedLimitRange
- s4ener:PowerSequence"""@en ;
  rdfs:range xsd:boolean .

s4ener:activateSlot a rdf:Property ;
  rdfs:label "activate slot"@en ;
  rdfs:comment "Indicates whether a slot is used (activateSlot = true) or not (activateSlot = false). SHALL be present if a slot is optional (i.e., the property s4ee:optionalSlot is TRUE), otherwise SHALL be absent (i.e. in case the slot is mandatory)."@en ;
  rdfs:range xsd:boolean .

s4ener:hasActivationDelay a rdf:Property ;
  rdfs:label "has activation delay"@en ;
  rdfs:comment "The scheduled activation delay for a slot."@en ;
  rdfs:range xsd:duration .

s4ener:hasDuration a rdf:Property ;
  rdfs:label "duration in xsd "@en ;
  rdfs:comment """This property is added to the  time:DurationDescription class to allow to express time duration also as xsd:duration. This is necessary because in the EEBus/E@h model time is always expressed as xsd:duration. We use this property to express the following time information in the EEBus/E@h model:

- the startTime of the power sequence (in the PowerSequence class). SHALL be present
- the endTime of the power sequence (in the PowerSequence class). If the value is available, it SHALL be denoted here. Otherwise the element SHALL be omitted.
- the startTime of observation as absolute or relative value (in the Observation class).
- the endTime of observation as absolute or relative value (in the Observation class).

The duration is expected to be described as in xsd:duration"""@en ;
  rdfs:range xsd:duration .

s4ener:hasDurationMin a rdf:Property ;
  rdfs:label "duration minimum"@en ;
  rdfs:comment """The minimum duration for some component

This property is suggested to be added in SAREF4ENER_V2"""@en ;
  rdfs:range xsd:duration ;
  rdfs:subPropertyOf s4ener:hasDuration .

s4ener:hasEnergy a rdf:Property ;
  rdfs:label "has energy"@en ;
  rdfs:comment "A relationship between a power sequence and its energy (in terms of value and unit of measure)"@en ;
  rdfs:range <https://saref.etsi.org/core/PropertyValue> .

s4ener:hasIndex a rdf:Property ;
  rdfs:label "has index"@en ;
  rdfs:comment "Gives the index for elements that are an array in the S2 specification. Can be used regularly as well as in RDF* manner on properties."@en ;
  rdfs:range xsd:integer .

s4ener:hasInstructionStatus a rdf:Property ;
  rdfs:label "has Instruction Status"@en ;
  rdfs:comment "Present status of this instruction."@en ;
  rdfs:range s4ener:InstructionStatus .

s4ener:hasOperationMode a rdf:Property ;
  rdfs:label "has Operation Modes"@en ;
  rdfs:comment """This property indicates the s4ener:OperationMode inidicated by this Actuator, Instruction, or OperationModeProfile.

The SAREF4ENER extension expects the following classes to be used as domain:
- saref:Actuator
- s4ener:FRBCInstruction
- s4ener:DDBCInstruction
- s4ener:OMBCInstruction
- s4ener:OperationModeProfile"""@en ;
  rdfs:range s4ener:OperationMode .

s4ener:hasOperationModeFactor a rdf:Property ;
  rdfs:label "Has Operation Mode Factor"@en ;
  rdfs:comment """The number indicates the factor with which the FRBC.OperationMode or OMBC.OperationMode is usedconfigured. The factor should be greater than or equal than 0 and less or equal to 1.

Within the SAREF4ENER extension, this property is to be used on the following classes:
- s4ener:OMBCInstruction
- s4ener:OperationMode
- saref:Actuator
- s4ener:FRBCInstruction
- s4ener:DDBCInstruction"""@en ;
  rdfs:range xsd:decimal .

s4ener:hasUsageForecast a rdf:Property ;
  rdfs:label "Has Usage Forecast"@en ;
  rdfs:comment """Indicates the usage forecast that may be relevant to decide the energy flexibility strategy following a specific flexibility profile, specifically a fill rate based profile or incentive table.

In SAREF4ENER this property is intended to be applied on an s4ener:FlexibilityProfile."""@en ;
  rdfs:range s4ener:TimeSeries .

s4ener:hasValue a rdf:Property ;
  rdfs:label "has value"@en ;
  rdfs:comment "Power value expressed in the unit associated with the Commodity of the Power Value."@en ;
  rdfs:range xsd:decimal .

s4ener:relatesToCommodity a rdf:Property ;
  rdfs:label "relates to commodity quantity"@en ;
  rdfs:comment """Relates the classes to the various commodities introduced by the S2 standard.

In the SAREF4ENER extension this property is intended for the following:
- s4ener:PowerRange
- s4ener:AllowedLimitRange
- s4ener:EnergyConstraint
- s4ener:PowerEnvelope"""@en ;
  rdfs:range <https://saref.etsi.org/core/Commodity> .

s4ener:valueTendency a rdf:Property ;
  rdfs:label "value tendency"@en ;
  rdfs:comment "Indicates whether the tendency of an observation is rising, stable, or falling."@en ;
  rdfs:range s4ener:ValueTendency .

s4ener:InstructionStatus a rdfs:Class ;
  rdfs:label "Instruction Status"@en ;
  rdfs:comment "The status an instruction has at a specific moment."@en .

s4ener:Started a s4ener:InstructionStatus ;
  rdfs:label "Started"@en ;
  rdfs:comment "Instruction was executed"@en .

s4ener:Aborted a s4ener:InstructionStatus , s4ener:PowerSequenceStatus ;
  rdfs:label "Aborted"@en ;
  rdfs:comment "Instruction was aborted."@en .

s4ener:Accepted a s4ener:InstructionStatus ;
  rdfs:label "Accepted"@en ;
  rdfs:comment "Instruction has been accepted"@en .

s4ener:New a s4ener:InstructionStatus ;
  rdfs:label "New"@en ;
  rdfs:comment "Instruction was newly created"@en .

s4ener:Succeeded a s4ener:InstructionStatus ;
  rdfs:label "Succeeded"@en ;
  rdfs:comment "Instruction finished successfully"@en .

s4ener:Revoked a s4ener:InstructionStatus ;
  rdfs:label "Revoked"@en ;
  rdfs:comment "Instruction was revoked"@en .

s4ener:Rejected a s4ener:InstructionStatus ;
  rdfs:label "Rejected"@en ;
  rdfs:comment "Instruction was rejected"@en .

s4ener:EventActionConsume a rdfs:Class ;
  rdfs:label "Event action consume"@en ;
  rdfs:comment "An action type used to express a consume action to be performed as a consequence of an event used to send overload warning severity level and related load control commands to a device (e.g. a household appliance or a smart meter)."@en ;
  rdfs:subClassOf s4ener:LoadControlEventAction .

s4ener:Pause a s4ener:EventActionConsume , s4ener:EventActionProduce ;
  rdfs:label "Pause"@en ;
  rdfs:comment "Load control event action with value 'pause'"@en .

s4ener:Resume a s4ener:EventActionConsume , s4ener:EventActionProduce ;
  rdfs:label "Resume"@en ;
  rdfs:comment "Load control event action with value 'resume'"@en .

s4ener:Reduce a s4ener:EventActionConsume , s4ener:EventActionProduce ;
  rdfs:label "Reduce"@en ;
  rdfs:comment "Load control event action with value 'reduce'"@en .

s4ener:Increase a s4ener:EventActionConsume , s4ener:EventActionProduce ;
  rdfs:label "Increase"@en ;
  rdfs:comment "Load control event action with value 'increase'"@en .

s4ener:Emergency a s4ener:EventActionConsume , s4ener:EventActionProduce ;
  rdfs:label "Emergency"@en ;
  rdfs:comment "Load control event action with value 'emergency'"@en .

s4ener:Normal a s4ener:EventActionConsume , s4ener:EventActionProduce ;
  rdfs:label "Normal"@en ;
  rdfs:comment "The value NORMAL used to instantiate the Load Control Event Action class and MeasurandState class"@en .

s4ener:PowerEnvelopeLimitType a rdfs:Class ;
  rdfs:label "Power Envelope Limit Type"@en ;
  rdfs:comment "An enumeration containing the codelist for Power Envelope Limit Types, which may be Lower limit or Upper limit."@en .

s4ener:UpperLimit a s4ener:PowerEnvelopeLimitType , s4ener:Usage ;
  rdfs:label "Upper limit"@en ;
  rdfs:comment "This datapoint indicates the upperlimit."@en .

s4ener:LowerLimit a s4ener:PowerEnvelopeLimitType , s4ener:Usage ;
  rdfs:label "Lower Limit"@en ;
  rdfs:comment "This data point indicates the lower limit, for example of a PowerEnvelopeLimitType."@en .

s4ener:ValueSource a rdfs:Class ;
  rdfs:label "Value source"@en ;
  rdfs:comment "Indicates the source (origin/foundation) of the observation forecasted values for a power sequence. If absent, the source is undefined. Remark: This element shall express the reliability of the forecast."@en .

s4ener:Calculated a s4ener:ValueSource ;
  rdfs:label "Calculated"@en ;
  rdfs:comment "This value source codelist element indicates that this observation has been calculated instead of measured or empirical."@en .

s4ener:Measured a s4ener:ValueSource ;
  rdfs:label "Measured"@en ;
  rdfs:comment "The value source type indicates that this data point has been measured by a device."@en .

s4ener:Empirical a s4ener:ValueSource ;
  rdfs:label "Empirical"@en ;
  rdfs:comment "This value source codelist element indicates this value is an empirical value instead of a calculated or measured value."@en .

s4ener:PowerSource a rdfs:Class ;
  rdfs:label "Power source"@en ;
  rdfs:comment "Indicates the power source of a device. Possible values are e.g. mainsSinglePhase or battery"@en .

s4ener:MainsSinglePhase a s4ener:PowerSource ;
  rdfs:label "Mains single phase"@en ;
  rdfs:comment "This codelist element of power source indicates that the power source is the mains single phase."@en .

s4ener:BatteryPowerSource a s4ener:PowerSource ;
  rdfs:label "Battery power source"@en ;
  rdfs:comment "This Power Source codelist element indicates that a battery is the power source of this device."@en .

s4ener:DCPowerSource a s4ener:PowerSource ;
  rdfs:label "DC Power source"@en ;
  rdfs:comment "This Power Source codelist element indicates that the type of power source is DC."@en .

s4ener:Mains3Phase a s4ener:PowerSource ;
  rdfs:label "Mains3Phase"@en ;
  rdfs:comment "This Power Source codelist element indicates that the power source of this device is Mains 3 Phase."@en .

s4ener:ValueTendency a rdfs:Class ;
  rdfs:label "Value tendency"@en ;
  rdfs:comment "This type indicates a codelist for the s4ener:valueTendency property about whether the tendency of an observation is rising, stable or falling."@en .

s4ener:Rising a s4ener:ValueTendency ;
  rdfs:label "Rising"@en ;
  rdfs:comment "This value tendency codelist element indicates that the tendency of this observation indicates that the value is increasing (i.e., rising)."@en .

s4ener:Stable a s4ener:ValueTendency ;
  rdfs:label "Stable"@en ;
  rdfs:comment "This value tendency codelist element indicates that the tendency this observation has is to stay stable, instead of rising or falling."@en .

s4ener:Falling a s4ener:ValueTendency ;
  rdfs:label "Falling"@en ;
  rdfs:comment "This value tendency codelist element indicates that the tendency of this observation indicates that the value is decreasing (i.e., falling)."@en .

s4ener:EventStateProduce a rdfs:Class ;
  rdfs:label "Event state produce"@en ;
  rdfs:comment "In the load control, it expresses a produce state of an event an event used to send overload warning severity level and related load control commands to a device (e.g. a household appliance or a smart meter)."@en ;
  rdfs:subClassOf s4ener:LoadControlEventState .

s4ener:EventAccepted a s4ener:EventStateProduce , s4ener:EventStateConsume ;
  rdfs:label "Event accepted"@en ;
  rdfs:comment "Load control state with value 'event accepted'"@en .

s4ener:EventStarted a s4ener:EventStateProduce , s4ener:EventStateConsume ;
  rdfs:label "Event started"@en ;
  rdfs:comment "Load control state with value 'event started'"@en .

s4ener:EventStopped a s4ener:EventStateProduce , s4ener:EventStateConsume ;
  rdfs:label "Event stopped"@en ;
  rdfs:comment "Load control state with value 'event stopped'"@en .

s4ener:EventRejected a s4ener:EventStateProduce , s4ener:EventStateConsume ;
  rdfs:label "Event rejected"@en ;
  rdfs:comment "Load control state with value 'event rejected'"@en .

s4ener:EventCancelled a s4ener:EventStateProduce , s4ener:EventStateConsume ;
  rdfs:label "Event cancelled"@en ;
  rdfs:comment "Load control state with value 'event cancelled'"@en .

s4ener:EventError a s4ener:EventStateProduce , s4ener:EventStateConsume ;
  rdfs:label "Event error"@en ;
  rdfs:comment "Load control state with value 'event error'"@en .

s4ener:PowerEnvelopeConsequenceType a rdfs:Class ;
  rdfs:label "Power Envelope Consequence Type"@en ;
  rdfs:comment "The type of consequence of limiting power, which can be Defer or Vanish."@en .

s4ener:Vanish a s4ener:PowerEnvelopeConsequenceType ;
  rdfs:label "Vanish"@en ;
  rdfs:comment "The load or generation that is limited will vanish. This is for example the case with curtailing production from solar panels; the potentially generated energy is lost and will never reappear."@en .

s4ener:Defer a s4ener:PowerEnvelopeConsequenceType ;
  rdfs:label "Defer"@en ;
  rdfs:comment "Indicating that the limited load or generation will be postponed to a later moment "@en .

s4ener:Usage a rdfs:Class ;
  rdfs:label "Usage"@en ;
  rdfs:comment "The usage of a datapoint, time series or message."@en .

s4ener:Production a s4ener:Usage ;
  rdfs:label "Production"@en ;
  rdfs:comment "This datapoint indicates the energy production."@en .

s4ener:Upflex a s4ener:Usage ;
  rdfs:label "Upflex"@en ;
  rdfs:comment "This datapoint indicates the upper flexibility."@en .

s4ener:SetPoint a s4ener:Usage ;
  rdfs:label "Setpoint"@en ;
  rdfs:comment "This datapoint indicates a setpoint."@en .

s4ener:Downflex a s4ener:Usage ;
  rdfs:label "Downflex"@en ;
  rdfs:comment "This datapoint indicates the down flexibility."@en .

s4ener:Average a s4ener:Usage ;
  rdfs:label "Average"@en ;
  rdfs:comment "The datapoint indicates an average value aggregated over a number of values."@en .

s4ener:Skewness a s4ener:Usage ;
  rdfs:label "Skewness"@en ;
  rdfs:comment "The usage of this datapoint is the power skewness (assymetry of the distribution)."@en .

s4ener:BaseLine a s4ener:Usage ;
  rdfs:label "Baseline"@en ;
  rdfs:comment "This datapoint indicates the baseline."@en .

s4ener:Maximum a s4ener:Usage ;
  rdfs:label "Maximum"@en ;
  rdfs:comment "The usage of this datapoint is the Maximum value."@en .

s4ener:Minimum a s4ener:Usage ;
  rdfs:label "Minimum"@en ;
  rdfs:comment "The usage of this datapoint is the Minimum value."@en .

s4ener:Consumption a s4ener:Usage ;
  rdfs:label "Consumption"@en ;
  rdfs:comment "This datapoint indicates the consumption."@en .

<https://saref.etsi.org/core/Commodity> a rdfs:Class .

s4ener:ElectricPowerL1 a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Electric Power L1"@en ;
  rdfs:comment "Electric power described in Watt on phase 1. If a device utilizes only one phase it should always use L1."@en .

s4ener:ElectricPowerL2 a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Electric Power L2"@en ;
  rdfs:comment "Electric power described in Watt on phase 2. Only applicable for 3 phase devices."@en .

s4ener:ElectricPowerL3 a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Electric Power L3"@en ;
  rdfs:comment "Electric power described in Watt on phase 3. Only applicable for 3 phase devices."@en .

s4ener:HeatFlowRate a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Heat Flow Rate"@en ;
  rdfs:comment "Flow rate of heat carrying gas or liquid in liters per second"@en .

s4ener:Electricity a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Electricity"@en ;
  rdfs:comment "Identifier for Commodity ELECTRICITY"@en .

s4ener:Gas a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Gas"@en ;
  rdfs:comment "Identifier for Commodity GAS"@en .

s4ener:Oil a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Oil"@en ;
  rdfs:comment "Identifier for Commodity OIL"@en .

s4ener:HeatThermalPower a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Heat Thermal Power"@en ;
  rdfs:comment "Thermal power in Watt"@en .

s4ener:HeatTemperature a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Heat Temperature"@en ;
  rdfs:comment "Heat described in degrees Celsius"@en .

s4ener:NaturalGasFlowRate a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Natural Gas Flow Rate"@en ;
  rdfs:comment "Gas flow rate described in liters per second"@en .

s4ener:HydrogenFlowRate a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Hydrogen Flow Rate"@en ;
  rdfs:comment "Gas flow rate described in grams per second"@en .

s4ener:ElectricPower3PhaseSymmetric a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Electric Power 3 Phase Symmetric"@en ;
  rdfs:comment "Electric power described in Watt on when power is equally shared among the three phases. Only applicable for 3 phase devices."@en .

s4ener:OilFlowRate a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Oil Flow Rate"@en ;
  rdfs:comment "Oil flow rate described in liters per hour"@en .

s4ener:Heat a <https://saref.etsi.org/core/Commodity> ;
  rdfs:label "Heat"@en ;
  rdfs:comment "Identifier for Commodity Heat"@en .

s4ener:IncentiveType a rdfs:Class ;
  rdfs:label "Incentive Type"@en ;
  rdfs:comment "In the incentive table, an incentive type is defined  in the form of costs (relative or absolute), CO2 emissions or renewable energy percentage."@en .

s4ener:RenewableEnergyPercentage a s4ener:IncentiveType ;
  rdfs:label "Renewable energy percentage"@en ;
  rdfs:comment "The  incentive type ''renewable energy percentage'' defined in the incentive table."@en .

s4ener:RelativeCost a s4ener:IncentiveType ;
  rdfs:label "Relative cost"@en ;
  rdfs:comment "The incentive type ''relative cost'' defined in the incentive table."@en .

s4ener:CO2Emission a s4ener:IncentiveType ;
  rdfs:label "CO2 Emission"@en ;
  rdfs:comment "The incentive type ''CO2 Emission'' defined in the incentive table."@en .

s4ener:AbsoluteCost a s4ener:IncentiveType ;
  rdfs:label "Absolute cost"@en ;
  rdfs:comment "The incentive type ''absolute cost''  defined in the incentive table."@en .

s4ener:EventStateConsume a rdfs:Class ;
  rdfs:label "Event state consume"@en ;
  rdfs:comment "In the load control, it expresses a consume state of an event used to send overload warning severity level and related load control commands to a device (e.g. a household appliance or a smart meter)."@en ;
  rdfs:subClassOf s4ener:LoadControlEventState .

s4ener:ScopeType a rdfs:Class ;
  rdfs:label "Scope Type"@en ;
  rdfs:comment "An incentive table may additionally define a scope type to indicate whether it is a preliminary or committed version."@en .

s4ener:Preliminary a s4ener:ScopeType ;
  rdfs:label "Preliminary"@en ;
  rdfs:comment "The preliminary version of this concept, usually an incentive table or power plan"@en .

s4ener:Committed a s4ener:ScopeType ;
  rdfs:label "Committed"@en ;
  rdfs:comment "The committed version of this concept, usually an incentive table or power plan"@en .

s4ener:PowerSequenceState a rdfs:Class ;
  rdfs:label "Power sequence state"@en ;
  rdfs:comment "The current state of the power sequence. It can assume one of the values 'running', 'paused', 'scheduled', 'scheduled paused', 'pending', 'inactive', 'completed',  or 'invalid'."@en ;
  rdfs:subClassOf <https://saref.etsi.org/core/State> .

s4ener:Paused a s4ener:PowerSequenceState ;
  rdfs:label "Paused"@en ;
  rdfs:comment "Power sequence state or sensor state with value 'paused'"@en .

s4ener:Completed a s4ener:PowerSequenceState ;
  rdfs:label "Completed"@en ;
  rdfs:comment "Power sequence state with value 'completed'"@en .

s4ener:Scheduled a s4ener:PowerSequenceState ;
  rdfs:label "Scheduled"@en ;
  rdfs:comment "Power sequence state with value 'scheduled'"@en .

s4ener:Pending a s4ener:PowerSequenceState ;
  rdfs:label "Pending"@en ;
  rdfs:comment "Power sequence state with value 'pending'"@en .

s4ener:Running a s4ener:PowerSequenceState ;
  rdfs:label "Running"@en ;
  rdfs:comment "Power sequence state with value 'running'"@en .

s4ener:Inactive a s4ener:PowerSequenceState ;
  rdfs:label "Inactive"@en ;
  rdfs:comment "Power sequence state with value 'inactive'"@en .

s4ener:Invalid a s4ener:PowerSequenceState ;
  rdfs:label "Invalid"@en ;
  rdfs:comment "Power sequence state with value 'invalid'"@en .

s4ener:ScheduledPaused a s4ener:PowerSequenceState ;
  rdfs:label "Scheduled paused"@en ;
  rdfs:comment "Power sequence state with value 'scheduled paused'"@en .

s4ener:PowerSequenceStatus a rdfs:Class ;
  rdfs:label "Power sequence status"@en ;
  rdfs:comment "A codelist for the various Power Sequence statuses."@en .

s4ener:Executing a s4ener:PowerSequenceStatus ;
  rdfs:label "EXECUTING"@en ;
  rdfs:comment "The selected PPBC.PowerSequence is currently being executed"@en .

s4ener:NotScheduled a s4ener:PowerSequenceStatus ;
  rdfs:label "NotScheduled"@en ;
  rdfs:comment "No PPBC.PowerSequence within the PPBC.PowerSequenceContainer is scheduled"@en .

s4ener:Interrupted a s4ener:PowerSequenceStatus ;
  rdfs:label "Interrupted"@en ;
  rdfs:comment "The selected PPBC.PowerSequence is being executed, but is currently interrupted and will continue afterwards"@en .

s4ener:Finished a s4ener:PowerSequenceStatus ;
  rdfs:label "Finished"@en ;
  rdfs:comment "The selected PPBC.PowerSequence was executed and finished successfully"@en .

s4ener:RoleType a rdfs:Class ;
  rdfs:label "Role Type"@en ;
  rdfs:comment "An enumeration containing the various roles a device can take up: consumer, producer, or storage."@en .

s4ener:EnergyProducer a s4ener:RoleType ;
  rdfs:label "Energy Producer"@en ;
  rdfs:comment "Identifier for RoleType Producer"@en .

s4ener:EnergyConsumer a s4ener:RoleType ;
  rdfs:label "Energy Consumer"@en ;
  rdfs:comment "Identifier for RoleType Consumer"@en .

s4ener:EnergyStorage a s4ener:RoleType ;
  rdfs:label "Energy Storage"@en ;
  rdfs:comment "Identifier for RoleType Storage"@en .

s4ener:EventActionProduce a rdfs:Class ;
  rdfs:label "Event action produce"@en ;
  rdfs:comment "An action type used to express a produce action to be performed as a consequence of an event used to send overload warning severity level and related load control commands to a device (e.g. a household appliance or a smart meter)."@en ;
  rdfs:subClassOf s4ener:LoadControlEventAction .
