- CitrineOS core extracted (CSMS OCPP 2.0.1) - OpenOCPP extracted (firmware OCPP 1.6J/2.0.1) - ShapeShifter library installed (pip install -e) - ShapeShifter specification extracted - EVerest extracted TODO updated with progress
364 lines
11 KiB
Python
364 lines
11 KiB
Python
from datetime import datetime, timezone
|
|
from uuid import uuid4
|
|
|
|
from xsdata.models.datatype import XmlDate
|
|
|
|
from shapeshifter_uftp.uftp import *
|
|
|
|
default_args = {
|
|
"version": "3.1.0",
|
|
"sender_domain": "agr.dev",
|
|
"recipient_domain": "cro.dev",
|
|
"time_stamp": datetime.now(timezone.utc).isoformat(),
|
|
"message_id": str(uuid4()),
|
|
"conversation_id": str(uuid4())
|
|
}
|
|
|
|
messages = [
|
|
AgrPortfolioQuery(period=XmlDate(2023, 1, 1), **default_args),
|
|
AgrPortfolioQueryResponse(
|
|
dso_views=[
|
|
AgrPortfolioQueryResponseDSOView(
|
|
dso_portfolios=[
|
|
AgrPortfolioQueryResponseDSOPortfolio(
|
|
congestion_points=[
|
|
AgrPortfolioQueryResponseCongestionPoint(
|
|
connections=[
|
|
AgrPortfolioQueryResponseConnection(
|
|
entity_address="ean.210987654321"
|
|
)
|
|
],
|
|
entity_address="ean.123456789012",
|
|
mutex_offers_supported=True,
|
|
day_ahead_redispatch_by=RedispatchBy.AGR,
|
|
intraday_redispatch_by=RedispatchBy.AGR,
|
|
)
|
|
],
|
|
dso_domain="dso.dev"
|
|
)
|
|
]
|
|
)
|
|
],
|
|
period=XmlDate(2023, 1, 1),
|
|
agr_portfolio_query_message_id=str(uuid4()),
|
|
**default_args
|
|
),
|
|
AgrPortfolioUpdate(
|
|
connections=[
|
|
AgrPortfolioUpdateConnection(
|
|
entity_address="ean.123456789012",
|
|
start_period=XmlDate(2023, 1, 1)
|
|
)
|
|
],
|
|
**default_args
|
|
),
|
|
AgrPortfolioUpdateResponse(agr_portfolio_update_message_id=str(uuid4()), **default_args),
|
|
DPrognosis(
|
|
isp_duration="PT15M",
|
|
period=XmlDate(2023, 1, 1),
|
|
congestion_point="ean.123456789012",
|
|
isps=[
|
|
DPrognosisISP(
|
|
power=2,
|
|
start=1,
|
|
duration=1
|
|
)
|
|
],
|
|
revision=1,
|
|
**default_args
|
|
),
|
|
DPrognosisResponse(
|
|
d_prognosis_message_id=str(uuid4()),
|
|
**default_args,
|
|
),
|
|
DsoPortfolioQuery(
|
|
entity_address="ean.123456789012", period=XmlDate(2023, 5, 1), **default_args
|
|
),
|
|
DsoPortfolioQueryResponse(
|
|
congestion_point=DsoPortfolioQueryCongestionPoint(
|
|
connections=[
|
|
DsoPortfolioQueryConnection(
|
|
entity_address="ean.123456789012",
|
|
agr_domain="agr.dev"
|
|
)
|
|
],
|
|
entity_address="ean.123456789012"
|
|
),
|
|
period=XmlDate(2023, 5, 1),
|
|
dso_portfolio_query_message_id=str(uuid4()),
|
|
**default_args,
|
|
),
|
|
DsoPortfolioUpdate(
|
|
congestion_points=[
|
|
DsoPortfolioUpdateCongestionPoint(
|
|
connections=[
|
|
DsoPortfolioUpdateConnection(
|
|
entity_address="ean.123456789012",
|
|
start_period=XmlDate(2023, 1, 1),
|
|
end_period=XmlDate(2023, 1, 1),
|
|
)
|
|
],
|
|
entity_address="ean.123456789012",
|
|
start_period=XmlDate(2023, 1, 1),
|
|
end_period=XmlDate(2023, 1, 1),
|
|
mutex_offers_supported=True,
|
|
day_ahead_redispatch_by=RedispatchBy.AGR,
|
|
intraday_redispatch_by=RedispatchBy.AGR,
|
|
)
|
|
],
|
|
**default_args
|
|
),
|
|
DsoPortfolioUpdateResponse(
|
|
dso_portfolio_update_message_id=str(uuid4()), **default_args
|
|
),
|
|
FlexOffer(
|
|
isp_duration="PT15M",
|
|
period=XmlDate(2023, 1, 1),
|
|
congestion_point="ean.123456789012",
|
|
expiration_date_time=datetime.now(timezone.utc).isoformat(),
|
|
offer_options=[
|
|
FlexOfferOption(
|
|
isps=[
|
|
FlexOfferOptionISP(
|
|
power=1,
|
|
start=1,
|
|
duration=1
|
|
)
|
|
],
|
|
option_reference="MyOption",
|
|
price=2.30,
|
|
min_activation_factor=0.5
|
|
)
|
|
],
|
|
flex_request_message_id=str(uuid4()),
|
|
**default_args
|
|
),
|
|
FlexOffer(
|
|
isp_duration="PT15M",
|
|
period=XmlDate(2023, 1, 1),
|
|
congestion_point="ean.123456789012",
|
|
expiration_date_time=datetime.now(timezone.utc).isoformat(),
|
|
offer_options=[
|
|
FlexOfferOption(
|
|
isps=[
|
|
FlexOfferOptionISP(
|
|
power=1,
|
|
start=1,
|
|
duration=1
|
|
)
|
|
],
|
|
option_reference="MyOption",
|
|
price=2.30,
|
|
min_activation_factor=0.5
|
|
)
|
|
],
|
|
flex_request_message_id=str(uuid4()),
|
|
**default_args
|
|
),
|
|
FlexOffer(
|
|
isp_duration="PT15M",
|
|
period=XmlDate(2023, 1, 1),
|
|
congestion_point="ean.123456789012",
|
|
expiration_date_time=datetime.now(timezone.utc).isoformat(),
|
|
offer_options=[
|
|
FlexOfferOption(
|
|
isps=[
|
|
FlexOfferOptionISP(
|
|
power=1,
|
|
start=1,
|
|
duration=1
|
|
)
|
|
],
|
|
option_reference="MyOption",
|
|
price=2.30,
|
|
min_activation_factor=0.5
|
|
)
|
|
],
|
|
unsolicited=True,
|
|
flex_request_message_id=None,
|
|
**default_args
|
|
),
|
|
FlexOfferResponse(flex_offer_message_id=str(uuid4()), **default_args),
|
|
FlexOfferRevocation(flex_offer_message_id=str(uuid4()), **default_args),
|
|
FlexOfferRevocationResponse(flex_offer_revocation_message_id=str(uuid4()), **default_args),
|
|
FlexOrder(
|
|
isps=[FlexOrderISP(
|
|
power=1,
|
|
duration=1,
|
|
start=1
|
|
)],
|
|
isp_duration="PT15M",
|
|
period=XmlDate(2023, 1, 1),
|
|
congestion_point="ean.123456789012",
|
|
flex_offer_message_id=str(uuid4()),
|
|
contract_id=str(uuid4()),
|
|
d_prognosis_message_id=str(uuid4()),
|
|
baseline_reference=str(uuid4()),
|
|
price=2.00,
|
|
currency="EUR",
|
|
order_reference=str(uuid4()),
|
|
option_reference=str(uuid4()),
|
|
activation_factor=0.5,
|
|
**default_args
|
|
),
|
|
FlexOrder(
|
|
isps=[FlexOrderISP(
|
|
power=1,
|
|
duration=1,
|
|
start=1
|
|
)],
|
|
isp_duration="PT15M",
|
|
period=XmlDate(2023, 1, 1),
|
|
congestion_point="ean.123456789012",
|
|
unsolicited=True,
|
|
flex_offer_message_id=None,
|
|
contract_id=str(uuid4()),
|
|
d_prognosis_message_id=str(uuid4()),
|
|
baseline_reference=str(uuid4()),
|
|
price=2.00,
|
|
currency="EUR",
|
|
order_reference=str(uuid4()),
|
|
option_reference=str(uuid4()),
|
|
activation_factor=0.5,
|
|
**default_args
|
|
),
|
|
FlexOrderResponse(
|
|
flex_order_message_id=str(uuid4()),
|
|
**default_args
|
|
),
|
|
FlexRequest(
|
|
isp_duration="PT15M",
|
|
period=XmlDate(2023, 1, 1),
|
|
congestion_point="ean.123456789012",
|
|
isps=[
|
|
FlexRequestISP(
|
|
disposition=AvailableRequested.REQUESTED,
|
|
min_power=0,
|
|
max_power=10,
|
|
start=1,
|
|
duration=1,
|
|
)
|
|
],
|
|
revision=1,
|
|
expiration_date_time=datetime.now(timezone.utc).isoformat(),
|
|
contract_id=str(uuid4()),
|
|
service_type="MyService",
|
|
**default_args
|
|
),
|
|
FlexReservationUpdate(
|
|
isp_duration="PT15M",
|
|
period=XmlDate(2023, 1, 1),
|
|
congestion_point="ean.123456789012",
|
|
isps=[
|
|
FlexReservationUpdateISP(
|
|
power=1,
|
|
start=1,
|
|
duration=1
|
|
)
|
|
],
|
|
contract_id=str(uuid4()),
|
|
reference="MyReference",
|
|
**default_args,
|
|
),
|
|
FlexReservationUpdateResponse(
|
|
flex_reservation_update_message_id=str(uuid4()),
|
|
**default_args
|
|
),
|
|
FlexSettlement(
|
|
flex_order_settlements=[
|
|
FlexOrderSettlement(
|
|
isps=[
|
|
FlexOrderSettlementISP(
|
|
start=1,
|
|
duration=1,
|
|
baseline_power=1,
|
|
ordered_flex_power=1,
|
|
actual_power=1,
|
|
delivered_flex_power=1,
|
|
power_deficiency=1,
|
|
)
|
|
],
|
|
period=XmlDate(2023, 1, 1),
|
|
congestion_point="ean.123456789012",
|
|
order_reference=str(uuid4()),
|
|
contract_id=str(uuid4()),
|
|
d_prognosis_message_id=str(uuid4()),
|
|
baseline_reference=str(uuid4()),
|
|
price=1.0,
|
|
penalty=1.0,
|
|
net_settlement=2.0,
|
|
)
|
|
],
|
|
contract_settlements=[
|
|
ContractSettlement(
|
|
periods=[
|
|
ContractSettlementPeriod(
|
|
isps=[
|
|
ContractSettlementISP(
|
|
start=1,
|
|
duration=1,
|
|
reserved_power=1,
|
|
requested_power=1,
|
|
available_power=1,
|
|
offered_power=1,
|
|
ordered_power=1,
|
|
)
|
|
],
|
|
period=XmlDate(2023, 1, 1)
|
|
)
|
|
],
|
|
contract_id=str(uuid4())
|
|
)
|
|
],
|
|
period_start=XmlDate(2023, 1, 1),
|
|
period_end=XmlDate(2023, 5, 1),
|
|
currency="EUR",
|
|
**default_args,
|
|
),
|
|
FlexSettlementResponse(
|
|
flex_order_settlement_statuses=[
|
|
FlexOrderSettlementStatus(
|
|
order_reference=str(uuid4()),
|
|
disposition=AcceptedDisputed.ACCEPTED,
|
|
dispute_reason="My Reason",
|
|
)
|
|
],
|
|
flex_settlement_message_id=str(uuid4()),
|
|
**default_args,
|
|
),
|
|
FlexRequestResponse(
|
|
flex_request_message_id=str(uuid4()),
|
|
**default_args,
|
|
),
|
|
Metering(
|
|
profiles=[
|
|
MeteringProfile(
|
|
isps=[
|
|
MeteringISP(
|
|
start=1,
|
|
value=1
|
|
)
|
|
],
|
|
profile_type=MeteringProfileEnum.POWER,
|
|
unit=MeteringUnit.K_W,
|
|
)
|
|
],
|
|
revision=1,
|
|
isp_duration="PT15M",
|
|
time_zone="Europe/Amsterdam",
|
|
currency="EUR",
|
|
period=XmlDate(2023, 1, 1),
|
|
ean="E1234567890123456",
|
|
**default_args
|
|
),
|
|
MeteringResponse(
|
|
metering_message_id=str(uuid4()),
|
|
**default_args
|
|
),
|
|
|
|
]
|
|
|
|
messages_by_type = {
|
|
type(message): message for message in messages
|
|
}
|