{"id":19290251,"url":"https://github.com/brandonprry/volatileocpp","last_synced_at":"2025-09-13T08:50:29.843Z","repository":{"id":260189618,"uuid":"879054779","full_name":"brandonprry/VolatileOCPP","owner":"brandonprry","description":"Security-Focused Implementation of Open Charge Alliance OCPP Test Document Scenarios","archived":false,"fork":false,"pushed_at":"2025-03-18T23:26:36.000Z","size":4652,"stargazers_count":9,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-04T10:23:27.245Z","etag":null,"topics":["evse","iec-63584","iso-15118","ocpp"],"latest_commit_sha":null,"homepage":"https://ocpp.us","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brandonprry.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-10-26T20:57:10.000Z","updated_at":"2025-07-07T18:18:25.000Z","dependencies_parsed_at":"2025-04-22T05:55:25.386Z","dependency_job_id":null,"html_url":"https://github.com/brandonprry/VolatileOCPP","commit_stats":null,"previous_names":["brandonprry/volatileocpp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/brandonprry/VolatileOCPP","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonprry%2FVolatileOCPP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonprry%2FVolatileOCPP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonprry%2FVolatileOCPP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonprry%2FVolatileOCPP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brandonprry","download_url":"https://codeload.github.com/brandonprry/VolatileOCPP/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonprry%2FVolatileOCPP/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274942075,"owners_count":25378206,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-13T02:00:10.085Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["evse","iec-63584","iso-15118","ocpp"],"created_at":"2024-11-09T22:18:34.787Z","updated_at":"2025-09-13T08:50:29.812Z","avatar_url":"https://github.com/brandonprry.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VolatileOCPP\n\nhttps://ocpp.us\n\n## Running CSMS scenarios\n\n```\nstring url = \"ws://localhost:8180/steve/websocket/CentralSystemService/1\";\nstring protocol = \"ocpp1.6\";\nCentralSystem s = new CentralSystem(url, protocol);\ns.RunScenarios();\n```\n\nScenarios can be run against the SteVe OCPP Server implementation as a testbed. Create a ChargeBox ID and OCPP ID tag `volatileocpp`.\n\nScenario implementations are built based directly on the CompliancyTestTool PDF included within the repository. Not every scenario is implemented. Many will be implemented in time. Some will be implemented when software/hardware that implements it gets tested. Security profiles 1 and 2 have been tested using MaEVe CSMS. \n\nhttps://github.com/steve-community/steve\n\nhttps://github.com/thoughtworks/maeve-csms/\n\nIssues found and reported so far:\n\nhttps://github.com/steve-community/steve/issues/1609\nhttps://github.com/citrineos/citrineos/issues/61\nhttps://github.com/EVerest/libiso15118/issues/52\nhttps://github.com/EVerest/libiso15118/issues/53\n\nUnless your CS or CSMS implements every OCPP method, then not every scenario will apply to your implementation. Those scenarios will be skipped during execution. Most implementations will be a subset of the full OCPP specification.\n\nIf you need help verifying your OCPP implementation, email bperry@atx.services to see how we can help.\n\n```\nSupports method: Authorize\nSupports method: BootNotification\nSupports method: DataTransfer\nSupports method: FirmwareStatusNotification\nSupports method: Heartbeat\nSupports method: MeterValues\nSupports method: StatusNotification\nSupports method: StartTransaction\nSupports method: StopTransaction\nDone\n\nRunning scenario: ocpp.Scenarios.TC_001_CSMS    -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_003_CSMS    -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_004_1_CSMS  -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_004_2_CSMS  -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_005_1_CSMS  -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_007_CSMS    -- PASSED!\nSkipping incompatible test ocpp.Scenarios.TC_010_CSMS\nRunning scenario: ocpp.Scenarios.TC_023_1_CSMS  -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_023_2_CSMS\nConfigure the volatileocpp ID Tag to be expired then press enter.\n\n        -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_023_3_CSMS\nConfigure the volatileocpp ID Tag to be blocked then press enter.\n\n        -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_024_CSMS    -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_064_CSMS\nWARNING: DataTransfer Response ACCEPTED\n        -- PASSED!\n```\n\nA failed result might look like this.\n\n```\nSupports method: Authorize\nSupports method: BootNotification\nSupports method: DataTransfer\nSupports method: FirmwareStatusNotification\nSupports method: Heartbeat\nSupports method: MeterValues\nSupports method: StatusNotification\nSupports method: StartTransaction\nSupports method: StopTransaction\nDone\n\nRunning scenario: ocpp.Scenarios.TC_001_CSMS    -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_003_CSMS    -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_004_1_CSMS  -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_004_2_CSMS  -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_005_1_CSMS  -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_007_CSMS    -- PASSED!\nSkipping incompatible test ocpp.Scenarios.TC_010_CSMS\nRunning scenario: ocpp.Scenarios.TC_023_1_CSMS  -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_023_2_CSMS\nConfigure the volatileocpp ID Tag to be expired then press enter.\n\n10/29/2024 9:12:13 PM|Error|WebSocket.messagec|System.Exception: Invalid response\n                               at ocpp.Scenarios.TC_023_2_CSMS.\u003c\u003ec__DisplayClass3_0.\u003cRunScenario\u003eb__0(Object sender, MessageEventArgs e) in /Users/bperry/projects/ocpp/Scenarios/TC_023_2_CSMS.cs:line 39\n                               at WebSocketSharp.WebSocket.messagec(MessageEventArgs e)\n        -- FAILED!\nRunning scenario: ocpp.Scenarios.TC_023_3_CSMS\nConfigure the volatileocpp ID Tag to be blocked then press enter.\n\n10/29/2024 9:12:17 PM|Error|WebSocket.messagec|System.Exception: Invalid response\n                               at ocpp.Scenarios.TC_023_3_CSMS.\u003c\u003ec__DisplayClass3_0.\u003cRunScenario\u003eb__0(Object sender, MessageEventArgs e) in /Users/bperry/projects/ocpp/Scenarios/TC_023_3_CSMS.cs:line 39\n                               at WebSocketSharp.WebSocket.messagec(MessageEventArgs e)\n        -- FAILED!\nRunning scenario: ocpp.Scenarios.TC_024_CSMS    -- PASSED!\nRunning scenario: ocpp.Scenarios.TC_064_CSMS\nWARNING: DataTransfer Response ACCEPTED\n        -- PASSED!\n```\n\n## Good Reading\n\nhttps://arxiv.org/html/2404.06635v2\n\n## Simulating Chargers for your CSMS\n\nSome basic charger simulations can be performed.\n\n```\nstring url = \"ws://localhost:8180/steve/websocket/CentralSystemService/1\";\nstring protocol = \"ocpp1.6\";\n\nList\u003cTask\u003e tasks = new List\u003cTask\u003e();\nfor (int i = 1; i\u003c 11; i++)\n{\n    Charger c = new Charger(url, protocol);\n    c.ConnectorID = i.ToString();\n    c.IDTag = \"volatileocpp\";\n    tasks.Add(Task.Run(c.Simulate));\n}\n\nforeach (Task t in tasks)\n    t.Wait();\n```\n\n![image](https://github.com/user-attachments/assets/9fed843c-df94-4b5e-9de3-e64612f88b75)\n\n![image](https://github.com/user-attachments/assets/3bac011f-0720-4e4d-9868-c4b5ecb3a4ce)\n\n![image](https://github.com/user-attachments/assets/8ed5cc3b-f189-4774-9cd1-729b9e032877)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrandonprry%2Fvolatileocpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrandonprry%2Fvolatileocpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrandonprry%2Fvolatileocpp/lists"}