Ocpp [5.2.0.0;6.0.0.0)

OCPP Binding

This binding makes openHAB an OCPP 1.6-J central system, so EV chargers connect to it directly over WebSocket with no vendor cloud in between.
It reads connection state, connector status, transactions and the MeterValues measurand set, and it controls charging: current limit and pause via SetChargingProfile, remote start/stop, availability, unlock and reset.

Download: org.openhab.binding.ocpp-5.3.0-SNAPSHOT.jar

This is a beta, published with the intention of getting it in as an official binding — it is under review at openhab/openhab-addons#21265. The maintainer’s latest re-review found no remaining blocking issues and considers it functionally sound; it is waiting on a human maintainer’s manual pass before merge.

Supported Things

  • server — the WebSocket endpoint chargers dial in to. Bridge for everything below it.
  • chargepoint — one physical charger, matched to a session by its OCPP charge point id (the URL path it dials, without the leading slash). Bridge for its connectors.
  • connector — one outlet, carrying the status, metering and control channels.

Chargers point at ws://<openhab-host>:8887/<chargePointId>.

Discovery

Passive: a charger connecting with an id that has no thing appears in the inbox, and its connectors appear as they first report status. There is no active scan — chargers announce themselves. If you are not sure what id your charger uses, connect it and read it off the inbox, or set log:set DEBUG org.openhab.binding.ocpp and look for the Charger connected: id=… line — t>

Thing Configuration

server: port (8887), host, heartbeatInterval, plus advanced settings pushed to each charger after it boots — meterValuesData, meterValueSampleInterval, clockAlignedDataInterval, disableRemoteTxAuthorization, vendorConfig — and requestTimeoutSeconds, pingInterval, authPassword, and the tags / chargers allow-lists.
chargepoint: chargePointId (required), configSettleSeconds, meterless, heartbeat.
connector: connectorId, forceTxDefaultProfile, profileMinIntervalMs, hardwareMaxCurrentKey, remoteStartTag, meterValuesPollSeconds, stuckStateRecovery.
Full tables and per-option notes are in the README.

Channels

