Skip to content

Commit 981925c

Browse files
maaikezPietfried
andauthored
Feature/656 device model initialization in cpp (#681)
Init device model in C++ instead of python, runtime. The device model database now also uses the database migration. There are some 'NOT NULL' and 'ON DELETE' changes done to the database as well. Unittests are added. Some defaults are removed from config.json. --------- Signed-off-by: Maaike Zijderveld, iolar <git.mail@iolar.nl> Signed-off-by: Piet Gömpel <37657534+Pietfried@users.noreply.github.com> Co-authored-by: Piet Gömpel <37657534+Pietfried@users.noreply.github.com>
1 parent 10e194b commit 981925c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+4506
-549
lines changed

config/v201/CMakeLists.txt

+11-25
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# find all migration files, store only the filenames by showing relative to the folder
22
set(MIGRATION_FILES_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/core_migrations")
3+
set(MIGRATION_FILES_DEVICE_MODEL_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/device_model_migrations")
34

45
include(../CollectMigrationFiles.cmake)
56

@@ -9,7 +10,15 @@ collect_migration_files(
910
)
1011

1112
set(MIGRATION_FILE_VERSION_V201 ${TARGET_MIGRATION_FILE_VERSION} PARENT_SCOPE)
13+
14+
collect_migration_files(
15+
LOCATION ${MIGRATION_FILES_DEVICE_MODEL_LOCATION}
16+
INSTALL_DESTINATION ${CMAKE_INSTALL_DATADIR}/everest/modules/OCPP201/device_model_migrations
17+
)
18+
19+
set(MIGRATION_DEVICE_MODEL_FILE_VERSION_V201 ${TARGET_MIGRATION_FILE_VERSION} PARENT_SCOPE)
1220
set(MIGRATION_FILES_SOURCE_DIR_V201 ${MIGRATION_FILES_LOCATION} PARENT_SCOPE)
21+
set(MIGRATION_FILES_DEVICE_MODEL_SOURCE_DIR_V201 ${MIGRATION_FILES_DEVICE_MODEL_LOCATION} PARENT_SCOPE)
1322

1423
option(LIBOCPP_INSTALL_DEVICE_MODEL_DATABASE "Install device model database for OCPP201" ON)
1524

@@ -24,16 +33,6 @@ install(
2433
)
2534

2635
if (LIBOCPP_INSTALL_DEVICE_MODEL_DATABASE)
27-
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/config.json)
28-
29-
find_program(
30-
PYTHON_EXECUTABLE
31-
python3
32-
REQUIRED
33-
)
34-
35-
set(INIT_DEVICE_MODULE_DB_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/init_device_model_db.py")
36-
set(DEVICE_MODEL_DATABASE_FILE "device_model_storage.db")
3736

3837
if(NOT LIBOCPP_V201_CONFIG_FILE)
3938
set(LIBOCPP_V201_CONFIG_FILE "${CMAKE_CURRENT_SOURCE_DIR}/config.json")
@@ -46,19 +45,6 @@ if (LIBOCPP_INSTALL_DEVICE_MODEL_DATABASE)
4645

4746
message(STATUS "Using ocpp v201 config file path: ${LIBOCPP_V201_CONFIG_FILE}")
4847

49-
execute_process(
50-
COMMAND
51-
${PYTHON_EXECUTABLE} ${INIT_DEVICE_MODULE_DB_SCRIPT} init --db ${CMAKE_CURRENT_BINARY_DIR}/${DEVICE_MODEL_DATABASE_FILE} --schemas ${LIBOCPP_COMPONENT_SCHEMAS_PATH}
52-
WORKING_DIRECTORY
53-
${CMAKE_CURRENT_SOURCE_DIR}
54-
)
55-
56-
execute_process(
57-
COMMAND
58-
${PYTHON_EXECUTABLE} ${INIT_DEVICE_MODULE_DB_SCRIPT} insert --db ${CMAKE_CURRENT_BINARY_DIR}/${DEVICE_MODEL_DATABASE_FILE} --schemas ${LIBOCPP_COMPONENT_SCHEMAS_PATH} --config ${LIBOCPP_V201_CONFIG_FILE}
59-
WORKING_DIRECTORY
60-
${CMAKE_CURRENT_SOURCE_DIR}
61-
)
62-
63-
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${DEVICE_MODEL_DATABASE_FILE} DESTINATION ${CMAKE_INSTALL_DATADIR}/everest/modules/OCPP201)
48+
install(FILES ${LIBOCPP_V201_CONFIG_FILE} DESTINATION ${CMAKE_INSTALL_DATADIR}/everest/modules/OCPP201)
49+
install(DIRECTORY ${LIBOCPP_COMPONENT_SCHEMAS_PATH} DESTINATION ${CMAKE_INSTALL_DATADIR}/everest/modules/OCPP201)
6450
endif()

config/v201/component_schemas/standardized/ChargingStation.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
}
3535
],
3636
"description": "This variable reports current availability state for the ChargingStation",
37-
"type": "string"
37+
"type": "string",
38+
"default": ""
3839
},
3940
"ChargingStationPhaseRotation": {
4041
"variable_name": "PhaseRotation",

config/v201/component_schemas/standardized/TariffCostCtrlr.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
}
8181
],
8282
"instance": "Cost",
83-
"description": "Instance Cost: Wheter costs are enabled.",
83+
"description": "Instance Cost: Whether costs are enabled.",
8484
"type": "boolean"
8585
},
8686
"TariffFallbackMessage": {

config/v201/config.json

+5-30
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,6 @@
5252
"Actual": true
5353
}
5454
},
55-
"EVSEPower": {
56-
"variable_name": "Power",
57-
"attributes": {
58-
"MaxSet": 22000
59-
}
60-
},
6155
"EVSESupplyPhases": {
6256
"variable_name": "SupplyPhases",
6357
"attributes": {
@@ -101,12 +95,6 @@
10195
"Actual": true
10296
}
10397
},
104-
"EVSEPower": {
105-
"variable_name": "Power",
106-
"attributes": {
107-
"MaxSet": 22000
108-
}
109-
},
11098
"EVSESupplyPhases": {
11199
"variable_name": "SupplyPhases",
112100
"attributes": {
@@ -431,8 +419,8 @@
431419
"Actual": true
432420
}
433421
},
434-
"PncEnabled": {
435-
"variable_name": "PncEnabled",
422+
"PnCEnabled": {
423+
"variable_name": "PnCEnabled",
436424
"attributes": {
437425
"Actual": true
438426
}
@@ -570,24 +558,12 @@
570558
"attributes": {
571559
"Actual": true
572560
}
573-
},
574-
"AuthCacheStorage": {
575-
"variable_name": "Storage",
576-
"attributes": {
577-
"Actual": 0
578-
}
579561
}
580562
}
581563
},
582564
{
583565
"name": "ChargingStation",
584566
"variables": {
585-
"ChargingStationAvailabilityState": {
586-
"variable_name": "AvailabilityState",
587-
"attributes": {
588-
"Actual": ""
589-
}
590-
},
591567
"ChargingStationAvailable": {
592568
"variable_name": "Available",
593569
"attributes": {
@@ -667,15 +643,13 @@
667643
"variable_name": "ReportingValueSize",
668644
"attributes": {
669645
"Actual": 2500
670-
},
671-
"instance": "SetVariables"
646+
}
672647
},
673648
"ValueSize": {
674649
"variable_name": "ValueSize",
675650
"attributes": {
676651
"Actual": 2500
677-
},
678-
"instance": "SetVariables"
652+
}
679653
},
680654
"DeviceDataCtrlrEnabled": {
681655
"variable_name": "Enabled",
@@ -708,6 +682,7 @@
708682
},
709683
"TariffCostCtrlrEnabledCost": {
710684
"variable_name": "Enabled",
685+
"instance": "Cost",
711686
"attributes": {
712687
"Actual": false
713688
}

config/v201/init_device_model.sql config/v201/device_model_migrations/1_up-initial.sql

+16-17
Original file line numberDiff line numberDiff line change
@@ -17,50 +17,50 @@ CREATE TABLE IF NOT EXISTS COMPONENT (
1717
);
1818
CREATE TABLE IF NOT EXISTS VARIABLE_ATTRIBUTE (
1919
ID INTEGER PRIMARY KEY AUTOINCREMENT,
20-
VARIABLE_ID INTEGER,
20+
VARIABLE_ID INTEGER NOT NULL,
2121
MUTABILITY_ID INTEGER,
2222
PERSISTENT INTEGER,
2323
CONSTANT INTEGER,
2424
TYPE_ID INTEGER,
25+
VALUE_SOURCE TEXT,
2526
"VALUE" TEXT,
26-
FOREIGN KEY (VARIABLE_ID) REFERENCES VARIABLE (ID),
27-
FOREIGN KEY (TYPE_ID) REFERENCES VARIABLE_ATTRIBUTE_TYPE (ID),
28-
FOREIGN KEY (MUTABILITY_ID) REFERENCES MUTABILITY (ID)
27+
FOREIGN KEY (VARIABLE_ID) REFERENCES VARIABLE (ID) ON DELETE CASCADE,
28+
FOREIGN KEY (TYPE_ID) REFERENCES VARIABLE_ATTRIBUTE_TYPE (ID) ON DELETE RESTRICT,
29+
FOREIGN KEY (MUTABILITY_ID) REFERENCES MUTABILITY (ID) ON DELETE RESTRICT
2930
);
3031
CREATE TABLE IF NOT EXISTS VARIABLE_CHARACTERISTICS (
3132
ID INTEGER PRIMARY KEY AUTOINCREMENT,
32-
DATATYPE_ID INTEGER,
33+
DATATYPE_ID INTEGER NOT NULL,
34+
VARIABLE_ID INTEGER NOT NULL,
3335
MAX_LIMIT REAL,
3436
MIN_LIMIT REAL,
3537
SUPPORTS_MONITORING INTEGER,
3638
UNIT TEXT,
3739
VALUES_LIST TEXT,
38-
FOREIGN KEY (DATATYPE_ID) REFERENCES DATATYPE (ID)
40+
FOREIGN KEY (DATATYPE_ID) REFERENCES DATATYPE (ID) ON DELETE RESTRICT
41+
FOREIGN KEY (VARIABLE_ID) REFERENCES VARIABLE (ID) ON DELETE CASCADE
3942
);
4043
CREATE TABLE IF NOT EXISTS VARIABLE_MONITORING (
4144
ID INTEGER PRIMARY KEY AUTOINCREMENT,
42-
VARIABLE_ID INTEGER,
45+
VARIABLE_ID INTEGER NOT NULL,
4346
SEVERITY INTEGER,
4447
"TRANSACTION" INTEGER,
45-
TYPE_ID INTEGER,
48+
TYPE_ID INTEGER NOT NULL,
4649
CONFIG_TYPE_ID INTEGER,
4750
"VALUE" DECIMAL,
4851
REFERENCE_VALUE TEXT,
49-
FOREIGN KEY (VARIABLE_ID) REFERENCES VARIABLE (ID),
50-
FOREIGN KEY (TYPE_ID) REFERENCES MONITOR (ID),
51-
FOREIGN KEY (CONFIG_TYPE_ID) REFERENCES MONITOR_CONFIG_TYPE(ID)
52+
FOREIGN KEY (VARIABLE_ID) REFERENCES VARIABLE (ID) ON DELETE CASCADE,
53+
FOREIGN KEY (TYPE_ID) REFERENCES MONITOR (ID) ON DELETE RESTRICT,
54+
FOREIGN KEY (CONFIG_TYPE_ID) REFERENCES MONITOR_CONFIG_TYPE(ID) ON DELETE RESTRICT
5255
);
5356
CREATE TABLE IF NOT EXISTS VARIABLE (
5457
ID INTEGER PRIMARY KEY AUTOINCREMENT,
5558
NAME TEXT,
5659
INSTANCE TEXT,
57-
COMPONENT_ID INTEGER,
58-
VARIABLE_CHARACTERISTICS_ID INTEGER,
60+
COMPONENT_ID INTEGER NOT NULL,
5961
REQUIRED INTEGER DEFAULT FALSE,
60-
FOREIGN KEY (COMPONENT_ID) REFERENCES COMPONENT (ID),
61-
FOREIGN KEY (VARIABLE_CHARACTERISTICS_ID) REFERENCES VARIABLE_CHARACTERISTICS (ID)
62+
FOREIGN KEY (COMPONENT_ID) REFERENCES COMPONENT (ID) ON DELETE CASCADE
6263
);
63-
BEGIN TRANSACTION;
6464
INSERT
6565
OR REPLACE INTO MUTABILITY
6666
VALUES (0, "ReadOnly");
@@ -160,4 +160,3 @@ VALUES (2, "MinSet");
160160
INSERT
161161
OR REPLACE INTO VARIABLE_ATTRIBUTE_TYPE
162162
VALUES (3, "MaxSet");
163-
COMMIT;

0 commit comments

Comments
 (0)