Initial commit: Check-My-IRVE SaaS (OCPP 1.6, Audit, Diagnostics)

This commit is contained in:
Adam Belkacemi 2026-08-25 19:08:15 +02:00
commit 192be86487
44 changed files with 2070 additions and 0 deletions

View file

@ -0,0 +1,58 @@
import logging
import os
from datetime import datetime, timezone
from ocpp.routing import on
from ocpp.v16 import ChargePoint as cp
from ocpp.v16 import call_result
from ocpp.v16.enums import Action, RegistrationStatus
from app.core.session_manager import session_mgr
logger = logging.getLogger("ocpp_router")
def get_utc_time():
return datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
HEARTBEAT_INTERVAL = int(os.getenv("OCPP_HEARTBEAT_INTERVAL", 300))
class CustomChargePoint(cp):
@on(Action.BootNotification)
async def on_boot_notification(self, charge_point_vendor, charge_point_model, **kwargs):
await session_mgr.register_cp(self.id, charge_point_model, charge_point_vendor, getattr(self, 'subprotocol', 'Unknown'))
response = call_result.BootNotificationPayload(
current_time=get_utc_time(),
interval=HEARTBEAT_INTERVAL,
status=RegistrationStatus.accepted
)
return response
@on(Action.Heartbeat)
async def on_heartbeat(self):
response = call_result.HeartbeatPayload(current_time=get_utc_time())
return response
@on(Action.Authorize)
async def on_authorize(self, id_tag, **kwargs):
status = "Accepted" if id_tag == "CHARGEMAP_PASS" else "Invalid"
response = call_result.AuthorizePayload(id_tag_info={"status": status})
return response
@on(Action.MeterValues)
async def on_meter_values(self, connector_id, meter_value, **kwargs):
response = call_result.MeterValuesPayload()
return response
@on(Action.StatusNotification)
async def on_status_notification(self, connector_id, status, error_code, **kwargs):
await session_mgr.update_cp_status(self.id, str(status))
response = call_result.StatusNotificationPayload()
return response
@on(Action.StartTransaction)
async def on_start_transaction(self, connector_id, id_tag, meter_start, timestamp, **kwargs):
response = call_result.StartTransactionPayload(transaction_id=123456, id_tag_info={"status": "Accepted"})
return response
@on(Action.StopTransaction)
async def on_stop_transaction(self, transaction_id, meter_stop, timestamp, **kwargs):
response = call_result.StopTransactionPayload(id_tag_info={"status": "Accepted"})
return response