On the chargepoint: connected, last-seen, reset.
On the connector: charge-point-status, cable-connected, charging, charge-limit, pause, availability, unlock, hardware-max-current, per-phase current-import-l1..l3 and voltage-l1..l3, current-offered, power-active-import, power-offered, energy-active-import, and the transaction metadata (id-tag, transaction-id, meter-start, meter-stop, t>
The rest of the OCPP measurand set — reactive and exported power and energy, frequency, power factor, and vehicle-reported SoC, RPM and temperature — is added to a connector only once a charger actually reports it, so an AC charge point does not end up with a dozen channels that stay empty.

To start or stop a charge, send ON / OFF to the connector’s charging channel (RemoteStart / RemoteStop). It starts with the remoteStartTag idTag (default openhab), which the charger has to accept — through the server’s tags list and the charger’s own authorization — and most chargers only start with a vehicle plugged in. pause suspends a running charge with a >

Example

Bridge ocpp:server:main [ port=8887 ] {
    Bridge chargepoint wallbox "Wallbox" [ chargePointId="wallbox" ] {
        Thing connector c1 "Connector 1" [ connectorId=1 ]
    }
}
String Wallbox_Status "Status [%s]" { channel="ocpp:connector:main:wallbox:c1:charge-point-status" }
Number:Power Wallbox_Power "Power [%.0f W]" { channel="ocpp:connector:main:wallbox:c1:power-active-import" }
Number:ElectricCurrent Wallbox_Limit "Limit [%.0f A]" { channel="ocpp:connector:main:wallbox:c1:charge-limit" }

Notes from running it

Configuration is pushed to a charger once it has accepted it, not on every reconnect. A charger that is busy — flushing an offline message queue, for instance — can leave a request unanswered, and an unanswered request times out, so re-sending on every reconnect would turn one reconnect into a loop.
Metering parsing is tolerant on purpose: a measurand a charger rejects is dropped and the rest retried, an omitted measurand defaults to the energy register, and a value that cannot be represented is skipped rather than failing the whole message.
A BootNotification whose model or vendor exceeds OCPP’s 20-character limit (or omits one) is accepted rather than refused, so such a charger can still come online — a recent fix, prompted by an Alfen Eve Single Pro.
Chargers that reject a TxProfile outside a transaction (Phoenix CHARX does) can send the charge limit as a TxDefaultProfile with forceTxDefaultProfile.

What has and has not been tested

Running continuously since 21 July against a Phoenix Contact CHARX SEC-3xxx (two connectors, no internal meter) and two Wallbox units (Copper SB and Pulsar Plus): metering and status, every control channel, transactions through complete sessions, charger reboots including the configuration burst, discovery, reconnects, and an openHAB restart. Built against 5.3.0-SNAPSHOT an>
Not tested: any other vendor. The watchdogs that recover a silent or wedged connector have not been triggered on real hardware, since that means provoking a real fault. Vendor-specific DataTransfer is answered but unexercised — no charger here sends it.
If you run a different brand I would like to hear how it goes, particularly whether your charger accepts the measurand list and what it does on a reboot.

Hello @ stamate_viorel, I’m trying to use this binding under OH5.2.1 but I can’t get it working with Alfen Eve Single Pro charger. OCPP Server is online in OH, but OCPP Charge Point and Connector show “UNKNOWN” status. One problem is that I haven’t figured out what is the Charge Point ID. I have also looked at the charger settings with Alfen’s ACE Service Installer program but it doesn’t give any hints what the ID is. So, what I’m missing?

:waving_hand:

the chargepoint thing sits at UNKNOWN until a charger connects with a matching charge point id — so it’s either the alfen not reaching the server yet, or connecting with a different id than the thing is set to. you don’t have to guess the id, the binding tells you.

the id is the path of the websocket url the charger dials, minus the leading slash. on alfen that path is the device identity it appends to the back-office url — so if it dials ws://:8887/300127…, the id is 300127….

on the alfen side (ACE Service Installer, needs the owner password): set the back-office / CSMS url to ws://:8887, plain ws not wss, protocol OCPP 1.6-J. the identity that becomes the last url segment is the “Device ID” / “Customer Ident. number” — usually a long serial-like number. whatever it is, that’s what goes in the chargepoint thing’s Charge Point Id.

easiest of all: let it tell you. if the alfen reaches the server it’s auto-discovered — a chargepoint shows up in your inbox with its real id; accept that instead of making one by hand.

if nothing shows up in the inbox or the log at all, it isn’t reaching the openhab: check the url/port 8887 are right and reachable, it’s ws not wss, and that it’s dialing with a path

btw i’ve just refreshed the 0.1.0 release jar to the latest code if you’re on an older build but that should not matter

OK, thanks. I have now made some progress. I had wrong CSMS URL address in ACE Service Installer. Once I corrected it the OCPP Charge Point appeared in the INBOX. Now it’s status is “ONLINE”. OCPP Connector didn’t appear in the INBOX so I tried to add it manually but it has “UNKNOWN” status.

nice, the chargepoint being ONLINE means the url + id are sorted. the connector is a passive-discovery quirk: it only comes ONLINE when the charger sends a StatusNotification for it, and the reason it didn’t pop into your inbox is timing — the alfen sent its connector status right after boot, but the chargepoint was still in your inbox with no handler behind it then, so those early statuses were dropped. once you accepted the chargepoint the alfen didn’t re-send them because nothing changed.
quickest fix: plug a car in (or just insert/present the cable) — the alfen sends a StatusNotification and the connector flips to ONLINE. if you delete the manual connector first it’ll even show up in the inbox on its own.
two things to sanity-check on the manual connector:
connector id should be 1 (single-connector alfen — id 0 is the charge point itself).
with the chargepoint ONLINE the binding also asks the charger for the connector status by itself (a TriggerMessage), so if it’s still UNKNOWN with nothing plugged in, the alfen may not be answering that. do log:set DEBUG org.openhab.binding.ocpp, then watch openhab.log — you’ll see the StatusNotification lines (and which connector id the alfen actually uses) and whether the trigger gets answered. that’ll tell us if it’s a connector-id thing or just the alfen waiting for a real state change.
either way, plugging in once is the surest way to get it reporting.

I have tried to connect my car to the charger but still Connector is not in the INBOX. I have also rebooted the Alfen.

Here is a copy of the log:

2026-08-09 11:29:55.242 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : BundleComponentActivator : ComponentHolder created.
2026-08-09 11:29:55.244 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService] : BundleComponentActivator : ComponentHolder created.
2026-08-09 11:29:55.245 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : Dependency Manager created $000interface=org.openhab.core.storage.StorageService, filter=null, policy=static, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=service, parameter=0
2026-08-09 11:29:55.245 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : Dependency Manager created osgi.ds.satisfying.conditioninterface=org.osgi.service.condition.Condition, filter=(osgi.condition.id=true), policy=dynamic, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=null, parameter=null
2026-08-09 11:29:55.245 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : Component created: DS=DS14, implementation=org.openhab.binding.ocpp.internal.OcppHandlerFactory, immediate=false, default-enabled=true, factory=null, configuration-policy=optional, activate=activate, deactivate=deactivate, modified=null configuration-pid=[binding.ocpp]
2026-08-09 11:29:55.246 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : Component Services: scope=singleton, services=[org.openhab.core.thing.binding.ThingHandlerFactory]
2026-08-09 11:29:55.246 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : Component Properties: {osgi.ds.satisfying.condition.target=(osgi.condition.id=true)}
2026-08-09 11:29:55.246 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : Component can not be activated since it is in state disabled
2026-08-09 11:29:55.246 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : Updating target filters
2026-08-09 11:29:55.246 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : No change in target property for dependency $000: currently registered: false
2026-08-09 11:29:55.247 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] :  No existing service listener to unregister for dependency $000
2026-08-09 11:29:55.247 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : Setting target property for dependency $000 to null
2026-08-09 11:29:55.247 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : New service tracker for $000, initial active: false, previous references: {}, classFilter: (objectClass=org.openhab.core.storage.StorageService), initialReferenceFilter (objectClass=org.openhab.core.storage.StorageService)
2026-08-09 11:29:55.247 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : dm $000 tracker reset (closed)
2026-08-09 11:29:55.247 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : dm $000 tracking 1 SingleStatic added {org.openhab.core.storage.StorageService}={service.id=406, service.bundleid=223, service.scope=bundle, storage.format=json, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.storage.json, service.config.label=Json Storage, component.id=293, service.config.factory=false, service.config.category=system, service.config.description.uri=system:json_storage, service.pid=org.openhab.storage.json} (enter)
2026-08-09 11:29:55.248 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : dm $000 tracking 1 SingleStatic active: false trackerOpened: false optional: false
2026-08-09 11:29:55.248 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : dm $000 tracking 1 SingleStatic added {org.openhab.core.storage.StorageService}={service.id=406, service.bundleid=223, service.scope=bundle, storage.format=json, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.storage.json, service.config.label=Json Storage, component.id=293, service.config.factory=false, service.config.category=system, service.config.description.uri=system:json_storage, service.pid=org.openhab.storage.json} (exit)
2026-08-09 11:29:55.248 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : dm $000 tracker opened
2026-08-09 11:29:55.248 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : registering service listener for dependency $000
2026-08-09 11:29:55.248 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] :  No existing service listener to unregister for dependency osgi.ds.satisfying.condition
2026-08-09 11:29:55.248 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : Setting target property for dependency osgi.ds.satisfying.condition to (osgi.condition.id=true)
2026-08-09 11:29:55.248 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : New service tracker for osgi.ds.satisfying.condition, initial active: false, previous references: {}, classFilter: (objectClass=org.osgi.service.condition.Condition), initialReferenceFilter (&(objectClass=org.osgi.service.condition.Condition)(osgi.condition.id=true))
2026-08-09 11:29:55.248 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : dm osgi.ds.satisfying.condition tracker reset (closed)
2026-08-09 11:29:55.248 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : dm osgi.ds.satisfying.condition tracking 2 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (enter)
2026-08-09 11:29:55.248 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : dm osgi.ds.satisfying.condition tracking 2 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (exit)
2026-08-09 11:29:55.249 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : dm osgi.ds.satisfying.condition tracker opened
2026-08-09 11:29:55.249 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : registering service listener for dependency osgi.ds.satisfying.condition
2026-08-09 11:29:55.249 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : Changed state from disabled to unsatisfiedReference
2026-08-09 11:29:55.249 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : Component enabled
2026-08-09 11:29:55.249 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : ActivateInternal
2026-08-09 11:29:55.249 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : Activating component from state unsatisfiedReference
2026-08-09 11:29:55.249 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : Changed state from unsatisfiedReference to satisfied
2026-08-09 11:29:55.250 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : registration change queue [registered]
2026-08-09 11:29:55.250 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : Checking constructor public org.openhab.binding.ocpp.internal.OcppHandlerFactory(org.openhab.core.storage.StorageService)
2026-08-09 11:29:55.251 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : getClassFromComponentClassLoader: Looking for interface class org.openhab.core.storage.StorageService through loader of org.openhab.binding.ocpp.internal.OcppHandlerFactory
2026-08-09 11:29:55.251 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : getClassFromComponentClassLoader: Found class org.openhab.core.storage.StorageService
2026-08-09 11:29:55.251 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : Found constructor with 1 arguments : public org.openhab.binding.ocpp.internal.OcppHandlerFactory(org.openhab.core.storage.StorageService)
2026-08-09 11:29:55.251 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : This thread collected dependencies
2026-08-09 11:29:55.251 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : getService (single component manager) dependencies collected.
2026-08-09 11:29:55.251 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : For dependency $000, optional: false; to bind: [[RefPair: ref: [{org.openhab.core.storage.StorageService}={service.id=406, service.bundleid=223, service.scope=bundle, storage.format=json, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.storage.json, service.config.label=Json Storage, component.id=293, service.config.factory=false, service.config.category=system, service.config.description.uri=system:json_storage, service.pid=org.openhab.storage.json}] service: [null]]]
2026-08-09 11:29:55.253 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : For dependency osgi.ds.satisfying.condition, optional: false; to bind: [[RefPair: ref: [{org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true}] service: [null]]]
2026-08-09 11:29:55.254 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : Locating method activate within class org.openhab.binding.ocpp.internal.OcppHandlerFactory
2026-08-09 11:29:55.254 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : Found activate method: protected void org.openhab.core.thing.binding.BaseThingHandlerFactory.activate(org.osgi.service.component.ComponentContext)
2026-08-09 11:29:55.254 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : invoking activate: activate: parameters [org.apache.felix.scr.impl.manager.ComponentContextImpl]
2026-08-09 11:29:55.254 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : invoked activate: activate
2026-08-09 11:29:55.254 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : Set implementation object for component
2026-08-09 11:29:55.255 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(467)] : Changed state from satisfied to active
2026-08-09 11:29:55.256 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService] : Dependency Manager created osgi.ds.satisfying.conditioninterface=org.osgi.service.condition.Condition, filter=(osgi.condition.id=true), policy=dynamic, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=null, parameter=null
2026-08-09 11:29:55.257 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService] : Component created: DS=DS13, implementation=org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService, immediate=false, default-enabled=true, factory=null, configuration-policy=optional, activate=activate, deactivate=deactivate, modified=null configuration-pid=[discovery.ocpp]
2026-08-09 11:29:55.257 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService] : Component Services: scope=prototype, services=[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService]
2026-08-09 11:29:55.257 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService] : Component Properties: {osgi.ds.satisfying.condition.target=(osgi.condition.id=true)}
2026-08-09 11:29:55.257 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService] : Component can not be activated since it is in state disabled
2026-08-09 11:29:55.257 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : Updating target filters
2026-08-09 11:29:55.257 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] :  No existing service listener to unregister for dependency osgi.ds.satisfying.condition
2026-08-09 11:29:55.257 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : Setting target property for dependency osgi.ds.satisfying.condition to (osgi.condition.id=true)
2026-08-09 11:29:55.257 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : New service tracker for osgi.ds.satisfying.condition, initial active: false, previous references: {}, classFilter: (objectClass=org.osgi.service.condition.Condition), initialReferenceFilter (&(objectClass=org.osgi.service.condition.Condition)(osgi.condition.id=true))
2026-08-09 11:29:55.258 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : dm osgi.ds.satisfying.condition tracker reset (closed)
2026-08-09 11:29:55.258 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : dm osgi.ds.satisfying.condition tracking 1 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (enter)
2026-08-09 11:29:55.258 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : dm osgi.ds.satisfying.condition tracking 1 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (exit)
2026-08-09 11:29:55.258 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : dm osgi.ds.satisfying.condition tracker opened
2026-08-09 11:29:55.258 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : registering service listener for dependency osgi.ds.satisfying.condition
2026-08-09 11:29:55.258 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : Changed state from disabled to unsatisfiedReference
2026-08-09 11:29:55.258 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : Component enabled
2026-08-09 11:29:55.258 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : ActivateInternal
2026-08-09 11:29:55.259 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : Activating component from state unsatisfiedReference
2026-08-09 11:29:55.259 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : Changed state from unsatisfiedReference to satisfied
2026-08-09 11:29:55.259 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : registration change queue [registered]
2026-08-09 11:30:02.309 [INFO ] [e.automation.internal.RuleEngineImpl] - Rule engine started.
2026-08-09 11:30:02.342 [INFO ] [ntsoe.internal.handler.EntsoeHandler] - Schedule cron with pattern 0 0 14 ? * * *
2026-08-09 11:30:03.212 [WARN ] [al.handler.DSCAlarmBaseBridgeHandler] - Not Connected to the DSC Alarm!
2026-08-09 11:30:03.540 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : ServiceFactory.getService()
2026-08-09 11:30:03.542 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : Checking constructor public org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService()
2026-08-09 11:30:03.543 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : Found constructor with 0 arguments : public org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService()
2026-08-09 11:30:03.543 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : This thread collected dependencies
2026-08-09 11:30:03.543 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : getService (ServiceFactory) dependencies collected.
2026-08-09 11:30:03.543 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : For dependency osgi.ds.satisfying.condition, optional: false; to bind: [[RefPair: ref: [{org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true}] service: [null]]]
2026-08-09 11:30:03.544 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : Locating method activate within class org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService
2026-08-09 11:30:03.544 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : Found activate method: public void org.openhab.core.config.discovery.AbstractThingHandlerDiscoveryService.activate(java.util.Map)
2026-08-09 11:30:03.544 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : invoking activate: activate: parameters [org.apache.felix.scr.impl.helper.ReadOnlyDictionary]
2026-08-09 11:30:03.545 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : invoked activate: activate
2026-08-09 11:30:03.545 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (324)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(468)] : Changed state from satisfied to active
2026-08-09 11:30:03.727 [DEBUG] [ternal.transport.ChargeTimeTransport] - OCPP JSON server listening on 0.0.0.0:8887
2026-08-09 11:30:04.628 [INFO ] [o.internal.handler.AstroThingHandler] - Scheduled Positional job astro:sun:local every 300 seconds
2026-08-09 11:30:26.644 [WARN ] [core.karaf.internal.FeatureInstaller] - The binding add-on 'ocpp' does not exist - ignoring it.
2026-08-09 11:30:56.807 [DEBUG] [ternal.transport.ChargeTimeTransport] - Charger session opened: 884c0ba3-01ff-4960-80b6-f01599f74ba4 (id=ACE0697628)
2026-08-09 11:30:56.808 [DEBUG] [rnal.handler.OcppServerBridgeHandler] - Charger connected: id=ACE0697628 session=884c0ba3-01ff-4960-80b6-f01599f74ba4 from=/192.168.1.111:54021
2026-08-09 11:30:56.808 [DEBUG] [ernal.handler.OcppChargePointHandler] - Charge point ACE0697628 online on session 884c0ba3-01ff-4960-80b6-f01599f74ba4
2026-08-09 11:34:27.546 [WARN ] [rt.modbus.internal.ModbusManagerImpl] - Try 1 out of 3 failed when executing request (ModbusReadRequestBlueprint [slaveId=1, functionCode=READ_MULTIPLE_REGISTERS, start=292, length=2, maxTries=3]). Will try again soon. Error was I/O error, so resetting the connection. Error details: net.wimpi.modbus.ModbusIOException I/O exception: SocketTimeoutException Read timed out [operation ID 36fb4a59-b364-4c3b-93a7-b5026226e7bb]
2026-08-09 11:38:51.501 [WARN ] [rt.modbus.internal.ModbusManagerImpl] - Try 1 out of 3 failed when executing request (ModbusReadRequestBlueprint [slaveId=1, functionCode=READ_MULTIPLE_REGISTERS, start=208, length=1, maxTries=3]). Will try again soon. Error was I/O error, so resetting the connection. Error details: net.wimpi.modbus.ModbusIOException I/O exception: SocketTimeoutException Read timed out [operation ID 7ef8ed96-27d4-41e3-8375-8ae02423c1e5]
2026-08-09 11:39:14.509 [DEBUG] [ternal.transport.ChargeTimeTransport] - Charger session opened: bb51cdb4-8623-4c1d-8200-19ab86d29596 (id=ACE0697628)
2026-08-09 11:39:14.510 [DEBUG] [ternal.transport.ChargeTimeTransport] - Charger session lost: 884c0ba3-01ff-4960-80b6-f01599f74ba4
2026-08-09 11:39:14.510 [DEBUG] [rnal.handler.OcppServerBridgeHandler] - Charger connected: id=ACE0697628 session=bb51cdb4-8623-4c1d-8200-19ab86d29596 from=/192.168.1.111:57141
2026-08-09 11:39:14.510 [DEBUG] [ternal.transport.ChargeTimeTransport] - Charger session lost: 884c0ba3-01ff-4960-80b6-f01599f74ba4
2026-08-09 11:39:14.511 [DEBUG] [ernal.handler.OcppChargePointHandler] - Charge point ACE0697628 online on session bb51cdb4-8623-4c1d-8200-19ab86d29596
2026-08-09 11:39:19.555 [ERROR] [eu.chargetime.ocpp.Communicator     ] - An error occurred. Sending this information: uniqueId 1: action: BootNotification, errorCore: OccurenceConstraintViolation, errorDescription: Payload for Action is syntactically correct but at least one of the fields violates occurence constraints

