# Keba Binding

This binding integrates the [Keba KeContact EV Charging Stations](https://www.keba.com).

## Supported Things

The Keba KeContact P20 and P30 stations which are providing the UDP interface (P20 LSA+ socket, P30 c-series and x-series) are supported by this binding, the thing type id is `kecontact`.

## Thing Configuration

The Keba KeContact P20/30 requires the IP address as the configuration parameter `ipAddress`.
Optionally, a refresh interval (in seconds) can be defined as parameter `refreshInterval` that defines the polling of values from the charging station.

## Channels

All devices support the following channels:

| Channel ID         		| Item Type 				| Read-only | Description                                                            	|
|---------------------------|---------------------------|-----------|---------------------------------------------------------------------------|
| state              		| Number    				| yes       | current operational state of the wallbox                               	|
| enabled            		| Switch    				| no        | activation state of the wallbox                                        	|
| maxpresetcurrent   		| Number:ElectricCurrent   	| no        | maximum current the charging station should deliver to the EV in A      	|
| maxpresetcurrentrange		| Number:Dimensionless      | no 		| maximum current the charging station should deliver to the EV in %        |
| power              		| Number:Power             	| yes       | active power delivered by the charging station                         	|
| wallbox            		| Switch    				| yes       | plug state of wallbox                                                  	|
| vehicle            		| Switch    				| yes       | plug state of vehicle                                                  	|
| locked             		| Switch    				| yes       | lock state of plug at vehicle                                          	|
| I1/2/3             		| Number:ElectricCurrent   	| yes       | current for the given phase                                            	|
| U1/2/3             		| Number:ElectricPotential 	| yes       | voltage for the given phase                                            	|
| output             		| Switch    				| no        | state of the X1 relais                                                 	|
| input              		| Switch    				| yes       | state of the X2 contact                                                	|
| display           		| String    				| no        | display text on wallbox                                                	|
| error1             		| String    				| yes       | error code state 1, if in error (see the KeContact FAQ)                	|
| error2             		| String    				| yes       | error code state 2, if in error (see the KeContact FAQ)                	|
| maxsystemcurrent   		| Number:ElectricCurrent   	| yes       | maximum current the wallbox can deliver                                	|
| failsafecurrent    		| Number:ElectricCurrent   	| yes       | maximum current the wallbox can deliver, if network is lost            	|
| uptime             		| Number:Time  				| yes       | system uptime since the last reset of the wallbox                      	|
| sessionconsumption 		| Number:Energy    			| yes       | energy delivered in current session                                    	|
| totalconsumption   		| Number:Energy    			| yes       | total energy delivered since the last reset of the wallbox             	|
| authreq            		| Switch    				| yes       | authentication required                                                	|
| authon             		| Switch    				| yes       | authentication enabled                                                 	|
| sessionrfidtag     		| String    				| yes       | RFID tag used for the last charging session                            	|
| sessionrfidclass   		| String    				| yes       | RFID tag class used for the last charging session                      	|
| sessionid          		| Number    				| yes       | session ID of the last charging session                                	|
| setenergylimit     		| Number:Energy    			| no        | set an energy limit for an already running or the next charging session	|
| authenticate       		| String    				| no        | authenticate and start a session using RFID tag+RFID class             	|
| maxpilotcurrent         	| Number:ElectricCurrent	| yes  		| current offered to the vehicle via control pilot signalization         	|
| maxpilotcurrentdutycyle 	| Number:Dimensionless 		| yes  		| duty cycle of the control pilot signal									|


## Example

demo.Things:

```
Thing keba:kecontact:1 [ipAddress="192.168.0.64", refreshInterval=30]
```

demo.items:

```
Number:Dimensionless		KebaCurrentRange  		"Maximum supply current [%.1f %%]"			{channel="keba:kecontact:1:maxpresetcurrentrange"} 
Number:ElectricCurrent  	KebaCurrent  			"Maximum supply current [%.3f A]"			{channel="keba:kecontact:1:maxpresetcurrent"}
Number:ElectricCurrent  	KebaSystemCurrent  		"Maximum system supply current [%.3f A]"	{channel="keba:kecontact:1:maxsystemcurrent"} 
Number:ElectricCurrent  	KebaFailSafeCurrent  	"Failsafe supply current [%.3f A]"			{channel="keba:kecontact:1:failsafecurrent"} 
String 						KebaState  				"Operating State [%s]"						{channel="keba:kecontact:1:state"}
Switch 						KebaSwitch  			"Enabled"									{channel="keba:kecontact:1:enabled"}
Switch 						KebaWallboxPlugged  	"Plugged into wallbox"						{channel="keba:kecontact:1:wallbox"}
Switch 						KebaVehiclePlugged  	"Plugged into vehicle"						{channel="keba:kecontact:1:vehicle"}
Switch 						KebaPlugLocked  		"Plug locked"								{channel="keba:kecontact:1:locked"}
DateTime					KebaUptime 				"Uptime [%s s]"  							{channel="keba:kecontact:1:uptime"}
Number:ElectricCurrent  	KebaI1  															{channel="keba:kecontact:1:I1"}
Number:ElectricCurrent  	KebaI2  															{channel="keba:kecontact:1:I2"}
Number:ElectricCurrent  	KebaI3  															{channel="keba:kecontact:1:I3"}
Number:ElectricPotential 	KebaU1  															{channel="keba:kecontact:1:U1"}
Number:ElectricPotential 	KebaU2  															{channel="keba:kecontact:1:U2"}
Number:ElectricPotential 	KebaU3  															{channel="keba:kecontact:1:U3"}
Number:Power 				KebaPower  				"Energy during current session [%.1f Wh]"	{channel="keba:kecontact:1:power"}
Number:Energy 				KebaSessionEnergy  													{channel="keba:kecontact:1:sessionconsumption"}
Number:Energy 				KebaTotalEnergy  		"Energy during all sessions [%.1f Wh]"		{channel="keba:kecontact:1:totalconsumption"}
Switch 						KebaInputSwitch  													{channel="keba:kecontact:1:input"}
Switch 						KebaOutputSwitch  													{channel="keba:kecontact:1:output"}
Number:Energy 				KebaSetEnergyLimit 		"Set charge energy limit [%.1f Wh]"			{channel="keba:kecontact:1:setenergylimit"}
```

demo.sitemap:

```
sitemap demo label="Main Menu"
{
	Text label="Charging Station" {
		Text 	item=KebaState
		Text 	item=KebaUptime
		Switch 	item=KebaSwitch
		Switch 	item=KebaWallboxPlugged
		Switch 	item=KebaVehiclePlugged
		Switch 	item=KebaPlugLocked
		Slider 	item=KebaCurrentRange
		Text 	item=KebaCurrent
		Text 	item=KebaSystemCurrent
		Text 	item=KebaFailSafeCurrent
		Text 	item=KebaSessionEnergy
		Text 	item=KebaTotalEnergy
		Switch 	item=KebaSetEnergyLimit
	}
}
```

## Troubleshooting

### Enable Verbose Logging

Enable `DEBUG` or `TRACE` (even more verbose) logging for the logger named:

    org.openhab.binding.keba

If everything is working fine, you see the cyclic reception of `report 1`, `2` & `3` from the station. The frequency is according to the `refreshInterval` configuration.

### UDP Ports used

	Send port = UDP 7090

The Keba station is the server

	Receive port = UDP 7090

This binding is providing the server

UDP port 7090 needs to be available/free on the openHAB server.


In order to enable the UDP port 7090 on the Keba station with full functionality, `DIP switch 1.3` must be `ON`.
With `DIP switch 1.3 OFF` only ident-data can be read (`i` and `report 1`) but not the other reports as well as the commands needed for the write access.
After setting the DIP switch, you need to `power OFF` and `ON` the station. SW-reset via WebGUI seems not to be sufficient in order to apply the new configuration.


The right configuration can be validated as follows:

- WebGUI DSW Settings:
  - `DIP 1.3 | ON | UDP interface (SmartHome)`
- UDP response of `report 1`:
  - `DIP-Sw1` `0x20` Bit is set (enable at least `DEBUG` log-level for the binding)

### Supported stations

- KeContact P20 charging station with network connection (LSA+ socket)
  - Product code: `KC-P20-xxxxxx2x-xxx` or `KC-P20-xxxxxx3x-xxx`
  - Firmware version: 2.5 or higher
- KeContact P30 charging station (c- or x-series) or BMW wallbox
  - Firmware version 3.05 or higher
