ocpp

package
v0.0.0-...-403cef1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 15, 2026 License: MIT Imports: 31 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// Core profile keys
	KeyMeterValueSampleInterval        = "MeterValueSampleInterval"
	KeyMeterValuesSampledData          = "MeterValuesSampledData"
	KeyMeterValuesSampledDataMaxLength = "MeterValuesSampledDataMaxLength"
	KeyNumberOfConnectors              = "NumberOfConnectors"
	KeySupportedFeatureProfiles        = "SupportedFeatureProfiles"
	KeyWebSocketPingInterval           = "WebSocketPingInterval"

	// SmartCharging profile keys
	KeyChargeProfileMaxStackLevel              = "ChargeProfileMaxStackLevel"
	KeyChargingScheduleAllowedChargingRateUnit = "ChargingScheduleAllowedChargingRateUnit"
	KeyConnectorSwitch3to1PhaseSupported       = "ConnectorSwitch3to1PhaseSupported"
	KeyMaxChargingProfilesInstalled            = "MaxChargingProfilesInstalled"

	// Vendor specific keys
	KeyAlfenPlugAndChargeIdentifier      = "PlugAndChargeIdentifier"
	KeyChargeAmpsPhaseSwitchingSupported = "ACPhaseSwitchingSupported"
	KeyEvBoxSupportedMeasurands          = "evb_SupportedMeasurands"
)

Variables

View Source
var (
	ErrInvalidRequest     = errors.New("invalid request")
	ErrInvalidConnector   = errors.New("invalid connector")
	ErrInvalidTransaction = errors.New("invalid transaction")
)
View Source
var Timeout = time.Minute // default request / response timeout on protocol level
View Source
var TriggerBootDelay = 5 * time.Second

TriggerBootDelay defines how long to wait after WebSocket connect before proactively triggering a BootNotification. This allows the connection to stabilize and gives the charger a chance to send a spontaneous BootNotification. It is a var so tests can shorten it.

Functions

func ApplyForwarderRules

func ApplyForwarderRules(rules []ForwarderRule)

ApplyForwarderRules replaces the forwarding rules at runtime and republishes status.

func ExternalUrl

func ExternalUrl() string

ExternalUrl returns the auto-generated OCPP external URL based on network external URL

func ForwarderEnabled

func ForwarderEnabled() bool

ForwarderEnabled returns true when at least one rule is configured.

func NewServer

func NewServer(cfg Config, networkExternalUrl string)

NewServer builds the OCPP central system without starting it.

func Port

func Port() int

Port returns the TCP port the central system is bound to. With the default configuration this equals the configured port; when port 0 is configured (as in tests) it is the OS-assigned ephemeral port. It returns 0 while the server is not bound.

func SetForwarderUpdated

func SetForwarderUpdated(cb func())

SetForwarderUpdated registers a callback fired when a session connects or disconnects.

func StationStatusStrings

func StationStatusStrings() []string

StationStatusStrings returns a slice of all String values of the enum

Types

type CP

type CP struct {

	// configuration properties
	PhaseSwitching          bool
	HasRemoteTriggerFeature bool
	ChargingRateUnit        types.ChargingRateUnitType
	ChargingProfileId       int
	StackLevel              int
	NumberOfConnectors      int
	IdTag                   string

	BootNotificationResult *core.BootNotificationRequest
	// contains filtered or unexported fields
}

func NewChargePoint

func NewChargePoint(log *util.Logger, cs *CS, id string) *CP

func (*CP) ChangeAvailabilityRequest

func (cp *CP) ChangeAvailabilityRequest(connectorId int, availabilityType core.AvailabilityType) error

func (*CP) ChangeConfigurationRequest

func (cp *CP) ChangeConfigurationRequest(key, value string) error

func (*CP) Connected

func (cp *CP) Connected() bool

func (*CP) GetCompositeScheduleRequest

func (cp *CP) GetCompositeScheduleRequest(connectorId int, duration int) (*smartcharging.GetCompositeScheduleConfirmation, error)

func (*CP) GetConfigurationRequest

func (cp *CP) GetConfigurationRequest(keys ...string) (*core.GetConfigurationConfirmation, error)

