Browse Source

[Improve][Moduralization][Module_OcppBacken / Module_OcppBackend20 / Module_EventLogging]
2021.04.12 / Folus Wen

Actions:
1. Module_OcppBackend save start/stop transaction message to charger.db and keep 3 years above.
2. Module_EventLogging event code storage in Eventlog.db keep 3 years above.

Files:
1. As follow commit history

Image version: D0.00.XX.XXXX.XX
Image checksum: XXXXXXXX

Hardware PWB P/N : XXXXXXX
Hardware Version : XXXXXXX

FolusWen 4 years ago
parent
commit
c5d5e44067

+ 14 - 1
EVSE/Modularization/Module_EventLogging.c

@@ -243,6 +243,19 @@ void RemoveFaultCodeToBuf(unsigned char *Code)
 	}
 }
 
+int getCurrentYear()
+{
+	int result = 0;
+	time_t CurrentTime;
+	struct tm *tm;
+
+	CurrentTime = time(NULL);
+	tm=localtime(&CurrentTime);
+	result = (tm->tm_year + 1900);
+
+	return result;
+}
+
 //==========================================
 // Init all share memory
 //==========================================
@@ -359,7 +372,7 @@ int DB_Event_Insert_Record(sqlite3 *db, uint8_t *statusCode)
 			DEBUG_INFO( "Insert local event record error message: %s\n", errMsg);
 		}
 
-		sprintf(sqlStr, "delete from event_record where idx < (select idx from event_record order by idx desc limit 1)-2000;");
+		sprintf(sqlStr, "delete from event_record where (idx < (select idx from event_record order by idx desc limit 1)-2000) and (occurDatetime < '%04d-01-01 00:00:00');", (getCurrentYear()-3));
 		if (sqlite3_exec(db, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
 		{
 			result = FAIL;

+ 75 - 15
EVSE/Modularization/ocpp20/MessageHandler.c

@@ -942,6 +942,11 @@ int DB_Initial()
 								 "slot integer UNIQUE, connectionData text);";
 
 
+	char *sqlTransaction = "create table if not exists ocpp20_transaction_record (idx integer primary key,"
+						   "occurDatetime text,"
+						   "message_type text,"
+						   "message_content text)";
+
 	//sqlite3_config(SQLITE_CONFIG_URI, 1);
 	if(sqlite3_open(OCPP_LOCAL_DB_FILE, &db))
 	{
@@ -1003,6 +1008,16 @@ int DB_Initial()
 			DEBUG_INFO( "Create OCPP 2.0 ocpp20_networkprofile table successfully\n");
 		}
 
+		if (sqlite3_exec(db, sqlTransaction, 0, 0, &errMsg) != SQLITE_OK)
+		{
+			result = FAIL;
+			DEBUG_ERROR( "Create OCPP 2.0 ocpp20_transaction_record table error message: %s\n", errMsg);
+		}
+		else
+		{
+			DEBUG_INFO( "Create OCPP 2.0 ocpp20_transaction_record table successfully\n");
+		}
+
 		//sqlite3_close(db);
 	}
 
@@ -2966,6 +2981,42 @@ int DB_deleteNetworkProfile(int slot)
 	return result;
 }
 
+int getCurrentYear()
+{
+	int result = 0;
+	time_t CurrentTime;
+	struct tm *tm;
+
+	CurrentTime = time(NULL);
+	tm=localtime(&CurrentTime);
+	result = (tm->tm_year + 1900);
+
+	return result;
+}
+
+int OCPP_insert_transaction_msg(uint8_t isStartTransaction, char *transactionMsg)
+{
+	int result = PASS;
+	char* errMsg = NULL;
+	char sqlStr[8192];
+
+	sprintf(sqlStr, "insert into ocpp20_transaction_record(occurDatetime, message_type, message_content) values(CURRENT_TIMESTAMP, '%s', '%s');", (isStartTransaction?"startTransaction":"stopTransaction"), transactionMsg);
+
+	if (sqlite3_exec(db, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
+	{
+		result = FAIL;
+		DEBUG_INFO( "Insert local transaction record error message: %s\n", errMsg);
+	}
+
+	sprintf(sqlStr, "delete from ocpp20_transaction_record where (idx < (select idx from ocpp_transaction_record order by idx desc limit 1)-2000) and (occurDatetime < '%04d-01-01 00:00:00');", (getCurrentYear()-3));
+	if (sqlite3_exec(db, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
+	{
+		result = FAIL;
+		DEBUG_INFO( "delete local transaction record error message: %s\n", errMsg);
+	}
+
+	return result;
+}
 //==========================================
 // Check time passed since today
 //==========================================
@@ -8278,12 +8329,13 @@ int sendTransactionEventRequest(int gun_index)
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].idToken.idToken, "%s", ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].StartUserId);
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].idToken.type, "%s", ShmOCPP20Data->Authorize.idToken.type);
 						storeTempStopTransaction(gun_index);
