modified conflict
authorSekiya <shusei.sekiya@sap.com>
Tue, 18 Jun 2024 07:15:01 +0000 (16:15 +0900)
committerSekiya <shusei.sekiya@sap.com>
Tue, 18 Jun 2024 07:15:01 +0000 (16:15 +0900)
1  2 
tests/ocpp-server/.gitignore
tests/ocpp-server/README.md
tests/ocpp-server/server.py

Simple merge
Simple merge
index 53e47c0833f9a68acc22d096076cf8a989fabbdc,9d31f9943e5d2d5a7139cb08d04565b3814e924b..991cef87d5ad426560b87d3051cca13373ec6857
@@@ -13,8 -12,8 +13,9 @@@ from ocpp.v201.enums import 
      ClearCacheStatusType,
      RegistrationStatusType,
      TransactionEventType,
 +    ReportBaseType,
  )
+ from websockets import ConnectionClosed
  
  # Setting up the logging configuration to display debug level messages.
  logging.basicConfig(level=logging.DEBUG)
@@@ -89,65 -90,19 +92,65 @@@ class ChargePoint(ocpp.v201.ChargePoint
  
      @on(Action.MeterValues)
      async def on_meter_values(self, evse_id: int, meter_value, **kwargs):
-         logging.info("Received MeterValues")
+         logging.info("Received %s", Action.MeterValues)
          return ocpp.v201.call_result.MeterValues()
  
 +    @on(Action.GetBaseReport)
 +    async def on_get_base_report(self, request_id: int, report_base: ReportBaseType, **kwargs):
 +        logging.info("Received GetBaseReport")
 +        return ocpp.v201.call_result.GetBaseReport(status="Accepted")
 +
      # Request handlers to emit OCPP messages.
      async def send_clear_cache(self):
          request = ocpp.v201.call.ClearCache()
          response = await self.call(request)
  
          if response.status == ClearCacheStatusType.accepted:
-             logging.info("Cache clearing successful")
+             logging.info("%s successful", Action.ClearCache)
          else:
-             logging.info("Cache clearing failed")
+             logging.info("%s failed", Action.ClearCache)
  
 +    async def send_get_base_report(self):
 +        logging.info("Executing send_get_base_report...")
 +        request = ocpp.v201.call.GetBaseReport(reportBase=ReportBaseType.ConfigurationInventory)  # Use correct ReportBaseType
 +        try:
 +            response = await self.call(request)
 +            logging.info("Send GetBaseReport")
 +
 +            if response.status == "Accepted":  # Adjust depending on the structure of your response
 +                logging.info("Send GetBaseReport successful")
 +            else:
 +                logging.info("Send GetBaseReport failed")
 +        except Exception as e:
 +            logging.error(f"Send GetBaseReport failed: {str(e)}")
 +        logging.info("send_get_base_report done.")
 +
 +# Define argument parser
 +parser = argparse.ArgumentParser(description='OCPP Charge Point Simulator')
 +parser.add_argument('--request', type=str, help='OCPP 2 Command Name')
 +parser.add_argument('--delay', type=int, help='Delay in seconds')
 +parser.add_argument('--period', type=int, help='Period in seconds')
 +
 +args = parser.parse_args()
 +
 +# Function to send OCPP command
 +async def send_ocpp_command(cp, command_name, delay=None, period=None):
 +    # If delay is not None, sleep for delay seconds
 +    if delay:
 +        await asyncio.sleep(delay)
 +
 +    # If period is not None, send command repeatedly with period interval
 +    if period:
 +        while True:
 +            if command_name == 'GetBaseReport':
 +                logging.info("GetBaseReport parser working")
 +                await cp.send_get_base_report()
 +
 +            await asyncio.sleep(period)
 +    else:
 +        if command_name == 'GetBaseReport':
 +            await cp.send_get_base_report()
 +
  
  # Function to handle new WebSocket connections.
  async def on_connect(websocket, path):
  
      charge_point_id = path.strip("/")
      cp = ChargePoint(charge_point_id, websocket)
 +
 +     # Check if request argument is specified
 +    if args.request:
 +        asyncio.create_task(send_ocpp_command(cp, args.request, args.delay, args.period))
 +
 +    # Start the ChargePoint instance to listen for incoming messages.
 +    await cp.start()
 +
+     ChargePoints.add(cp)
+     try:
+         await cp.start()
+     except ConnectionClosed:
+         logging.info("ChargePoint %s closed connection", cp.id)
+         ChargePoints.remove(cp)
+         logging.debug("Connected ChargePoint(s): %d", len(ChargePoints))
 +
  # Main function to start the WebSocket server.
  async def main():
      # Create the WebSocket server and specify the handler for new connections.
          subprotocols=["ocpp2.0", "ocpp2.0.1"],  # Specify OCPP 2.0.1 subprotocols.
      )
      logging.info("WebSocket Server Started")
-     # Create a ChargePoint instance
-     # websocket = await websockets.connect('ws://localhost:9000')
-     # cp = ChargePoint('test', websocket)
-     # Call send_ocpp_command function
-     # asyncio.create_task(send_ocpp_command(cp, args.request, args.delay, args.period))
 +
      # Wait for the server to close (runs indefinitely).
      await server.wait_closed()