func (*CP) HasConnected

func (cp *CP) HasConnected() <-chan struct{}

func (*CP) HasMeasurement

func (cp *CP) HasMeasurement(val types.Measurand) bool

HasMeasurement checks if meterValuesSample contains given measurement

func (*CP) ID

func (cp *CP) ID() string

func (*CP) MonitorReboot

func (cp *CP) MonitorReboot(ctx context.Context, setup func() error)

MonitorReboot ensures the given function runs only once per CP instance. Used to start the reboot monitor goroutine for multi-connector charge points.

func (*CP) OnBootNotification

func (cp *CP) OnBootNotification(request *core.BootNotificationRequest) (*core.BootNotificationConfirmation, error)

func (*CP) OnMeterValues

func (cp *CP) OnMeterValues(request *core.MeterValuesRequest) (*core.MeterValuesConfirmation, error)

func (*CP) OnStartTransaction

func (cp *CP) OnStartTransaction(request *core.StartTransactionRequest) (*core.StartTransactionConfirmation, error)

func (*CP) OnStatusNotification

func (cp *CP) OnStatusNotification(request *core.StatusNotificationRequest) (*core.StatusNotificationConfirmation, error)

func (*CP) OnStopTransaction

func (cp *CP) OnStopTransaction(request *core.StopTransactionRequest) (*core.StopTransactionConfirmation, error)

func (*CP) RegisterID

func (cp *CP) RegisterID(id string)

func (*CP) RemoteStartTransactionRequest

func (cp *CP) RemoteStartTransactionRequest(connectorId int, idTag string) error

func (*CP) SetChargingProfileRequest

func (cp *CP) SetChargingProfileRequest(connectorId int, profile *types.ChargingProfile) error

func (*CP) Setup

func (cp *CP) Setup(ctx context.Context, meterValues string, meterInterval time.Duration, forcePowerCtrl, noChangeAvailability bool) error

func (*CP) TriggerMessageRequest

func (cp *CP) TriggerMessageRequest(connectorId int, requestedMessage remotetrigger.MessageTrigger) error

type CS

type CS struct {
	ocpp16.CentralSystem
	// contains filtered or unexported fields
}

func Instance

func Instance() (*CS, error)

Instance returns the central system, starting it once on first call. It returns an error if the server fails to bind its port.

func (*CS) ChargePointDisconnected

func (cs *CS) ChargePointDisconnected(chargePoint ocpp16.ChargePointConnection)

ChargePointDisconnected implements ocpp16.ChargePointConnectionHandler

func (*CS) ChargepointByID

func (cs *CS) ChargepointByID(id string) (*CP, error)

func (*CS) Debug

func (cs *CS) Debug(args ...any)

func (*CS) Debugf

func (cs *CS) Debugf(f string, args ...any)

func (*CS) Error

func (cs *CS) Error(args ...any)

func (*CS) Errorf

func (cs *CS) Errorf(f string, args ...any)

func (*CS) Info

func (cs *CS) Info(args ...any)

func (*CS) Infof

func (cs *CS) Infof(f string, args ...any)

func (*CS) NewChargePoint

func (cs *CS) NewChargePoint(chargePoint ocpp16.ChargePointConnection)

NewChargePoint implements ocpp16.ChargePointConnectionHandler

func (*CS) OnAuthorize

func (cs *CS) OnAuthorize(id string, request *core.AuthorizeRequest) (*core.AuthorizeConfirmation, error)

func (*CS) OnBootNotification

func (cs *CS) OnBootNotification(id string, request *core.BootNotificationRequest) (*core.BootNotificationConfirmation, error)

func (*CS) OnCertificateSigned

func (cs *CS) OnCertificateSigned(id string, request *security.CertificateSignedRequest) (*security.CertificateSignedResponse, error)

func (*CS) OnDataTransfer

func (cs *CS) OnDataTransfer(id string, request *core.DataTransferRequest) (*core.DataTransferConfirmation, error)

func (*CS) OnHeartbeat

func (cs *CS) OnHeartbeat(id string, request *core.HeartbeatRequest) (*core.HeartbeatConfirmation, error)

func (*CS) OnMeterValues

