Sfoglia il codice sorgente

2020-03-20 /Kathy Yeh
1. modify Configuration WebSocketPingInterval
2. modify HeartBeat's log logic
3. modify Configuration Key AuthorizeRemoteTxRequests

Kathy_Yeh 5 anni fa
parent
commit
a2d64056da

+ 20 - 6
EVSE/Modularization/ocppfiles/JsonParser.c

@@ -8,7 +8,6 @@
 #include        "SystemLogMessage.h"
 
 
-
 #define MESSAGE_TYPE_CALL			2
 #define MESSAGE_TYPE_CALLRESULT		3
 #define MESSAGE_TYPE_CALLERROR		4
@@ -203,15 +202,30 @@ void ReceivedMessage(void *in, size_t len)
 			   		  difftest[i-3]= UniqueId[i];
 			   		}
 
-			   	//	printf("\n test difftest=%s\n",difftest);
 
-			   //	printf("\n test digit difftest=%d\n",atoi(difftest));
-			   //	printf("\n testseconds=%d\n",seconds);
+			   		printf("receive - sent =%d (seconds)\n",(int)(seconds)-atoi(difftest));
+			   		printf("\n messageid=%s\n",difftest);
+
+			   		printf("\n send time=%d (seconds)\n",atoi(difftest));
+			   		printf("\n recieve time=%d (seconds)\n",seconds);
+
 
-			   		printf("\n receive -send =%d\n",((int)(seconds)-atoi(difftest)));
 			   		if(((int)(seconds)-atoi(difftest)) > 1)
 			   		{
-			   			DEBUG_INFO("(int)(seconds)-atoi(difftest)=%d\n",(int)(seconds)-atoi(difftest));
+			   			printf("receive - sent =%d (seconds)\n",(int)(seconds)-atoi(difftest));
+			   			printf("\n messageid=%s\n",difftest);
+
+			   			printf("\n send time=%d (seconds)\n",atoi(difftest));
+			   			printf("\n recieve time=%d (seconds)\n",seconds);
+
+
+
+			   			DEBUG_INFO("receive - sent =%d (seconds)\n",(int)(seconds)-atoi(difftest));
+			   			DEBUG_INFO("\n messageid=%s\n",difftest);
+
+			   			DEBUG_INFO("\n send time=%d (seconds)\n",atoi(difftest));
+			   			DEBUG_INFO("\n recieve time=%d (seconds)\n",seconds);
+
 			   		}
 
 

+ 60 - 18
EVSE/Modularization/ocppfiles/MessageHandler.c

@@ -174,7 +174,7 @@ static struct OCPPAuthLocalElemet
 // OCPP HeartBeat Response Not Receive Counts
 //============================================
 static int HeartBeatWithNOResponse = 0;
-static int HeartBeatCount = 0;
+static int HeartBeatCountPerHour = 0;
 
 
 extern struct lws 					*wsi_client;
@@ -185,6 +185,7 @@ extern int SendBufLen;
 
 extern char *random_uuid( char buf[37] );
 extern void split(char **arr, char *str, const char *del);
+extern void  ChageWebSocketPingInterval(int WebSocketPingInterval);
 extern pthread_mutex_t mutex1;
 extern struct Charger_Info Charger;
 extern sqlite3 *db;
@@ -1245,15 +1246,11 @@ void CheckSystemValue(void)
 		//===============================
 		if((server_sign == TRUE) && (ShmOCPP16Data->SpMsg.bits.AuthorizeReq == 1)&&(authorizeRetryTimes < 3)/*authenrequest == FALSE*/)
 		{
-			//if(strcmp((const char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[AuthorizeRemoteTxRequests].ItemData, "TRUE") == 0)// [If AuthorizeRemoteTxRequests = true
-			//{
 				sendAuthorizeRequest(0);
-
 				authorizeRetryTimes = authorizeRetryTimes + 1;
 				// authenrequest = TRUE
 				if(authorizeRetryTimes < 3)
 				ShmOCPP16Data->SpMsg.bits.AuthorizeReq = 0;
-			//}
 
 		}
 		else if((server_sign == TRUE) && (ShmOCPP16Data->SpMsg.bits.AuthorizeReq == 1)&&(authorizeRetryTimes >= 3))
@@ -1587,6 +1584,7 @@ int sendAuthorizeRequest(int gun_index)
 	char tempdata[65]={0};
 
 	DEBUG_INFO("sendAuthorizeRequest \n");
