The car was and is still plugged in and API key is filled in. Looks like there is a relation between the status the Tesla app shows me. It is connected to the charger, but the option Begin te laden is visible .
Hi Arjen, first please update the Ultimate EMS app to the latest version (1.6.20)
Once updated, can you send me three things?
- Bug Report — go to Ultimate EMS settings, scroll to the bottom, click “Bug Report” and paste the output here.
- EV Diagnosis — in the same settings page, click “EV Diagnosis” and paste that output too.
- Screenshot of the Wallbox device — open the Homey app, tap on your Wallbox Pulsar Max device, and send a screenshot of the full device card showing all the values.
Thanks!
Version 22 already on my Homey, you are on a fast track! ![]()
EV diagnose
{
“ok”: true,
“ts”: “23:32:55”,
“solar_W”: -94,
“grid_W”: 407,
“ev_W”: 0,
“surplus_W”: -507,
“threshold_W”: 3450,
“surplus_ok”: false,
“ev_connected”: false,
“ev_charging”: false,
“ev_soc”: 87,
“ev_currentA”: 0,
“evse_state”: “plugged_in”,
“ev_source”: “ev_device”,
“isChargingByEms”: false,
“vehiclePresent”: false,
“chargeMode”: “solar_only”,
“targetA”: 0,
“lastCommandAgo”: “1782077576s geleden”,
“inPeakHour”: false,
“minSocOverride”: false,
“postponedUntil”: “niet uitgesteld”,
“verdict”: “
EV niet verbonden”
}
Bug report
{
“_report”: “Ultimate EMS Bug Report”,
“_version”: “1.6.22”,
“_generatedAt”: “2026-06-21T21:34:10.536Z”,
“settings”: {
“contract_type”: “dynamic”,
“day_ahead_provider”: “tibber”,
“pv_peak_kw_l1”: 4,
“pv_peak_kw_l2”: 3,
“pv_peak_kw_l3”: 3,
“pv_l2_peak_hour”: 10,
“pv_l3_peak_hour”: 15,
“gridMeterId”: “d8ce0b63-0d91-43c7-865d-e42e8a24b85a”,
“pvMeterIds”: [
“bfdb7b9e-0eb1-4015-a318-6559489180f7”,
“729c0239-90ad-4733-bba2-1b9a179e33d7”,
“2d70378e-64f5-4d60-a5d0-acf550e81c32”
],
“pvMeterPhases”: [
0,
0,
0
],
“hasBattery”: false,
“batteryAutonomous”: false,
“hasEv”: true,
“evDeviceId”: “e136b495-9069-49f6-b9d5-e935621b909e”,
“evChargerId”: “58250a32-2f8f-482d-b5e7-b6459d44f24e”,
“ev_capacity_kwh”: 55,
“ev_default_soc”: 100,
“hasHeatPump”: false,
“hasEvCharger”: true,
“hp_0_phase”: 0,
“hp_1_phase”: 0,
“hp_2_phase”: 0
},
“devices”: [
{
“id”: “d8ce0b63-0d91-43c7-865d-e42e8a24b85a”,
“name”: “Tibber Pulse”,
“driverUri”: “”,
“capabilities”: [
“measure_power”,
“meter_power”,
“accumulatedCost”,
“measure_current.L1”,
“measure_current.L2”,
“measure_current.L3”,
“meter_power.imported”,
“meter_power.exported”
],
“values”: {
“measure_power”: 464,
“meter_power”: 5.22,
“accumulatedCost”: 1.49,
“measure_current.L1”: 0,
“measure_current.L2”: 1,
“measure_current.L3”: 0,
“meter_power.imported”: 34294.2,
“meter_power.exported”: 29858.83
}
},
{
“id”: “bfdb7b9e-0eb1-4015-a318-6559489180f7”,
“name”: “PV Oostdak Hoymiles”,
“driverUri”: “”,
“capabilities”: [
“meter_power.today”,
“measure_power”,
“meter_power”,
“measure_power.pv1”,
“measure_voltage.pv1”,
“measure_current.pv1”,
“measure_power.pv2”,
“measure_voltage.pv2”,
“measure_current.pv2”,
“measure_power.pv3”,
“measure_voltage.pv3”,
“measure_current.pv3”,
“measure_power.pv4”,
“measure_voltage.pv4”,
“measure_current.pv4”,
“measure_power.pv5”,
“measure_voltage.pv5”,
“measure_current.pv5”,
“measure_power.pv6”,
“measure_voltage.pv6”,
“measure_current.pv6”,
“measure_power.pv7”,
“measure_voltage.pv7”,
“measure_current.pv7”,
“measure_power.pv8”,
“measure_voltage.pv8”,
“measure_current.pv8”,
“measure_power.pv9”,
“measure_voltage.pv9”,
“measure_current.pv9”,
“measure_power.pv10”,
“measure_voltage.pv10”,
“measure_current.pv10”,
“measure_power.pv11”,
“measure_voltage.pv11”,
“measure_current.pv11”,
“measure_power.pv12”,
“measure_voltage.pv12”,
“measure_current.pv12”,
“measure_voltage”,
“measure_current”,
“measure_frequency”,
“measure_temperature”,
“alarm_generic”
],
“values”: {
“meter_power.today”: 0,
“measure_power”: 0,
“meter_power”: 7203.01,
“measure_power.pv1”: 0,
“measure_voltage.pv1”: 0,
“measure_current.pv1”: 0,
“measure_power.pv2”: 0,
“measure_voltage.pv2”: 0,
“measure_current.pv2”: 0,
“measure_power.pv3”: 0,
“measure_voltage.pv3”: 0,
“measure_current.pv3”: 0,
“measure_power.pv4”: 0,
“measure_voltage.pv4”: 0,
“measure_current.pv4”: 0,
“measure_power.pv5”: null,
“measure_voltage.pv5”: null,
“measure_current.pv5”: null,
“measure_power.pv6”: null,
“measure_voltage.pv6”: null,
“measure_current.pv6”: null,
“measure_power.pv7”: null,
“measure_voltage.pv7”: null,
“measure_current.pv7”: null,
“measure_power.pv8”: null,
“measure_voltage.pv8”: null,
“measure_current.pv8”: null,
“measure_power.pv9”: null,
“measure_voltage.pv9”: null,
“measure_current.pv9”: null,
“measure_power.pv10”: null,
“measure_voltage.pv10”: null,
“measure_current.pv10”: null,
“measure_power.pv11”: null,
“measure_voltage.pv11”: null,
“measure_current.pv11”: null,
“measure_power.pv12”: null,
“measure_voltage.pv12”: null,
“measure_current.pv12”: null,
“measure_voltage”: 0,
“measure_current”: 0,
“measure_frequency”: 0,
“measure_temperature”: 0,
“alarm_generic”: false
}
},
{
“id”: “729c0239-90ad-4733-bba2-1b9a179e33d7”,
“name”: “Zonnepanelen Garage”,
“driverUri”: “”,
“capabilities”: [
“meter_power”,
“measure_power”,
“ct1_type”,
“measure_power_ct1”,
“ct2_type”,
“measure_power_ct2”,
“ct3_type”,
“measure_power_ct3”,
“button.reset_meter”,
“button.reload_capabilities”
],
“values”: {
“meter_power”: 4818.5,
“measure_power”: 24,
“ct1_type”: “Generation”,
“measure_power_ct1”: 24,
“ct2_type”: “Generation”,
“measure_power_ct2”: 0,
“ct3_type”: “Generation”,
“measure_power_ct3”: 0,
“button.reset_meter”: null,
“button.reload_capabilities”: null
}
},
{
“id”: “2d70378e-64f5-4d60-a5d0-acf550e81c32”,
“name”: “Zonnepanelen West”,
“driverUri”: “”,
“capabilities”: [
“measure_power”,
“meter_power”
],
“values”: {
“measure_power”: -118,
“meter_power”: -12650.35
}
},
{
“id”: “e136b495-9069-49f6-b9d5-e935621b909e”,
“name”: “Lightning McGreen Accu”,
“driverUri”: “”,
“capabilities”: [
“device_state”,
“measure_soc_level”,
“measure_soc_usable”,
“measure_soc_range_estimated”,
“measure_soc_range_ideal”,
“measure_charge_limit_soc”,
“battery_heater”,
“charging_state”,
“measure_charge_phases”,
“measure_charge_power”,
“measure_charge_voltage”,
“measure_charge_current”,
“measure_charge_current_max”,
“measure_charge_energy_added”,
“measure_charge_minutes_to_full_charge”,
“charging_port_cable”,
“measure_io_battery_power”,
“meter_charge_power”,
“charging_port”,
“charging_on”,
“charging_port_unlock”,
“module_temp”,
“measure_module_temp_min”,
“measure_module_temp_max”,
“measure_charge_power_ac”,
“measure_charge_power_dc”,
“measure_charge_energy_added_ac”
],
“values”: {
“device_state”: false,
“measure_soc_level”: 87,
“measure_soc_usable”: 87,
“measure_soc_range_estimated”: 0,
“measure_soc_range_ideal”: 344.79,
“measure_charge_limit_soc”: 100,
“battery_heater”: false,
“charging_state”: “Stopped”,
“measure_charge_phases”: 3,
“measure_charge_power”: 0,
“measure_charge_voltage”: 2,
“measure_charge_current”: 0,
“measure_charge_current_max”: 5,
“measure_charge_energy_added”: 12.1,
“measure_charge_minutes_to_full_charge”: 0,
“charging_port_cable”: “IEC”,
“measure_io_battery_power”: 0,
“meter_charge_power”: 920.18,
“charging_port”: true,
“charging_on”: false,
“charging_port_unlock”: null,
“module_temp”: “- … - °C”,
“measure_module_temp_min”: null,
“measure_module_temp_max”: null,
“measure_charge_power_ac”: null,
“measure_charge_power_dc”: null,
“measure_charge_energy_added_ac”: null
}
},
{
“id”: “58250a32-2f8f-482d-b5e7-b6459d44f24e”,
“name”: “Wallbox Pulsar Max”,
“driverUri”: “”,
“capabilities”: [
“locked”,
“evcharger_charging_state”,
“evcharger_charging”,
“meter_power”,
“measure_current”,
“measure_power”,
“status”,
“meter_power.charged”
],
“values”: {
“locked”: false,
“evcharger_charging_state”: “plugged_in”,
“evcharger_charging”: false,
“meter_power”: null,
“measure_current”: 6,
“measure_power”: 0,
“status”: null,
“meter_power.charged”: 7994.81
}
}
],
“liveState”: {
“ready”: true,
“mode”: “auto”,
“pvW”: -94,
“gridW”: 454,
“batSoc”: 0,
“batPowerW”: 0,
“netW”: -454,
“evW”: 0,
“status”: “Netafname 454W — accu op minimum (0%)”,
“hpMode”: “cooling”,
“hpOffset”: 0,
“evCharging”: false,
“evCurrentA”: 0,
“evSoc”: 87,
“evConnected”: false,
“evMode”: “solar_only”,
“activeTrip”: null,
“plan”: {
“totalPvKwh”: 21.5,
“totalConsumptionKwh”: 7.17,
“netKwh”: 14.32,
“evNeededKwh”: 0,
“batAvailKwh”: 0,
“batMaxChargeKw”: 0,
“batMaxDischargeKw”: 0,
“hoursToFull”: 0,
“hoursToEmpty”: 0,
“prio1Feasible”: true,
“hpMode”: “cooling”,
“hasCheapHours”: false,
“hasCheapQuarterSlots”: false,
“cheapQuarterCount”: 0,
“batReserveKwh”: 0,
“batAvailableForEv”: 0,
“avgNightLoadKwh”: 5.16,
“evSolarStartHour”: 10
},
“updatedAt”: “2026-06-21T21:34:10.534Z”
},
“planSummary”: {
“totalPvKwh”: 21.5,
“totalConsumptionKwh”: 7.17,
“netKwh”: 14.32,
“evNeededKwh”: 0,
“batAvailKwh”: 0,
“batMaxChargeKw”: 0,
“batMaxDischargeKw”: 0,
“hoursToFull”: 0,
“hoursToEmpty”: 0,
“prio1Feasible”: true,
“hpMode”: “cooling”,
“hasCheapHours”: false,
“hasCheapQuarterSlots”: false,
“cheapQuarterCount”: 0,
“batReserveKwh”: 0,
“batAvailableForEv”: 0,
“avgNightLoadKwh”: 5.16,
“evSolarStartHour”: 10
},
“planError”: null,
“evController”: {
“mode”: “solar_only”,
“targetA”: 0,
“phases”: 3,
“minCurrentA”: 5,
“isPeakHour”: false
}
}
Goodmorning!
all should be fixed. There was a difference in how the wallbox and the tesla were sending the states back. One side note, your PV is putting out a negative power, is this on purpose?
More of improvements done today, also quarterly prices from PBTH and then improved ev charging plan, prio comms when using car AND charger car comms. Let me know how this one works!
Ultimate EMS is now using PBTH for prices and dynamic charging etc.
version 1.6.27 is now ready for testing zero export capabilities. minor bugs fixed and bug report extended.
version 1.6.29 is ready for testing! new widget design implemented and fixed some bug plus added more support for different inverters and EV’s
Hi Menno,
Nice improvements! Keep up the good work. Question on the topic of phase switching in combination with solar charging. I’m planning on buying a charger that supports this, thought my Wallbox already supported this but unfortunately not. But when I buy a Pro, it should. In the settings you now set it to 1 or 3 phase, but with phase switching this is dynamic. Would it be possible to know the charger is on 1 or 3 phase and take this into account in the calculation of the surplus? And also, isn’t a Solar charging setting in the charger potentially interfering with the HEMS commands?
Hi Arjen,
Thanks, I will keep it up as I still see some nice features and improvements to make.
but besides this, the EMS can look at phase distribution, the dumploads and heatpumps are driven by this. But I also know that for export it does not really matter. You are being charged for the net consumption, so if you pull 2000 watt on phase 1 and deliver 2000watt on phase 2 and 100wattt on phase 3 your net is 100 watt consumption from the net. So there is no financial incentive to do phase balancing. But for you as a home owner and using the max of your connection it does. so in order to make it simpel I’m suggesting to have the EMS turn on and of based in financial incentives and if you charger is smart enough to do phase balancing then this should not conflict.
I don’t mean phase balancing but phase switching. Currently my 3 phase charger can’t switch to 1 phase. This means that when solar charging I need 3 x 6A surplus, while on 1 phase 6A is sufficient. This phase switching is usually not managed by a switch in the app but mode based. For instance a Peblar switches between 1 or 3 phases when in solar charging mode. My question is: is this going to work in combination with your EMS, while both systems will be trying to maintain zero export? Or do you always need to have the charger on Max power? Difficulty with this is as I mentioned that most chargers with phase switching will probably always charge on 3 phases in this mode.
Do you have a fixed or dynamic contract?
Dynamic Tibber contract, so I want to use my surplus as efficiënt as possible
That is what the EMS is designed to do. Your primary goal is not to export and to use solar to the max. But the confusion comes from the export part. if you have a 3 phase connection the sum is the only thing that counts per 15 min… So a contant -2000 + 2000 + 100 watt would result in a netto 100 watt consumption from the net… you see my point, it does not matter if your solar is putting out more on 1 phase then the other, or that the car charger is switching phases… as long as the average total per 15 min is 0 then you should be ok.
It does matter if the charger can switch from 1 phase charging to 3 phase charging because this means that the minimal required power delivery of the charger changes from 6A to 3 x 6A. I’m not talking about phase 1, 2 or 3 because this doesn’t matter as you also mention. But 1 or 3 phase charging is of course influencing the max and also minimum charging speed.
Video ketelklets: https://youtu.be/JrB7vBNs4TU?is=dUSRN2IC1Yo4VLnf
This morning around 9AM my charger started based on an EMS command, while there was not enough surplus. This resulted in unneccesary net usage.
Bug report
{
“_report”: “Ultimate EMS Bug Report”,
“_version”: “1.6.29”,
“_generatedAt”: “2026-06-28T12:21:26.819Z”,
“settings”: {
“contract_type”: “dynamic”,
“price_device_id”: “abe01a7c-7175-444a-b9f2-840116f30941”,
“pv_peak_kw_l1”: 4,
“pv_peak_kw_l2”: 3,
“pv_peak_kw_l3”: 3,
“pv_l2_peak_hour”: 10,
“pv_l3_peak_hour”: 15,
“gridMeterId”: “d8ce0b63-0d91-43c7-865d-e42e8a24b85a”,
“pvMeterIds”: [
“bfdb7b9e-0eb1-4015-a318-6559489180f7”
],
“pvMeterPhases”: [
0
],
“hasBattery”: false,
“batteryAutonomous”: false,
“hasEv”: true,
“evDeviceId”: “e136b495-9069-49f6-b9d5-e935621b909e”,
“evChargerId”: “58250a32-2f8f-482d-b5e7-b6459d44f24e”,
“ev_capacity_kwh”: 55,
“ev_charge_mode”: “pv”,
“ev_default_soc”: 100,
“hasHeatPump”: false,
“hasEvCharger”: true,
“hp_0_phase”: 0,
“hp_1_phase”: 0,
“hp_2_phase”: 0,
“pv_curtail_meter_0”: false,
“pv_curtail_meter_1”: false,
“pv_curtail_meter_2”: false
},
“devices”: [
{
“id”: “d8ce0b63-0d91-43c7-865d-e42e8a24b85a”,
“name”: “Tibber Pulse”,
“driverUri”: “”,
“capabilities”: [
“measure_power”,
“meter_power”,
“accumulatedCost”,
“measure_current.L1”,
“measure_current.L2”,
“measure_current.L3”,
“meter_power.imported”,
“meter_power.exported”
],
“values”: {
“measure_power”: -4493,
“meter_power”: 10.12,
“accumulatedCost”: 2.15,
“measure_current.L1”: 1,
“measure_current.L2”: 6,
“measure_current.L3”: 12,
“meter_power.imported”: 34353.42,
“meter_power.exported”: 30052.3
}
},
{
“id”: “bfdb7b9e-0eb1-4015-a318-6559489180f7”,
“name”: “PV Oostdak Hoymiles”,
“driverUri”: “”,
“capabilities”: [
“meter_power.today”,
“measure_power”,
“meter_power”,
“measure_power.pv1”,
“measure_voltage.pv1”,
“measure_current.pv1”,
“measure_power.pv2”,
“measure_voltage.pv2”,
“measure_current.pv2”,
“measure_power.pv3”,
“measure_voltage.pv3”,
“measure_current.pv3”,
“measure_power.pv4”,
“measure_voltage.pv4”,
“measure_current.pv4”,
“measure_power.pv5”,
“measure_voltage.pv5”,
“measure_current.pv5”,
“measure_power.pv6”,
“measure_voltage.pv6”,
“measure_current.pv6”,
“measure_power.pv7”,
“measure_voltage.pv7”,
“measure_current.pv7”,
“measure_power.pv8”,
“measure_voltage.pv8”,
“measure_current.pv8”,
“measure_power.pv9”,
“measure_voltage.pv9”,
“measure_current.pv9”,
“measure_power.pv10”,
“measure_voltage.pv10”,
“measure_current.pv10”,
“measure_power.pv11”,
“measure_voltage.pv11”,
“measure_current.pv11”,
“measure_power.pv12”,
“measure_voltage.pv12”,
“measure_current.pv12”,
“measure_voltage”,
“measure_current”,
“measure_frequency”,
“measure_temperature”,
“alarm_generic”
],
“values”: {
“meter_power.today”: 12.66,
“measure_power”: 1605,
“meter_power”: 7325.35,
“measure_power.pv1”: 39.4,
“measure_voltage.pv1”: 32.6,
“measure_current.pv1”: 1.2,
“measure_power.pv2”: 113.4,
“measure_voltage.pv2”: 31.1,
“measure_current.pv2”: 3.64,
“measure_power.pv3”: 113.9,
“measure_voltage.pv3”: 31.5,
“measure_current.pv3”: 3.61,
“measure_power.pv4”: 167.2,
“measure_voltage.pv4”: 31,
“measure_current.pv4”: 5.39,
“measure_power.pv5”: null,
“measure_voltage.pv5”: null,
“measure_current.pv5”: null,
“measure_power.pv6”: null,
“measure_voltage.pv6”: null,
“measure_current.pv6”: null,
“measure_power.pv7”: null,
“measure_voltage.pv7”: null,
“measure_current.pv7”: null,
“measure_power.pv8”: null,
“measure_voltage.pv8”: null,
“measure_current.pv8”: null,
“measure_power.pv9”: null,
“measure_voltage.pv9”: null,
“measure_current.pv9”: null,
“measure_power.pv10”: null,
“measure_voltage.pv10”: null,
“measure_current.pv10”: null,
“measure_power.pv11”: null,
“measure_voltage.pv11”: null,
“measure_current.pv11”: null,
“measure_power.pv12”: null,
“measure_voltage.pv12”: null,
“measure_current.pv12”: null,
“measure_voltage”: 222.1,
“measure_current”: 1.64,
“measure_frequency”: 49.99,
“measure_temperature”: 42,
“alarm_generic”: false
}
},
{
“id”: “e136b495-9069-49f6-b9d5-e935621b909e”,
“name”: “Lightning McGreen Accu”,
“driverUri”: “”,
“capabilities”: [
“device_state”,
“measure_soc_level”,
“measure_soc_usable”,
“measure_soc_range_estimated”,
“measure_soc_range_ideal”,
“measure_charge_limit_soc”,
“battery_heater”,
“charging_state”,
“measure_charge_phases”,
“measure_charge_power”,
“measure_charge_voltage”,
“measure_charge_current”,
“measure_charge_current_max”,
“measure_charge_energy_added”,
“measure_charge_minutes_to_full_charge”,
“charging_port_cable”,
“measure_io_battery_power”,
“meter_charge_power”,
“charging_port”,
“charging_on”,
“charging_port_unlock”,
“module_temp”,
“measure_module_temp_min”,
“measure_module_temp_max”,
“measure_charge_power_ac”,
“measure_charge_power_dc”,
“measure_charge_energy_added_ac”
],
“values”: {
“device_state”: false,
“measure_soc_level”: 100,
“measure_soc_usable”: 100,
“measure_soc_range_estimated”: 0,
“measure_soc_range_ideal”: 401.16,
“measure_charge_limit_soc”: 100,
“battery_heater”: false,
“charging_state”: “Complete”,
“measure_charge_phases”: 3,
“measure_charge_power”: 0,
“measure_charge_voltage”: 2,
“measure_charge_current”: 0,
“measure_charge_current_max”: 6,
“measure_charge_energy_added”: 13.32,
“measure_charge_minutes_to_full_charge”: 0,
“charging_port_cable”: “IEC”,
“measure_io_battery_power”: 0,
“meter_charge_power”: 960.42,
“charging_port”: true,
“charging_on”: false,
“charging_port_unlock”: null,
“module_temp”: “- … - °C”,
“measure_module_temp_min”: null,
“measure_module_temp_max”: null,
“measure_charge_power_ac”: null,
“measure_charge_power_dc”: null,
“measure_charge_energy_added_ac”: null
}
},
{
“id”: “58250a32-2f8f-482d-b5e7-b6459d44f24e”,
“name”: “Wallbox Pulsar Max”,
“driverUri”: “”,
“capabilities”: [
“locked”,
“evcharger_charging_state”,
“evcharger_charging”,
“meter_power”,
“measure_current”,
“measure_power”,
“status”,
“meter_power.charged”
],
“values”: {
“locked”: false,
“evcharger_charging_state”: “plugged_in”,
“evcharger_charging”: false,
“meter_power”: null,
“measure_current”: 6,
“measure_power”: 0,
“status”: null,
“meter_power.charged”: 15.02
}
}
],
“liveState”: {
“ready”: true,
“mode”: “auto”,
“pvW”: 1605,
“gridW”: -1239,
“batSoc”: 0,
“batPowerW”: 0,
“netW”: 1239,
“evW”: 0,
“status”: “Zon 1605W → teruglevering 1239W”,
“hpMode”: “cooling”,
“hpOffset”: 0,
“evCharging”: false,
“evCurrentA”: 5,
“evSoc”: 100,
“evConnected”: true,
“evMode”: “pv”,
“activeTrip”: null,
“plan”: {
“totalPvKwh”: 21.96,
“totalConsumptionKwh”: 8.26,
“netKwh”: 13.7,
“evNeededKwh”: 14.3,
“batAvailKwh”: 0,
“batMaxChargeKw”: 0,
“batMaxDischargeKw”: 0,
“hoursToFull”: 0,
“hoursToEmpty”: 0,
“prio1Feasible”: false,
“hpMode”: “cooling”,
“hasCheapHours”: true,
“hasCheapQuarterSlots”: true,
“cheapQuarterCount”: 5,
“batReserveKwh”: 0,
“batAvailableForEv”: 0,
“avgNightLoadKwh”: 6.85,
“evSolarStartHour”: 10
},
“updatedAt”: “2026-06-28T12:21:26.804Z”
},
“pvCurtailment”: {
“pvW”: 1605,
“pvExpectedW”: null,
“pvCurtailing”: null,
“ratio”: null,
“gridW”: -1239,
“netW”: 1239,
“gridPhases”: [
0,
0,
0
],
“pvPhases”: [
0,
0,
0
]
},
“planSummary”: {
“totalPvKwh”: 21.96,
“totalConsumptionKwh”: 8.26,
“netKwh”: 13.7,
“evNeededKwh”: 14.3,
“batAvailKwh”: 0,
“batMaxChargeKw”: 0,
“batMaxDischargeKw”: 0,
“hoursToFull”: 0,
“hoursToEmpty”: 0,
“prio1Feasible”: false,
“hpMode”: “cooling”,
“hasCheapHours”: true,
“hasCheapQuarterSlots”: true,
“cheapQuarterCount”: 5,
“batReserveKwh”: 0,
“batAvailableForEv”: 0,
“avgNightLoadKwh”: 6.85,
“evSolarStartHour”: 10
},
“planDetails”: {
“date”: “2026-06-28”,
“calculatedAt”: “2026-06-28T12:00:06.202Z”,
“reason”: “midday_update”,
“pvHourNow”: {
“hour”: 12,
“pvKwh”: 2.073
},
“pvHourlyFull”: [
{
“hour”: 0,
“pvKwh”: 0
},
{
“hour”: 1,
“pvKwh”: 0
},
{
“hour”: 2,
“pvKwh”: 0
},
{
“hour”: 3,
“pvKwh”: 0
},
{
“hour”: 4,
“pvKwh”: 0
},
{
“hour”: 5,
“pvKwh”: 0
},
{
“hour”: 6,
“pvKwh”: 0.019
},
{
“hour”: 7,
“pvKwh”: 0.201
},
{
“hour”: 8,
“pvKwh”: 0.416
},
{
“hour”: 9,
“pvKwh”: 0.905
},
{
“hour”: 10,
“pvKwh”: 1.336
},
{
“hour”: 11,
“pvKwh”: 1.759
},
{
“hour”: 12,
“pvKwh”: 2.073
},
{
“hour”: 13,
“pvKwh”: 2.306
},
{
“hour”: 14,
“pvKwh”: 2.083
},
{
“hour”: 15,
“pvKwh”: 1.321
},
{
“hour”: 16,
“pvKwh”: 1.434
},
{
“hour”: 17,
“pvKwh”: 1.223
},
{
“hour”: 18,
“pvKwh”: 1.391
},
{
“hour”: 19,
“pvKwh”: 1.06
},
{
“hour”: 20,
“pvKwh”: 0.684
},
{
“hour”: 21,
“pvKwh”: 0.333
},
{
“hour”: 22,
“pvKwh”: 0.079
},
{
“hour”: 23,
“pvKwh”: 0
}
]
},
“planError”: null,
“evController”: {
“mode”: “pv”,
“targetA”: 5,
“phases”: 3,
“minCurrentA”: 5,
“startThresholdA”: 5,
“startThresholdW”: 3450,
“stopThresholdW”: -200,
“zeroExport”: false,
“zeroExportMinSurW”: 300,
“isPeakHour”: false,
“solarGridAssist”: true
},
“battery”: {
“type”: “BatteryAdapter”,
“isAutonomous”: false,
“count”: 0,
“ids”: ,
“capacities”: ,
“maxChargeW”:
},
“thermostat”: null,
“config”: {
“hasBattery”: false,
“batteryAutonomous”: false,
“hasEv”: true,
“hasHeatPump”: false,
“phases”: 3,
“pvPeakKw”: 10,
“pvStrings”: [
{
“peakKw”: 4,
“peakHour”: 13
},
{
“peakKw”: 3,
“peakHour”: 10
},
{
“peakKw”: 3,
“peakHour”: 15
}
],
“pvMeterIds”: [
“bfdb7b9e-0eb1-4015-a318-6559489180f7”,
“729c0239-90ad-4733-bba2-1b9a179e33d7”,
“2d70378e-64f5-4d60-a5d0-acf550e81c32”
],
“gridMeterId”: “d8ce0b63-0d91-43c7-865d-e42e8a24b85a”,
“pvCurtailment”: {
“maxExportW”: [
0,
0,
0
],
“inverterEnabled”: [
false,
false,
false
]
},
“pvCurtailActive”: false
}
}
Hi Arjen,
Thanks for the detailed bug report. I traced through the code and have a question before I dig further.
In your current bug report, ev_charge_mode is set to "pv" (solar only). In that mode, the EV controller only starts charging when solar surplus ≥ 3450W — grid charging is never triggered, regardless of price.
At 9AM your PV was around 500–900W, so "pv" mode would never have started the charger.
Did you change your charge mode to "pv" after the incident this morning? Is it possible it was set to "solar_and_grid" at 9AM? In that mode, the EMS will charge at minimum current (5A) whenever there’s any meaningful solar output (≥200W) and prices aren’t expensive — which would explain exactly what you saw.
Also: did you have a trip scheduled with a departure around 9AM?
I did not switch the mode, and also don’t use the trip planner yet. The solar power is only a small part of the PV generation, while two inverters are dumb and therefore not possible to connect to Homey. I had CT’s, but couldn’t get this to work properly. You get a better picture from the diagram below.
What’s also strange is that in the dashboard, soc shows 0%, while Homey shows the correct 100%.
Hi Arjen,
Good news — after tracing through the code, this is actually correct behavior, not a bug. Let me explain what happened.
The EMS doesn’t use the measured PV output (your Hoymiles) to determine solar surplus. Instead, it reads the net export from your P1 meter using this formula:
surplus = -gridW - 100W buffer
Your P1 meter sees the combined output of all your inverters — including the two dumb ones that aren’t connected to Homey. So at 9AM, even though the Hoymiles only showed ~900W, your dumb inverters were likely adding another ~2600–3000W on top. The P1 was showing something like 3500W export, which pushed the surplus above the 3450W start threshold (5A × 3 phases × 230V).
The EMS correctly saw “enough solar surplus → start charging.” This is actually the right approach — it doesn’t matter where the solar comes from, the P1 tells the full truth.
What likely happened then: your dumb inverters dipped slightly (morning sun angle, brief cloud), export dropped below the stop threshold, and during the hysteresis window (a few ticks before the EMS stops) there was brief net import. That’s by design — rapid on/off cycling would be worse for the car and charger.
On the SoC showing 0% in the dashboard: the ACCU tile shows battery SoC (you have no battery, so it shows 0%). The EV SoC is shown separately in the EV tile. I’ll check if the label can be made clearer.
So in short: the EMS works as intended — your dumb inverters’ production is “invisible” to the EMS as measured PV, but fully visible via the P1 export. That’s exactly why using the P1 for surplus is the right design.
Appreciate the try, but this most likely was not the case. At 9AM it is impossible that my PV on west and south orientation generated enough for 3450 export during this period of time, also because an airco and heat pump are pulling around 800 watt 24/7. You can also see this in the diagram, before 9AM export was around 1,4kW. So it’s more likely it triggered based on single phase, while my setting is three phase.
Concerning the soc, that makes sense.
Wrong assumption from me.




