Browse Source

Console不顯示未入庫的電樁斷線資訊

Jessica Tseng 2 years ago
parent
commit
7192b69e68

+ 4 - 4
EVCB_OCPP.WSServer/App.config

@@ -7,10 +7,10 @@
     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
   </configSections>
    <connectionStrings>
-     <add name="ConnectionLogDBContext" connectionString="data source=172.1.2.187\EXPRESS2017_MLOG;initial catalog=StandardOCPP_ConnectionLog;;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
-     <add name="MainDBContext" connectionString="data source=172.1.2.187\SQLEXPRESS2017;initial catalog=StandardOCPP_Main;;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
-     <add name="MeterValueDBContext" connectionString="data source=172.1.2.187\SQLEXPRESS2017;initial catalog=StandardOCPP_MeterValue;;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
-     <add name="WebDBContext" connectionString="data source=172.1.2.187\SQLEXPRESS2017;initial catalog=StandardOCPP_Web;;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
+     <add name="ConnectionLogDBContext" connectionString="data source=172.1.2.187;initial catalog=StandardOCPP_ConnectionLog;;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
+     <add name="MainDBContext" connectionString="data source=172.1.2.187;initial catalog=StandardOCPP_Main;;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
+     <add name="MeterValueDBContext" connectionString="data source=172.1.2.187;initial catalog=StandardOCPP_MeterValue;;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
+     <add name="WebDBContext" connectionString="data source=172.1.2.187;initial catalog=StandardOCPP_Web;;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
    </connectionStrings>
   <appSettings>   
     <add key="LocalAuthAPI" value="" />

+ 43 - 23
EVCB_OCPP.WSServer/Message/CoreProfileHandler.cs