I have also restarted OH and uninstalled/reinstalled OCPP binding. I have now noticed that I can’t add manually new Things in OCPP binding:

that log nailed it — this isn’t a config problem on your end, it’s a bug in the binding. the OCPP library i embed is rejecting your charger’s BootNotification because alfen sends a model or vendor string longer than the 20-char limit the spec sets, so the charger never actually boots and nothing downstream (incl. the connector) can come up. a central system shouldn’t refuse a boot over that, so i’ll make it tolerant.
if you can grab one more thing it’ll help me confirm and verify the fix: log:set DEBUG eu.chargetime.ocpp, reconnect the charger, and paste the received BootNotification frame (it’ll show the exact chargePointModel / chargePointVendor). thanks for the detailed logs, this is genuinely useful.

I haven’t tried yet to do the debug logging. I uninstalled the binding and manually added all 3 Things. They all are now “ONLINE”. Do I still need to do log:set DEBUG eu.chargetime.ocpp?

Well if all three are ONLINE. and that tells me i jumped ahead earlier
there’s still one separate thing from your log worth a look only if you feel like it: the binding was rejecting your charger’s BootNotification. it’s not blocking you — the charger comes up from its other messages — but a rejected boot means the binding skips the metering setup it normally sends right after boot, so you might not see the full MeterValues set. if you ever want that sorted, log:set DEBUG eu.chargetime.ocpp, reconnect, and paste it
and a quick sanity check while you’re in there: try a current-limit change or start/stop on the connector to confirm control actually takes, not just that it shows ONLINE.

