Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- 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
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# Copyright Pionix GmbH and Contributors to EVerest
|
||||
|
||||
# fmt: off
|
||||
import pytest
|
||||
from datetime import datetime
|
||||
import logging
|
||||
|
||||
from everest.testing.core_utils.controller.test_controller_interface import TestController
|
||||
|
||||
from validations import *
|
||||
from everest.testing.ocpp_utils.charge_point_utils import wait_for_and_validate, TestUtility
|
||||
from everest.testing.ocpp_utils.fixtures import *
|
||||
|
||||
from everest_test_utils import * # Needs to be before the datatypes below since it overrides the v201 Action enum with the v16 one
|
||||
from ocpp.v201.enums import (IdTokenEnumType as IdTokenTypeEnum, SetVariableStatusEnumType, ConnectorStatusEnumType,GetVariableStatusEnumType)
|
||||
from ocpp.v201.datatypes import *
|
||||
from ocpp.v201 import call as call201
|
||||
from ocpp.v201 import call_result as call_result201
|
||||
|
||||
# fmt: on
|
||||
|
||||
log = logging.getLogger("meterValues")
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@pytest.mark.ocpp_version("ocpp2.0.1")
|
||||
async def test_J01_19(
|
||||
central_system_v201: CentralSystem,
|
||||
test_controller: TestController,
|
||||
test_utility: TestUtility,
|
||||
):
|
||||
"""
|
||||
J01.FR.19
|
||||
...
|
||||
"""
|
||||
# prepare data for the test
|
||||
evse_id1 = 1
|
||||
connector_id = 1
|
||||
|
||||
evse_id2 = 2
|
||||
|
||||
# make an unknown IdToken
|
||||
id_tokenJ01 = IdTokenType(
|
||||
id_token="8BADF00D", type=IdTokenTypeEnum.iso14443)
|
||||
|
||||
log.info(
|
||||
"##################### J01.FR.19: Sending Meter Values not related to a transaction #################"
|
||||
)
|
||||
test_utility.messages.clear()
|
||||
|
||||
test_controller.start()
|
||||
charge_point_v201 = await central_system_v201.wait_for_chargepoint(
|
||||
wait_for_bootnotification=True
|
||||
)
|
||||
|
||||
# expect StatusNotification with status available
|
||||
assert await wait_for_and_validate(
|
||||
test_utility,
|
||||
charge_point_v201,
|
||||
"StatusNotification",
|
||||
call201.StatusNotification(
|
||||
datetime.now().isoformat(),
|
||||
ConnectorStatusEnumType.available,
|
||||
evse_id=evse_id1,
|
||||
connector_id=connector_id,
|
||||
),
|
||||
validate_status_notification_201,
|
||||
)
|
||||
assert await wait_for_and_validate(
|
||||
test_utility,
|
||||
charge_point_v201,
|
||||
"StatusNotification",
|
||||
call201.StatusNotification(
|
||||
datetime.now().isoformat(),
|
||||
ConnectorStatusEnumType.available,
|
||||
evse_id=evse_id2,
|
||||
connector_id=connector_id,
|
||||
),
|
||||
validate_status_notification_201,
|
||||
)
|
||||
|
||||
# Configure AlignedDataInterval
|
||||
r: call_result201.SetVariables = (
|
||||
await charge_point_v201.set_config_variables_req(
|
||||
"AlignedDataCtrlr", "Interval", "3"
|
||||
)
|
||||
)
|
||||
set_variable_result: SetVariableResultType = SetVariableResultType(
|
||||
**r.set_variable_result[0]
|
||||
)
|
||||
assert set_variable_result.attribute_status == SetVariableStatusEnumType.accepted
|
||||
|
||||
# Configure SampledDataInterval
|
||||
r: call_result201.SetVariables = (
|
||||
await charge_point_v201.set_config_variables_req(
|
||||
"SampledDataCtrlr", "TxUpdatedInterval", "3"
|
||||
)
|
||||
)
|
||||
set_variable_result: SetVariableResultType = SetVariableResultType(
|
||||
**r.set_variable_result[0]
|
||||
)
|
||||
assert set_variable_result.attribute_status == SetVariableStatusEnumType.accepted
|
||||
|
||||
# Configure AlignedDataInterval
|
||||
r: call_result201.SetVariables = (
|
||||
await charge_point_v201.set_config_variables_req(
|
||||
"AlignedDataCtrlr", "SendDuringIdle", "true"
|
||||
)
|
||||
)
|
||||
set_variable_result: SetVariableResultType = SetVariableResultType(
|
||||
**r.set_variable_result[0]
|
||||
)
|
||||
assert set_variable_result.attribute_status == SetVariableStatusEnumType.accepted
|
||||
|
||||
# Configure PhaseRotation
|
||||
r: call_result201.SetVariables = (
|
||||
await charge_point_v201.set_config_variables_req(
|
||||
"ChargingStation", "PhaseRotation", "TRS"
|
||||
)
|
||||
)
|
||||
set_variable_result: SetVariableResultType = SetVariableResultType(
|
||||
**r.set_variable_result[0]
|
||||
)
|
||||
assert set_variable_result.attribute_status == SetVariableStatusEnumType.accepted
|
||||
|
||||
# Get the value of PhaseRotation
|
||||
r: call_result201.GetVariables = (
|
||||
await charge_point_v201.get_config_variables_req(
|
||||
"ChargingStation", "PhaseRotation"
|
||||
)
|
||||
)
|
||||
get_variables_result: GetVariableResultType = GetVariableResultType(
|
||||
**r.get_variable_result[0]
|
||||
)
|
||||
if get_variables_result.attribute_status == GetVariableStatusEnumType.accepted:
|
||||
log.info("Phase Rotation %s " % get_variables_result.attribute_value)
|
||||
|
||||
# send meter values periodically when not charging
|
||||
logging.debug("Collecting meter values...")
|
||||
for _ in range(3):
|
||||
# send MeterValues
|
||||
assert await wait_for_and_validate(
|
||||
test_utility, charge_point_v201, "MeterValues", {"evseId": 1}
|
||||
)
|
||||
assert await wait_for_and_validate(
|
||||
test_utility, charge_point_v201, "MeterValues", {"evseId": 2}
|
||||
)
|
||||
|
||||
# swipe id tag to authorize
|
||||
test_controller.swipe(id_tokenJ01.id_token)
|
||||
|
||||
# start charging session
|
||||
test_controller.plug_in()
|
||||
|
||||
test_utility.messages.clear()
|
||||
|
||||
# when in a middle of a transaction do not send meter values
|
||||
test_utility.forbidden_actions.append("MeterValues")
|
||||
|
||||
assert await wait_for_and_validate(
|
||||
test_utility, charge_point_v201, "TransactionEvent", {
|
||||
"eventType": "Started"}
|
||||
)
|
||||
|
||||
for _ in range(3):
|
||||
assert await wait_for_and_validate(
|
||||
test_utility,
|
||||
charge_point_v201,
|
||||
"TransactionEvent",
|
||||
{"eventType": "Updated"},
|
||||
)
|
||||
|
||||
# swipe id tag to de-authorize
|
||||
test_controller.swipe(id_tokenJ01.id_token)
|
||||
|
||||
# stop charging session
|
||||
test_controller.plug_out()
|
||||
|
||||
assert await wait_for_and_validate(
|
||||
test_utility, charge_point_v201, "TransactionEvent", {
|
||||
"eventType": "Ended"}
|
||||
)
|
||||
Reference in New Issue
Block a user