-					}
-
-					if(ShmOCPP20Data->TransactionEvent[gun_index].eventType[0] == '\0')
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Started]);
+					}
 					else
+					{
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Updated]);
+					}
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_EVConnected]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].triggerReason, "%s", TriggerReasonEnumTypeStr[TriggerReasonEnumType_ChargingStateChanged]);
 				}
@@ -8393,12 +8445,13 @@ int sendTransactionEventRequest(int gun_index)
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].idToken.idToken, "%s", ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].StartUserId);
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].idToken.type, "%s", ShmOCPP20Data->Authorize.idToken.type);
 						storeTempStopTransaction(gun_index);
-					}
-
-					if(ShmOCPP20Data->TransactionEvent[gun_index].eventType[0] == '\0')
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Started]);
+					}
 					else
+					{
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Updated]);
+					}
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_EVConnected]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].triggerReason, "%s", TriggerReasonEnumTypeStr[TriggerReasonEnumType_ChargingStateChanged]);
 				}
@@ -8507,12 +8560,13 @@ int sendTransactionEventRequest(int gun_index)
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].idToken.idToken, "%s", ShmSysConfigAndInfo->SysInfo.GbChargingData[index].StartUserId);
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].idToken.type, "%s", ShmOCPP20Data->Authorize.idToken.type);
 						storeTempStopTransaction(gun_index);
-					}
-
-					if(ShmOCPP20Data->TransactionEvent[gun_index].eventType[0] == '\0')
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Started]);
+					}
 					else
+					{
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Updated]);
+					}
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_EVConnected]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].triggerReason, "%s", TriggerReasonEnumTypeStr[TriggerReasonEnumType_ChargingStateChanged]);
 				}
@@ -8614,12 +8668,13 @@ int sendTransactionEventRequest(int gun_index)
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].idToken.idToken, "%s", ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.StartUserId);
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].idToken.type, "%s", ShmOCPP20Data->Authorize.idToken.type);
 						storeTempStopTransaction(gun_index);
-					}
-
-					if(ShmOCPP20Data->TransactionEvent[gun_index].eventType[0] == '\0')
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Started]);
+					}
 					else
+					{
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Updated]);
+					}
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_EVConnected]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].triggerReason, "%s", TriggerReasonEnumTypeStr[TriggerReasonEnumType_ChargingStateChanged]);
 				}
@@ -8727,12 +8782,13 @@ int sendTransactionEventRequest(int gun_index)
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].idToken.idToken, "%s", ShmSysConfigAndInfo->SysInfo.AcChargingData[index].StartUserId);
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].idToken.type, "%s", ShmOCPP20Data->Authorize.idToken.type);
 						storeTempStopTransaction(gun_index);
-					}
-
-					if(ShmOCPP20Data->TransactionEvent[gun_index].eventType[0] == '\0')
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Started]);
+					}
 					else
+					{
 						sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].eventType, "%s", TransactionEventEnumTypeStr[TransactionEventEnumType_Updated]);
+					}
+
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].transactionInfo.chargingState, "%s", ChargingStateEnumTypeStr[ChargingStateEnumType_EVConnected]);
 					sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].triggerReason, "%s", TriggerReasonEnumTypeStr[TriggerReasonEnumType_ChargingStateChanged]);
 				}
@@ -8884,6 +8940,10 @@ int sendTransactionEventRequest(int gun_index)
 	}
 
 	queue_operation(QUEUE_OPERATION_ADD, guid, message);
+	if(strstr((char*)ShmOCPP20Data->TransactionEvent[gun_index].eventType, TransactionEventEnumTypeStr[TransactionEventEnumType_Started]) != NULL)
+		OCPP_insert_transaction_msg(YES, message);
+	else if(strstr((char*)ShmOCPP20Data->TransactionEvent[gun_index].eventType, TransactionEventEnumTypeStr[TransactionEventEnumType_Ended]) != NULL)
+		OCPP_insert_transaction_msg(NO, message);
 
 	return result;
 }

File diff suppressed because it is too large
+ 555 - 545
EVSE/Modularization/ocppfiles/MessageHandler.c


+ 0 - 1
EVSE/Modularization/ocppfiles/MessageHandler.h

@@ -538,7 +538,6 @@ void *UpdateFirmwareProcess(void* data);
 void* GetDiagnosticsProcess(void* data);
 int httpUploadFile(char *location, char *path, char *filename,char *url);
 int ftpFile(char *location, char *user, char *password, int port, char *path, char *fnamePlusPath,char *filename);
-int get_file_contents(const char* filename, char** outbuffer);
 void LWS_Send(char * str);
 void LWS_SendNow(char * str);
 extern int queue_operation(int type, char *frontUUID, char *frontData);

+ 18 - 0
EVSE/Modularization/ocppfiles/Module_OcppBackend.c

@@ -87,6 +87,12 @@ static char *sqlOcppAuthLocal = "create table if not exists ocpp_auth_local (idx
 								"expir_date text,"
 								"status text,"
 								"version text);";