@@ -291,8 +291,7 @@ namespace EVCB_OCPP.WSServer.Message
                     case Actions.MeterValues:
                         {
 
-                            MeterValuesRequest _request = request as MeterValuesRequest;
-                            decimal energy_kwh = 0;
+                            MeterValuesRequest _request = request as MeterValuesRequest;                          
 
                             if (_request.meterValue.Count > 0)
                             {
@@ -302,36 +301,42 @@ namespace EVCB_OCPP.WSServer.Message
                                 {
                                     foreach (var item in _request.meterValue)
                                     {
-
-                                        decimal meterStart = 0;
-                                        var energy_Register = item.sampledValue.Where(x => x.measurand == Measurand.Energy_Active_Import_Register).FirstOrDefault();
-
-                                        if (energy_Register != null)
+                                        if (_request.transactionId.HasValue)
                                         {
-                                            decimal energyRegister = decimal.Parse(energy_Register.value);
-                                            energyRegister = energy_Register.unit.Value == UnitOfMeasure.kWh ? decimal.Multiply(energyRegister, 1000) : energyRegister;
+                                            decimal meterStart = 0;
+                                            var energy_Register = item.sampledValue.Where(x =>  x.measurand == Measurand.Energy_Active_Import_Register).FirstOrDefault();
 
-                                            using (var maindb = new MainDBContext())
+                                            if (energy_Register != null)
                                             {
-                                                meterStart = maindb.TransactionRecord.Where(x => x.Id == _request.transactionId.Value).Select(x => x.MeterStart).FirstOrDefault();
+                                                decimal energyRegister = decimal.Parse(energy_Register.value);
+                                                energyRegister = energy_Register.unit.Value == UnitOfMeasure.kWh ? decimal.Multiply(energyRegister, 1000) : energyRegister;
+
+
+                                                using (var maindb = new MainDBContext())
+                                                {
+                                                    meterStart = maindb.TransactionRecord.Where(x => x.Id == _request.transactionId.Value).Select(x => x.MeterStart).FirstOrDefault();
+                                                }
+
+                                                logger.Debug(string.Format("TxId:{0} MeterStart:{1} Register:{2} => {3}", _request.transactionId.Value, meterStart, energyRegister, decimal.Subtract(energyRegister, meterStart)));
+
+                                                item.sampledValue.Add(new SampledValue()
+                                                {
+                                                    context = ReadingContext.Sample_Periodic,
+                                                    format = ValueFormat.Raw,
+                                                    location = Location.Outlet,
+                                                    phase = item.sampledValue.Where(x => x.measurand == Measurand.Energy_Active_Import_Register).Select(x => x.phase).FirstOrDefault(),
+                                                    unit = UnitOfMeasure.Wh,
+                                                    measurand = Measurand.TotalEnergy,
+                                                    value = decimal.Subtract(energyRegister, meterStart).ToString()
+                                                });
                                             }
-                                          
-                                            item.sampledValue.Add(new SampledValue()
-                                            {
-                                                context = ReadingContext.Sample_Periodic,
-                                                format = ValueFormat.Raw,
-                                                location = Location.Outlet,
-                                                phase = item.sampledValue.Where(x => x.measurand == Measurand.Energy_Active_Import_Register).Select(x => x.phase).FirstOrDefault(),
-                                                unit = UnitOfMeasure.Wh,
-                                                measurand = Measurand.TotalEnergy,
-                                                value = decimal.Subtract(energyRegister, meterStart).ToString()
-                                            });
+
                                         }
 
                                         foreach (var sampleVaule in item.sampledValue)
                                         {
 
-                                            decimal value = Convert.ToDecimal(sampleVaule.value);                                          
+                                            decimal value = Convert.ToDecimal(sampleVaule.value);
 
                                             string sp = "[dbo].[uspInsertMeterValueRecord] @ChargeBoxId," +
                          "@ConnectorId,@Value,@CreatedOn,@ContextId,@FormatId,@MeasurandId,@PhaseId,@LocationId,@UnitId,@TransactionId";
@@ -598,6 +603,20 @@ namespace EVCB_OCPP.WSServer.Message
                                     transaction.Receipt = string.Empty;
                                     transaction.Cost = session.IsBilling ? -1 : 0;
 
+                                    if (_request.transactionData != null && _request.transactionData.Count > 0)
+                                    {
+                                        _request.transactionData[0].sampledValue.Add(new SampledValue()
+                                        {
+                                            context = ReadingContext.Transaction_End,
+                                            format = ValueFormat.Raw,
+                                            location = Location.Outlet,
+                                            phase = _request.transactionData[0].sampledValue.Where(x => x.context.HasValue).Select(x => x.phase).FirstOrDefault(),
+                                            unit = UnitOfMeasure.Wh,
+                                            measurand = Measurand.TotalEnergy,
+                                            value = decimal.Subtract(transaction.MeterStop, transaction.MeterStart).ToString()
+                                        });
+                                    }
+
 
                                     await db.SaveChangesAsync();
 
@@ -651,6 +670,7 @@ namespace EVCB_OCPP.WSServer.Message
                                             {
                                                 decimal value = Convert.ToDecimal(sampleVaule.value);
 
+
                                                 string sp = "[dbo].[uspInsertMeterValueRecord] @ChargeBoxId," +
                              "@ConnectorId,@Value,@CreatedOn,@ContextId,@FormatId,@MeasurandId,@PhaseId,@LocationId,@UnitId,@TransactionId";
 

+ 9 - 9
EVCB_OCPP.WSServer/NLog.config

@@ -28,23 +28,23 @@
     <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
             layout="${longdate} ${uppercase:${level}} ${message}" />
     -->
-   <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
-            layout="${longdate} ${uppercase:${level}} ${message}" />
-    <target xsi:type="Console" name="Console"
-            layout="${longdate} ${uppercase:${level}} ${message}" />
+    <target xsi:type="File" name="ws" fileName="${basedir}/logs/WS_${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" />
+    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" />
+    <target xsi:type="Console" name="Console" layout="${longdate} ${uppercase:${level}} ${message}" />
     <target xsi:type="File" name="auth" fileName="${basedir}/logs/Auth_${shortdate}.log"
-              layout="${longdate} ${uppercase:${level}} ${message}" />
- 
+             layout="${longdate} ${callsite} ${uppercase:${level}} ${message}" />
   </targets>
   <rules>
     <!-- add your logging rules here -->
-
     <!--
     Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"
     <logger name="*" minlevel="Debug" writeTo="f" />
     -->
+    <logger name="OCPPServer.*" minlevel="Info" writeTo="ws" />
+    <logger name="SuperWebSocket.*" minlevel="Info" writeTo="ws" />
     <logger name="EVCB_OCPP.WSServer.Service.OuterBusinessService" level="Info" writeTo="auth" />
-    <logger name="*" minlevel="Debug" writeTo="f" />
-    <logger name="*" minlevel="Trace" writeTo="Console" />
+    <logger name="EVCB_OCPP.*" minlevel="Debug" writeTo="f" />
+    <logger name="EVCB_OCPP.*" minlevel="Trace" writeTo="console" />
+
   </rules>
 </nlog>

+ 1 - 1
EVCB_OCPP.WSServer/Properties/AssemblyInfo.cs

@@ -35,4 +35,4 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyVersion("1.0.5.0")]
 [assembly: AssemblyFileVersion("1.0.5.0")]
 
-[assembly: AssemblyInformationalVersion("819f126")]
+[assembly: AssemblyInformationalVersion("5382176")]

+ 7 - 4
EVCB_OCPP.WSServer/ProtalServer.cs

@@ -406,7 +406,8 @@ namespace EVCB_OCPP.WSServer
 
         private void AppServer_NewSessionConnected(ClientData session)
         {
-            Console.WriteLine("++++++++++++++++");
+            logger.Debug(string.Format("{0} NewSessionConnected", session.Path));
+
             try
             {
                 lock (_lockClientDic)
@@ -722,7 +723,7 @@ namespace EVCB_OCPP.WSServer
 
                                         CheckVersion(session.ChargeBoxId);
                                         CheckEVSEConfigure(session.ChargeBoxId);
-                                        if (session.CustomerId == new Guid("298918C0-6BB5-421A-88CC-4922F918E85E")|| session.CustomerId == new Guid("9E6BFDCC-09FB-4DAB-A428-43FE507600A3"))
+                                        if (session.CustomerId == new Guid("298918C0-6BB5-421A-88CC-4922F918E85E") || session.CustomerId == new Guid("9E6BFDCC-09FB-4DAB-A428-43FE507600A3"))
                                         {
                                             using (var db = new MainDBContext())
                                             {
@@ -747,7 +748,7 @@ namespace EVCB_OCPP.WSServer
 
 
                                                 db.SaveChanges();
-                                            }                                              
+                                            }
 
                                         }
 
@@ -2053,7 +2054,9 @@ namespace EVCB_OCPP.WSServer
             if (session != null)
             {
 
-                logger.Trace("RemoveClient[" + session.ChargeBoxId + "]");
+                if (!string.IsNullOrEmpty(session.MachineId))
+                    logger.Trace("RemoveClient[" + session.ChargeBoxId + "]");
+
                 if (session.Connected)
                 {
                     session.Close(CloseReason.ServerShutdown);

+ 19 - 17
EVCB_OCPP.WSServer/SuperSocket.Protocol/OCPPWSServer.cs

@@ -95,6 +95,22 @@ namespace OCPPServer.Protocol
                 session.MachineId = machine == null ? String.Empty : machine.Id;
                 isExistedSN = machine == null ? false : true;
 
+                if (!isExistedSN)
+                {
+                    StringBuilder responseBuilder = new StringBuilder();
+
+                    responseBuilder.AppendFormatWithCrCf(@"HTTP/{0} {1} {2}", "1.1",
+                    (int)HttpStatusCode.NotFound, @"Not Found");
+                  
+                    responseBuilder.AppendWithCrCf();
+                    string sb = responseBuilder.ToString();
+                    byte[] data = Encoding.UTF8.GetBytes(sb);
+                    ((IWebSocketSession)session).SendRawData(data, 0, data.Length);
+
+                    logger.Info(sb);
+                    return false;
+                }
+
                 var configVaule = db.MachineConfiguration.Where(x => x.ChargeBoxId == session.ChargeBoxId && x.ConfigureName == StandardConfiguration.SecurityProfile)
                                   .Select(x => x.ConfigureSetting).FirstOrDefault();
                 int.TryParse(configVaule, out securityProfile);
@@ -117,7 +133,7 @@ namespace OCPPServer.Protocol
                 byte[] data = Encoding.UTF8.GetBytes(sb);
 
                 ((IWebSocketSession)session).SendRawData(data, 0, data.Length);
-
+                logger.Info(sb);
                 return false;
             }
 
@@ -183,27 +199,13 @@ namespace OCPPServer.Protocol
                     byte[] data = Encoding.UTF8.GetBytes(sb);
 
                     ((IWebSocketSession)session).SendRawData(data, 0, data.Length);
-
+                    logger.Info(sb);
                     return false;
                 }
             }
 
 
-            if (!isExistedSN)
-            {
-                StringBuilder responseBuilder = new StringBuilder();
-
-                responseBuilder.AppendFormatWithCrCf(@"HTTP/{0} {1} {2}", "1.1",
-                (int)HttpStatusCode.NotFound, @"Not Found");
-
-                responseBuilder.AppendWithCrCf();
-                string sb = responseBuilder.ToString();
-                byte[] data = Encoding.UTF8.GetBytes(sb);
-
-                ((IWebSocketSession)session).SendRawData(data, 0, data.Length);
-
-                return false;
-            }
+