OK, thanks. I’ll do the debugging later. I’m now wondering how to add START/STOP command to the charging switch.

i updated the jar again with a small fix also updated the docs so here’s a full config for your charger as two files — drop them in your things and items folders.

if you already made the things in the UI you can either delete those and use this file instead (cleaner, the names are fixed), or keep them and just copy your real channel ids off the connector’s page — the main:alfen:c1 part will be whatever the UI named yours.

ocpp.things:

Bridge ocpp:server:main [ port=8887 ] {
    Bridge chargepoint alfen "Alfen" [ chargePointId="ACE0697628" ] {
        Thing connector c1 "Connector 1" [ connectorId=1 ]
    }
}

ocpp.items:

// watch it
String                 Alfen_Status   "Status [%s]"       { channel="ocpp:connector:main:alfen:c1:charge-point-status" }
Switch                 Alfen_Cable    "Cable [%s]"        { channel="ocpp:connector:main:alfen:c1:cable-connected" }
Number:Power           Alfen_Power    "Power [%.0f W]"    { channel="ocpp:connector:main:alfen:c1:power-active-import" }
Number:Energy          Alfen_Energy   "Energy [%.2f kWh]" { channel="ocpp:connector:main:alfen:c1:energy-active-import" }

// control it
Switch                 Alfen_Charging "Charging"          { channel="ocpp:connector:main:alfen:c1:charging" }
Number:ElectricCurrent Alfen_Limit    "Limit [%.0f A]"    { channel="ocpp:connector:main:alfen:c1:charge-limit" }
Switch                 Alfen_Pause    "Pause"             { channel="ocpp:connector:main:alfen:c1:pause" }