+	memset(&(ShmOCPP16Data->Authorize.ResponseIdTagInfo),0,sizeof(struct StructIdTagInfo));
 
 	//Local Authorize
 	if(((strcmp((const char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[LocalAuthorizeOffline].ItemData, "TRUE") == 0)&&(strcmp((const char *)ShmOCPP16Data->ConfigurationTable.LocalAuthListManagementProfile[LocalAuthListEnabled].ItemData, "TRUE") == 0)&&(ShmOCPP16Data->OcppConnStatus == 0))||((strcmp((const char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[LocalPreAuthorize].ItemData, "TRUE") == 0)&&(strcmp((const char *)ShmOCPP16Data->ConfigurationTable.LocalAuthListManagementProfile[LocalAuthListEnabled].ItemData, "TRUE") == 0)))
@@ -1594,6 +1592,16 @@ int sendAuthorizeRequest(int gun_index)
 		OCPP_getIdTag((char *)ShmSysConfigAndInfo->SysConfig.UserId);
 		if((strcmp(idTagQuery.idTagstr,"") == 0) || (strcmp(idTagQuery.idTagstatus,"Accepted") != 0) )
 		{
+			if(strcmp(idTagQuery.idTagstr,"") == 0)
+			{
+				DEBUG_INFO("offline Local Authorization Fail !!!!, Card %s is blank!!!!\n", idTagQuery.idTagstr);
+			}
+
+			if(strcmp(idTagQuery.idTagstatus,"Accepted") != 0)
+			{
+				DEBUG_INFO("offline Local Authorization Fail !!!!, Card %s is not Accepted!!!!\n", idTagQuery.idTagstr);
+			}
+
 			DEBUG_INFO("offline Local Authorization Fail !!!!\n");
 			strcpy((char *)ShmOCPP16Data->Authorize.ResponseIdTagInfo.ExpiryDate, "");
 			strcpy((char *)ShmOCPP16Data->Authorize.ResponseIdTagInfo.ParentIdTag, (const char *)ShmSysConfigAndInfo->SysConfig.UserId);
@@ -1731,8 +1739,6 @@ int sendBootNotificationRequest(void)
 	memset(queuedata, 0, sizeof(queuedata));
 	strcpy(queuedata,message);
 
-	HeartBeatCount = 0;
-
 	return result;
 }
 
@@ -4125,6 +4131,10 @@ int handleChangeConfigurationRequest(char *uuid, char *payload)
     //confirmation.setStatus(ConfigurationStatus.Rejected);
     sendChangeConfigurationConfirmation(uuid, comfirmstr);
 	ShmOCPP16Data->MsMsg.bits.ChangeConfigurationConf = 1;
+	if((strcmp(keystr,"WebSocketPingInterval")==0)&&(strcmp(comfirmstr,"Accepted")==0))
+	{
+		ChageWebSocketPingInterval(atoi(valuestr));
+	}
 
 
 	return result;
@@ -10214,14 +10224,6 @@ void handleHeartbeatResponse(char *payload, int gun_index)
 	int c = 0;
 	char *loc;
 //[3,"9c2e3c41-ab34-409e-8902-f5f48b6de641",{"currentTime":"2018-09-06T02:22:57.171Z"}]
-
-	if((HeartBeatCount%360) == 0)
-	{
-		DEBUG_INFO("handleHeartbeatResponse ...\n");
-		DEBUG_INFO("After 1 hour, It will print out Heartbeat.\n");
-
-	}
-	HeartBeatCount = HeartBeatCount + 1;
 	c = 0;
 	loc = strstr(payload, "currentTime");
 	memset(sstr ,0, sizeof(sstr) );
@@ -10257,6 +10259,41 @@ void handleHeartbeatResponse(char *payload, int gun_index)
 
 	HeartBeatWithNOResponse = 0;
 
+	//--------Print Out HeartBeat log
+	{
+		double diff_t;
+		struct tm tp,tp1;
+
+
+		// BootNotification Receive Time
+
+		strptime((const char *)ShmOCPP16Data->BootNotification.ResponseCurrentTime, "%Y-%m-%dT%H:%M:%S", &tp);
+		tp.tm_isdst = -1;
+		time_t BootNotificationReceiveTime = mktime(&tp);
+
+
+		//HeartBeat Receive Time
+		strptime((const char *)ShmOCPP16Data->Heartbeat.ResponseCurrentTime, "%Y-%m-%dT%H:%M:%S", &tp1);
+		tp1.tm_isdst = -1;
+		time_t HeartBeatReceiveTime = mktime(&tp1);
+
+
+		diff_t = difftime(HeartBeatReceiveTime, BootNotificationReceiveTime);
+
+		printf("handleHeartbeatResponse differnt time=%f..\n",diff_t);
+
+
+
+		if(((int)diff_t / 3600) > HeartBeatCountPerHour)
+		{
+			HeartBeatCountPerHour =  (int)diff_t / 3600;
+			DEBUG_INFO("handleHeartbeatResponse ...\n");
+			DEBUG_INFO("After 1 hour, It will print out Heartbeat.\n");
+		}
+
+	}
+
+
 }
 
 void handleMeterValuesResponse(char *payload, int gun_index)
@@ -10555,9 +10592,9 @@ int initialConfigurationTable(void)
 		//AuthorizeRemoteTxRequests
 		ShmOCPP16Data->ConfigurationTable.CoreProfile[AuthorizeRemoteTxRequests].ItemAccessibility = 0;
 		strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[AuthorizeRemoteTxRequests].ItemName, "AuthorizeRemoteTxRequests");
