|
@@ -3748,6 +3748,30 @@ void DB_variableLoadFromDb()
|
|
|
//==============================
|
|
|
// Variable Monitoring
|
|
|
//==============================
|
|
|
+int variableMonitoringQuantity()
|
|
|
+{
|
|
|
+ uint32_t result = 0;
|
|
|
+ char sqlCmd[8192];
|
|
|
+ char zErrMsg[200];
|
|
|
+ int rows, cols;
|
|
|
+ char **resultData;
|
|
|
+
|
|
|
+ sprintf(sqlCmd, "select count(idx) as dataQuantity from ocpp20_variable_monitoring");
|
|
|
+ if( sqlite3_get_table(db, sqlCmd, &resultData, &rows, &cols, (char **)&zErrMsg) != SQLITE_OK)
|
|
|
+ {
|
|
|
+ DEBUG_WARN("SQL error: %s\n", zErrMsg);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(rows >= 1)
|
|
|
+ {
|
|
|
+ result = atoi(resultData[1]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
int DB_variableMonitoringClear()
|
|
|
{
|
|
|
int result = PASS;
|
|
@@ -3763,6 +3787,37 @@ int DB_variableMonitoringClear()
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+int VariableMonitoringReplace(uint8_t idx, struct SetMonitoringDataType *variableMonitoring)
|
|
|
+{
|
|
|
+ int result = PASS;
|
|
|
+ char sql[1024];
|
|
|
+ char *errMsg = 0;
|
|
|
+
|
|
|
+ sprintf(sql,"replace into ocpp20_variable_monitoring "
|
|
|
+ "(idx, id, txn, value, type, severity, component_name, component_instance, component_evse_id, component_evse_connectorId, variable_name, variable_instance) "
|
|
|
+ "VALUES('%d', '%d', '%d', '%.2f', '%s', '%d', '%s', '%s', '%d', '%d', '%s', '%s'); SELECT * from ocpp20_variable_monitoring;",
|
|
|
+ idx,
|
|
|
+ variableMonitoring->id,
|
|
|
+ variableMonitoring->transaction,
|
|
|
+ variableMonitoring->value,
|
|
|
+ variableMonitoring->type,
|
|
|
+ variableMonitoring->severity,
|
|
|
+ variableMonitoring->component.name,
|
|
|
+ variableMonitoring->component.instance,
|
|
|
+ variableMonitoring->component.evse.id,
|
|
|
+ variableMonitoring->component.evse.connectorId,
|
|
|
+ variableMonitoring->variable.name,
|
|
|
+ variableMonitoring->variable.instance
|
|
|
+ );
|
|
|
+ if (sqlite3_exec(db, sql, 0, 0, &errMsg) != SQLITE_OK)
|
|
|
+ {
|
|
|
+ result = FAIL;
|
|
|
+ DEBUG_WARN( "Insert meter value record error message: %s\n", errMsg);
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
int DB_cbVariableMonitoringSaveToDb(void *para, int columnCount, char **columnValue, char **columnName)
|
|
|
{
|
|
|
for(int i = 0; i<columnCount; i++)
|
|
@@ -3777,12 +3832,12 @@ int DB_variableMonitoringSaveToDb(struct SetMonitoringDataType *variableMonitori
|
|
|
{
|
|
|
int result = FAIL;
|
|
|
|
|
|
- char sql[4096];
|
|
|
+ char sql[1024];
|
|
|
char* errMsg = NULL;
|
|
|
|
|
|
sprintf(sql,"insert or replace into ocpp20_variable_monitoring "
|
|
|
- "(id, transaction, value, type, severity, component_name, component_instance, component_evse_id, component_evse_connectorId, variable_name, variable_instance) "
|
|
|
- "VALUES('%d', '%d', '%.2f', '%s', '%d', '%s', %s, '%d', '%d', '%s', '%s'); SELECT * from ocpp20_variable_monitoring;",
|
|
|
+ "(id, txn, value, type, severity, component_name, component_instance, component_evse_id, component_evse_connectorId, variable_name, variable_instance) "
|
|
|
+ "VALUES('%d', '%d', '%.2f', '%s', '%d', '%s', '%s', '%d', '%d', '%s', '%s'); SELECT * from ocpp20_variable_monitoring;",
|
|
|
variableMonitoring->id,
|
|
|
variableMonitoring->transaction,
|
|
|
variableMonitoring->value,
|
|
@@ -7399,7 +7454,9 @@ int ProcessShareMemory()
|
|
|
if((ShmSysConfigAndInfo->SysConfig.ModelName[0]=='D') &&
|
|
|
((ShmSysConfigAndInfo->SysConfig.ModelName[1]=='B') ||
|
|
|
(ShmSysConfigAndInfo->SysConfig.ModelName[1]=='K') ||
|
|
|
- (ShmSysConfigAndInfo->SysConfig.ModelName[1]=='O'))
|
|
|
+ (ShmSysConfigAndInfo->SysConfig.ModelName[1]=='O') ||
|
|
|
+ (ShmSysConfigAndInfo->SysConfig.ModelName[1]=='L') ||
|
|
|
+ (ShmSysConfigAndInfo->SysConfig.ModelName[1]=='Z'))
|
|
|
) // 'D' means DC
|
|
|
{
|
|
|
// DO series
|
|
@@ -14380,31 +14437,59 @@ int handleClearVariableMonitoringRequest(char *uuid, char *payload)
|
|
|
{
|
|
|
mtrace();
|
|
|
int result = FAIL;
|
|
|
- json_object *ClearVariableMonitorin;
|
|
|
+ int isSpecificIdfound = FALSE;
|
|
|
+ char sqlCmd[128];
|
|
|
+ char *errMsg = 0;
|
|
|
+ json_object *ClearVariableMonitoring;
|
|
|
|
|
|
DEBUG_INFO("handleClearVariableMonitoringRequest...\n");
|
|
|
- ClearVariableMonitorin = json_tokener_parse(payload);
|
|
|
- if(!is_error(ClearVariableMonitorin))
|
|
|
+ ClearVariableMonitoring = json_tokener_parse(payload);
|
|
|
+ if(!is_error(ClearVariableMonitoring))
|
|
|
{
|
|
|
// Required data
|
|
|
- if(json_object_array_length(json_object_object_get(ClearVariableMonitorin, "id")) <= ARRAY_SIZE(ShmOCPP20Data->ClearVariableMonitoring.id))
|
|
|
+ if(json_object_array_length(json_object_object_get(ClearVariableMonitoring, "id")) <= ARRAY_SIZE(ShmOCPP20Data->ClearVariableMonitoring.id))
|
|
|
{
|
|
|
- for(int idx=0;idx<json_object_array_length(json_object_object_get(ClearVariableMonitorin, "id"));idx++)
|
|
|
+ for(int idx=0;idx<json_object_array_length(json_object_object_get(ClearVariableMonitoring, "id"));idx++)
|
|
|
{
|
|
|
- ShmOCPP20Data->ClearVariableMonitoring.id[idx] = json_object_get_int(json_object_array_get_idx(json_object_object_get(ClearVariableMonitorin, "id"), idx));
|
|
|
-
|
|
|
- /*
|
|
|
- * TODO:
|
|
|
- * 1. Check response
|
|
|
- */
|
|
|
+ ShmOCPP20Data->ClearVariableMonitoring.id[idx] = json_object_get_int(json_object_array_get_idx(json_object_object_get(ClearVariableMonitoring, "id"), idx));
|
|
|
ShmOCPP20Data->ClearVariableMonitoring.Response_clearMonitoringResult[idx].id = ShmOCPP20Data->ClearVariableMonitoring.id[idx];
|
|
|
- strcpy((char*)ShmOCPP20Data->ClearVariableMonitoring.Response_clearMonitoringResult[idx].status, ClearMonitoringStatusEnumTypeStr[ClearMonitoringStatusEnumType_Accepted]);
|
|
|
+
|
|
|
+ isSpecificIdfound = FALSE;
|
|
|
+
|
|
|
+ for(uint8_t idx_vm=0;idx_vm<10;idx_vm++)
|
|
|
+ {
|
|
|
+ if(ShmOCPP20Data->MonitoringComponentVariable[idx_vm].id == ShmOCPP20Data->ClearVariableMonitoring.id[idx])
|
|
|
+ {
|
|
|
+ isSpecificIdfound = TRUE;
|
|
|
+ sprintf(sqlCmd, "delete from ocpp20_variable_monitoring where id=%d", ShmOCPP20Data->ClearVariableMonitoring.id[idx]);
|
|
|
+ if (sqlite3_exec(db, sqlCmd, 0, 0, &errMsg) != SQLITE_OK)
|
|
|
+ {
|
|
|
+ DEBUG_INFO("SQL error: %s\n",errMsg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(isSpecificIdfound == TRUE)
|
|
|
+ {
|
|
|
+ strcpy((char*)ShmOCPP20Data->ClearVariableMonitoring.Response_clearMonitoringResult[idx].status, ClearMonitoringStatusEnumTypeStr[ClearMonitoringStatusEnumType_Accepted]);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ strcpy((char*)ShmOCPP20Data->ClearVariableMonitoring.Response_clearMonitoringResult[idx].status, ClearMonitoringStatusEnumTypeStr[ClearMonitoringStatusEnumType_NotFound]);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- sendClearVariableMonitoringConfirmation(uuid, json_object_array_length(json_object_object_get(ClearVariableMonitorin, "id")));
|
|
|
+ system("/bin/fsync -d /dev/mtdblock13;/bin/sync &");
|
|
|
+ for(uint8_t idx_vm=0;idx_vm<10;idx_vm++)
|
|
|
+ {
|
|
|
+ memset(&ShmOCPP20Data->MonitoringComponentVariable, 0x00, sizeof(struct SetMonitoringDataType));
|
|
|
+ }
|
|
|
+ DB_variableMonitoringLoadFromDb();
|
|
|
+
|
|
|
+ sendClearVariableMonitoringConfirmation(uuid, json_object_array_length(json_object_object_get(ClearVariableMonitoring, "id")));
|
|
|
}
|
|
|
}
|
|
|
- json_object_put(ClearVariableMonitorin);
|
|
|
+ json_object_put(ClearVariableMonitoring);
|
|
|
|
|
|
return result;
|
|
|
}
|
|
@@ -14532,7 +14617,7 @@ void createFirmwareVersionByDataTransfer(void)
|
|
|
json_object_object_add(FirmwareDataTransfer, "Connector2FwRev", json_object_new_string((char*)ShmSysConfigAndInfo->SysInfo.Connector2FwRev));
|
|
|
}
|
|
|
|
|
|
- if((ShmSysConfigAndInfo->SysConfig.ModelName[1]!='B') && (ShmSysConfigAndInfo->SysConfig.ModelName[1]!='K') && (ShmSysConfigAndInfo->SysConfig.ModelName[1]!='O'))
|
|
|
+ if((ShmSysConfigAndInfo->SysConfig.ModelName[1]!='B') && (ShmSysConfigAndInfo->SysConfig.ModelName[1]!='K') && (ShmSysConfigAndInfo->SysConfig.ModelName[1]!='O') && (ShmSysConfigAndInfo->SysConfig.ModelName[1]!='L') && (ShmSysConfigAndInfo->SysConfig.ModelName[1]!='Z'))
|
|
|
{
|
|
|
// DS DM DW
|
|
|
json_object_object_add(FirmwareDataTransfer, "FanModuleFwRev", json_object_new_string((char*)ShmSysConfigAndInfo->SysInfo.FanModuleFwRev));
|
|
@@ -16136,7 +16221,7 @@ int handleGetMonitoringReportRequest(char *uuid, char *payload)
|
|
|
{
|
|
|
if(strcmp((char*)ShmOCPP20Data->GetMonitoringReport.monitoringCriteria[idx_cri], MonitoringCriterionEnumTypeStr[MonitoringCriterionEnumType_ThresholdMonitoring]) == 0)
|
|
|
{
|
|
|
- if(strcmp((char*)ShmOCPP20Data->MonitoringComponentVariable[idx].type, MonitoringCriterionEnumTypeStr[MonitoringCriterionEnumType_ThresholdMonitoring])==0)
|
|
|
+ if(strstr((char*)ShmOCPP20Data->MonitoringComponentVariable[idx].type, "Threshold") != NULL)
|
|
|
{
|
|
|
memcpy(&ShmOCPP20Data->NotifyMonitoringReport.monitor[idx_cv].component, &ShmOCPP20Data->MonitoringComponentVariable[idx].component, sizeof(struct ComponentType));
|
|
|
memcpy(&ShmOCPP20Data->NotifyMonitoringReport.monitor[idx_cv].variable, &ShmOCPP20Data->MonitoringComponentVariable[idx].variable, sizeof(struct VariableType));
|
|
@@ -16154,7 +16239,7 @@ int handleGetMonitoringReportRequest(char *uuid, char *payload)
|
|
|
}
|
|
|
else if(strcmp((char*)ShmOCPP20Data->GetMonitoringReport.monitoringCriteria[idx_cri], MonitoringCriterionEnumTypeStr[MonitoringCriterionEnumType_DeltaMonitoring]) == 0)
|
|
|
{
|
|
|
- if(strcmp((char*)ShmOCPP20Data->MonitoringComponentVariable[idx].type, MonitoringCriterionEnumTypeStr[MonitoringCriterionEnumType_DeltaMonitoring])==0)
|
|
|
+ if(strstr((char*)ShmOCPP20Data->MonitoringComponentVariable[idx].type, "Delta") != NULL)
|
|
|
{
|
|
|
memcpy(&ShmOCPP20Data->NotifyMonitoringReport.monitor[idx_cv].component, &ShmOCPP20Data->MonitoringComponentVariable[idx].component, sizeof(struct ComponentType));
|
|
|
memcpy(&ShmOCPP20Data->NotifyMonitoringReport.monitor[idx_cv].variable, &ShmOCPP20Data->MonitoringComponentVariable[idx].variable, sizeof(struct VariableType));
|
|
@@ -16172,7 +16257,7 @@ int handleGetMonitoringReportRequest(char *uuid, char *payload)
|
|
|
}
|
|
|
else if(strcmp((char*)ShmOCPP20Data->GetMonitoringReport.monitoringCriteria[idx_cri], MonitoringCriterionEnumTypeStr[MonitoringCriterionEnumType_PeriodicMonitoring]) == 0)
|
|
|
{
|
|
|
- if(strcmp((char*)ShmOCPP20Data->MonitoringComponentVariable[idx].type, MonitoringCriterionEnumTypeStr[MonitoringCriterionEnumType_PeriodicMonitoring])==0)
|
|
|
+ if(strstr((char*)ShmOCPP20Data->MonitoringComponentVariable[idx].type, "Periodic") != NULL)
|
|
|
{
|
|
|
memcpy(&ShmOCPP20Data->NotifyMonitoringReport.monitor[idx_cv].component, &ShmOCPP20Data->MonitoringComponentVariable[idx].component, sizeof(struct ComponentType));
|
|
|
memcpy(&ShmOCPP20Data->NotifyMonitoringReport.monitor[idx_cv].variable, &ShmOCPP20Data->MonitoringComponentVariable[idx].variable, sizeof(struct VariableType));
|
|
@@ -16223,7 +16308,7 @@ int handleGetMonitoringReportRequest(char *uuid, char *payload)
|
|
|
{
|
|
|
if(strcmp((char*)ShmOCPP20Data->GetMonitoringReport.monitoringCriteria[idx_cri], MonitoringCriterionEnumTypeStr[MonitoringCriterionEnumType_ThresholdMonitoring]) == 0)
|
|
|
{
|
|
|
- if(strcmp((char*)ShmOCPP20Data->MonitoringComponentVariable[idx].type, MonitoringCriterionEnumTypeStr[MonitoringCriterionEnumType_ThresholdMonitoring])==0)
|
|
|
+ if(strstr((char*)ShmOCPP20Data->MonitoringComponentVariable[idx].type, "Threshold") != NULL)
|
|
|
{
|
|
|
for(int idx_cv=0; idx_cv < 10; idx_cv++)
|
|
|
{
|
|
@@ -16269,7 +16354,7 @@ int handleGetMonitoringReportRequest(char *uuid, char *payload)
|
|
|
}
|
|
|
else if(strcmp((char*)ShmOCPP20Data->GetMonitoringReport.monitoringCriteria[idx_cri], MonitoringCriterionEnumTypeStr[MonitoringCriterionEnumType_DeltaMonitoring]) == 0)
|
|
|
{
|
|
|
- if(strcmp((char*)ShmOCPP20Data->MonitoringComponentVariable[idx].type, MonitoringCriterionEnumTypeStr[MonitoringCriterionEnumType_DeltaMonitoring])==0)
|
|
|
+ if(strstr((char*)ShmOCPP20Data->MonitoringComponentVariable[idx].type, "Delta") != NULL)
|
|
|
{
|
|
|
for(int idx_cv=0; idx_cv < 10; idx_cv++)
|
|
|
{
|
|
@@ -16315,7 +16400,7 @@ int handleGetMonitoringReportRequest(char *uuid, char *payload)
|
|
|
}
|
|
|
else if(strcmp((char*)ShmOCPP20Data->GetMonitoringReport.monitoringCriteria[idx_cri], MonitoringCriterionEnumTypeStr[MonitoringCriterionEnumType_PeriodicMonitoring]) == 0)
|
|
|
{
|
|
|
- if(strcmp((char*)ShmOCPP20Data->MonitoringComponentVariable[idx].type, MonitoringCriterionEnumTypeStr[MonitoringCriterionEnumType_PeriodicMonitoring])==0)
|
|
|
+ if(strstr((char*)ShmOCPP20Data->MonitoringComponentVariable[idx].type, "Periodic") != NULL)
|
|
|
{
|
|
|
for(int idx_cv=0; idx_cv < 10; idx_cv++)
|
|
|
{
|
|
@@ -19218,21 +19303,37 @@ int handleSetMonitoringBaseRequest(char *uuid, char *payload)
|
|
|
|
|
|
DEBUG_INFO("handleSetMonitoringBaseRequest...\n");
|
|
|
SetMonitoringBase = json_tokener_parse(payload);
|
|
|
+ strcpy((char*)ShmOCPP20Data->SetMonitoringBase.Response_status, GenericDeviceModelStatusEnumTypeStr[GenericDeviceModelStatusEnumType_Accepted]);
|
|
|
if(!is_error(SetMonitoringBase))
|
|
|
{
|
|
|
memset(&ShmOCPP20Data->SetMonitoringBase, 0, sizeof(struct SetMonitoringBase_20));
|
|
|
memcpy(&ShmOCPP20Data->SetMonitoringBase.guid, uuid, ARRAY_SIZE(ShmOCPP20Data->SetMonitoringBase.guid));
|
|
|
// Required data
|
|
|
if(json_object_object_get(SetMonitoringBase, "monitoringBase") != NULL)
|
|
|
+ {
|
|
|
sprintf((char*)ShmOCPP20Data->SetMonitoringBase.monitoringBase, "%s",json_object_get_string(json_object_object_get(SetMonitoringBase, "monitoringBase")));
|
|
|
+ sprintf((char*)ShmOCPP20Data->MonitoringBase, "%s", (char*)ShmOCPP20Data->SetMonitoringBase.monitoringBase);
|
|
|
+
|
|
|
+ FILE *outfile;
|
|
|
+ outfile = fopen("/Storage/OCPP/MonitorSetting" , "w+");
|
|
|
+ if(outfile == NULL)
|
|
|
+ {
|
|
|
+ DEBUG_INFO("Error opening file");
|
|
|
+ strcpy((char*)ShmOCPP20Data->SetMonitoringLevel.Response_status, GenericStatusEnumTypeStr[GenericStatusEnumType_Rejected]);
|
|
|
+ }
|
|
|
+
|
|
|
+ fprintf(outfile,"{\"severity\":\"%d\",\"monitoringBase\":\"%s\"}\n", ShmOCPP20Data->MonitoringLevel, (char*)ShmOCPP20Data->MonitoringBase);
|
|
|
+ fclose(outfile);
|
|
|
+
|
|
|
+ system("/bin/fsync -d /dev/mtdblock13;/bin/sync &");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ strcpy((char*)ShmOCPP20Data->SetMonitoringBase.Response_status, GenericDeviceModelStatusEnumTypeStr[GenericDeviceModelStatusEnumType_Rejected]);
|
|
|
}
|
|
|
json_object_put(SetMonitoringBase);
|
|
|
|
|
|
- /*
|
|
|
- * TODO:
|
|
|
- * 1. Configure monitor base and response
|
|
|
- */
|
|
|
- strcpy((char*)ShmOCPP20Data->SetMonitoringBase.Response_status, GenericDeviceModelStatusEnumTypeStr[GenericDeviceModelStatusEnumType_Accepted]);
|
|
|
+
|
|
|
+
|
|
|
sendSetMonitoringBaseConfirmation(uuid);
|
|
|
return result;
|
|
|
}
|
|
@@ -19245,21 +19346,35 @@ int handleSetMonitoringLevelRequest(char *uuid, char *payload)
|
|
|
|
|
|
DEBUG_INFO("handleSetMonitoringLevelRequest...\n");
|
|
|
SetMonitoringLevel = json_tokener_parse(payload);
|
|
|
+ strcpy((char*)ShmOCPP20Data->SetMonitoringLevel.Response_status, GenericStatusEnumTypeStr[GenericStatusEnumType_Accepted]);
|
|
|
if(!is_error(SetMonitoringLevel))
|
|
|
{
|
|
|
memset(&ShmOCPP20Data->SetMonitoringLevel, 0, sizeof(struct SetMonitoringLevel_20));
|
|
|
memcpy(&ShmOCPP20Data->SetMonitoringLevel.guid, uuid, ARRAY_SIZE(ShmOCPP20Data->SetMonitoringLevel.guid));
|
|
|
// Required data
|
|
|
if(json_object_object_get(SetMonitoringLevel, "severity") != NULL)
|
|
|
+ {
|
|
|
ShmOCPP20Data->SetMonitoringLevel.severity = json_object_get_int(json_object_object_get(SetMonitoringLevel, "severity"));
|
|
|
+ ShmOCPP20Data->MonitoringLevel = ShmOCPP20Data->SetMonitoringLevel.severity;
|
|
|
+
|
|
|
+ FILE *outfile;
|
|
|
+ outfile = fopen("/Storage/OCPP/MonitorSetting" , "w+");
|
|
|
+ if(outfile == NULL)
|
|
|
+ {
|
|
|
+ DEBUG_INFO("Error opening file");
|
|
|
+ strcpy((char*)ShmOCPP20Data->SetMonitoringLevel.Response_status, GenericStatusEnumTypeStr[GenericStatusEnumType_Rejected]);
|
|
|
+ }
|
|
|
+
|
|
|
+ fprintf(outfile,"{\"severity\":\"%d\",\"monitoringBase\":\"%s\"}\n", ShmOCPP20Data->MonitoringLevel, (char*)ShmOCPP20Data->MonitoringBase);
|
|
|
+ fclose(outfile);
|
|
|
+
|
|
|
+ system("/bin/fsync -d /dev/mtdblock13;/bin/sync &");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ strcpy((char*)ShmOCPP20Data->SetMonitoringLevel.Response_status, GenericStatusEnumTypeStr[GenericStatusEnumType_Rejected]);
|
|
|
}
|
|
|
json_object_put(SetMonitoringLevel);
|
|
|
|
|
|
- /*
|
|
|
- * TODO:
|
|
|
- * Configure monitor status and response
|
|
|
- */
|
|
|
- strcpy((char*)ShmOCPP20Data->SetMonitoringLevel.Response_status, GenericStatusEnumTypeStr[GenericStatusEnumType_Accepted]);
|
|
|
sendSetMonitoringLevelConfirmation(uuid);
|
|
|
|
|
|
return result;
|
|
@@ -19552,6 +19667,7 @@ int handleSetVariableMonitoringRequest(char *uuid, char *payload)
|
|
|
for(int idx=0;idx<json_object_array_length(json_object_object_get(SetVariableMonitoring, "setMonitoringData"));idx++)
|
|
|
{
|
|
|
variableQuantity++;
|
|
|
+
|
|
|
if(json_object_object_get(json_object_array_get_idx(json_object_object_get(SetVariableMonitoring, "setMonitoringData"), idx), "id") != NULL)
|
|
|
{
|
|
|
ShmOCPP20Data->SetVariableMonitoring.setMonitoringData[idx].id = json_object_get_int(json_object_object_get(json_object_array_get_idx(json_object_object_get(SetVariableMonitoring, "setMonitoringData"), idx), "id"));
|
|
@@ -19628,11 +19744,51 @@ int handleSetVariableMonitoringRequest(char *uuid, char *payload)
|
|
|
memcpy(&ShmOCPP20Data->SetVariableMonitoring.Response_setMonitoringResult[idx].variable , &ShmOCPP20Data->SetVariableMonitoring.setMonitoringData[idx].variable, sizeof(struct VariableType));
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * TODO
|
|
|
- * Set Variables and save to DB
|
|
|
- */
|
|
|
- strcpy((char*)ShmOCPP20Data->SetVariableMonitoring.Response_setMonitoringResult[idx].status, SetMonitoringStatusEnumTypeStr[SetMonitoringStatusEnumType_Accepted]);
|
|
|
+ uint8_t isDuplicate = FALSE;
|
|
|
+ for(uint8_t idx_vm=0;idx_vm<10;idx_vm++)
|
|
|
+ {
|
|
|
+ if((strstr((char*)ShmOCPP20Data->MonitoringComponentVariable[idx_vm].component.name, (char*)ShmOCPP20Data->SetVariableMonitoring.setMonitoringData[idx].component.name) != NULL) &&
|
|
|
+ (strstr((char*)ShmOCPP20Data->MonitoringComponentVariable[idx_vm].variable.name, (char*)ShmOCPP20Data->SetVariableMonitoring.setMonitoringData[idx].variable.name) != NULL) &&
|
|
|
+ (strstr((char*)ShmOCPP20Data->MonitoringComponentVariable[idx_vm].type, (char*)ShmOCPP20Data->SetVariableMonitoring.setMonitoringData[idx].type) != NULL) &&
|
|
|
+ (ShmOCPP20Data->MonitoringComponentVariable[idx_vm].severity == ShmOCPP20Data->SetVariableMonitoring.setMonitoringData[idx].severity))
|
|
|
+ {
|
|
|
+ isDuplicate = TRUE;
|
|
|
+ if(json_object_object_get(json_object_array_get_idx(json_object_object_get(SetVariableMonitoring, "setMonitoringData"), idx), "id") != NULL)
|
|
|
+ {
|
|
|
+ if(ShmOCPP20Data->MonitoringComponentVariable[idx_vm].id == ShmOCPP20Data->SetVariableMonitoring.setMonitoringData[idx].id)
|
|
|
+ {
|
|
|
+ VariableMonitoringReplace((idx_vm+1), &ShmOCPP20Data->SetVariableMonitoring.setMonitoringData[idx]);
|
|
|
+ strcpy((char*)ShmOCPP20Data->SetVariableMonitoring.Response_setMonitoringResult[idx].status, SetMonitoringStatusEnumTypeStr[SetMonitoringStatusEnumType_Accepted]);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ strcpy((char*)ShmOCPP20Data->SetVariableMonitoring.Response_setMonitoringResult[idx].status, SetMonitoringStatusEnumTypeStr[SetMonitoringStatusEnumType_Duplicate]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ strcpy((char*)ShmOCPP20Data->SetVariableMonitoring.Response_setMonitoringResult[idx].status, SetMonitoringStatusEnumTypeStr[SetMonitoringStatusEnumType_Duplicate]);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // Do nothing
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(isDuplicate == FALSE)
|
|
|
+ {
|
|
|
+ if(variableMonitoringQuantity() >= 10)
|
|
|
+ {
|
|
|
+ strcpy((char*)ShmOCPP20Data->SetVariableMonitoring.Response_setMonitoringResult[idx].status, SetMonitoringStatusEnumTypeStr[SetMonitoringStatusEnumType_Rejected]);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ DB_variableMonitoringSaveToDb(&ShmOCPP20Data->SetVariableMonitoring.setMonitoringData[idx]);
|
|
|
+ strcpy((char*)ShmOCPP20Data->SetVariableMonitoring.Response_setMonitoringResult[idx].status, SetMonitoringStatusEnumTypeStr[SetMonitoringStatusEnumType_Accepted]);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
json_object_put(SetVariableMonitoring);
|
|
@@ -21324,6 +21480,18 @@ int initialConfigurationTable(void)
|
|
|
DB_getNetworkProfileFromDb();
|
|
|
DB_variableMonitoringLoadFromDb();
|
|
|
|
|
|
+ for(uint8_t idx_vm=0;idx_vm<10;idx_vm++)
|
|
|
+ {
|
|
|
+ DEBUG_INFO("---------------------------------------------------------------------------------\n");
|
|
|
+ DEBUG_INFO("MonitoringComponentVariable[%d].id = %d\n", idx_vm, ShmOCPP20Data->MonitoringComponentVariable[idx_vm].id);
|
|
|
+ DEBUG_INFO("MonitoringComponentVariable[%d].value = %.2f\n", idx_vm, ShmOCPP20Data->MonitoringComponentVariable[idx_vm].value);
|
|
|
+ DEBUG_INFO("MonitoringComponentVariable[%d].type = %s\n", idx_vm, ShmOCPP20Data->MonitoringComponentVariable[idx_vm].type);
|
|
|
+ DEBUG_INFO("MonitoringComponentVariable[%d].severity = %d\n", idx_vm, ShmOCPP20Data->MonitoringComponentVariable[idx_vm].severity);
|
|
|
+ DEBUG_INFO("MonitoringComponentVariable[%d].component.name = %s\n", idx_vm, ShmOCPP20Data->MonitoringComponentVariable[idx_vm].component.name);
|
|
|
+ DEBUG_INFO("MonitoringComponentVariable[%d].variable.name = %s\n", idx_vm, ShmOCPP20Data->MonitoringComponentVariable[idx_vm].variable.name);
|
|
|
+ DEBUG_INFO("---------------------------------------------------------------------------------\n");
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|