ACE0697628 is your charge point id from the log, connectorId=1 is the single connector. everything under ocpp:connector:main:alfen:c1: is a channel — grab more from the readme (per-phase current/voltage, etc.) if you want them.

then it’s the same loop as before: plug in, switch Alfen_Charging ON, set Alfen_Limit while it charges, Alfen_Charging OFF to stop.

Tried to use V2C Trydan but it did not work. Made two tests:

  1. Define Server and Charge Point. Server is online but Charge Point remained unknown

  2. Define Server only, Charge point was not discovered

I’ve used the V2C app to configure the charger with

  • URL ws://192.168.129.230:8887/
  • ID v2c-aveiro

this is the url. the binding takes the charge point id from the path of the websocket url the charger dials, so it has to come through as ws://192.168.129.230:8887/<id>. a bare ws://192.168.129.230:8887/ with nothing after the slash has no id, and the binding ignores it — that’s exactly why the chargepoint stayed unknown in one test and nothing showed up in the inbox in the other.

v2c puts the id in the path, so two things to try:

  • drop the trailing slash — set the url to ws://192.168.129.230:8887 (no slash) and let the ID field (v2c-aveiro) be what v2c appends. a trailing slash there can make it dial the bare root.
  • or just put it all in the url: ws://192.168.129.230:8887/v2c-aveiro.

then to be sure what it’s actually sending, log:set DEBUG org.openhab.binding.ocpp, reconnect, and look for one of:

  • Charger connected: id=… — that’s the real id it dialed. make a chargepoint thing with chargePointId set to exactly that (v2c might use its own default ocpp id, not v2c-aveiro).
  • opened without an identity path; ignoring — still hitting the bare root, so the id isn’t making it into the path.

paste that line and we’ll know for sure.

Many thanks. I have had quite lot of problems with my Alfen. I had to send it to Alfen Netherlands in June and they changed most likely the controller board. My electrician made the electrical connections today and we made a quick test. Alfen seemed to work OK. Only after this I started to play around with the OCPP binding. At some point I could start and pause charging but now charging won’t start at all. I have to contact Alfen agent here in Finland.

All the 3 things are ONLINE but Alfen_status shows “SuspendedEVSE” so I guess my car (BMW i4) is somehow blocking charging.

I have to say that I’m somewhat pissed off now.

first off, that’s a genuinely rough run — sending it to alfen, the board swap, and then this. but the state you’re in is almost certainly not your car and not broken hardware.

SuspendedEVSE means the charger is holding energy back, not the car refusing it. if the i4 were the one saying no — battery full, or a charging timer set in the my bmw app — you’d see SuspendedEV instead. so the car is fine.