+
+static char *sqlTransaction = "create table if not exists ocpp_transaction_record (idx integer primary key,"
+						      "occurDatetime text,"
+							  "message_type text,"
+							  "message_content text)";
+
 //=================================
 // Common routine
 //=================================
@@ -1472,6 +1478,18 @@ int main(void)
 		DEBUG_INFO( "Opened OcppAuthLocal table successfully\n");
 	}
 
+
+	// Create Table Transaction
+	if(sqlite3_exec(db, sqlTransaction, 0, 0, &errMsg) != SQLITE_OK)
+	{
+		DEBUG_INFO( "Create Table ocpp_transaction_record error %s\n",errMsg);
+		return 0;
+	}
+	else
+	{
+		DEBUG_INFO( "Opened ocpp_transaction_record table successfully\n");
+	}
+
 	if(initialConfigurationTable() != PASS)
 	{
 		DEBUG_WARN("OCPPConfiguration version mismatch, upgrade it.\n");

+ 19 - 2
EVSE/Projects/AW-CCS/Apps/main.c

@@ -223,6 +223,19 @@ void getDateTimeString(char* result)
 	sprintf(result, "%04d.%02d.%02d %02d:%02d:%02d", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
 }
 
+int getCurrentYear()
+{
+	int result = 0;
+	time_t CurrentTime;
+	struct tm *tm;
+
+	CurrentTime = time(NULL);
+	tm=localtime(&CurrentTime);
+	result = (tm->tm_year + 1900);
+
+	return result;
+}
+
 unsigned long long getAvailableMemory()
 {
     long pages = sysconf(_SC_AVPHYS_PAGES);
@@ -1241,7 +1254,7 @@ int DB_Insert_Record(sqlite3 *db, int gun_index)
 			DEBUG_INFO( "Insert local charging record successfully\n");
 		}
 
-		sprintf(sqlStr, "delete from charging_record where idx < (select idx from charging_record order by idx desc limit 1)-2000;");
+		sprintf(sqlStr, "delete from charging_record where (idx < (select idx from charging_record order by idx desc limit 1)-2000) and (dateTimeStop < '%04d.01.01 00:00:00');", (getCurrentYear()-3));
 		if (sqlite3_exec(db, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
 		{
 			result = FAIL;
@@ -3026,7 +3039,7 @@ void checkTask()
 			if((time((time_t*)NULL) - ShmOCPP20Data->procDogTime) > 180)
 			{
 				DEBUG_WARN("OcppBackend20 watch dog timeout task restart.\n");
-				ShmOCPP16Data->procDogTime =  time((time_t*)NULL);
+				ShmOCPP20Data->procDogTime =  time((time_t*)NULL);
 				system("pkill OcppBackend20");
 			}
 
@@ -3121,6 +3134,8 @@ void checkReset()
 				ShmOCPP16Data->MsMsg.bits.ResetConf = ON;
 
 				DEBUG_INFO("%s reset request by OCPP.\n", ShmOCPP16Data->Reset.Type);
+				for(int gun_index = 0;gun_index<AC_QUANTITY;gun_index++)
+					setChargerMode(gun_index, SYS_MODE_BOOTING);
 				if(strcmp((char*)ShmOCPP16Data->Reset.Type, "Hard") == 0)
 				{
 					system("sync");
@@ -3150,6 +3165,8 @@ void checkReset()
 				ShmOCPP20Data->MsMsg.bits.ResetConf = ON;
 
 				DEBUG_INFO("%s reset request by OCPP.\n", ShmOCPP20Data->Reset.type);
+				for(int gun_index = 0;gun_index<AC_QUANTITY;gun_index++)
+					setChargerMode(gun_index, SYS_MODE_BOOTING);
 				if(strcmp((char*)ShmOCPP20Data->Reset.type, "Immediate") == 0)
 				{
 					system("sync");

+ 1 - 1
EVSE/Projects/AW-ChargeLab/Apps/main.c

@@ -2892,7 +2892,7 @@ void checkTask()
 			if((time((time_t*)NULL) - ShmOCPP20Data->procDogTime) > 180)
 			{
 				DEBUG_WARN("OcppBackend20 watch dog timeout task restart.\n");
-				ShmOCPP16Data->procDogTime =  time((time_t*)NULL);
+				ShmOCPP20Data->procDogTime =  time((time_t*)NULL);
 				system("pkill OcppBackend20");
 			}
 			

+ 1 - 1
EVSE/Projects/AW-Regular/Apps/main.c

@@ -2892,7 +2892,7 @@ void checkTask()
 			if((time((time_t*)NULL) - ShmOCPP20Data->procDogTime) > 180)
 			{
 				DEBUG_WARN("OcppBackend20 watch dog timeout task restart.\n");
-				ShmOCPP16Data->procDogTime =  time((time_t*)NULL);
+				ShmOCPP20Data->procDogTime =  time((time_t*)NULL);
 				system("pkill OcppBackend20");
 			}
 			

Some files were not shown because too many files changed in this diff