func (cs *CS) OnMeterValues(id string, request *core.MeterValuesRequest) (*core.MeterValuesConfirmation, error)

func (*CS) OnSignCertificate

func (cs *CS) OnSignCertificate(id string, request *security.SignCertificateRequest) (*security.SignCertificateResponse, error)

func (*CS) OnStartTransaction

func (cs *CS) OnStartTransaction(id string, request *core.StartTransactionRequest) (*core.StartTransactionConfirmation, error)

func (*CS) OnStatusNotification

func (cs *CS) OnStatusNotification(id string, request *core.StatusNotificationRequest) (*core.StatusNotificationConfirmation, error)

func (*CS) OnStopTransaction

func (cs *CS) OnStopTransaction(id string, request *core.StopTransactionRequest) (*core.StopTransactionConfirmation, error)

func (*CS) RegisterChargepoint

func (cs *CS) RegisterChargepoint(id string, newfun func() *CP, init func(*CP) error) (*CP, error)

RegisterChargepoint registers a charge point with the central system of returns an already registered charge point

func (*CS) SetUpdated

func (cs *CS) SetUpdated(f func())

SetUpdated sets a callback function that is called when the status changes

func (*CS) WithConnectorStatus

func (cs *CS) WithConnectorStatus(id string, connector int, fun func(status *core.StatusNotificationRequest))

func (*CS) Write

func (cs *CS) Write(id string, data []byte) error

Write sends a raw OCPP frame to the charger with the given station ID.

type Config

type Config struct {
	Port int `json:"port"`
}

func CurrentConfig

func CurrentConfig() Config

CurrentConfig returns the current runtime OCPP configuration.

type Connector

type Connector struct {
	// contains filtered or unexported fields
}

func NewConnector

func NewConnector(ctx context.Context, log *util.Logger, id int, cp *CP, idTag string, meterInterval time.Duration) (*Connector, error)

func (*Connector) ChangeAvailabilityRequest

func (conn *Connector) ChangeAvailabilityRequest(availabilityType core.AvailabilityType) error

func (*Connector) CurrentPower

func (conn *Connector) CurrentPower() (float64, error)

func (*Connector) Currents

func (conn *Connector) Currents() (float64, float64, float64, error)

func (*Connector) GetCompositeScheduleRequest

func (conn *Connector) GetCompositeScheduleRequest(duration int) (*smartcharging.GetCompositeScheduleConfirmation, error)

func (*Connector) GetMaxCurrent

func (conn *Connector) GetMaxCurrent() (float64, error)

GetMaxCurrent returns the maximum phase current the charge point is set to offer

func (*Connector) GetMaxPower

func (conn *Connector) GetMaxPower() (float64, error)

GetMaxPower returns the maximum power the charge point is set to offer

func (*Connector) GetScheduleLimit

func (conn *Connector) GetScheduleLimit(duration int) (float64, error)

getScheduleLimit queries the current or power limit the charge point is currently set to offer

func (*Connector) ID

func (conn *Connector) ID() int

func (*Connector) IdTag

func (conn *Connector) IdTag() string

func (*Connector) Initialized

func (conn *Connector) Initialized() error

Initialized waits for initial charge point status notification

func (*Connector) NeedsAuthentication

func (conn *Connector) NeedsAuthentication() bool

NeedsAuthentication checks if local authentication or an initial RemoteStartTransaction is required

func (*Connector) OnMeterValues

func (conn *Connector) OnMeterValues(request *core.MeterValuesRequest) (*core.MeterValuesConfirmation, error)

func (*Connector) OnStartTransaction

func (conn *Connector) OnStartTransaction(request *core.StartTransactionRequest) (*core.StartTransactionConfirmation, error)

func (*Connector) OnStatusChange

func (conn *Connector) OnStatusChange(f func())

OnStatusChange registers a callback for status changes relevant to the loadpoint

func (*Connector) OnStatusNotification

func (conn *Connector) OnStatusNotification(request *core.StatusNotificationRequest) (*core.StatusNotificationConfirmation, error)

func (*Connector) OnStopTransaction

func (conn *Connector) OnStopTransaction(request *core.StopTransactionRequest) (*core.StopTransactionConfirmation, error)