what happened is the pause. in this binding a pause is just a 0 amp limit, and right now the connector still has that 0 amp limit on it, so it’s stuck in SuspendedEVSE. to get it charging again:

  • set the connector’s charge-limit to 16 (or whatever amps you want)
  • then set the pause switch to OFF

do it in that order, limit first then pause off. on this build, un-pausing when you never set a limit just re-sends 0, so the limit has to be a real number first. once both are done it should flip to Charging within a second or two.

if it doesn’t flip, run log:set DEBUG org.openhab.binding.ocpp, set the limit again, and the log will show the profile the charger accepted or rejected — send me that and i’ll read it.

and honestly part of this is on the binding, not you: un-pausing with no limit set shouldn’t re-send 0, it should just let the charger go back to full. i’m fixing that so it can’t trap anyone else. for now the 16 + pause-off gets you moving.

Many thanks for your help. I just deleted the things and items in OH and ocpp settings in ACE. I will start all over again now.

Yes, I think the pause switch is causing problems because when charging was working and I changed pause switch to ON and charging stopped, of course.

One more thing, where is the latest jar-file? I had a quick look at the Github and couldn’t find it.

Another (failed) attempt with V2C Trydan. Server is online, Charge Point and Connector are unknown.

Wallbox parameters (no car connected):

  • URL - ws://openhab-prd.lan:8887/v2c-aveiro
  • ID OCPP - v2c-aveiro

openHAB 5.2.1 with following definitions

version: 1
things:
  ocpp:server:e49cca23d5:
    isBridge: true
    config:
      host: 0.0.0.0
      port: 8887
      heartbeatInterval: 300
      meterValueSampleInterval: -1
      clockAlignedDataInterval: -1
      disableRemoteTxAuthorization: false
      pingInterval: 0
      requestTimeoutSeconds: 30

version: 1
things:
  ocpp:chargepoint:e49cca23d5:b9091b5886:
    isBridge: true
    bridge: ocpp:server:e49cca23d5
    config:
      chargePointId: v2c-trydan
      configSettleSeconds: 0
      meterless: false
      heartbeat: 0
    channels:
      connected:
        type: connected
      last-seen:
        type: last-seen
      reset:
        type: reset

version: 1
things:
  ocpp:connector:b9091b5886:c8075f9eb5:
    bridge: ocpp:chargepoint:e49cca23d5:b9091b5886
    config:
      connectorId: 1
      forceTxDefaultProfile: false
      profileMinIntervalMs: 0
      remoteStartTag: openhab
      meterValuesPollSeconds: 0
      stuckStateRecovery: false
    channels:
      charge-point-status:
        type: charge-point-status
      cable-connected:
        type: cable-connected
      charging:
        type: charging
      charge-limit:
        type: charge-limit
      pause:
        type: pause
      availability:
        type: availability
      unlock:
        type: unlock
      hardware-max-current:
        type: hardware-max-current
      current-import-l1:
        type: current-phase
        label: Current L1
      current-import-l2:
        type: current-phase
        label: Current L2
      current-import-l3:
        type: current-phase
        label: Current L3
      voltage-l1:
        type: voltage-phase
        label: Voltage L1
      voltage-l2:
        type: voltage-phase
        label: Voltage L2
      voltage-l3:
        type: voltage-phase
        label: Voltage L3
      current-offered:
        type: current-offered
      power-active-import:
        type: power-active-import
      power-offered:
        type: power-offered
      energy-active-import:
        type: energy-active-import
      id-tag:
        type: id-tag
      transaction-id:
        type: transaction-id
      meter-start:
        type: energy
        label: Meter Start
      meter-stop:
        type: energy
        label: Meter Stop
      timestamp:
        type: timestamp
        label: Meter Timestamp
      timestamp-start:
        type: timestamp
        label: Transaction Start Time
      timestamp-stop:
        type: timestamp
        label: Transaction Stop Time

openHAB log

