Class: Ocpp::Rails::Actions::MeterValuesHandler

Inherits:
Object
  • Object
show all
Defined in:
app/services/ocpp/rails/actions/meter_values_handler.rb

Instance Method Summary collapse

Constructor Details

#initialize(charge_point, message_id, payload) ⇒ MeterValuesHandler

Returns a new instance of MeterValuesHandler.



5
6
7
8
9
# File 'app/services/ocpp/rails/actions/meter_values_handler.rb', line 5

def initialize(charge_point, message_id, payload)
  @charge_point = charge_point
  @message_id = message_id
  @payload = payload
end

Instance Method Details

#callObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'app/services/ocpp/rails/actions/meter_values_handler.rb', line 11

def call
  connector_id = @payload["connectorId"]
  transaction_id = @payload["transactionId"]

  # Find active session if transaction ID provided
  session = if transaction_id
    @charge_point.charging_sessions.find_by(transaction_id: transaction_id)
  else
    @charge_point.charging_sessions.active.find_by(connector_id: connector_id)
  end

  # Process each meter value set
  meter_value_sets = @payload["meterValue"] || []
  meter_value_sets.each do |meter_value_set|
    timestamp = TimestampParser.parse(meter_value_set["timestamp"])

    sampled_values = meter_value_set["sampledValue"] || []
    sampled_values.each do |sampled_value|
      meter_value = create_meter_value(session, connector_id, timestamp, sampled_value)
      broadcast_meter_value(meter_value) if meter_value
    end
  end

  ::Rails.logger.debug("[OCPP] MeterValues from #{@charge_point.identifier}: Connector #{connector_id}, #{meter_value_sets.size} value sets")

  # Return empty response (MeterValues doesn't require data in response)
  {}
end