func (*Connector) RemoteStartTransactionRequest

func (conn *Connector) RemoteStartTransactionRequest(idTag string) error

func (*Connector) SetChargingProfileRequest

func (conn *Connector) SetChargingProfileRequest(profile *types.ChargingProfile) error

func (*Connector) Soc

func (conn *Connector) Soc() (float64, error)

func (*Connector) Status

func (conn *Connector) Status() (core.ChargePointStatus, error)

Status returns the unmapped charge point status

func (*Connector) TestClock

func (conn *Connector) TestClock(clock clock.Clock)

func (*Connector) TotalEnergy

func (conn *Connector) TotalEnergy() (float64, error)

func (*Connector) TransactionID

func (conn *Connector) TransactionID() (int, error)

TransactionID returns the current transaction id

func (*Connector) TriggerMessageRequest

func (conn *Connector) TriggerMessageRequest(requestedMessage remotetrigger.MessageTrigger) error

func (*Connector) Voltages

func (conn *Connector) Voltages() (float64, float64, float64, error)

func (*Connector) WatchDog

func (conn *Connector) WatchDog(ctx context.Context, timeout time.Duration)

WatchDog triggers meter values messages if older than timeout. Must be wrapped in a goroutine.

type ForwarderRule

type ForwarderRule struct {
	StationID         string `json:"stationId" yaml:"stationId"`
	UpstreamURL       string `json:"upstreamUrl" yaml:"upstreamUrl"`
	Password          string `json:"password,omitempty" yaml:"password,omitempty"`
	UpstreamStationID string `json:"upstreamStationId,omitempty" yaml:"upstreamStationId,omitempty"`
	Username          string `json:"username,omitempty" yaml:"username,omitempty"`
	Insecure          bool   `json:"insecure,omitempty" yaml:"insecure,omitempty"`
	CaCert            string `json:"caCert,omitempty" yaml:"caCert,omitempty"`
	ReadOnly          bool   `json:"readOnly,omitempty" yaml:"readOnly,omitempty"`
}

ForwarderRule maps a station ID (or "*" for all chargers) to an upstream OCPP server URL.

func ForwarderRules

func ForwarderRules() []ForwarderRule

ForwarderRules returns the current forwarding rules.

func (ForwarderRule) Redacted

func (r ForwarderRule) Redacted() ForwarderRule

type ForwarderSessionStatus

type ForwarderSessionStatus struct {
	ChargerID         string `json:"chargerId"`
	UpstreamURL       string `json:"upstreamUrl"`
	UpstreamConnected bool   `json:"upstreamConnected"`
	Error             string `json:"error,omitempty"`
}

ForwarderSessionStatus is the observable state of one forwarder session.

func GetForwarderStatus

func GetForwarderStatus() []ForwarderSessionStatus

GetForwarderStatus returns a snapshot of all active forwarder sessions.

type StationStatus

type StationStatus int
const (
	StationStatusUnknown StationStatus = iota
	StationStatusConfigured
	StationStatusConnected
)

func StationStatusString

func StationStatusString(s string) (StationStatus, error)

StationStatusString retrieves an enum value from the enum constants string name. Throws an error if the param is not part of the enum.

func StationStatusValues

func StationStatusValues() []StationStatus

StationStatusValues returns all values of the enum

func (StationStatus) IsAStationStatus

func (i StationStatus) IsAStationStatus() bool

IsAStationStatus returns "true" if the value is listed in the enum definition. "false" otherwise

func (StationStatus) MarshalJSON

func (i StationStatus) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaler interface for StationStatus

func (StationStatus) String

func (i StationStatus) String() string

func (*StationStatus) UnmarshalJSON

func (i *StationStatus) UnmarshalJSON(data []byte) error

UnmarshalJSON implements the json.Unmarshaler interface for StationStatus

type Status

type Status struct {
	ExternalUrl string          `json:"externalUrl,omitempty"`
	Stations    []stationStatus `json:"stations"`
}

Status represents the runtime OCPP status

func GetStatus

func GetStatus() Status

GetStatus returns the OCPP runtime status

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
⌂ 换网址