2026-08-09 16:50:57.342 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : BundleComponentActivator : ComponentHolder created.
2026-08-09 16:50:57.346 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService] : BundleComponentActivator : ComponentHolder created.
2026-08-09 16:50:57.349 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : Dependency Manager created $000interface=org.openhab.core.storage.StorageService, filter=null, policy=static, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=service, parameter=0
2026-08-09 16:50:57.349 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : Dependency Manager created osgi.ds.satisfying.conditioninterface=org.osgi.service.condition.Condition, filter=(osgi.condition.id=true), policy=dynamic, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=null, parameter=null
2026-08-09 16:50:57.350 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : Component created: DS=DS14, implementation=org.openhab.binding.ocpp.internal.OcppHandlerFactory, immediate=false, default-enabled=true, factory=null, configuration-policy=optional, activate=activate, deactivate=deactivate, modified=null configuration-pid=[binding.ocpp]
2026-08-09 16:50:57.351 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : Component Services: scope=singleton, services=[org.openhab.core.thing.binding.ThingHandlerFactory]
2026-08-09 16:50:57.351 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : Component Properties: {osgi.ds.satisfying.condition.target=(osgi.condition.id=true)}
2026-08-09 16:50:57.352 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory] : Component can not be activated since it is in state disabled
2026-08-09 16:50:57.352 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : Updating target filters
2026-08-09 16:50:57.354 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : No change in target property for dependency $000: currently registered: false
2026-08-09 16:50:57.354 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] :  No existing service listener to unregister for dependency $000
2026-08-09 16:50:57.355 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : Setting target property for dependency $000 to null
2026-08-09 16:50:57.356 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : New service tracker for $000, initial active: false, previous references: {}, classFilter: (objectClass=org.openhab.core.storage.StorageService), initialReferenceFilter (objectClass=org.openhab.core.storage.StorageService)
2026-08-09 16:50:57.357 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : dm $000 tracker reset (closed)
2026-08-09 16:50:57.359 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : dm $000 tracking 1 SingleStatic added {org.openhab.core.storage.StorageService}={service.id=407, service.bundleid=223, service.scope=bundle, storage.format=json, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.storage.json, service.config.label=Json Storage, component.id=298, service.config.factory=false, service.config.category=system, service.config.description.uri=system:json_storage, service.pid=org.openhab.storage.json} (enter)
2026-08-09 16:50:57.361 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : dm $000 tracking 1 SingleStatic active: false trackerOpened: false optional: false
2026-08-09 16:50:57.363 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : dm $000 tracking 1 SingleStatic added {org.openhab.core.storage.StorageService}={service.id=407, service.bundleid=223, service.scope=bundle, storage.format=json, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.storage.json, service.config.label=Json Storage, component.id=298, service.config.factory=false, service.config.category=system, service.config.description.uri=system:json_storage, service.pid=org.openhab.storage.json} (exit)
2026-08-09 16:50:57.364 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : dm $000 tracker opened
2026-08-09 16:50:57.365 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : registering service listener for dependency $000
2026-08-09 16:50:57.366 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] :  No existing service listener to unregister for dependency osgi.ds.satisfying.condition
2026-08-09 16:50:57.366 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : Setting target property for dependency osgi.ds.satisfying.condition to (osgi.condition.id=true)
2026-08-09 16:50:57.368 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : New service tracker for osgi.ds.satisfying.condition, initial active: false, previous references: {}, classFilter: (objectClass=org.osgi.service.condition.Condition), initialReferenceFilter (&(objectClass=org.osgi.service.condition.Condition)(osgi.condition.id=true))
2026-08-09 16:50:57.369 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : dm osgi.ds.satisfying.condition tracker reset (closed)
2026-08-09 16:50:57.370 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : dm osgi.ds.satisfying.condition tracking 2 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (enter)
2026-08-09 16:50:57.371 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : dm osgi.ds.satisfying.condition tracking 2 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (exit)
2026-08-09 16:50:57.373 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : dm osgi.ds.satisfying.condition tracker opened
2026-08-09 16:50:57.376 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : registering service listener for dependency osgi.ds.satisfying.condition
2026-08-09 16:50:57.377 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : Changed state from disabled to unsatisfiedReference
2026-08-09 16:50:57.377 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : Component enabled
2026-08-09 16:50:57.378 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : ActivateInternal
2026-08-09 16:50:57.379 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : Activating component from state unsatisfiedReference
2026-08-09 16:50:57.380 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : Changed state from unsatisfiedReference to satisfied
2026-08-09 16:50:57.381 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : registration change queue [registered]
2026-08-09 16:50:57.383 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : Checking constructor public org.openhab.binding.ocpp.internal.OcppHandlerFactory(org.openhab.core.storage.StorageService)
2026-08-09 16:50:57.385 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : getClassFromComponentClassLoader: Looking for interface class org.openhab.core.storage.StorageService through loader of org.openhab.binding.ocpp.internal.OcppHandlerFactory
2026-08-09 16:50:57.386 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : getClassFromComponentClassLoader: Found class org.openhab.core.storage.StorageService
2026-08-09 16:50:57.388 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : Found constructor with 1 arguments : public org.openhab.binding.ocpp.internal.OcppHandlerFactory(org.openhab.core.storage.StorageService)
2026-08-09 16:50:57.389 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : This thread collected dependencies
2026-08-09 16:50:57.390 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : getService (single component manager) dependencies collected.
2026-08-09 16:50:57.391 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : For dependency $000, optional: false; to bind: [[RefPair: ref: [{org.openhab.core.storage.StorageService}={service.id=407, service.bundleid=223, service.scope=bundle, storage.format=json, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), component.name=org.openhab.core.storage.json, service.config.label=Json Storage, component.id=298, service.config.factory=false, service.config.category=system, service.config.description.uri=system:json_storage, service.pid=org.openhab.storage.json}] service: [null]]]
2026-08-09 16:50:57.392 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : For dependency osgi.ds.satisfying.condition, optional: false; to bind: [[RefPair: ref: [{org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true}] service: [null]]]
2026-08-09 16:50:57.395 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : Locating method activate within class org.openhab.binding.ocpp.internal.OcppHandlerFactory
2026-08-09 16:50:57.396 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : Found activate method: protected void org.openhab.core.thing.binding.BaseThingHandlerFactory.activate(org.osgi.service.component.ComponentContext)
2026-08-09 16:50:57.397 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : invoking activate: activate: parameters [org.apache.felix.scr.impl.manager.ComponentContextImpl]
2026-08-09 16:50:57.398 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : invoked activate: activate
2026-08-09 16:50:57.399 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : Set implementation object for component
2026-08-09 16:50:57.399 [DEBUG] [ing.ocpp.internal.OcppHandlerFactory] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.OcppHandlerFactory(505)] : Changed state from satisfied to active
2026-08-09 16:50:57.415 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService] : Dependency Manager created osgi.ds.satisfying.conditioninterface=org.osgi.service.condition.Condition, filter=(osgi.condition.id=true), policy=dynamic, cardinality=1..1, bind=null, unbind=null, updated=null, field=null, field-option=null, collection-type=null, parameter=null
2026-08-09 16:50:57.415 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService] : Component created: DS=DS13, implementation=org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService, immediate=false, default-enabled=true, factory=null, configuration-policy=optional, activate=activate, deactivate=deactivate, modified=null configuration-pid=[discovery.ocpp]
2026-08-09 16:50:57.416 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService] : Component Services: scope=prototype, services=[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService]
2026-08-09 16:50:57.417 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService] : Component Properties: {osgi.ds.satisfying.condition.target=(osgi.condition.id=true)}
2026-08-09 16:50:57.417 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService] : Component can not be activated since it is in state disabled
2026-08-09 16:50:57.418 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : Updating target filters
2026-08-09 16:50:57.419 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] :  No existing service listener to unregister for dependency osgi.ds.satisfying.condition
2026-08-09 16:50:57.419 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : Setting target property for dependency osgi.ds.satisfying.condition to (osgi.condition.id=true)
2026-08-09 16:50:57.419 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : New service tracker for osgi.ds.satisfying.condition, initial active: false, previous references: {}, classFilter: (objectClass=org.osgi.service.condition.Condition), initialReferenceFilter (&(objectClass=org.osgi.service.condition.Condition)(osgi.condition.id=true))
2026-08-09 16:50:57.420 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : dm osgi.ds.satisfying.condition tracker reset (closed)
2026-08-09 16:50:57.420 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : dm osgi.ds.satisfying.condition tracking 1 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (enter)
2026-08-09 16:50:57.421 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : dm osgi.ds.satisfying.condition tracking 1 SingleDynamic added {org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true} (exit)
2026-08-09 16:50:57.421 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : dm osgi.ds.satisfying.condition tracker opened
2026-08-09 16:50:57.422 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : registering service listener for dependency osgi.ds.satisfying.condition
2026-08-09 16:50:57.422 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : Changed state from disabled to unsatisfiedReference
2026-08-09 16:50:57.423 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : Component enabled
2026-08-09 16:50:57.423 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : ActivateInternal
2026-08-09 16:50:57.424 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : Activating component from state unsatisfiedReference
2026-08-09 16:50:57.424 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : Changed state from unsatisfiedReference to satisfied
2026-08-09 16:50:57.424 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : registration change queue [registered]
2026-08-09 16:51:04.288 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : ServiceFactory.getService()
2026-08-09 16:51:04.289 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : Checking constructor public org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService()
2026-08-09 16:51:04.292 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : Found constructor with 0 arguments : public org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService()
2026-08-09 16:51:04.296 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : This thread collected dependencies
2026-08-09 16:51:04.297 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : getService (ServiceFactory) dependencies collected.
2026-08-09 16:51:04.297 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : For dependency osgi.ds.satisfying.condition, optional: false; to bind: [[RefPair: ref: [{org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true}] service: [null]]]
2026-08-09 16:51:04.298 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : Locating method activate within class org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService
2026-08-09 16:51:04.301 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : Found activate method: public void org.openhab.core.config.discovery.AbstractThingHandlerDiscoveryService.activate(java.util.Map)
2026-08-09 16:51:04.305 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : invoking activate: activate: parameters [org.apache.felix.scr.impl.helper.ReadOnlyDictionary]
2026-08-09 16:51:04.305 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : invoked activate: activate
2026-08-09 16:51:04.306 [DEBUG] [ernal.discovery.OcppDiscoveryService] - bundle org.openhab.binding.ocpp:5.3.0.202608080803 (353)[org.openhab.binding.ocpp.internal.discovery.OcppDiscoveryService(506)] : Changed state from satisfied to active
2026-08-09 16:51:04.611 [DEBUG] [ternal.transport.ChargeTimeTransport] - OCPP JSON server listening on 0.0.0.0:8887

