check-my-irve/backend/app/ocpp/router.py

59 lines
2.3 KiB
Python
Raw Permalink Normal View History

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