-		strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[AuthorizeRemoteTxRequests].ItemData, "TRUE" );
+		strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[AuthorizeRemoteTxRequests].ItemData, "FALSE" );
 
-		fprintf(outfile,"{\"key\":\"%s\",\"readonly\": %s,\"value\":\"%s\"}\n","AuthorizeRemoteTxRequests", "true", "TRUE");
+		fprintf(outfile,"{\"key\":\"%s\",\"readonly\": %s,\"value\":\"%s\"}\n","AuthorizeRemoteTxRequests", "true", "FALSE");
 
 		//BlinkRepeat
 		ShmOCPP16Data->ConfigurationTable.CoreProfile[BlinkRepeat].ItemAccessibility = 1;
@@ -14006,7 +14043,7 @@ void OCPP_getIdTag(char *idTag)
     memset(idTagAuthorization, 0, sizeof(idTagAuthorization));
     memset(&idTagQuery, 0, sizeof(idTagQuery));
 
-
+    DEBUG_INFO("look up card: %s in ocpp_auth_local table", idTag);
     sprintf(sql,"select * from ocpp_auth_local where idtag='%s'", idTag);
 
     /* Execute SQL statement */
@@ -16033,6 +16070,11 @@ void FillStartTransaction(int ConnectorId, unsigned char IdTag[], int MeterStart
 
 }
 
+int GetWebSocketPingInterval(void)
+{
+  return atoi((const char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[WebSocketPingInterval].ItemData);
+}
+
 void LWS_Send(char * str)
 {
 	//=====================================================

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

@@ -127,6 +127,7 @@ void SetTransactionIdZero(int transactionId);
 void GetChargingProfileRequest(int gunindex);
 void FillStartTransaction(int ConnectorId, unsigned char IdTag[], int MeterStart,int ReservationId,unsigned char Timestamp[]);
 void splitstring(char *src,const char *separator,char **dest,int *num);
+int GetWebSocketPingInterval(void);
  //===============================================
  // sqlite related routine
  //===============================================

+ 20 - 7
EVSE/Modularization/ocppfiles/Module_OcppBackend.c

@@ -38,7 +38,6 @@
 #define SPEC_LATEST_SUPPORTED 13
 #endif
 
-
 #define Debug
 //#define ARRAY_SIZE(A)		(sizeof(A) / sizeof(A[0]))
 #define PASS				1
@@ -655,13 +654,13 @@ static struct lws_protocols protocols[] = {
 	{
 		"ocpp1.6",
 		OCPP16Callback,
-		10240,
+		65536,//10240,
 		10240,
 	},
 	{
 		"ocpp1.6",
 		OCPP16Callback,
-		10240,
+		65536,//10240,
 		10240,
 	},
 	{
@@ -670,7 +669,7 @@ static struct lws_protocols protocols[] = {
 };
 
 
-int ConnectWsServer()
+int ConnectWsServer(int  WebSocketPingInterval)
 {
 	int result = PASS;
 	struct lws_context_creation_info ContextInfo;
@@ -717,9 +716,9 @@ int ConnectWsServer()
 	}
 
 	ContextInfo.protocols = protocols;
-	ContextInfo.timeout_secs = 9999;//30;
+	ContextInfo.timeout_secs = WebSocketPingInterval;//30;//9999;//30;
 	//if(ping pong enabled)
-	ContextInfo.ws_ping_pong_interval = 30;//0 for none, else interval in seconds
+	ContextInfo.ws_ping_pong_interval = WebSocketPingInterval;//30;//0 for none, else interval in seconds
 	context = lws_create_context(&ContextInfo);
 	if (context == NULL)
 	{
@@ -1580,6 +1579,12 @@ void work(char s[])        //删除首尾空格
 
 }
 
+static int changeChageWebSocketPingInterval = FALSE;
+void  ChageWebSocketPingInterval(int  WebSocketPingInterval)
+{
+	changeChageWebSocketPingInterval = TRUE;
+}
+
 #define SystemLogMessage
 //================================================
 // Main process
@@ -1699,7 +1704,7 @@ int main(void)
 				#ifdef Debug
 				DEBUG_INFO("Execute ConnectWsServer\n");
 				#endif
-				ConnectWsServer();
+				ConnectWsServer(GetWebSocketPingInterval());
 				startTime.connect=time((time_t*)NULL);
 			}
 
@@ -1734,6 +1739,14 @@ int main(void)
 				context = NULL;
 				SetHeartBeatWithNOResponse();
 			}
+
+			if(changeChageWebSocketPingInterval == TRUE)
+			{
+				changeChageWebSocketPingInterval = FALSE;
+				lws_context_destroy(context);
+				ConnectionEstablished=0;
+				context = NULL;
+			}
 		}
 
 		lws_service(context, 100);//timeout_ms