no problem, glad it’s making sense now. and yes you’ve got it exactly — pause ON stopping the charge is normal, that’s just what pause does. the real bug was the other direction: turning pause back OFF didn’t resume if you had never set a current limit, it left the charger stuck in SuspendedEVSE. that part is fixed now, a resume clears the limit instead of sending another zero.

for the jar, it’s on the release page under “Assets” — github collapses that section by default so it’s easy to scroll past: Release OCPP Binding 0.1.0 (preview) · stamateviorel/openhab-addons · GitHub — but that one is the older build without the pause fix, so i will put a fixed build at the same link shortly, maybe wait for that. if you do try the current one, just don’t touch the pause switch, or set a current limit before you un-pause.

when you redo the setup, the thing that trips people up is the charge point id — it has to be the path of the websocket url, like ws://:8887/, not a separate field. whatever id the charger dials with has to be the chargePointId of your chargepoint thing, so easiest is to let it connect and accept it from the inbox, then the id matches for sure.

your log ends at “OCPP JSON server listening on 0.0.0.0:8887” with nothing after it — no charger connection at all. so nothing from the v2c is reaching openHAB yet, and that’s before the id or the thing even come into play.

two things, in order:

the url uses a hostname, openhab-prd.lan. chargers often can’t resolve .lan names, and if the connect fails on the charger side openHAB never sees it — which is exactly what your log shows. put the openHAB server’s IP there instead: ws://:8887/v2c-aveiro. also check the charger and openHAB are on the same network with nothing blocking port 8887. after you change the url in the v2c app, make sure ocpp is enabled and let it reconnect (a reboot, or ocpp off then on). then set log:set DEBUG org.openhab.binding.ocpp and watch openhab.log — you want a line “Charger connected: id=v2c-aveiro”. if it stays silent, it’s a network/dns problem on the charger side, not openHAB.
once it connects, the ids have to match. the charger dials /v2c-aveiro so its id is v2c-aveiro, but your chargepoint thing has chargePointId v2c-trydan. change the thing’s chargePointId to v2c-aveiro — or just delete the thing and accept the one that shows up in the inbox, it’ll come in as v2c-aveiro.
so: ip instead of the hostname first, get “Charger connected” into the log, then make the thing id match.