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,64 @@
|
||||
set(TEST_TARGET_NAME ${PROJECT_NAME}_EnergyManager_tests)
|
||||
add_executable(${TEST_TARGET_NAME})
|
||||
|
||||
add_dependencies(${TEST_TARGET_NAME} ${MODULE_NAME})
|
||||
|
||||
get_target_property(GENERATED_INCLUDE_DIR generate_cpp_files EVEREST_GENERATED_INCLUDE_DIR)
|
||||
|
||||
target_include_directories(${TEST_TARGET_NAME} PRIVATE
|
||||
..
|
||||
${GENERATED_INCLUDE_DIR}
|
||||
${CMAKE_BINARY_DIR}/generated/modules/${MODULE_NAME}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
)
|
||||
|
||||
target_sources(${TEST_TARGET_NAME} PRIVATE
|
||||
energy_manager_tests.cpp
|
||||
JsonDefinedEnergyManagerTest.cpp
|
||||
../Broker.cpp
|
||||
../BrokerFastCharging.cpp
|
||||
../EnergyManagerImpl.cpp
|
||||
../Market.cpp
|
||||
../Offer.cpp
|
||||
)
|
||||
|
||||
set(JSON_TESTS_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/json_tests")
|
||||
|
||||
target_compile_definitions(${TEST_TARGET_NAME} PRIVATE
|
||||
BUILD_TESTING_MODULE_ENERGY_MANAGER
|
||||
JSON_TESTS_LOCATION="${JSON_TESTS_LOCATION}"
|
||||
)
|
||||
|
||||
target_link_libraries(${TEST_TARGET_NAME} PRIVATE
|
||||
GTest::gmock
|
||||
GTest::gtest_main
|
||||
everest::log
|
||||
everest::framework
|
||||
)
|
||||
|
||||
add_test(${TEST_TARGET_NAME} ${TEST_TARGET_NAME})
|
||||
ev_register_test_target(${TEST_TARGET_NAME})
|
||||
|
||||
# Copy the json files used for testing to the destination directory.
|
||||
# Uses a stamp file so the copy only runs when source fixtures change —
|
||||
# plain add_custom_target always runs, which invalidates dependents on every build.
|
||||
# NOTE: glob is intentionally NOT CONFIGURE_DEPENDS — that flag triggers a cmake
|
||||
# reconfigure on any fixture mtime change, which cascades into ev-cli regeneration
|
||||
# and rebuilds hundreds of unrelated targets. If you add/remove a fixture file,
|
||||
# re-run cmake manually.
|
||||
file(GLOB JSON_TEST_FILES "${CMAKE_CURRENT_SOURCE_DIR}/json_tests/*")
|
||||
set(JSON_TESTS_STAMP "${CMAKE_CURRENT_BINARY_DIR}/json_tests.stamp")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${JSON_TESTS_STAMP}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/json_tests
|
||||
${CMAKE_CURRENT_BINARY_DIR}/json_tests
|
||||
COMMAND ${CMAKE_COMMAND} -E touch ${JSON_TESTS_STAMP}
|
||||
DEPENDS ${JSON_TEST_FILES}
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
add_custom_target(copy_json_tests DEPENDS ${JSON_TESTS_STAMP})
|
||||
|
||||
add_dependencies(${TEST_TARGET_NAME} copy_json_tests)
|
||||
@@ -0,0 +1,97 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
// Copyright Pionix GmbH and Contributors to EVerest
|
||||
|
||||
#include "JsonDefinedEnergyManagerTest.hpp"
|
||||
#include "EnergyManagerConfigJson.hpp"
|
||||
#include "everest/logging.hpp"
|
||||
|
||||
#include <fstream>
|
||||
|
||||
namespace module {
|
||||
|
||||
JsonDefinedEnergyManagerTest::JsonDefinedEnergyManagerTest() = default;
|
||||
|
||||
JsonDefinedEnergyManagerTest::JsonDefinedEnergyManagerTest(const std::filesystem::path& path) {
|
||||
load_test(path);
|
||||
}
|
||||
|
||||
void JsonDefinedEnergyManagerTest::TestBody() {
|
||||
run_test(start_times);
|
||||
}
|
||||
|
||||
void JsonDefinedEnergyManagerTest::load_test(const std::filesystem::path& path) {
|
||||
std::ifstream f(path.c_str());
|
||||
json data;
|
||||
try {
|
||||
data = json::parse(f);
|
||||
} catch (...) {
|
||||
EVLOG_error << "Cannot parse JSON file " << path;
|
||||
}
|
||||
|
||||
if (data.contains("basefile")) {
|
||||
// Load base file first
|
||||
std::filesystem::path basefile = std::filesystem::path(path).parent_path() / std::string(data.at("basefile"));
|
||||
std::ifstream bf(basefile.c_str());
|
||||
json databf = json::parse(bf);
|
||||
|
||||
// Apply patches
|
||||
data = databf.patch(data.at("patches"));
|
||||
}
|
||||
this->request = data.at("request");
|
||||
|
||||
for (auto results : data.at("expected_results")) {
|
||||
std::vector<types::energy::EnforcedLimits> l;
|
||||
for (auto limit : results) {
|
||||
types::energy::EnforcedLimits e;
|
||||
from_json(limit, e);
|
||||
l.push_back(e);
|
||||
}
|
||||
this->expected_results.push_back(l);
|
||||
}
|
||||
|
||||
// Recreate the EnergyManagerImpl with the config from the test
|
||||
this->config = data.at("config");
|
||||
this->impl.reset(
|
||||
new EnergyManagerImpl(this->config, [](const std::vector<types::energy::EnforcedLimits>& limits) { return; }));
|
||||
|
||||
this->comment = path;
|
||||
for (auto start_time : data.at("start_times")) {
|
||||
this->start_times.push_back(Everest::Date::from_rfc3339(start_time));
|
||||
}
|
||||
}
|
||||
|
||||
void JsonDefinedEnergyManagerTest::run_test(std::vector<date::utc_clock::time_point> _start_times) {
|
||||
|
||||
assert(_start_times.size() == expected_results.size());
|
||||
|
||||
for (int i = 0; i < _start_times.size(); i++) {
|
||||
|
||||
const auto enforced_limits = this->impl->run_optimizer(request, _start_times[i]);
|
||||
|
||||
json diff = json::diff(json(expected_results[i]), json(enforced_limits));
|
||||
ASSERT_EQ(diff.size(), 0) << "At start time " << _start_times[i] << ": Diff to expected output:" << std::endl
|
||||
<< diff.dump(2) << std::endl
|
||||
<< "----------------------------------------" << std::endl
|
||||
<< "Comment: " << std::endl
|
||||
<< comment << std::endl
|
||||
<< "----------------------------------------" << std::endl
|
||||
<< "Full Request: " << std::endl
|
||||
<< request << "----------------------------------------" << std::endl
|
||||
<< "Full Enforced Limits: " << std::endl
|
||||
<< json(enforced_limits).dump(4) << "----------------------------------------"
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
// Example to modify the test after loading
|
||||
// TEST_F(JsonDefinedEnergyManagerTest, json_based_test_01) {
|
||||
// load_test(std::string(JSON_TESTS_LOCATION) + "/1_0_two_evse_load_balancing.json");
|
||||
|
||||
// // Do here any modifications to the test
|
||||
// this->request;
|
||||
// this->expected_result;
|
||||
|
||||
// run_test();
|
||||
// }
|
||||
|
||||
} // namespace module
|
||||
@@ -0,0 +1,216 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
// Copyright Pionix GmbH and Contributors to EVerest
|
||||
|
||||
#include "JsonDefinedEnergyManagerTest.hpp"
|
||||
|
||||
static const std::string source1 = "SOURCE1";
|
||||
static const std::string source2 = "SOURCE2";
|
||||
|
||||
namespace module {
|
||||
|
||||
// Register all json tests in the JSON_TESTS_LOCATION directory
|
||||
void register_json_tests() {
|
||||
const std::filesystem::path json_tests{std::string(JSON_TESTS_LOCATION)};
|
||||
|
||||
for (auto const& test_file : std::filesystem::directory_iterator{json_tests}) {
|
||||
if (test_file.is_regular_file()) {
|
||||
::testing::RegisterTest("JsonDefinedEnergyManagerTest", test_file.path().stem().string().c_str(), nullptr,
|
||||
nullptr, __FILE__, __LINE__, [=]() -> JsonDefinedEnergyManagerTest* {
|
||||
return new JsonDefinedEnergyManagerTest(test_file.path());
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace module
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
|
||||
// Add the JSON tests programmatically
|
||||
module::register_json_tests();
|
||||
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
|
||||
TEST(FreeFunctionTests, GetWattFreqTable) {
|
||||
std::vector<types::energy::FrequencyWattPoint> table{{49., -7000}, {50., 0}, {51., 7000}};
|
||||
|
||||
EXPECT_EQ(module::get_watt_from_freq_table(table, 48.), -7000.);
|
||||
EXPECT_EQ(module::get_watt_from_freq_table(table, 49.), -7000.);
|
||||
EXPECT_EQ(module::get_watt_from_freq_table(table, 49.5), -3500.);
|
||||
EXPECT_EQ(module::get_watt_from_freq_table(table, 50.), 0.);
|
||||
EXPECT_EQ(module::get_watt_from_freq_table(table, 50.5), 3500.);
|
||||
EXPECT_EQ(module::get_watt_from_freq_table(table, 51.), 7000.);
|
||||
EXPECT_EQ(module::get_watt_from_freq_table(table, 52.), 7000.);
|
||||
}
|
||||
|
||||
TEST(FreeFunctionTests, ApplyLimitIfSmaller) {
|
||||
std::optional<types::energy::NumberWithSource> base;
|
||||
types::energy::NumberWithSource result;
|
||||
const std::string source = "SOURCE";
|
||||
|
||||
// Base has no value yet
|
||||
module::apply_limit_if_smaller(base, 20., source);
|
||||
EXPECT_TRUE(base.has_value());
|
||||
EXPECT_EQ(base.value().value, 20.);
|
||||
EXPECT_EQ(base.value().source, source);
|
||||
|
||||
// Now base has a value, test if a bigger limit does not apply
|
||||
module::apply_limit_if_smaller(base, 21., source);
|
||||
EXPECT_TRUE(base.has_value());
|
||||
EXPECT_EQ(base.value().value, 20.);
|
||||
EXPECT_EQ(base.value().source, source);
|
||||
|
||||
// Now base has a value, test if a smaller limit does apply
|
||||
module::apply_limit_if_smaller(base, 19., source);
|
||||
EXPECT_TRUE(base.has_value());
|
||||
EXPECT_EQ(base.value().value, 19.);
|
||||
EXPECT_EQ(base.value().source, source);
|
||||
}
|
||||
|
||||
TEST(FreeFunctionTests, ApplySetpoints) {
|
||||
module::ScheduleReq imp;
|
||||
module::ScheduleReq::value_type v;
|
||||
|
||||
// At first it is mostly empty
|
||||
v.timestamp = "2024-12-17T13:08:46.479Z";
|
||||
imp.push_back(v);
|
||||
// Add another entry with an ampere limit
|
||||
v.timestamp = "2024-12-17T13:08:47.479Z";
|
||||
v.limits_to_root.ac_max_current_A = {13.0, source1};
|
||||
imp.push_back(v);
|
||||
// Add another entry with an additional watt limit
|
||||
v.timestamp = "2024-12-17T13:08:48.479Z";
|
||||
v.limits_to_root.total_power_W = {2200.0, source2};
|
||||
imp.push_back(v);
|
||||
|
||||
module::ScheduleReq exp{imp};
|
||||
|
||||
module::ScheduleReq imp_orig{imp};
|
||||
module::ScheduleReq exp_orig{imp};
|
||||
|
||||
module::ScheduleSetpoints setpoints;
|
||||
module::ScheduleSetpoints::value_type s;
|
||||
// At first no setpoint is actually set
|
||||
s.timestamp = "2024-12-17T13:08:46.479Z";
|
||||
setpoints.push_back(s);
|
||||
s.timestamp = "2024-12-17T13:08:47.479Z";
|
||||
setpoints.push_back(s);
|
||||
s.timestamp = "2024-12-17T13:08:48.479Z";
|
||||
setpoints.push_back(s);
|
||||
|
||||
module::apply_setpoints(imp, exp, setpoints, {});
|
||||
|
||||
EXPECT_FALSE(imp[0].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_FALSE(imp[0].limits_to_root.total_power_W.has_value());
|
||||
|
||||
EXPECT_TRUE(imp[1].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_FALSE(imp[1].limits_to_root.total_power_W.has_value());
|
||||
EXPECT_EQ(imp[1].limits_to_root.ac_max_current_A.value().value, 13.0);
|
||||
EXPECT_EQ(imp[1].limits_to_root.ac_max_current_A.value().source, source1);
|
||||
|
||||
EXPECT_TRUE(imp[2].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_TRUE(imp[2].limits_to_root.total_power_W.has_value());
|
||||
EXPECT_EQ(imp[2].limits_to_root.ac_max_current_A.value().value, 13.0);
|
||||
EXPECT_EQ(imp[2].limits_to_root.ac_max_current_A.value().source, source1);
|
||||
EXPECT_EQ(imp[2].limits_to_root.total_power_W.value().value, 2200.);
|
||||
EXPECT_EQ(imp[2].limits_to_root.total_power_W.value().source, source2);
|
||||
|
||||
setpoints.clear();
|
||||
types::energy::SetpointType sp;
|
||||
sp.ac_current_A = 8.0;
|
||||
sp.source = "SOURCESETPOINT";
|
||||
s.setpoint = sp;
|
||||
s.timestamp = "2024-12-17T13:08:46.479Z";
|
||||
setpoints.push_back(s);
|
||||
s.timestamp = "2024-12-17T13:08:47.479Z";
|
||||
setpoints.push_back(s);
|
||||
s.timestamp = "2024-12-17T13:08:48.479Z";
|
||||
setpoints.push_back(s);
|
||||
|
||||
module::apply_setpoints(imp, exp, setpoints, {});
|
||||
|
||||
EXPECT_TRUE(imp[0].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_EQ(imp[0].limits_to_root.ac_max_current_A.value().value, 8.0);
|
||||
EXPECT_EQ(imp[0].limits_to_root.ac_max_current_A.value().source, "SOURCESETPOINT");
|
||||
EXPECT_FALSE(imp[0].limits_to_root.total_power_W.has_value());
|
||||
|
||||
EXPECT_TRUE(imp[1].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_EQ(imp[1].limits_to_root.ac_max_current_A.value().value, 8.0);
|
||||
EXPECT_EQ(imp[1].limits_to_root.ac_max_current_A.value().source, "SOURCESETPOINT");
|
||||
EXPECT_FALSE(imp[1].limits_to_root.total_power_W.has_value());
|
||||
|
||||
EXPECT_TRUE(imp[2].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_EQ(imp[2].limits_to_root.ac_max_current_A.value().value, 8.0);
|
||||
EXPECT_EQ(imp[2].limits_to_root.ac_max_current_A.value().source, "SOURCESETPOINT");
|
||||
EXPECT_TRUE(imp[2].limits_to_root.total_power_W.has_value());
|
||||
EXPECT_EQ(imp[2].limits_to_root.total_power_W.value().value, 2200);
|
||||
EXPECT_EQ(imp[2].limits_to_root.total_power_W.value().source, source2);
|
||||
|
||||
EXPECT_TRUE(exp[0].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_EQ(exp[0].limits_to_root.ac_max_current_A.value().value, 0.0);
|
||||
EXPECT_EQ(exp[0].limits_to_root.ac_max_current_A.value().source, "SOURCESETPOINT");
|
||||
EXPECT_FALSE(exp[0].limits_to_root.total_power_W.has_value());
|
||||
|
||||
EXPECT_TRUE(exp[1].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_EQ(exp[1].limits_to_root.ac_max_current_A.value().value, 0.0);
|
||||
EXPECT_EQ(exp[1].limits_to_root.ac_max_current_A.value().source, "SOURCESETPOINT");
|
||||
EXPECT_FALSE(exp[1].limits_to_root.total_power_W.has_value());
|
||||
|
||||
EXPECT_TRUE(exp[2].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_EQ(exp[2].limits_to_root.ac_max_current_A.value().value, 0.0);
|
||||
EXPECT_EQ(exp[2].limits_to_root.ac_max_current_A.value().source, "SOURCESETPOINT");
|
||||
EXPECT_TRUE(exp[2].limits_to_root.total_power_W.has_value());
|
||||
EXPECT_EQ(exp[2].limits_to_root.total_power_W.value().value, 2200);
|
||||
EXPECT_EQ(exp[2].limits_to_root.total_power_W.value().source, source2);
|
||||
|
||||
imp = imp_orig;
|
||||
exp = exp_orig;
|
||||
setpoints.clear();
|
||||
sp.ac_current_A = 14.0;
|
||||
sp.source = "SOURCESETPOINT";
|
||||
s.setpoint = sp;
|
||||
s.timestamp = "2024-12-17T13:08:46.479Z";
|
||||
setpoints.push_back(s);
|
||||
s.timestamp = "2024-12-17T13:08:47.479Z";
|
||||
setpoints.push_back(s);
|
||||
s.timestamp = "2024-12-17T13:08:48.479Z";
|
||||
setpoints.push_back(s);
|
||||
|
||||
module::apply_setpoints(imp, exp, setpoints, {});
|
||||
|
||||
EXPECT_TRUE(imp[0].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_EQ(imp[0].limits_to_root.ac_max_current_A.value().value, 14.0);
|
||||
EXPECT_EQ(imp[0].limits_to_root.ac_max_current_A.value().source, "SOURCESETPOINT");
|
||||
EXPECT_FALSE(imp[0].limits_to_root.total_power_W.has_value());
|
||||
|
||||
EXPECT_TRUE(imp[1].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_EQ(imp[1].limits_to_root.ac_max_current_A.value().value, 13.0);
|
||||
EXPECT_EQ(imp[1].limits_to_root.ac_max_current_A.value().source, source1);
|
||||
EXPECT_FALSE(imp[1].limits_to_root.total_power_W.has_value());
|
||||
|
||||
EXPECT_TRUE(imp[2].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_EQ(imp[2].limits_to_root.ac_max_current_A.value().value, 13.0);
|
||||
EXPECT_EQ(imp[2].limits_to_root.ac_max_current_A.value().source, source1);
|
||||
EXPECT_TRUE(imp[2].limits_to_root.total_power_W.has_value());
|
||||
EXPECT_EQ(imp[2].limits_to_root.total_power_W.value().value, 2200);
|
||||
EXPECT_EQ(imp[2].limits_to_root.total_power_W.value().source, source2);
|
||||
|
||||
EXPECT_TRUE(exp[0].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_EQ(exp[0].limits_to_root.ac_max_current_A.value().value, 0.0);
|
||||
EXPECT_EQ(exp[0].limits_to_root.ac_max_current_A.value().source, "SOURCESETPOINT");
|
||||
EXPECT_FALSE(exp[0].limits_to_root.total_power_W.has_value());
|
||||
|
||||
EXPECT_TRUE(exp[1].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_EQ(exp[1].limits_to_root.ac_max_current_A.value().value, 0.0);
|
||||
EXPECT_EQ(exp[1].limits_to_root.ac_max_current_A.value().source, "SOURCESETPOINT");
|
||||
EXPECT_FALSE(exp[1].limits_to_root.total_power_W.has_value());
|
||||
|
||||
EXPECT_TRUE(exp[2].limits_to_root.ac_max_current_A.has_value());
|
||||
EXPECT_EQ(exp[2].limits_to_root.ac_max_current_A.value().value, 0.0);
|
||||
EXPECT_EQ(exp[2].limits_to_root.ac_max_current_A.value().source, "SOURCESETPOINT");
|
||||
EXPECT_TRUE(exp[2].limits_to_root.total_power_W.has_value());
|
||||
EXPECT_EQ(exp[2].limits_to_root.total_power_W.value().value, 2200);
|
||||
EXPECT_EQ(exp[2].limits_to_root.total_power_W.value().source, source2);
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
// Copyright Pionix GmbH and Contributors to EVerest
|
||||
|
||||
#ifndef TESTS_ENERGY_MANAGER_CONFIG_JSON_HPP
|
||||
#define TESTS_ENERGY_MANAGER_CONFIG_JSON_HPP
|
||||
|
||||
#include "EnergyManagerImpl.hpp"
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||
|
||||
template <> struct adl_serializer<module::EnergyManagerConfig> {
|
||||
static void to_json(json& j, const module::EnergyManagerConfig& config) {
|
||||
j = {
|
||||
{"nominal_ac_voltage", config.nominal_ac_voltage},
|
||||
{"update_interval", config.update_interval},
|
||||
{"schedule_interval_duration", config.schedule_interval_duration},
|
||||
{"schedule_total_duration", config.schedule_total_duration},
|
||||
{"slice_ampere", config.slice_ampere},
|
||||
{"slice_watt", config.slice_watt},
|
||||
{"debug", config.debug},
|
||||
{"switch_3ph1ph_while_charging_mode", config.switch_3ph1ph_while_charging_mode},
|
||||
{"switch_3ph1ph_max_nr_of_switches_per_session", config.switch_3ph1ph_max_nr_of_switches_per_session},
|
||||
{"switch_3ph1ph_switch_limit_stickyness", config.switch_3ph1ph_switch_limit_stickyness},
|
||||
{"switch_3ph1ph_power_hysteresis_W", config.switch_3ph1ph_power_hysteresis_W},
|
||||
{"switch_3ph1ph_time_hysteresis_s", config.switch_3ph1ph_time_hysteresis_s},
|
||||
};
|
||||
}
|
||||
static module::EnergyManagerConfig from_json(const json& j) {
|
||||
return {
|
||||
j.at("nominal_ac_voltage"),
|
||||
j.at("update_interval"),
|
||||
j.at("schedule_interval_duration"),
|
||||
j.at("schedule_total_duration"),
|
||||
j.at("slice_ampere"),
|
||||
j.at("slice_watt"),
|
||||
j.at("debug"),
|
||||
j.at("switch_3ph1ph_while_charging_mode"),
|
||||
j.at("switch_3ph1ph_max_nr_of_switches_per_session"),
|
||||
j.at("switch_3ph1ph_switch_limit_stickyness"),
|
||||
j.at("switch_3ph1ph_power_hysteresis_W"),
|
||||
j.at("switch_3ph1ph_time_hysteresis_s"),
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
NLOHMANN_JSON_NAMESPACE_END
|
||||
#endif // TESTS_ENERGY_MANAGER_CONFIG_JSON_HPP
|
||||
@@ -0,0 +1,44 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
// Copyright Pionix GmbH and Contributors to EVerest
|
||||
|
||||
#ifndef JSON_DEFINED_ENERGY_MANAGER_TEST_HPP
|
||||
#define JSON_DEFINED_ENERGY_MANAGER_TEST_HPP
|
||||
|
||||
#include <chrono>
|
||||
#include <date/date.h>
|
||||
#include <date/tz.h>
|
||||
#include <filesystem>
|
||||
#include <gtest/gtest.h>
|
||||
#include <memory>
|
||||
|
||||
#include <generated/types/energy.hpp>
|
||||
|
||||
#include "EnergyManagerImpl.hpp"
|
||||
|
||||
namespace module {
|
||||
|
||||
// This test runs a test from a single json file
|
||||
// and asserts that the result matches the expected result defined in the same file
|
||||
class JsonDefinedEnergyManagerTest : public ::testing::Test {
|
||||
public:
|
||||
JsonDefinedEnergyManagerTest();
|
||||
explicit JsonDefinedEnergyManagerTest(const std::filesystem::path& path);
|
||||
void TestBody() override;
|
||||
|
||||
protected:
|
||||
void load_test(const std::filesystem::path& path);
|
||||
void run_test(std::vector<date::utc_clock::time_point> _start_times);
|
||||
|
||||
std::unique_ptr<EnergyManagerImpl> impl;
|
||||
std::vector<date::utc_clock::time_point> start_times;
|
||||
EnergyManagerConfig config;
|
||||
types::energy::EnergyFlowRequest request;
|
||||
std::vector<std::vector<types::energy::EnforcedLimits>> expected_results;
|
||||
|
||||
private:
|
||||
std::string comment;
|
||||
};
|
||||
|
||||
} // namespace module
|
||||
|
||||
#endif // JSON_DEFINED_ENERGY_MANAGER_TEST_HPP
|
||||
@@ -0,0 +1,335 @@
|
||||
{
|
||||
"description": "Tests one external watt setpoint for one EVSE",
|
||||
"start_times": [
|
||||
"2024-12-17T13:00:00.000Z"
|
||||
],
|
||||
"config": {
|
||||
"nominal_ac_voltage": 230.0,
|
||||
"update_interval": 1,
|
||||
"schedule_interval_duration": 60,
|
||||
"schedule_total_duration": 1,
|
||||
"slice_ampere": 0.5,
|
||||
"slice_watt": 500,
|
||||
"debug": false,
|
||||
"switch_3ph1ph_while_charging_mode": "Never",
|
||||
"switch_3ph1ph_max_nr_of_switches_per_session": 10,
|
||||
"switch_3ph1ph_switch_limit_stickyness": "DontChange",
|
||||
"switch_3ph1ph_power_hysteresis_W": 500,
|
||||
"switch_3ph1ph_time_hysteresis_s": 30
|
||||
},
|
||||
"request": {
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [],
|
||||
"evse_state": "Charging",
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 10.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 6.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"energy_usage_root": {
|
||||
"current_A": {
|
||||
"L1": 0.029999999329447746,
|
||||
"L2": 0.0,
|
||||
"L3": 0.0,
|
||||
"N": 0.0
|
||||
},
|
||||
"energy_Wh_import": {
|
||||
"L1": 1.7999999523162842,
|
||||
"L2": 0.0,
|
||||
"L3": 0.0,
|
||||
"total": 1.7999999523162842
|
||||
},
|
||||
"power_W": {
|
||||
"L1": 2.0,
|
||||
"L2": 0.0,
|
||||
"L3": 0.0,
|
||||
"total": 2.0
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:46.479Z",
|
||||
"voltage_V": {
|
||||
"DC": 248.10000610351563,
|
||||
"L1": 0.0,
|
||||
"L2": 0.0
|
||||
},
|
||||
"frequency_Hz": {
|
||||
"L1": 47.0,
|
||||
"L2": 47.0,
|
||||
"L3": 47.0
|
||||
}
|
||||
},
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 9.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:46.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [
|
||||
{
|
||||
"setpoint": {
|
||||
"priority": 42,
|
||||
"source": "external_limit_1_setpoint",
|
||||
"frequency_table": [
|
||||
{
|
||||
"frequency_Hz": 49.0,
|
||||
"total_power_W": -7000.0
|
||||
},
|
||||
{
|
||||
"frequency_Hz": 50.0,
|
||||
"total_power_W": 0
|
||||
},
|
||||
{
|
||||
"frequency_Hz": 51.0,
|
||||
"total_power_W": 7000.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"uuid": "external_limit_1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "grid_connection"
|
||||
},
|
||||
"expected_results": [
|
||||
[
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "EVSE1_leave",
|
||||
"value": -10.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_FixedValue",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "EVSE1_leave",
|
||||
"value": -6900.0
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "EVSE1_leave",
|
||||
"value": -10.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_FixedValue",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "EVSE1_leave",
|
||||
"value": -6900.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "EVSE1_leave",
|
||||
"value": -10.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_FixedValue",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "EVSE1_leave",
|
||||
"value": -6900.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_leave",
|
||||
"value": -9.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_FixedValue",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "external_limit_1_leave",
|
||||
"value": -6210.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:46.479Z"
|
||||
}
|
||||
],
|
||||
"uuid": "evse1",
|
||||
"valid_for": 10
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,323 @@
|
||||
{
|
||||
"description": "Tests loadbalancing between two DC EVSE nodes (50/50)",
|
||||
"start_times": [
|
||||
"2024-12-17T13:00:00.000Z"
|
||||
],
|
||||
"config": {
|
||||
"nominal_ac_voltage": 230.0,
|
||||
"update_interval": 1,
|
||||
"schedule_interval_duration": 60,
|
||||
"schedule_total_duration": 1,
|
||||
"slice_ampere": 2,
|
||||
"slice_watt": 1000,
|
||||
"debug": false,
|
||||
"switch_3ph1ph_while_charging_mode": "Never",
|
||||
"switch_3ph1ph_max_nr_of_switches_per_session": 10,
|
||||
"switch_3ph1ph_switch_limit_stickyness": "DontChange",
|
||||
"switch_3ph1ph_power_hysteresis_W": 500,
|
||||
"switch_3ph1ph_time_hysteresis_s": 30
|
||||
},
|
||||
"request": {
|
||||
"children": [
|
||||
{
|
||||
"children": [],
|
||||
"evse_state": "Charging",
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"total_power_W": {
|
||||
"value": 10000.0,
|
||||
"source": "EVSE1_leaves"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"total_power_W": {
|
||||
"value": 50000.0,
|
||||
"source": "EVSE1_leaves"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 60.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1"
|
||||
},
|
||||
{
|
||||
"children": [],
|
||||
"evse_state": "Charging",
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"total_power_W": {
|
||||
"value": 12000.0,
|
||||
"source": "EVSE2_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "EVSE2_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE2_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE2_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE2_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"total_power_W": {
|
||||
"value": 60000.0,
|
||||
"source": "EVSE2_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 80.0,
|
||||
"source": "EVSE2_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE2_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE2_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE2_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse2"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 125.0,
|
||||
"source": "GridConnection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 120.0,
|
||||
"source": "GridConnection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "GridConnection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 125.0,
|
||||
"source": "GridConnection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 120.0,
|
||||
"source": "GridConnection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "GridConnection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "grid_connection"
|
||||
},
|
||||
"expected_results": [
|
||||
[
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "EVSE1_root",
|
||||
"value": 60.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_NumPhasesActive",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "EVSE1_root",
|
||||
"value": 41400.0
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "EVSE1_root",
|
||||
"value": 60.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_NumPhasesActive",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "EVSE1_root",
|
||||
"value": 41400.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "EVSE1_root",
|
||||
"value": 60.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_NumPhasesActive",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "EVSE1_root",
|
||||
"value": 41400.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1",
|
||||
"valid_for": 10
|
||||
},
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "GridConnection_root",
|
||||
"value": 60.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_NumPhasesActive",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "GridConnection_root",
|
||||
"value": 41400.0
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "GridConnection_root",
|
||||
"value": 60.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_NumPhasesActive",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "GridConnection_root",
|
||||
"value": 41400.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "GridConnection_root",
|
||||
"value": 60.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_NumPhasesActive",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "GridConnection_root",
|
||||
"value": 41400.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse2",
|
||||
"valid_for": 10
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,299 @@
|
||||
{
|
||||
"description": "Tests loadbalancing between two EVSE nodes (50/50)",
|
||||
"start_times": [
|
||||
"2024-12-17T13:00:00.000Z"
|
||||
],
|
||||
"config": {
|
||||
"nominal_ac_voltage": 230.0,
|
||||
"update_interval": 1,
|
||||
"schedule_interval_duration": 60,
|
||||
"schedule_total_duration": 1,
|
||||
"slice_ampere": 0.5,
|
||||
"slice_watt": 500,
|
||||
"debug": false,
|
||||
"switch_3ph1ph_while_charging_mode": "Never",
|
||||
"switch_3ph1ph_max_nr_of_switches_per_session": 10,
|
||||
"switch_3ph1ph_switch_limit_stickyness": "DontChange",
|
||||
"switch_3ph1ph_power_hysteresis_W": 500,
|
||||
"switch_3ph1ph_time_hysteresis_s": 30
|
||||
},
|
||||
"request": {
|
||||
"children": [
|
||||
{
|
||||
"children": [],
|
||||
"evse_state": "Charging",
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 6.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1"
|
||||
},
|
||||
{
|
||||
"children": [],
|
||||
"evse_state": "Charging",
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE2_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "EVSE2_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE2_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE2_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE2_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 8.0,
|
||||
"source": "EVSE2_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE2_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE2_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 6.0,
|
||||
"source": "EVSE2_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE2_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse2"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "GridConnection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "GridConnection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "GridConnection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "GridConnection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "GridConnection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "GridConnection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "grid_connection"
|
||||
},
|
||||
"expected_results": [
|
||||
[
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "GridConnection_root",
|
||||
"value": 24.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "GridConnection_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "GridConnection_root",
|
||||
"value": 24.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "GridConnection_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "GridConnection_root",
|
||||
"value": 24.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "GridConnection_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1",
|
||||
"valid_for": 10
|
||||
},
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "EVSE2_leave",
|
||||
"value": 8.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "GridConnection_phase,EVSE2_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "EVSE2_leave",
|
||||
"value": 8.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "GridConnection_phase,EVSE2_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "EVSE2_leave",
|
||||
"value": 8.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "GridConnection_phase,EVSE2_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse2",
|
||||
"valid_for": 10
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"basefile": "1_0_two_ac_evse_load_balancing.json",
|
||||
"description": "Tests load balancing between two EVSE nodes, one is charging and one is unplugged with 0A in idle",
|
||||
"patches": [
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/request/children/1/schedule_import/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/request/children/1/evse_state",
|
||||
"value": "Unplugged"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/limits_root_side/ac_max_current_A/source",
|
||||
"value": "GridConnection_root,EVSE1_root"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/limits_root_side/ac_max_current_A/value",
|
||||
"value": 32.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/schedule/0/limits_to_root/ac_max_current_A/source",
|
||||
"value": "GridConnection_root,EVSE1_root"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/schedule/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 32.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/schedule/1/limits_to_root/ac_max_current_A/source",
|
||||
"value": "GridConnection_root,EVSE1_root"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/schedule/1/limits_to_root/ac_max_current_A/value",
|
||||
"value": 32.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/limits_root_side/ac_max_current_A/source",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/limits_root_side/ac_max_current_A/value",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"op": "remove",
|
||||
"path": "/expected_results/0/1/limits_root_side/ac_max_phase_count"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/0/limits_to_root/ac_max_current_A/source",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"op": "remove",
|
||||
"path": "/expected_results/0/1/schedule/0/limits_to_root/ac_max_phase_count"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/1/limits_to_root/ac_max_current_A/source",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/1/limits_to_root/ac_max_current_A/value",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"op": "remove",
|
||||
"path": "/expected_results/0/1/schedule/1/limits_to_root/ac_max_phase_count"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"basefile": "1_0_two_ac_evse_load_balancing.json",
|
||||
"description": "Tests load balancing between two EVSE nodes, one is charging and one is unplugged with 6A in idle",
|
||||
"patches": [
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/request/children/1/schedule_import/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 6.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/request/children/1/evse_state",
|
||||
"value": "Unplugged"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/limits_root_side/ac_max_current_A/value",
|
||||
"value": 26.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/schedule/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 26.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/schedule/1/limits_to_root/ac_max_current_A/value",
|
||||
"value": 26.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/limits_root_side/ac_max_current_A/source",
|
||||
"value": "EVSE2_root"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/limits_root_side/ac_max_current_A/value",
|
||||
"value": 6.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/0/limits_to_root/ac_max_current_A/source",
|
||||
"value": "EVSE2_root"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 6.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/1/limits_to_root/ac_max_current_A/source",
|
||||
"value": "EVSE2_root"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/1/limits_to_root/ac_max_current_A/value",
|
||||
"value": 6.0
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"basefile": "1_0_two_ac_evse_load_balancing.json",
|
||||
"description": "Tests load balancing between two EVSE nodes, one is charging and one is unplugged with 6A in idle",
|
||||
"patches": [
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/request/children/0/schedule_import/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 45.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/request/children/0/schedule_import/0/limits_to_leaves/ac_max_current_A/value",
|
||||
"value": 44.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/request/children/1/schedule_import/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/request/children/1/schedule_export/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 8.0
|
||||
},
|
||||
{
|
||||
"op": "remove",
|
||||
"path": "/request/children/1/schedule_export/0/limits_to_leaves/ac_max_current_A"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/limits_root_side/ac_max_current_A/value",
|
||||
"value": 40.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/schedule/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 40.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/schedule/1/limits_to_root/ac_max_current_A/value",
|
||||
"value": 40.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/limits_root_side/ac_max_current_A/value",
|
||||
"value": -8.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/limits_root_side/ac_max_phase_count/source",
|
||||
"value": "BrokerFastCharging_FixedValue"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": -8.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/0/limits_to_root/ac_max_phase_count/source",
|
||||
"value": "BrokerFastCharging_FixedValue"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/1/limits_to_root/ac_max_current_A/value",
|
||||
"value": -8.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/1/limits_to_root/ac_max_phase_count/source",
|
||||
"value": "BrokerFastCharging_FixedValue"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/limits_root_side/ac_max_current_A/source",
|
||||
"value": "EVSE2_root"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/0/limits_to_root/ac_max_current_A/source",
|
||||
"value": "EVSE2_root"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/1/limits_to_root/ac_max_current_A/source",
|
||||
"value": "EVSE2_root"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"basefile": "1_0_two_ac_evse_load_balancing.json",
|
||||
"description": "Tests load balancing between two EVSE nodes, both are discharging",
|
||||
"patches": [
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/request/children/0/schedule_import/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/request/children/0/schedule_export/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 12.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/request/children/1/schedule_import/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/request/children/1/schedule_export/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": 11.0
|
||||
},
|
||||
{
|
||||
"op": "remove",
|
||||
"path": "/request/children/0/schedule_export/0/limits_to_leaves/ac_max_current_A"
|
||||
},
|
||||
{
|
||||
"op": "remove",
|
||||
"path": "/request/children/1/schedule_export/0/limits_to_leaves/ac_max_current_A"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/limits_root_side/ac_max_current_A/value",
|
||||
"value": -8.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/limits_root_side/ac_max_phase_count/source",
|
||||
"value": "BrokerFastCharging_FixedValue"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/schedule/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": -8.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/schedule/0/limits_to_root/ac_max_phase_count/source",
|
||||
"value": "BrokerFastCharging_FixedValue"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/schedule/1/limits_to_root/ac_max_current_A/value",
|
||||
"value": -8.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/0/schedule/1/limits_to_root/ac_max_phase_count/source",
|
||||
"value": "BrokerFastCharging_FixedValue"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/limits_root_side/ac_max_current_A/source",
|
||||
"value": "GridConnection_root"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/limits_root_side/ac_max_current_A/value",
|
||||
"value": -8.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/limits_root_side/ac_max_phase_count/source",
|
||||
"value": "BrokerFastCharging_FixedValue"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/0/limits_to_root/ac_max_current_A/source",
|
||||
"value": "GridConnection_root"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/0/limits_to_root/ac_max_current_A/value",
|
||||
"value": -8.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/0/limits_to_root/ac_max_phase_count/source",
|
||||
"value": "BrokerFastCharging_FixedValue"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/1/limits_to_root/ac_max_current_A/source",
|
||||
"value": "GridConnection_root"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/1/limits_to_root/ac_max_current_A/value",
|
||||
"value": -8.0
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/expected_results/0/1/schedule/1/limits_to_root/ac_max_phase_count/source",
|
||||
"value": "BrokerFastCharging_FixedValue"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,235 @@
|
||||
{
|
||||
"description": "Tests one external limit for one EVSE",
|
||||
"start_times": [
|
||||
"2024-12-17T13:00:00.000Z"
|
||||
],
|
||||
"config": {
|
||||
"nominal_ac_voltage": 230.0,
|
||||
"update_interval": 1,
|
||||
"schedule_interval_duration": 60,
|
||||
"schedule_total_duration": 1,
|
||||
"slice_ampere": 0.5,
|
||||
"slice_watt": 500,
|
||||
"debug": false,
|
||||
"switch_3ph1ph_while_charging_mode": "Never",
|
||||
"switch_3ph1ph_max_nr_of_switches_per_session": 10,
|
||||
"switch_3ph1ph_switch_limit_stickyness": "DontChange",
|
||||
"switch_3ph1ph_power_hysteresis_W": 500,
|
||||
"switch_3ph1ph_time_hysteresis_s": 30
|
||||
},
|
||||
"request": {
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [],
|
||||
"evse_state": "Charging",
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 6.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "external_limit_1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "grid_connection"
|
||||
},
|
||||
"expected_results": [
|
||||
[
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "grid_connection_root,external_limit_1_root,EVSE1_root",
|
||||
"value": 32.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "grid_connection_root,external_limit_1_root,EVSE1_root",
|
||||
"value": 32.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "grid_connection_root,external_limit_1_root,EVSE1_root",
|
||||
"value": 32.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1",
|
||||
"valid_for": 10
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,235 @@
|
||||
{
|
||||
"description": "Tests one external limit for one EVSE",
|
||||
"start_times": [
|
||||
"2024-12-17T13:00:00.000Z"
|
||||
],
|
||||
"config": {
|
||||
"nominal_ac_voltage": 230.0,
|
||||
"update_interval": 1,
|
||||
"schedule_interval_duration": 60,
|
||||
"schedule_total_duration": 1,
|
||||
"slice_ampere": 0.5,
|
||||
"slice_watt": 500,
|
||||
"debug": false,
|
||||
"switch_3ph1ph_while_charging_mode": "Never",
|
||||
"switch_3ph1ph_max_nr_of_switches_per_session": 10,
|
||||
"switch_3ph1ph_switch_limit_stickyness": "DontChange",
|
||||
"switch_3ph1ph_power_hysteresis_W": 500,
|
||||
"switch_3ph1ph_time_hysteresis_s": 30
|
||||
},
|
||||
"request": {
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [],
|
||||
"evse_state": "Charging",
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 6.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 13.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "external_limit_1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "grid_connection"
|
||||
},
|
||||
"expected_results": [
|
||||
[
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_leave",
|
||||
"value": 13.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_leave",
|
||||
"value": 13.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_leave",
|
||||
"value": 13.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1",
|
||||
"valid_for": 10
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,283 @@
|
||||
{
|
||||
"description": "Tests one external limit for one EVSE",
|
||||
"start_times": [
|
||||
"2024-12-17T13:00:00.000Z"
|
||||
],
|
||||
"config": {
|
||||
"nominal_ac_voltage": 230.0,
|
||||
"update_interval": 1,
|
||||
"schedule_interval_duration": 60,
|
||||
"schedule_total_duration": 1,
|
||||
"slice_ampere": 0.5,
|
||||
"slice_watt": 500,
|
||||
"debug": false,
|
||||
"switch_3ph1ph_while_charging_mode": "Never",
|
||||
"switch_3ph1ph_max_nr_of_switches_per_session": 10,
|
||||
"switch_3ph1ph_switch_limit_stickyness": "DontChange",
|
||||
"switch_3ph1ph_power_hysteresis_W": 500,
|
||||
"switch_3ph1ph_time_hysteresis_s": 30
|
||||
},
|
||||
"request": {
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [],
|
||||
"evse_state": "Charging",
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 6.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "external_limit_1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_2_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_2_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_2_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 31.0,
|
||||
"source": "external_limit_2_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_2_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_2_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "external_limit_1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "grid_connection"
|
||||
},
|
||||
"expected_results": [
|
||||
[
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_2_leave",
|
||||
"value": 31.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_2_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_2_leave",
|
||||
"value": 31.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_2_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_2_leave",
|
||||
"value": 31.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_2_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"uuid": "evse1",
|
||||
"valid_for": 10
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,518 @@
|
||||
{
|
||||
"description": "Tests one external limit for one EVSE",
|
||||
"start_times": [
|
||||
"2024-12-17T13:00:00.000Z"
|
||||
],
|
||||
"config": {
|
||||
"nominal_ac_voltage": 230.0,
|
||||
"update_interval": 1,
|
||||
"schedule_interval_duration": 60,
|
||||
"schedule_total_duration": 1,
|
||||
"slice_ampere": 0.5,
|
||||
"slice_watt": 500,
|
||||
"debug": false,
|
||||
"switch_3ph1ph_while_charging_mode": "Never",
|
||||
"switch_3ph1ph_max_nr_of_switches_per_session": 10,
|
||||
"switch_3ph1ph_switch_limit_stickyness": "DontChange",
|
||||
"switch_3ph1ph_power_hysteresis_W": 500,
|
||||
"switch_3ph1ph_time_hysteresis_s": 30
|
||||
},
|
||||
"request": {
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [],
|
||||
"evse_state": "Charging",
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 6.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:40.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 5.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:37.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 6.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:38.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:39.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:40.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:41.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:42.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:43.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "external_limit_1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_2_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_2_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_2_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 31.0,
|
||||
"source": "external_limit_2_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_2_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_2_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "external_limit_1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "grid_connection"
|
||||
},
|
||||
"expected_results": [
|
||||
[
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_2_leave",
|
||||
"value": 31.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_2_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_2_leave",
|
||||
"value": 31.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_2_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_2_leave",
|
||||
"value": 31.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_2_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:37.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_leave",
|
||||
"value": 6.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_2_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:38.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_2_leave",
|
||||
"value": 31.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_2_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:39.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_2_leave",
|
||||
"value": 31.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_2_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:40.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:41.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_2_leave",
|
||||
"value": 31.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_2_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:42.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_2_leave",
|
||||
"value": 31.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_2_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:43.479Z"
|
||||
}
|
||||
],
|
||||
"uuid": "evse1",
|
||||
"valid_for": 10
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,400 @@
|
||||
{
|
||||
"description": "Tests one external limit for one EVSE",
|
||||
"start_times": [
|
||||
"2024-12-17T13:00:00.000Z",
|
||||
"2024-12-17T13:01:00.000Z",
|
||||
"2024-12-17T13:02:00.000Z"
|
||||
],
|
||||
"config": {
|
||||
"nominal_ac_voltage": 230.0,
|
||||
"update_interval": 1,
|
||||
"schedule_interval_duration": 60,
|
||||
"schedule_total_duration": 1,
|
||||
"slice_ampere": 0.5,
|
||||
"slice_watt": 500,
|
||||
"debug": false,
|
||||
"switch_3ph1ph_while_charging_mode": "Both",
|
||||
"switch_3ph1ph_max_nr_of_switches_per_session": 3,
|
||||
"switch_3ph1ph_switch_limit_stickyness": "DontChange",
|
||||
"switch_3ph1ph_power_hysteresis_W": 500,
|
||||
"switch_3ph1ph_time_hysteresis_s": 30
|
||||
},
|
||||
"request": {
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [],
|
||||
"evse_state": "Charging",
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 6.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {},
|
||||
"limits_to_root": {
|
||||
"total_power_W": {
|
||||
"value": 11000.0,
|
||||
"source": "external_limit_1_root"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:01.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {},
|
||||
"limits_to_root": {
|
||||
"total_power_W": {
|
||||
"value": 2000.0,
|
||||
"source": "external_limit_1_root"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:01.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {},
|
||||
"limits_to_root": {
|
||||
"total_power_W": {
|
||||
"value": 5000.0,
|
||||
"source": "external_limit_1_root"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:01.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {},
|
||||
"limits_to_root": {
|
||||
"total_power_W": {
|
||||
"value": 0.0,
|
||||
"source": "external_limit_1_root"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:01.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "external_limit_1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "grid_connection"
|
||||
},
|
||||
"expected_results": [
|
||||
[
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "grid_connection_root,EVSE1_root",
|
||||
"value": 32.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "EVSE1_minphase",
|
||||
"value": 1
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "grid_connection_root,EVSE1_root",
|
||||
"value": 7360.0
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "grid_connection_root,EVSE1_root",
|
||||
"value": 32.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "EVSE1_minphase",
|
||||
"value": 1
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "grid_connection_root,EVSE1_root",
|
||||
"value": 7360.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:01.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"uuid": "evse1",
|
||||
"valid_for": 10
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_root",
|
||||
"value": 15.942028999328613
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "external_limit_1_root",
|
||||
"value": 11000.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:01.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"uuid": "evse1",
|
||||
"valid_for": 10
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_root",
|
||||
"value": 15.942028999328613
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "external_limit_1_root",
|
||||
"value": 11000.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:01.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"uuid": "evse1",
|
||||
"valid_for": 10
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"config": {
|
||||
"nominal_ac_voltage": 230.0,
|
||||
"update_interval": 1,
|
||||
"schedule_interval_duration": 60,
|
||||
"schedule_total_duration": 1,
|
||||
"slice_ampere": 0.5,
|
||||
"slice_watt": 500,
|
||||
"debug": false,
|
||||
"switch_3ph1ph_while_charging_mode": "Never",
|
||||
"switch_3ph1ph_max_nr_of_switches_per_session": 10,
|
||||
"switch_3ph1ph_switch_limit_stickyness": "DontChange",
|
||||
"switch_3ph1ph_power_hysteresis_W": 500,
|
||||
"switch_3ph1ph_time_hysteresis_s": 30
|
||||
},
|
||||
"expected_results": [
|
||||
[]
|
||||
],
|
||||
"request": {
|
||||
"children": [],
|
||||
"node_type": "Undefined",
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "",
|
||||
"schedule_import": [],
|
||||
"schedule_export": []
|
||||
},
|
||||
"start_times": [
|
||||
"2025-01-16T15:42:56.390Z"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"config": {
|
||||
"nominal_ac_voltage": 230.0,
|
||||
"update_interval": 1,
|
||||
"schedule_interval_duration": 60,
|
||||
"schedule_total_duration": 1,
|
||||
"slice_ampere": 0.5,
|
||||
"slice_watt": 500,
|
||||
"debug": false,
|
||||
"switch_3ph1ph_while_charging_mode": "Never",
|
||||
"switch_3ph1ph_max_nr_of_switches_per_session": 10,
|
||||
"switch_3ph1ph_switch_limit_stickyness": "DontChange",
|
||||
"switch_3ph1ph_power_hysteresis_W": 500,
|
||||
"switch_3ph1ph_time_hysteresis_s": 30
|
||||
},
|
||||
"expected_results": [
|
||||
[
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "",
|
||||
"value": 0.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-01-01T12:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse_manager",
|
||||
"valid_for": 10
|
||||
}
|
||||
]
|
||||
],
|
||||
"request": {
|
||||
"children": [],
|
||||
"energy_usage_root": {
|
||||
"current_A": {
|
||||
"L1": 0.029999999329447746,
|
||||
"L2": 0.0,
|
||||
"L3": 0.0,
|
||||
"N": 0.0
|
||||
},
|
||||
"energy_Wh_import": {
|
||||
"L1": 1.7999999523162842,
|
||||
"L2": 0.0,
|
||||
"L3": 0.0,
|
||||
"total": 1.7999999523162842
|
||||
},
|
||||
"power_W": {
|
||||
"L1": 2.0,
|
||||
"L2": 0.0,
|
||||
"L3": 0.0,
|
||||
"total": 2.0
|
||||
},
|
||||
"timestamp": "2024-03-27T12:41:16.864Z",
|
||||
"voltage_V": {
|
||||
"DC": 248.10000610351563,
|
||||
"L1": 0.0,
|
||||
"L2": 0.0
|
||||
}
|
||||
},
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_import": [],
|
||||
"schedule_export": [],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse_manager"
|
||||
},
|
||||
"start_times": [
|
||||
"2024-01-01T12:00:00.000Z"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,338 @@
|
||||
{
|
||||
"description": "Tests one external ampere setpoint for one EVSE",
|
||||
"start_times": [
|
||||
"2024-12-17T13:00:00.000Z"
|
||||
],
|
||||
"config": {
|
||||
"nominal_ac_voltage": 230.0,
|
||||
"update_interval": 1,
|
||||
"schedule_interval_duration": 60,
|
||||
"schedule_total_duration": 1,
|
||||
"slice_ampere": 0.5,
|
||||
"slice_watt": 500,
|
||||
"debug": false,
|
||||
"switch_3ph1ph_while_charging_mode": "Never",
|
||||
"switch_3ph1ph_max_nr_of_switches_per_session": 10,
|
||||
"switch_3ph1ph_switch_limit_stickyness": "DontChange",
|
||||
"switch_3ph1ph_power_hysteresis_W": 500,
|
||||
"switch_3ph1ph_time_hysteresis_s": 30
|
||||
},
|
||||
"request": {
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [],
|
||||
"evse_state": "Charging",
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 10.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 6.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 9.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:46.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [
|
||||
{
|
||||
"setpoint": {
|
||||
"priority": 42,
|
||||
"source": "external_limit_1_setpoint",
|
||||
"ac_current_A": 7.5
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
},
|
||||
{
|
||||
"setpoint": {
|
||||
"priority": 41,
|
||||
"source": "external_limit_1_setpoint",
|
||||
"ac_current_A": 13.0
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:37.479Z"
|
||||
},
|
||||
{
|
||||
"setpoint": {
|
||||
"priority": 41,
|
||||
"source": "external_limit_1_setpoint",
|
||||
"ac_current_A": -8.0
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:40.479Z"
|
||||
},
|
||||
{
|
||||
"setpoint": {
|
||||
"priority": 41,
|
||||
"source": "external_limit_1_setpoint",
|
||||
"ac_current_A": -12.0
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:44.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"uuid": "external_limit_1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "grid_connection"
|
||||
},
|
||||
"expected_results": [
|
||||
[
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": 7.5
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": 7.5
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": 7.5
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": 13.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:37.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": -8.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_FixedValue",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:40.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "EVSE1_leave",
|
||||
"value": -10.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_FixedValue",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:44.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_leave",
|
||||
"value": -9.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_FixedValue",
|
||||
"value": 3
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:46.479Z"
|
||||
}
|
||||
],
|
||||
"uuid": "evse1",
|
||||
"valid_for": 10
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,366 @@
|
||||
{
|
||||
"description": "Tests one external watt setpoint for one EVSE",
|
||||
"start_times": [
|
||||
"2024-12-17T13:00:00.000Z"
|
||||
],
|
||||
"config": {
|
||||
"nominal_ac_voltage": 230.0,
|
||||
"update_interval": 1,
|
||||
"schedule_interval_duration": 60,
|
||||
"schedule_total_duration": 1,
|
||||
"slice_ampere": 0.5,
|
||||
"slice_watt": 500,
|
||||
"debug": false,
|
||||
"switch_3ph1ph_while_charging_mode": "Never",
|
||||
"switch_3ph1ph_max_nr_of_switches_per_session": 10,
|
||||
"switch_3ph1ph_switch_limit_stickyness": "DontChange",
|
||||
"switch_3ph1ph_power_hysteresis_W": 500,
|
||||
"switch_3ph1ph_time_hysteresis_s": 30
|
||||
},
|
||||
"request": {
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [],
|
||||
"evse_state": "Charging",
|
||||
"node_type": "Evse",
|
||||
"priority_request": false,
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 10.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 0.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "EVSE1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "EVSE1_phase"
|
||||
},
|
||||
"ac_min_current_A": {
|
||||
"value": 6.0,
|
||||
"source": "EVSE1_mincurrent"
|
||||
},
|
||||
"ac_min_phase_count": {
|
||||
"value": 1,
|
||||
"source": "EVSE1_minphase"
|
||||
},
|
||||
"ac_number_of_active_phases": 3,
|
||||
"ac_supports_changing_phases_during_charging": true
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "evse1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 9.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:46.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [
|
||||
{
|
||||
"setpoint": {
|
||||
"priority": 42,
|
||||
"source": "external_limit_1_setpoint",
|
||||
"total_power_W": 4242.0
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
},
|
||||
{
|
||||
"setpoint": {
|
||||
"priority": 41,
|
||||
"source": "external_limit_1_setpoint",
|
||||
"total_power_W": 8242.0
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:37.479Z"
|
||||
},
|
||||
{
|
||||
"setpoint": {
|
||||
"priority": 41,
|
||||
"source": "external_limit_1_setpoint",
|
||||
"total_power_W": -4242.0
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:40.479Z"
|
||||
},
|
||||
{
|
||||
"setpoint": {
|
||||
"priority": 41,
|
||||
"source": "external_limit_1_setpoint",
|
||||
"total_power_W": -14242.0
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:44.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "external_limit_1_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "external_limit_1_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"uuid": "external_limit_1"
|
||||
}
|
||||
],
|
||||
"node_type": "Generic",
|
||||
"schedule_export": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 16.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_import": [
|
||||
{
|
||||
"limits_to_leaves": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_leave"
|
||||
}
|
||||
},
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"value": 32.0,
|
||||
"source": "grid_connection_root"
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"value": 3,
|
||||
"source": "grid_connection_phase"
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
}
|
||||
],
|
||||
"schedule_setpoints": [],
|
||||
"uuid": "grid_connection"
|
||||
},
|
||||
"expected_results": [
|
||||
[
|
||||
{
|
||||
"limits_root_side": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": 6.147826194763184
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": 4242.0
|
||||
}
|
||||
},
|
||||
"schedule": [
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": 6.147826194763184
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": 4242.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": 6.147826194763184
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": 4242.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:36.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": 11.944927215576172
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "grid_connection_phase,external_limit_1_phase,EVSE1_phase",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": 8242.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:37.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": -6.147826194763184
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_FixedValue",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "external_limit_1_setpoint",
|
||||
"value": -4242.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:40.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "EVSE1_leave",
|
||||
"value": -10.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_FixedValue",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "EVSE1_leave",
|
||||
"value": -6900.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:44.479Z"
|
||||
},
|
||||
{
|
||||
"limits_to_root": {
|
||||
"ac_max_current_A": {
|
||||
"source": "external_limit_1_leave",
|
||||
"value": -9.0
|
||||
},
|
||||
"ac_max_phase_count": {
|
||||
"source": "BrokerFastCharging_FixedValue",
|
||||
"value": 3
|
||||
},
|
||||
"total_power_W": {
|
||||
"source": "external_limit_1_leave",
|
||||
"value": -6210.0
|
||||
}
|
||||
},
|
||||
"timestamp": "2024-12-17T13:08:46.479Z"
|
||||
}
|
||||
],
|
||||
"uuid": "evse1",
|
||||
"valid_for": 10
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user